diff --git a/Code/Mantid/Build/CMake/DarwinSetup.cmake b/Code/Mantid/Build/CMake/DarwinSetup.cmake
index 07a3461a5286059fcca389fc7ccc17fc0084310d..d26ddce540ee12ec9d6530bfce98dbd1d058aec3 100644
--- a/Code/Mantid/Build/CMake/DarwinSetup.cmake
+++ b/Code/Mantid/Build/CMake/DarwinSetup.cmake
@@ -128,9 +128,7 @@ else()
  set ( PYQT4_PYTHONPATH /usr/local/lib/python${PY_VER}/site-packages/PyQt4 )
  set ( SITEPACKAGES /usr/local/lib/python${PY_VER}/site-packages )
  # use homebrew OpenSSL package
- EXEC_PROGRAM( brew ARGS info openssl | grep openssl: | cut -c 17-22 OUTPUT_VARIABLE _openssl_version )
- MESSAGE(STATUS "OpenSSL version: ${_openssl_version}")
- set ( OPENSSL_ROOT_DIR /usr/local/Cellar/openssl/${_openssl_version}/ )
+ set ( OPENSSL_ROOT_DIR /usr/local/opt/openssl )
 endif()
 
 # Python packages
diff --git a/Code/Mantid/Build/CMake/FindPyQt.py b/Code/Mantid/Build/CMake/FindPyQt.py
index 3c24b73afb8412ef01cf5af313d42d1f413b2cf7..fa5618d045c7ea88d103e47256e6b5399286ae37 100644
--- a/Code/Mantid/Build/CMake/FindPyQt.py
+++ b/Code/Mantid/Build/CMake/FindPyQt.py
@@ -1,25 +1,48 @@
 # Copyright (c) 2007, Simon Edwards <simon@simonzone.com>
+# Copyright (c) 2014, Raphael Kubo da Costa <rakuco@FreeBSD.org>
 # Redistribution and use is allowed according to the terms of the BSD license.
 # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
 
-import PyQt4.pyqtconfig
+import PyQt4.QtCore
+import os
+import sys
 
-pyqtcfg = PyQt4.pyqtconfig.Configuration()
-print("pyqt_version:%06.0x" % pyqtcfg.pyqt_version)
-print("pyqt_version_str:%s" % pyqtcfg.pyqt_version_str)
-
-pyqt_version_tag = ""
-in_t = False
-for item in pyqtcfg.pyqt_sip_flags.split(' '):
-    if item=="-t":
-        in_t = True
-    elif in_t:
-        if item.startswith("Qt_4"):
-            pyqt_version_tag = item
+def get_default_sip_dir():
+    # This is based on QScintilla's configure.py, and only works for the
+    # default case where installation paths have not been changed in PyQt's
+    # configuration process.
+    if sys.platform == 'win32':
+        pyqt_sip_dir = os.path.join(sys.platform, 'sip', 'PyQt4')
     else:
-        in_t = False
-print("pyqt_version_tag:%s" % pyqt_version_tag)
+        pyqt_sip_dir = os.path.join(sys.platform, 'share', 'sip', 'PyQt4')
+    return pyqt_sip_dir
+
+def get_qt4_tag(sip_flags):
+    in_t = False
+    for item in sip_flags.split(' '):
+        if item == '-t':
+            in_t = True
+        elif in_t:
+            if item.startswith('Qt_4'):
+                return item
+        else:
+            in_t = False
+    raise ValueError('Cannot find Qt\'s tag in PyQt4\'s SIP flags.')
 
-print("pyqt_sip_dir:%s" % pyqtcfg.pyqt_sip_dir)
-print("pyqt_sip_flags:%s" % pyqtcfg.pyqt_sip_flags)
+if __name__ == '__main__':
+    try:
+        import PyQt4.pyqtconfig
+        pyqtcfg = PyQt4.pyqtconfig.Configuration()
+        sip_dir = pyqtcfg.pyqt_sip_dir
+        sip_flags = pyqtcfg.pyqt_sip_flags
+    except ImportError:
+        # PyQt4 >= 4.10.0 was built with configure-ng.py instead of
+        # configure.py, so pyqtconfig.py is not installed.
+        sip_dir = get_default_sip_dir()
+        sip_flags = PyQt4.QtCore.PYQT_CONFIGURATION['sip_flags']
 
+    print('pyqt_version:%06.x' % PyQt4.QtCore.PYQT_VERSION)
+    print('pyqt_version_str:%s' % PyQt4.QtCore.PYQT_VERSION_STR)
+    print('pyqt_version_tag:%s' % get_qt4_tag(sip_flags))
+    print('pyqt_sip_dir:%s' % sip_dir)
+    print('pyqt_sip_flags:%s' % sip_flags)
diff --git a/Code/Mantid/Build/CMake/FindPyQt4.cmake b/Code/Mantid/Build/CMake/FindPyQt4.cmake
index 9b45d5169b3c39f809e3ce58f77e33b1e1b22d5d..b3fe28c7e63b6e01484bb995c9b4b9f30f7c57df 100644
--- a/Code/Mantid/Build/CMake/FindPyQt4.cmake
+++ b/Code/Mantid/Build/CMake/FindPyQt4.cmake
@@ -9,16 +9,20 @@
 # Find the installed version of PyQt4. FindPyQt4 should only be called after
 # Python has been found.
 #
-# This file defines the following variables:
+# This file defines the following variables, which can also be overriden by
+# users:
 #
 # PYQT4_VERSION - The version of PyQt4 found expressed as a 6 digit hex number
-#     suitable for comparision as a string
+#     suitable for comparison as a string
 #
 # PYQT4_VERSION_STR - The version of PyQt4 as a human readable string.
 #
-# PYQT4_VERSION_TAG - The PyQt version tag using by PyQt's sip files.
+# PYQT4_VERSION_TAG - The Qt4 version tag used by PyQt's sip files.
 #
-# PYQT4_SIP_DIR - The directory holding the PyQt4 .sip files.
+# PYQT4_SIP_DIR - The directory holding the PyQt4 .sip files. This can be unset
+# if PyQt4 was built using its new build system and pyqtconfig.py is not
+# present on the system, as in this case its value cannot be determined
+# automatically.
 #
 # PYQT4_SIP_FLAGS - The SIP flags used to build PyQt.
 
@@ -30,19 +34,38 @@ ELSE(EXISTS PYQT4_VERSION)
   FIND_FILE(_find_pyqt_py FindPyQt.py PATHS ${CMAKE_MODULE_PATH})
 
   EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${_find_pyqt_py} OUTPUT_VARIABLE pyqt_config)
-  IF( NOT ${pyqt_config} MATCHES "Traceback" )
-    STRING(REGEX REPLACE "^pyqt_version:([^\n]+).*$" "\\1" PYQT4_VERSION ${pyqt_config})
-    STRING(REGEX REPLACE ".*\npyqt_version_str:([^\n]+).*$" "\\1" PYQT4_VERSION_STR ${pyqt_config})
-    STRING(REGEX REPLACE ".*\npyqt_version_tag:([^\n]+).*$" "\\1" PYQT4_VERSION_TAG ${pyqt_config})
-    STRING(REGEX REPLACE ".*\npyqt_sip_dir:([^\n]+).*$" "\\1" PYQT4_SIP_DIR ${pyqt_config})
-    STRING(REGEX REPLACE ".*\npyqt_sip_flags:([^\n]+).*$" "\\1" PYQT4_SIP_FLAGS ${pyqt_config})
+  IF(pyqt_config)
+    STRING(REGEX MATCH "^pyqt_version:([^\n]+).*$" _dummy ${pyqt_config})
+    SET(PYQT4_VERSION "${CMAKE_MATCH_1}" CACHE STRING "PyQt4's version as a 6-digit hexadecimal number")
 
-    SET(PYQT4_FOUND TRUE)
-  ENDIF()
+    STRING(REGEX MATCH ".*\npyqt_version_str:([^\n]+).*$" _dummy ${pyqt_config})
+    SET(PYQT4_VERSION_STR "${CMAKE_MATCH_1}" CACHE STRING "PyQt4's version as a human-readable string")
 
-  include ( FindPackageHandleStandardArgs )
-  find_package_handle_standard_args ( PyQt4 DEFAULT_MSG PYQT4_VERSION )
+    STRING(REGEX MATCH ".*\npyqt_version_tag:([^\n]+).*$" _dummy ${pyqt_config})
+    SET(PYQT4_VERSION_TAG "${CMAKE_MATCH_1}" CACHE STRING "The Qt4 version tag used by PyQt4's .sip files")
 
-  mark_as_advanced ( _find_pyqt_py )
+    STRING(REGEX MATCH ".*\npyqt_sip_dir:([^\n]+).*$" _dummy ${pyqt_config})
+    SET(PYQT4_SIP_DIR "${CMAKE_MATCH_1}" CACHE FILEPATH "The base directory where PyQt4's .sip files are installed")
+
+    STRING(REGEX MATCH ".*\npyqt_sip_flags:([^\n]+).*$" _dummy ${pyqt_config})
+    SET(PYQT4_SIP_FLAGS "${CMAKE_MATCH_1}" CACHE STRING "The SIP flags used to build PyQt4")
+
+    IF(NOT IS_DIRECTORY "${PYQT4_SIP_DIR}")
+      MESSAGE(WARNING "The base directory where PyQt4's SIP files are installed could not be determined. This usually means PyQt4 was built with its new build system and pyqtconfig.py is not present.\n"
+                      "Please set the PYQT4_SIP_DIR variable manually.")
+    ELSE(NOT IS_DIRECTORY "${PYQT4_SIP_DIR}")
+      SET(PYQT4_FOUND TRUE)
+    ENDIF(NOT IS_DIRECTORY "${PYQT4_SIP_DIR}")
+  ENDIF(pyqt_config)
+
+  IF(PYQT4_FOUND)
+    IF(NOT PYQT4_FIND_QUIETLY)
+      MESSAGE(STATUS "Found PyQt4 version: ${PYQT4_VERSION_STR}")
+    ENDIF(NOT PYQT4_FIND_QUIETLY)
+  ELSE(PYQT4_FOUND)
+    IF(PYQT4_FIND_REQUIRED)
+      MESSAGE(FATAL_ERROR "Could not find Python")
+    ENDIF(PYQT4_FIND_REQUIRED)
+  ENDIF(PYQT4_FOUND)
 
 ENDIF(EXISTS PYQT4_VERSION)
diff --git a/Code/Mantid/Build/CMake/FindTcmalloc.cmake b/Code/Mantid/Build/CMake/FindTcmalloc.cmake
index 592887aac4c626a39002e49e8ddfe1d55919e2d6..ea16a9012830c5844cebb93b323d399682de569c 100644
--- a/Code/Mantid/Build/CMake/FindTcmalloc.cmake
+++ b/Code/Mantid/Build/CMake/FindTcmalloc.cmake
@@ -7,7 +7,7 @@
 # TCMALLOC_FOUND If false, do not try to use TCMALLOC
 
 find_path ( TCMALLOC_INCLUDE_DIR tcmalloc.h 
-            PATHS /usr/include/google
+            PATHS /usr/include/gperftools
 )
 
 find_library ( TCMALLOC_LIB NAMES tcmalloc tcmalloc_minimal )
diff --git a/Code/Mantid/Build/CMake/UseSystemQt4.cmake b/Code/Mantid/Build/CMake/UseSystemQt4.cmake
index db8dd519ee7d23d9ba0bb007a8cceb1e31242d72..f2744cafee872a8974802237f0ef0dafd27c8d5e 100644
--- a/Code/Mantid/Build/CMake/UseSystemQt4.cmake
+++ b/Code/Mantid/Build/CMake/UseSystemQt4.cmake
@@ -23,8 +23,13 @@
 #  License text for the above reference.)
 
 ADD_DEFINITIONS(${QT_DEFINITIONS})
-SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG QT_DEBUG)
-SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE QT_NO_DEBUG)
+IF("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}" VERSION_GREATER 2.8.9)
+  SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:QT_DEBUG>)
+  SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>)
+ELSE()
+  SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG QT_DEBUG)
+  SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE QT_NO_DEBUG)
+ENDIF()
 SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO QT_NO_DEBUG)
 SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL QT_NO_DEBUG)
 
diff --git a/Code/Mantid/Build/class_maker.py b/Code/Mantid/Build/class_maker.py
index a129c029385fc155b6759cbd09b12ec8fe4dbe32..4e30ae21084fe1cb7d477fad82b1a9abf890f791 100755
--- a/Code/Mantid/Build/class_maker.py
+++ b/Code/Mantid/Build/class_maker.py
@@ -129,6 +129,8 @@ def write_source(subproject, classname, filename, args):
     algorithm_source = """
   //----------------------------------------------------------------------------------------------
 
+  /// Algorithms name for identification. @see Algorithm::name
+  const std::string %s::name() const { return "%s"; }
 
   /// Algorithm's version for identification. @see Algorithm::version
   int %s::version() const { return 1;};
@@ -156,7 +158,7 @@ def write_source(subproject, classname, filename, args):
     // TODO Auto-generated execute stub
   }
 
-""" % (classname, classname, classname, classname, classname)
+""" % (classname, classname, classname, classname, classname, classname, classname)
 
     if not args.alg:
         algorithm_top = ""
diff --git a/Code/Mantid/CMakeLists.txt b/Code/Mantid/CMakeLists.txt
index ea8af240f8b7c6275b6fa0dd9765c40707121fca..2a19d9eb65ee9c89522c01cd24fade595d78b3c8 100644
--- a/Code/Mantid/CMakeLists.txt
+++ b/Code/Mantid/CMakeLists.txt
@@ -121,6 +121,7 @@ set ( CORE_MANTIDLIBS Kernel Geometry API )
 
 # Add a target for all GUI tests
 add_custom_target ( GUITests )
+add_dependencies ( GUITests MantidWidgetsTest)
 add_dependencies ( check GUITests )
 # Collect all tests together
 add_custom_target ( AllTests )
diff --git a/Code/Mantid/Framework/API/CMakeLists.txt b/Code/Mantid/Framework/API/CMakeLists.txt
index 4957f3a3eb420cf77b6b7ca84c27f756ecc72ad6..63b186613846d8226eb06e7d276dd37fe11cb2ad 100644
--- a/Code/Mantid/Framework/API/CMakeLists.txt
+++ b/Code/Mantid/Framework/API/CMakeLists.txt
@@ -105,6 +105,7 @@ set ( SRC_FILES
 	src/Run.cpp
 	src/Sample.cpp
 	src/SampleEnvironment.cpp
+	src/SampleShapeValidator.cpp
 	src/ScopedWorkspace.cpp
 	src/ScriptBuilder.cpp
 	src/ScriptRepository.cpp
@@ -264,6 +265,7 @@ set ( INC_FILES
 	inc/MantidAPI/Run.h
 	inc/MantidAPI/Sample.h
 	inc/MantidAPI/SampleEnvironment.h
+	inc/MantidAPI/SampleShapeValidator.h
 	inc/MantidAPI/ScopedWorkspace.h
 	inc/MantidAPI/ScriptBuilder.h
 	inc/MantidAPI/ScriptRepository.h
@@ -355,6 +357,7 @@ set ( TEST_FILES
 	PropertyNexusTest.h
 	RunTest.h
 	SampleEnvironmentTest.h
+	SampleShapeValidatorTest.h
 	SampleTest.h
 	ScopedWorkspaceTest.h
 	ScriptBuilderTest.h
diff --git a/Code/Mantid/Framework/API/inc/MantidAPI/Column.h b/Code/Mantid/Framework/API/inc/MantidAPI/Column.h
index 33ea5f2cf67ad1e9572577b88d43b62b6e1673e9..e7b8fd3abe5b6154e0f59a8acc7c563a376c1a56 100644
--- a/Code/Mantid/Framework/API/inc/MantidAPI/Column.h
+++ b/Code/Mantid/Framework/API/inc/MantidAPI/Column.h
@@ -9,9 +9,10 @@
 #ifndef Q_MOC_RUN
 # include <boost/shared_ptr.hpp>
 #endif
+#include <cstring>
 #include <string>
-#include <typeinfo>
 #include <limits>
+#include <typeinfo>
 #include <vector>
 
 namespace Mantid
@@ -114,7 +115,7 @@ public:
     {
         return *static_cast<T*>(void_pointer(index));
     }
- 
+
 
     /// Templated method for returning a value (const version). No type checks are done.
     template<class T>
@@ -127,17 +128,17 @@ public:
     template<class T>
     bool isType()const
     {
-        return get_type_info() == typeid(T);
+      return !std::strcmp(get_type_info().name(), typeid(T).name());
     }
 
-    /// get plot type 
-    /// @return See description of setPlotType() for the interpretation of the returned int   
+    /// get plot type
+    /// @return See description of setPlotType() for the interpretation of the returned int
     int getPlotType() const
     {
        return m_plotType;
     }
 
-    /// Set plot type where 
+    /// Set plot type where
     void setPlotType(int t);
 
     /**
@@ -169,7 +170,7 @@ protected:
     std::string m_name;///< name
     std::string m_type;///< type
 
-    /// plot type where 
+    /// plot type where
     /// None = 0 (means it has specifically been set to 'no plot type')
     /// NotSet = -1000 (this is the default and means plot style has not been set)
     /// X = 1, Y = 2, Z = 3, xErr = 4, yErr = 5, Label = 6
@@ -184,7 +185,7 @@ protected:
 };
 
 /**  @class Boolean
-    As TableColumn stores its data in a std::vector bool type cannot be used 
+    As TableColumn stores its data in a std::vector bool type cannot be used
     in the same way as the other types. Class Boolean is used instead.
 */
 struct MANTID_API_DLL Boolean
@@ -197,7 +198,7 @@ struct MANTID_API_DLL Boolean
     operator bool(){return value;}
     /// equal to operator
     bool operator==(const Boolean& b)const
-    {return(this->value==b.value);		
+    {return(this->value==b.value);
     }
     //
     operator double(void)const{return double(this->value);}
diff --git a/Code/Mantid/Framework/API/inc/MantidAPI/IMDNode.h b/Code/Mantid/Framework/API/inc/MantidAPI/IMDNode.h
index 5cea41bcf918f473ffa073c1123ed39ea53cf60d..9205f66d1869b9d88d49bb21997f7887f6874aa1 100644
--- a/Code/Mantid/Framework/API/inc/MantidAPI/IMDNode.h
+++ b/Code/Mantid/Framework/API/inc/MantidAPI/IMDNode.h
@@ -71,6 +71,7 @@ public:
     *@param loadFileData -- if true, the data on HDD and not yet in memory are loaded into memory before deleting fileBacked information, 
                             if false, all on HDD contents are discarded, which can break the data integrity (used by destructor)  */
     virtual void clearFileBacked(bool loadFileData)=0;
+    virtual void reserveMemoryForLoad(uint64_t)=0;
 
     /**Save the box at specific disk position using the class, respoinsible for the file IO. */
     virtual void saveAt(API::IBoxControllerIO *const /*saver */,  uint64_t /*position*/)const=0;
diff --git a/Code/Mantid/Framework/API/inc/MantidAPI/MatrixWorkspace.h b/Code/Mantid/Framework/API/inc/MantidAPI/MatrixWorkspace.h
index 01243eed4ae57d793b1dbd0e28d492c807ff5387..7ec8edb85097795ebb5329f12e4999db7fd3e5ed 100644
--- a/Code/Mantid/Framework/API/inc/MantidAPI/MatrixWorkspace.h
+++ b/Code/Mantid/Framework/API/inc/MantidAPI/MatrixWorkspace.h
@@ -16,6 +16,7 @@
 #include "MantidAPI/Run.h"
 #include "MantidAPI/Sample.h"
 #include "MantidAPI/SpectraDetectorTypes.h"
+#include "MantidKernel/EmptyValues.h"
 
 
 namespace Mantid
@@ -33,6 +34,13 @@ namespace Mantid
   {
     class SpectrumDetectorMapping;
 
+    /// typedef for the image type
+    typedef std::vector<std::vector<double>> MantidImage;
+    /// shared pointer to MantidImage
+    typedef boost::shared_ptr<MantidImage> MantidImage_sptr;
+    /// shared pointer to const MantidImage
+    typedef boost::shared_ptr<const MantidImage> MantidImage_const_sptr;
+
     //----------------------------------------------------------------------
     /** Base MatrixWorkspace Abstract Class.
 
@@ -227,6 +235,9 @@ namespace Mantid
       /// Return a vector with the integrated counts for all spectra withing the given range
       virtual void getIntegratedSpectra(std::vector<double> & out, const double minX, const double maxX, const bool entireRange) const;
 
+      /// Return an index in the X vector for an x-value close to a given value
+      std::pair<size_t,double> getXIndex(size_t i, double x, bool isLeft = true, size_t start = 0) const;
+
       //----------------------------------------------------------------------
 
       int axes() const;
@@ -311,6 +322,25 @@ namespace Mantid
       // End IMDWorkspace methods
       //=====================================================================================
 
+      //=====================================================================================
+      // Image methods
+      //=====================================================================================
+
+      /// Get start and end x indices for images
+      std::pair<size_t,size_t> getImageStartEndXIndices( size_t i, double startX, double endX ) const;
+      /// Create an image of Ys.
+      MantidImage_sptr getImageY (size_t start = 0, size_t stop = 0, size_t width = 0, double startX = EMPTY_DBL(), double endX = EMPTY_DBL() ) const;
+      /// Create an image of Es.
+      MantidImage_sptr getImageE (size_t start = 0, size_t stop = 0, size_t width = 0, double startX = EMPTY_DBL(), double endX = EMPTY_DBL() ) const;
+      /// Copy the data (Y's) from an image to this workspace.
+      void setImageY( const MantidImage &image, size_t start = 0 );
+      /// Copy the data from an image to this workspace's errors.
+      void setImageE( const MantidImage &image, size_t start = 0 );
+
+      //=====================================================================================
+      // End image methods
+      //=====================================================================================
+
     protected:
       MatrixWorkspace(Mantid::Geometry::INearestNeighboursFactory* factory = NULL);
 
@@ -328,6 +358,10 @@ namespace Mantid
       MatrixWorkspace(const MatrixWorkspace&);
       /// Private copy assignment operator. NO ASSIGNMENT ALLOWED
       MatrixWorkspace& operator=(const MatrixWorkspace&);
+      /// Create an MantidImage instance.
+      MantidImage_sptr getImage(const MantidVec& (MatrixWorkspace::*read)(std::size_t const) const, size_t start, size_t stop, size_t width, size_t indexStart, size_t indexEnd) const;
+      /// Copy data from an image.
+      void setImage( MantidVec& (MatrixWorkspace::*dataVec)(const std::size_t), const MantidImage &image, size_t start );
 
       /// Has this workspace been initialised?
       bool m_isInitialized;
diff --git a/Code/Mantid/Framework/API/inc/MantidAPI/Sample.h b/Code/Mantid/Framework/API/inc/MantidAPI/Sample.h
index 2c70be07ab907441dc956ca5f419f3c367a8d208..e518afa05c0a2f5f6c02fcd60ebd9dc672c32640 100644
--- a/Code/Mantid/Framework/API/inc/MantidAPI/Sample.h
+++ b/Code/Mantid/Framework/API/inc/MantidAPI/Sample.h
@@ -5,9 +5,8 @@
 // Includes
 //------------------------------------------------------------------------------
 #include "MantidAPI/DllConfig.h"
-#include "MantidKernel/V3D.h"
-#include "MantidKernel/Material.h"
 #include "MantidGeometry/Objects/Object.h"
+#include "MantidKernel/V3D.h"
 #include <vector>
 
 
@@ -28,28 +27,28 @@ namespace Mantid
     //------------------------------------------------------------------------------
     class SampleEnvironment;
 
-    /** 
-      This class stores information about the sample used in particular 
+    /**
+      This class stores information about the sample used in particular
       run. It is a type of ObjComponent meaning it has a shape, a position
       and a material.
 
       Copyright &copy; 2007-2012 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
-      
+
       This file is part of Mantid.
-      
+
       Mantid is free software; you can redistribute it and/or modify
       it under the terms of the GNU General Public License as published by
       the Free Software Foundation; either version 3 of the License, or
       (at your option) any later version.
-      
+
       Mantid 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 General Public License for more details.
-      
+
       You should have received a copy of the GNU General Public License
       along with this program.  If not, see <http://www.gnu.org/licenses/>.
-      
+
       File change history is stored at: <https://github.com/mantidproject/mantid>.
       Code Documentation is available at: <http://doxygen.mantidproject.org>
     */
@@ -82,10 +81,8 @@ namespace Mantid
 
       /** @name Material properties.*/
       //@{
-      /// Return the material
+      /// Return the material (convenience method)
       const Kernel::Material & getMaterial() const;
-      /// Set the type of material that this sample is composed from
-      void setMaterial(const Kernel::Material& material);
       //@}
 
       /** @name Access the environment information */
@@ -102,7 +99,7 @@ namespace Mantid
       const Geometry::OrientedLattice & getOrientedLattice() const;
       /// Get a reference to the sample's OrientedLattice
       Geometry::OrientedLattice & getOrientedLattice();
-      /** Set the pointer to OrientedLattice defining the sample's lattice and orientation. 
+      /** Set the pointer to OrientedLattice defining the sample's lattice and orientation.
           No copying is done in the class, but the class deletes pointer on destruction so the application, providing the pointer should not do it*/
       void setOrientedLattice(Geometry::OrientedLattice * latt);
       bool hasOrientedLattice() const;
@@ -129,18 +126,16 @@ namespace Mantid
       /// Sets the width
       void setWidth(double width);
       /// Returns the width
-      double getWidth() const;  
+      double getWidth() const;
       //@}
       /// Delete the oriented lattice
       void clearOrientedLattice();
 
-    private: 
+    private:
       /// The sample name
       std::string m_name;
       /// The sample shape object
       Geometry::Object m_shape;
-      /// The sample composition
-      Kernel::Material m_material;
       /// An owned pointer to the SampleEnvironment object
       boost::shared_ptr<SampleEnvironment> m_environment;
       /// Pointer to the OrientedLattice of the sample, NULL if not set.
diff --git a/Code/Mantid/Framework/API/inc/MantidAPI/SampleEnvironment.h b/Code/Mantid/Framework/API/inc/MantidAPI/SampleEnvironment.h
index 91164bd4edfad8d10fad5f1b11c57829f3b55149..8f3a71500201f42e690dd405546df295ada93525 100644
--- a/Code/Mantid/Framework/API/inc/MantidAPI/SampleEnvironment.h
+++ b/Code/Mantid/Framework/API/inc/MantidAPI/SampleEnvironment.h
@@ -5,67 +5,69 @@
 // Includes
 //------------------------------------------------------------------------------
 #include "MantidAPI/DllConfig.h"
-#include "MantidGeometry/Instrument/CompAssembly.h"
+#include "MantidGeometry/Objects/Object.h"
+#include "MantidKernel/ClassMacros.h"
 
 namespace Mantid
 {
+  namespace Geometry
+  {
+    class Track;
+  }
   namespace API
   {
-    /** 
+    /**
       This class stores details regarding the sample environment that was used during
-      a specific run. It is implemented as a type of CompAssembly so that enviroment kits
-      consisting of objects made from different materials can be constructed easily.
-        
-      @author Martyn Gigg, Tessella plc
-      @date 23/11/2010
-      
+      a specific run. It is implemented as a collection of pairs of Object elements
+
       Copyright &copy; 2007-2010 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
-      
+
       This file is part of Mantid.
-      
+
       Mantid is free software; you can redistribute it and/or modify
       it under the terms of the GNU General Public License as published by
       the Free Software Foundation; either version 3 of the License, or
       (at your option) any later version.
-      
+
       Mantid 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 General Public License for more details.
-      
+
       You should have received a copy of the GNU General Public License
       along with this program.  If not, see <http://www.gnu.org/licenses/>.
-      
+
       File change history is stored at: <https://github.com/mantidproject/mantid>.
       Code Documentation is available at: <http://doxygen.mantidproject.org>
     */
-    class MANTID_API_DLL SampleEnvironment : public Geometry::CompAssembly
+    class MANTID_API_DLL SampleEnvironment
     {
     public:
       /// Constructor defining the name of the environment
       SampleEnvironment(const std::string & name);
-      /// Copy constructor
-      SampleEnvironment(const SampleEnvironment& original);
-      /// Clone the assembly
-      virtual Geometry::IComponent* clone() const;
-      /// Type of object
-      virtual std::string type() const {return "SampleEnvironment"; }
 
-      /// Override the default add member to only add components with a defined
-      /// shape
-      int add(IComponent* comp);
+      /// @return The name of kit
+      inline const std::string name() const { return m_name; }
+      /// @return The number of elements the environment is composed of
+      inline size_t nelements() const { return m_elements.size(); }
+      /// Return the bounding box of all of the elements
+      Geometry::BoundingBox boundingBox() const;
+
+      /// Add an element
+      void add(const Geometry::Object & element);
+
       /// Is the point given a valid point within the environment
       bool isValid(const Kernel::V3D & point) const;
       /// Update the given track with intersections within the environment
       void interceptSurfaces(Geometry::Track & track) const;
 
     private:
-      /// Default constructor
-      SampleEnvironment();
-      /// Assignment operator
-      SampleEnvironment& operator=(const SampleEnvironment&);
-
+      DISABLE_DEFAULT_CONSTRUCT(SampleEnvironment)
 
+      // Name of the kit
+      std::string m_name;
+      // The elements
+      std::vector<Geometry::Object> m_elements;
     };
   }
 }
diff --git a/Code/Mantid/Framework/API/inc/MantidAPI/SampleShapeValidator.h b/Code/Mantid/Framework/API/inc/MantidAPI/SampleShapeValidator.h
new file mode 100644
index 0000000000000000000000000000000000000000..57270adc5444e821d19ab0e4e7adcfd7807e0e68
--- /dev/null
+++ b/Code/Mantid/Framework/API/inc/MantidAPI/SampleShapeValidator.h
@@ -0,0 +1,52 @@
+#ifndef MANTID_API_SAMPLESHAPEVALIDATOR_H_
+#define MANTID_API_SAMPLESHAPEVALIDATOR_H_
+
+#include "MantidAPI/DllConfig.h"
+#include "MantidAPI/ExperimentInfo.h"
+
+#include "MantidKernel/TypedValidator.h"
+
+namespace Mantid
+{
+  namespace API
+  {
+
+    /**
+      Verify that a workspace has valid sample shape.
+
+      Copyright &copy; 2014 ISIS Rutherford Appleton Laboratory
+      & NScD Oak Ridge National Laboratory
+
+      This file is part of Mantid.
+
+      Mantid is free software; you can redistribute it and/or modify
+      it under the terms of the GNU General Public License as published by
+      the Free Software Foundation; either version 3 of the License, or
+      (at your option) any later version.
+
+      Mantid 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 General Public License for more details.
+
+      You should have received a copy of the GNU General Public License
+      along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+      File change history is stored at: <https://github.com/mantidproject/mantid>
+      Code Documentation is available at: <http://doxygen.mantidproject.org>
+    */
+    class MANTID_API_DLL SampleShapeValidator :
+        public Kernel::TypedValidator<boost::shared_ptr<ExperimentInfo> >
+    {
+    public:
+      std::string getType() const;
+      Kernel::IValidator_sptr clone() const;
+
+    private:
+      std::string checkValidity(const boost::shared_ptr<ExperimentInfo>& value) const;
+    };
+
+  } // namespace API
+} // namespace Mantid
+
+#endif  /* MANTID_API_SAMPLESHAPEVALIDATOR_H_ */
diff --git a/Code/Mantid/Framework/API/src/ExperimentInfo.cpp b/Code/Mantid/Framework/API/src/ExperimentInfo.cpp
index dace59eea4614dcae5ec0514bb7951a8dd78b739..3a4b3eec95e6077bac89e69d87c9eb6da9bd0706 100644
--- a/Code/Mantid/Framework/API/src/ExperimentInfo.cpp
+++ b/Code/Mantid/Framework/API/src/ExperimentInfo.cpp
@@ -817,7 +817,7 @@ namespace API
     std::string instrument(Kernel::ConfigService::Instance().getInstrument(instrumentName).name());
 
     // Get the search directory for XML instrument definition files (IDFs)
-    std::string directoryName = Kernel::ConfigService::Instance().getInstrumentDirectory();
+    const std::vector<std::string>& directoryNames = Kernel::ConfigService::Instance().getInstrumentDirectories();
 
     boost::regex regex(instrument+"_Definition.*\\.xml", boost::regex_constants::icase);
     Poco::DirectoryIterator end_iter;
@@ -826,39 +826,44 @@ namespace API
     std::string mostRecentIDF; // store most recently starting matching IDF if found, else most recently starting IDF.
     DateAndTime refDate("1900-01-31 23:59:00"); // used to help determine the most recently starting IDF, if none match 
     DateAndTime refDateGoodFile("1900-01-31 23:59:00"); // used to help determine the most recently starting matching IDF 
-    for ( Poco::DirectoryIterator dir_itr(directoryName); dir_itr != end_iter; ++dir_itr )
+    for ( auto instDirs_itr = directoryNames.begin(); instDirs_itr != directoryNames.end(); ++instDirs_itr)
     {
-      if ( !Poco::File(dir_itr->path() ).isFile() ) continue;
-
-      std::string l_filenamePart = Poco::Path(dir_itr->path()).getFileName();
-      if ( regex_match(l_filenamePart, regex) )
+      //This will iterate around the directories from user ->etc ->install, and find the first beat file
+      std::string directoryName = *instDirs_itr;
+      for ( Poco::DirectoryIterator dir_itr(directoryName); dir_itr != end_iter; ++dir_itr )
       {
-        g_log.debug() << "Found file: '" << dir_itr->path() << "'\n";
-        std::string validFrom, validTo;
-        getValidFromTo(dir_itr->path(), validFrom, validTo);
-        g_log.debug() << "File '" << dir_itr->path() << " valid dates: from '" << validFrom << "' to '" << validTo << "'\n";
-        DateAndTime from(validFrom);
-        // Use a default valid-to date if none was found.
-        DateAndTime to;
-        if (validTo.length() > 0)
-          to.setFromISO8601(validTo);
-        else
-          to.setFromISO8601("2100-01-01T00:00:00");
+        if ( !Poco::File(dir_itr->path() ).isFile() ) continue;
 
-        if ( from <= d && d <= to )
+        std::string l_filenamePart = Poco::Path(dir_itr->path()).getFileName();
+        if ( regex_match(l_filenamePart, regex) )
         {
-          if( from > refDateGoodFile ) 
-          { // We'd found a matching file more recently starting than any other matching file found
-            foundGoodFile = true;
-            refDateGoodFile = from;
+          g_log.debug() << "Found file: '" << dir_itr->path() << "'\n";
+          std::string validFrom, validTo;
+          getValidFromTo(dir_itr->path(), validFrom, validTo);
+          g_log.debug() << "File '" << dir_itr->path() << " valid dates: from '" << validFrom << "' to '" << validTo << "'\n";
+          DateAndTime from(validFrom);
+          // Use a default valid-to date if none was found.
+          DateAndTime to;
+          if (validTo.length() > 0)
+            to.setFromISO8601(validTo);
+          else
+            to.setFromISO8601("2100-01-01T00:00:00");
+
+          if ( from <= d && d <= to )
+          {
+            if( from > refDateGoodFile ) 
+            { // We'd found a matching file more recently starting than any other matching file found
+              foundGoodFile = true;
+              refDateGoodFile = from;
+              mostRecentIDF = dir_itr->path();
+            }
+          }
+          if ( !foundGoodFile && ( from > refDate ) )
+          {  // Use most recently starting file, in case we don't find a matching file.
+            refDate = from;
             mostRecentIDF = dir_itr->path();
           }
         }
-        if ( !foundGoodFile && ( from > refDate ) )
-        {  // Use most recently starting file, in case we don't find a matching file.
-          refDate = from;
-          mostRecentIDF = dir_itr->path();
-        }
       }
     }
     g_log.debug() << "IDF selected is " << mostRecentIDF << std::endl;
diff --git a/Code/Mantid/Framework/API/src/MatrixWorkspace.cpp b/Code/Mantid/Framework/API/src/MatrixWorkspace.cpp
index 0fc11dd58755988412343ad317894fd9a7c0353a..e0adfb391d6a442b5ff73d64186dda688c4c52e6 100644
--- a/Code/Mantid/Framework/API/src/MatrixWorkspace.cpp
+++ b/Code/Mantid/Framework/API/src/MatrixWorkspace.cpp
@@ -1516,13 +1516,15 @@ namespace Mantid
       double yBinSize(1.0); // only applies for volume normalization & numeric axis
       if (normalization == VolumeNormalization && ax1->isNumeric())
       {
-        if (wi + 1 == nhist && nhist > 1)
+        size_t uVI; // unused vertical index.
+        double currentVertical = ax1->operator ()(wi, uVI);
+        if (wi + 1 == nhist && nhist > 1) // On the boundary, look back to get diff
         {
-          yBinSize =  yVals[wi] - yVals[wi-1];
+          yBinSize =  currentVertical - ax1->operator ()(wi - 1, uVI);
         }
         else
         {
-          yBinSize = yVals[wi+1] - yVals[wi];
+          yBinSize = ax1->operator ()(wi + 1, uVI) - currentVertical;
         }
       }
 
@@ -1713,6 +1715,288 @@ namespace Mantid
       return Mantid::API::None;
     }
 
+    /**
+     * Creates a 2D image.
+     * @param read :: Pointer to a method returning a MantidVec to provide data for the image.
+     * @param start :: First workspace index for the image.
+     * @param stop :: Last workspace index for the image.
+     * @param width :: Image width. Must divide (stop - start + 1) exactly.
+     * @param indexStart :: First index of the x integration range.
+     * @param indexEnd :: Last index of the x integration range.
+     */
+    MantidImage_sptr MatrixWorkspace::getImage(const MantidVec& (MatrixWorkspace::*read)(std::size_t const) const, size_t start, size_t stop, size_t width, size_t indexStart, size_t indexEnd) const
+    {
+      // width must be provided (for now)
+      if ( width == 0 )
+      {
+        throw std::runtime_error("Cannot create image with width 0");
+      }
+
+      size_t nHist = getNumberHistograms();
+      // use all spectra by default
+      if ( stop == 0 )
+      {
+        stop = nHist;
+      }
+
+      // check start and stop
+      if ( stop < start )
+      {
+        throw std::runtime_error("Cannot create image for an empty data set.");
+      }
+
+      if ( start >= nHist )
+      {
+        throw std::runtime_error("Cannot create image: start index is out of range");
+      }
+
+      if ( stop >= nHist )
+      {
+        throw std::runtime_error("Cannot create image: stop index is out of range");
+      }
+
+      // calculate image geometry
+      size_t dataSize = stop - start + 1;
+      size_t height = dataSize / width;
+
+      // and check that the data fits exactly into this geometry
+      if ( height * width != dataSize )
+      {
+        throw std::runtime_error("Cannot create image: the data set cannot form a rectangle.");
+      }
+
+      size_t nBins = blocksize();
+      bool isHisto = isHistogramData();
+
+      // default indexEnd is the last index of the X vector
+      if ( indexEnd == 0 )
+      {
+        indexEnd = nBins;
+        if ( !isHisto && indexEnd > 0 ) --indexEnd;
+      }
+
+      // check the x-range indices
+      if ( indexEnd < indexStart )
+      {
+        throw std::runtime_error("Cannot create image for an empty data set.");
+      }
+
+      if ( indexStart >= nBins || indexEnd > nBins || (!isHisto && indexEnd == nBins) )
+      {
+        throw std::runtime_error("Cannot create image: integration interval is out of range.");
+      }
+
+      // initialize the image
+      auto image = boost::make_shared<MantidImage>( height );
+      if ( !isHisto ) ++indexEnd;
+
+      // deal separately with single-binned workspaces: no integration is required
+      if ( isHisto && indexEnd == indexStart + 1 )
+      {
+        PARALLEL_FOR_NO_WSP_CHECK()
+        for(int i = 0; i < static_cast<int>(height); ++i)
+        {
+          auto &row = (*image)[i];
+          row.resize( width );
+          size_t spec = start + static_cast<size_t>(i) * width;
+          for(size_t j = 0; j< width; ++j, ++spec)
+          {
+            row[j] = (this->*read)(spec)[indexStart];
+          }
+        }
+      }
+      else
+      {
+        // each image pixel is integrated over the x-range [indexStart,indexEnd)
+        PARALLEL_FOR_NO_WSP_CHECK()
+        for(int i = 0; i < static_cast<int>(height); ++i)
+        {
+          auto &row = (*image)[i];
+          row.resize( width );
+          size_t spec = start + static_cast<size_t>(i) * width;
+          for(size_t j = 0; j < width; ++j, ++spec)
+          {
+            auto &V = (this->*read)(spec);
+            row[j] = std::accumulate( V.begin() + indexStart, V.begin() + indexEnd, 0.0 );
+          }
+        }
+      }
+
+      return image;
+    }
+
+    /**
+     * Get start and end x indices for images
+     * @param i :: Histogram index.
+     * @param startX :: Lower bound of the x integration range.
+     * @param endX :: Upper bound of the x integration range.
+     */
+    std::pair<size_t,size_t> MatrixWorkspace::getImageStartEndXIndices( size_t i, double startX, double endX ) const
+    {
+      if ( startX == EMPTY_DBL() ) startX = readX(i).front();
+      auto pStart = getXIndex( i, startX, true );
+      if ( pStart.second != 0.0 )
+      {
+        throw std::runtime_error("Start X value is required to be on bin boundary.");
+      }
+      if ( endX == EMPTY_DBL() ) endX = readX(i).back();
+      auto pEnd = getXIndex( i, endX, false, pStart.first );
+      if ( pEnd.second != 0.0 )
+      {
+        throw std::runtime_error("End X value is required to be on bin boundary.");
+      }
+      return std::make_pair( pStart.first, pEnd.first );
+    }
+
+    /**
+     * Creates a 2D image of the y values in this workspace.
+     * @param start :: First workspace index for the image.
+     * @param stop :: Last workspace index for the image.
+     * @param width :: Image width. Must divide (stop - start + 1) exactly.
+     * @param startX :: Lower bound of the x integration range.
+     * @param endX :: Upper bound of the x integration range.
+     */
+    MantidImage_sptr MatrixWorkspace::getImageY(size_t start, size_t stop, size_t width, double startX, double endX ) const
+    {
+      auto p = getImageStartEndXIndices( 0, startX, endX );
+      return getImage(&MatrixWorkspace::readY,start,stop,width,p.first,p.second);
+    }
+
+    /**
+     * Creates a 2D image of the error values in this workspace.
+     * @param start :: First workspace index for the image.
+     * @param stop :: Last workspace index for the image.
+     * @param width :: Image width. Must divide (stop - start + 1) exactly.
+     * @param startX :: Lower bound of the x integration range.
+     * @param endX :: Upper bound of the x integration range.
+     */
+    MantidImage_sptr MatrixWorkspace::getImageE(size_t start, size_t stop, size_t width, double startX, double endX ) const
+    {
+      auto p = getImageStartEndXIndices( 0, startX, endX );
+      return getImage(&MatrixWorkspace::readE,start,stop,width,p.first,p.second);
+    }
+
+    /**
+     * Find an index in the X vector for an x-value close to a given value. It is returned as the first
+     * member of the pair. The second member is the fraction [0,1] of bin width cut off by the search value.
+     * If the first member == size of X vector then search failed.
+     * @param i :: Histogram index.
+     * @param x :: The value to find the index for.
+     * @param isLeft :: If true the left bin boundary is returned, if false - the right one.
+     * @param start :: Index to start the search from.
+     */
+    std::pair<size_t,double> MatrixWorkspace::getXIndex(size_t i, double x, bool isLeft, size_t start) const
+    {
+      auto &X = readX(i);
+      auto nx = X.size();
+
+      // if start out of range - search failed
+      if ( start >= nx ) return std::make_pair( nx, 0.0 );
+      if ( start > 0 && start == nx - 1 )
+      {
+        // starting with the last index is allowed for right boundary search
+        if ( !isLeft ) return std::make_pair( start, 0.0 );
+        return std::make_pair( nx, 0.0 );
+      }
+
+      // consider point data with single value
+      if ( nx == 1 ) 
+      {
+        assert( start == 0 );
+        if ( isLeft ) return x <= X[start] ? std::make_pair( start, 0.0 ) : std::make_pair( nx, 0.0 );
+        return x >= X[start] ? std::make_pair( start, 0.0 ) : std::make_pair( nx, 0.0 );
+      }
+
+      // left boundaries below start value map to the start value
+      if ( x <= X[start] )
+      {
+        return isLeft ? std::make_pair( start, 0.0 ) : std::make_pair( nx, 0.0 );
+      }
+      // right boundary search returns last x value for all values above it
+      if ( x >= X.back() )
+      {
+        return !isLeft ? std::make_pair( nx - 1, 0.0 ) : std::make_pair( nx, 0.0 );
+      }
+
+      // general case: find the boundary index and bin fraction
+      auto end = X.end();
+      for(auto ix = X.begin() + start + 1; ix != end; ++ix)
+      {
+        if ( *ix >= x )
+        {
+          auto index = static_cast<size_t>( std::distance(X.begin(),ix) );
+          if ( isLeft ) --index;
+          return std::make_pair( index, fabs( (X[index] - x) / (*ix - *(ix - 1)) ) );
+        }
+      }
+      // I don't think we can ever get here
+      return std::make_pair( nx, 0.0 );
+    }
+
+      /**
+       * Copy data from an image.
+       * @param dataVec :: A method returning non-const references to data vectors to copy the image to.
+       * @param image :: An image to copy the data from.
+       * @param start :: Startinf workspace indx to copy data to.
+       */
+      void MatrixWorkspace::setImage( MantidVec& (MatrixWorkspace::*dataVec)(const std::size_t), const MantidImage &image, size_t start )
+      {
+
+        if ( image.empty() ) return;
+        if ( image[0].empty() ) return;
+
+        if ( blocksize() != 1 )
+        {
+          throw std::runtime_error("Cannot set image: a single bin workspace is expected.");
+        }
+
+        size_t height = image.size();
+        size_t width  = image.front().size();
+        size_t dataSize = width * height;
+
+        if ( start + dataSize > getNumberHistograms() )
+        {
+          throw std::runtime_error("Cannot set image: image is bigger than workspace.");
+        }
+
+        PARALLEL_FOR_NO_WSP_CHECK()
+        for(int i = 0; i < static_cast<int>(height); ++i)
+        {
+          auto &row = image[i];
+          if ( row.size() != width )
+          {
+            throw std::runtime_error("Canot set image: image is corrupted.");
+          }
+          size_t spec = start + static_cast<size_t>(i) * width;
+          auto rowEnd = row.end();
+          for(auto pixel = row.begin(); pixel != rowEnd; ++pixel,++spec)
+          {
+            (this->*dataVec)(spec)[0] = *pixel;
+          }
+        }
+      }
+
+      /**
+       * Copy the data (Y's) from an image to this workspace.
+       * @param image :: An image to copy the data from.
+       * @param start :: Startinf workspace indx to copy data to.
+       */
+      void MatrixWorkspace::setImageY( const MantidImage &image, size_t start )
+      {
+        setImage( &MatrixWorkspace::dataY, image, start );
+      }
+
+      /**
+       * Copy the data from an image to this workspace's errors.
+       * @param image :: An image to copy the data from.
+       * @param start :: Startinf workspace indx to copy data to.
+       */
+      void MatrixWorkspace::setImageE( const MantidImage &image, size_t start )
+      {
+        setImage( &MatrixWorkspace::dataE, image, start );
+      }
+
+
   } // namespace API
 } // Namespace Mantid
 
diff --git a/Code/Mantid/Framework/API/src/MemoryManager.cpp b/Code/Mantid/Framework/API/src/MemoryManager.cpp
index 28bdaabb6cb64bdac18b4ec6fc177658daf378d4..0e5699beda59feb60cf75db2810627030295bf68 100644
--- a/Code/Mantid/Framework/API/src/MemoryManager.cpp
+++ b/Code/Mantid/Framework/API/src/MemoryManager.cpp
@@ -7,7 +7,7 @@
 #include "MantidKernel/Memory.h"
 
 #ifdef USE_TCMALLOC
-#include "google/malloc_extension.h"
+#include "gperftools/malloc_extension.h"
 #endif
 
 #include <ostream> //for endl
diff --git a/Code/Mantid/Framework/API/src/Sample.cpp b/Code/Mantid/Framework/API/src/Sample.cpp
index bfa6c6028ebf95c9342373b1bdcd36ca49fb43f3..445876129f9319715e52422b0dedbdd1948aed5c 100644
--- a/Code/Mantid/Framework/API/src/Sample.cpp
+++ b/Code/Mantid/Framework/API/src/Sample.cpp
@@ -2,43 +2,40 @@
 // Includes
 //----------------------------------------------------------------------
 #include "MantidAPI/Sample.h"
-#include "MantidKernel/Strings.h"
 #include "MantidAPI/SampleEnvironment.h"
 #include "MantidGeometry/IComponent.h"
 #include "MantidGeometry/Crystal/OrientedLattice.h"
 #include "MantidGeometry/Objects/ShapeFactory.h"
+#include "MantidKernel/Strings.h"
 
 #include <nexus/NeXusException.hpp>
 
-
 namespace Mantid
 {
 
   namespace API
   {
     using namespace Mantid::Kernel;
-    using Geometry::ShapeFactory;
     using Geometry::Object;
-    using Kernel::Material;
     using Geometry::OrientedLattice;
-    using Kernel::V3D;
-    
+    using Geometry::ShapeFactory;
+
     /**
      * Default constructor. Required for cow_ptr.
      */
-    Sample::Sample() : 
-      m_name(), m_shape(), m_material(), m_environment(),
+    Sample::Sample() :
+      m_name(), m_shape(), m_environment(),
       m_lattice(NULL),m_samples(),
       m_geom_id(0), m_thick(0.0), m_height(0.0), m_width(0.0)
     {
     }
 
-    /** 
-     * Copy constructor 
+    /**
+     * Copy constructor
      *  @param copy :: const reference to the sample object
      */
     Sample::Sample(const Sample& copy) :
-      m_name(copy.m_name), m_shape(copy.m_shape), m_material(copy.m_material), 
+      m_name(copy.m_name), m_shape(copy.m_shape),
       m_environment(copy.m_environment),
       m_lattice(NULL),m_samples(copy.m_samples),
       m_geom_id(copy.m_geom_id), m_thick(copy.m_thick),
@@ -54,9 +51,9 @@ namespace Mantid
       delete m_lattice;
     }
 
-    /** Assignment operator 
+    /** Assignment operator
      * @param rhs :: const reference to the sample object
-     * @return A reference to this object, which will have the same 
+     * @return A reference to this object, which will have the same
      * state as the argument
      */
     Sample& Sample::operator=(const Sample& rhs)
@@ -64,7 +61,6 @@ namespace Mantid
       if (this == &rhs) return *this;
       m_name = rhs.m_name;
       m_shape = rhs.m_shape;
-      m_material = rhs.m_material;
       m_environment = rhs.m_environment;
       m_geom_id = rhs.m_geom_id;
       m_samples = std::vector<boost::shared_ptr<Sample> >(rhs.m_samples);
@@ -72,15 +68,15 @@ namespace Mantid
       m_height = rhs.m_height;
       m_width = rhs.m_width;
       if (m_lattice!=NULL) delete m_lattice;
-      if (rhs.m_lattice)       
+      if (rhs.m_lattice)
         m_lattice = new OrientedLattice(rhs.getOrientedLattice());
       else
         m_lattice = NULL;
 
       return *this;
     }
-  
-    /** 
+
+    /**
      * Returns the name of the sample
      * @returns The name of this  sample
      */
@@ -89,7 +85,7 @@ namespace Mantid
       return m_name;
     }
 
-    /** 
+    /**
      * Update the name of the sample
      * @param name :: The name of the sample
      */
@@ -108,22 +104,13 @@ namespace Mantid
       return m_shape;
     }
 
-    /** Set the object that describes the sample shape. It is assumed that this is defined such
-     * that its centre is at [0,0,0]
+    /** Set the object that describes the sample shape. The object is defined within
+     * its own coordinate system
      * @param shape :: The object describing the shape
-     * @throw An std::invalid_argument error if the object does 
-     * not have a valid shape
      */
     void Sample::setShape(const Object & shape)
     {
-      if( shape.hasValidShape() )
-      {
-        m_shape = shape;
-      }
-      else
-      {
-        throw std::invalid_argument("Sample::setShape - Object has an invalid shape.");
-      }
+      m_shape = shape;
     }
 
     /** Return the material.
@@ -131,16 +118,7 @@ namespace Mantid
      */
     const Material & Sample::getMaterial() const
     {
-      return m_material;
-    }
-    
-    /**
-     * Set the type of material that this sample is composed from
-     * @param material :: A reference to the material object. It is copied into the sample.
-     */
-    void Sample::setMaterial(const Kernel::Material& material)
-    {
-      m_material = material;
+      return m_shape.material();
     }
 
     /**
@@ -159,7 +137,7 @@ namespace Mantid
 
     /**
      * Attach an environment onto this sample
-     * @param env :: A pointer to a created sample environment. This takes 
+     * @param env :: A pointer to a created sample environment. This takes
      * ownership of the object.
      */
     void Sample::setEnvironment(SampleEnvironment * env)
@@ -316,7 +294,7 @@ namespace Mantid
     {
       return m_samples.size()+1;
     }
-    
+
 
     /**
      * Adds a sample to the sample collection
@@ -340,7 +318,7 @@ namespace Mantid
       file->putAttr("version", 1);
       file->putAttr("shape_xml", m_shape.getShapeXML());
 
-      m_material.saveNexus(file, "material");
+      m_shape.material().saveNexus(file, "material");
       // Write out the other (indexes 1+) samples
       file->writeData("num_other_samples", int(m_samples.size()) );
       for (size_t i=0; i<m_samples.size(); i++)
@@ -400,8 +378,10 @@ namespace Mantid
           ShapeFactory shapeMaker;
           m_shape = *shapeMaker.createShape(shape_xml, false /*Don't wrap with <type> tag*/);
         }
+        Kernel::Material material;
+        material.loadNexus(file, "material");
+        m_shape.setMaterial(material);
 
-        m_material.loadNexus(file, "material");
         // Load other samples
         int num_other_samples;
         file->readData("num_other_samples", num_other_samples);
diff --git a/Code/Mantid/Framework/API/src/SampleEnvironment.cpp b/Code/Mantid/Framework/API/src/SampleEnvironment.cpp
index 04a1014d79a41f423e70b5ddb8206183d25e21e7..e797e30b97886319b140a9dd0321cd2159b26517 100644
--- a/Code/Mantid/Framework/API/src/SampleEnvironment.cpp
+++ b/Code/Mantid/Framework/API/src/SampleEnvironment.cpp
@@ -10,71 +10,47 @@ namespace Mantid
 {
   namespace API
   {
-    
-    using Geometry::IComponent;
-    using Geometry::IObjComponent;
-    using Kernel::V3D;
+    using Geometry::BoundingBox;
     using Geometry::Track;
+    using Kernel::Material;
+    using Kernel::V3D;
 
     //------------------------------------------------------------------------------
     // Public methods
     //------------------------------------------------------------------------------
-    
+
     /**
-     * Constructor specifying a name for the environment
+     * Constructor specifying a name for the environment. It is empty by default and
+     * required by various other users of it
      * @param name :: A name for the environment kit
      */
-    SampleEnvironment::SampleEnvironment(const std::string & name) : 
-      CompAssembly(name, NULL)
+    SampleEnvironment::SampleEnvironment(const std::string & name) :
+      m_name(name), m_elements()
     {
     }
 
     /**
-     * Copy constructor
-     * @param original :: The object whose state is to be copied.
+     * @return An axis-aligned BoundingBox object that encompasses the whole kit.
      */
-    SampleEnvironment::SampleEnvironment(const SampleEnvironment & original) : 
-      CompAssembly(original)
+    Geometry::BoundingBox SampleEnvironment::boundingBox() const
     {
+      BoundingBox box;
+      auto itrEnd = m_elements.end();
+      for(auto itr = m_elements.begin(); itr != itrEnd; ++itr)
+      {
+        box.grow(itr->getBoundingBox());
+      }
+      return box;
     }
 
     /**
-     * Clone the environment assembly
-     * @returns A pointer to the clone object
+     * @param element A shape + material object
      */
-    Geometry::IComponent* SampleEnvironment::clone() const
+    void SampleEnvironment::add(const Geometry::Object &element)
     {
-      return new SampleEnvironment(*this);
-    }
-    
-    /**
-     * Override the add method so that we can only add physical components that
-     * have a defined shape, i.e. an ObjComponent with a valid shape
-     * @param comp :: A pointer to the phyiscal component. This object will take 
-     * ownership of the pointer
-     * @returns The number of items within the assembly, after this component has 
-     * been added
-     */
-    int SampleEnvironment::add(IComponent * comp)
-    {
-      // Check if this is a component with a shape
-      IObjComponent * physicalComp = dynamic_cast<IObjComponent*>(comp);
-      if( !physicalComp )
-      {
-	throw std::invalid_argument("CompAssembly::add - Invalid component, it must implement "
-				    "the IObjComponent interface");
-      }
-      if( physicalComp->shape() && physicalComp->shape()->hasValidShape() )
-      {
-	// Accept this component
-	return CompAssembly::add(comp);
-      }
-      else
-      {
-	throw std::invalid_argument("CompAssembly::add - Component does not have a defined shape.");
-      }
+      m_elements.push_back(element);
     }
-    
+
     /**
      * Is the point given a valid point within the environment
      * @param point :: Is the point valid within the environment
@@ -82,36 +58,31 @@ namespace Mantid
      */
     bool SampleEnvironment::isValid(const V3D & point) const
     {
-      const int numElements(nelements());
-      for(int i = 0; i < numElements; ++i )
+      auto itrEnd = m_elements.end();
+      for(auto itr = m_elements.begin(); itr != itrEnd; ++itr)
       {
-	boost::shared_ptr<IObjComponent> part = boost::dynamic_pointer_cast<IObjComponent>(getChild(i));
-	if( part && part->isValid(point) )
-	{
-	  return true;
-	}
+        if( itr->isValid(point) )
+        {
+          return true;
+        }
       }
       return false;
     }
-    
+
     /**
-     * Update the given track with intersections within the environment 
+     * Update the given track with intersections within the environment
      * @param track :: The track is updated with an intersection with the
      *        environment
      */
     void SampleEnvironment::interceptSurfaces(Track & track) const
     {
-      const int numElements(nelements());
-      for(int i = 0; i < numElements; ++i )
+      auto itrEnd = m_elements.end();
+      for(auto itr = m_elements.begin(); itr != itrEnd; ++itr)
       {
-	boost::shared_ptr<IObjComponent> part = boost::dynamic_pointer_cast<IObjComponent>(getChild(i));
-	if( part )
-	{
-	  part->interceptSurface(track);
-	}
-      }      
-    } 
-    
+        itr->interceptSurface(track);
+      }
+    }
+
   }
 
 }
diff --git a/Code/Mantid/Framework/API/src/SampleShapeValidator.cpp b/Code/Mantid/Framework/API/src/SampleShapeValidator.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..21ef26c0e49986efd2f8e32dd04c72c0d5c6e309
--- /dev/null
+++ b/Code/Mantid/Framework/API/src/SampleShapeValidator.cpp
@@ -0,0 +1,50 @@
+//-----------------------------------------------------------------------------
+// Includes
+//-----------------------------------------------------------------------------
+#include "MantidAPI/SampleShapeValidator.h"
+#include "MantidGeometry/Objects/Object.h"
+
+namespace Mantid
+{
+  namespace API
+  {
+    //-----------------------------------------------------------------------------
+    // Public methods
+    //-----------------------------------------------------------------------------
+
+    /// @return A string identifier for the type of validator
+    std::string SampleShapeValidator::getType() const
+    {
+      return "SampleShape";
+    }
+
+    /// @return A copy of the validator as a new object
+    Kernel::IValidator_sptr SampleShapeValidator::clone() const
+    {
+      return boost::make_shared<SampleShapeValidator>();
+    }
+
+    //-----------------------------------------------------------------------------
+    // Private methods
+    //-----------------------------------------------------------------------------
+
+    /**
+     * Checks that the workspace has a valid sample shape defined
+     *  @param value :: The workspace to test
+     *  @return A user level description if a problem exists or ""
+     */
+    std::string SampleShapeValidator::checkValidity( const boost::shared_ptr<ExperimentInfo>& value ) const
+    {
+      const auto & sampleShape = value->sample().getShape();
+      if(sampleShape.hasValidShape())
+      {
+        return "";
+      }
+      else
+      {
+        return "Invalid or no shape defined for sample";
+      }
+    }
+
+  } // namespace API
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/API/test/MatrixWorkspaceTest.h b/Code/Mantid/Framework/API/test/MatrixWorkspaceTest.h
index e7bbb7f5a1bd0e09405487249509a4089ddc4626..d7d490e1c59ca78c56e42b64d3a00317ee54c9e6 100644
--- a/Code/Mantid/Framework/API/test/MatrixWorkspaceTest.h
+++ b/Code/Mantid/Framework/API/test/MatrixWorkspaceTest.h
@@ -700,6 +700,47 @@ public:
     TS_ASSERT_DELTA(ws.getSignalAtCoord(coords, Mantid::API::NoNormalization), 1.0, 1e-5);
   }
 
+  void test_getCoordAtSignal_regression()
+  {
+    /*
+    Having more spectrum numbers (acutally vertical axis increments) than x bins in VolumeNormalisation mode
+    should not cause any issues.
+    */
+    WorkspaceTester ws;
+    const int nVertical = 4;
+
+    const int nBins = 2;
+    const int nYValues = 1;
+    ws.initialize(nVertical, nBins, nYValues);
+    NumericAxis* verticalAxis = new NumericAxis(nVertical);
+    for(int i = 0; i < nVertical; ++i)
+    {
+      for(int j = 0; j < nBins; ++j)
+      {
+        if( j < nYValues )
+        {
+          ws.dataY(i)[j] = 1.0; // All y values are 1.
+          ws.dataE(i)[j] = j;
+        }
+        ws.dataX(i)[j] = j; // x increments by 1
+      }
+      verticalAxis->setValue(i, double(i)); // Vertical axis increments by 1.
+    }
+    ws.replaceAxis(1, verticalAxis);
+    // Signal is always 1 and volume of each box is 1. Therefore normalized signal values by volume should always be 1.
+
+    // Test at the top right.
+    coord_t coord_top_right[2] = {static_cast<float>(ws.readX(0).back()),  float(0)};
+    signal_t value = 0;
+    TS_ASSERT_THROWS_NOTHING(value = ws.getSignalAtCoord(coord_top_right, VolumeNormalization));
+    TS_ASSERT_EQUALS(1.0, value);
+
+    // Test at another location just to be sure.
+    coord_t coord_bottom_left[2] = {static_cast<float>(ws.readX(nVertical-1)[1]),  float(nVertical-1) };
+    TS_ASSERT_THROWS_NOTHING(value = ws.getSignalAtCoord(coord_bottom_left, VolumeNormalization));
+    TS_ASSERT_EQUALS(1.0, value);
+  }
+
   void test_setMDMasking()
   {
     WorkspaceTester ws;
@@ -800,7 +841,478 @@ public:
     TSM_ASSERT( "Monitor workspace not successfully reset", ! ws->monitorWorkspace() )
   }
 
+  void test_getXIndex()
+  {
+    WorkspaceTester ws;
+    ws.init(1,4,3);
+    auto &X = ws.dataX(0);
+    X[0] = 1.0;
+    X[1] = 2.0;
+    X[2] = 3.0;
+    X[3] = 4.0;
+
+    auto ip = ws.getXIndex( 0, 0.0, true );
+    TS_ASSERT_EQUALS( ip.first, 0 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 0.0, false );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 1.0, true );
+    TS_ASSERT_EQUALS( ip.first, 0 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 1.0, false );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 5.0, true );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 5.0, false );
+    TS_ASSERT_EQUALS( ip.first, 3 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 4.0, true );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 4.0, false );
+    TS_ASSERT_EQUALS( ip.first, 3 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 5.0, true, 5 );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 5.0, false, 5 );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 3.0, true, 5 );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 3.0, false, 5 );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 4.0, true, 5 );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 4.0, false, 5 );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 4.0, true, 4 );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 4.0, false, 4 );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 4.0, true, 3 );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 4.0, false, 3 );
+    TS_ASSERT_EQUALS( ip.first, 3 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 4.0, true );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 4.0, false );
+    TS_ASSERT_EQUALS( ip.first, 3 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 2.0, true, 3 );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 2.0, false, 3 );
+    TS_ASSERT_EQUALS( ip.first, 3 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 1.0, true, 3 );
+    TS_ASSERT_EQUALS( ip.first, 4 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 1.0, false, 3 );
+    TS_ASSERT_EQUALS( ip.first, 3 );
+    TS_ASSERT_DELTA( ip.second, 0.0, 1e-15 );
+
+    ip = ws.getXIndex( 0, 2.1, true );
+    TS_ASSERT_EQUALS( ip.first, 1 );
+    TS_ASSERT_DELTA( ip.second, 0.1, 1e-15 );
+
+    ip = ws.getXIndex( 0, 2.1, false );
+    TS_ASSERT_EQUALS( ip.first, 2 );
+    TS_ASSERT_DELTA( ip.second, 0.9, 1e-15 );
+  }
+
+  void test_getImage_0_width()
+  {
+    WorkspaceTester ws;
+    ws.init(9,2,1);
+    auto &X = ws.dataX(0);
+    X[0] = 1.0;
+    X[1] = 2.0;
+    const size_t start = 0;
+    const size_t stop  = 8;
+    size_t width = 0;
+    TS_ASSERT_THROWS( ws.getImageY(start,stop,width), std::runtime_error );
+    width = 3;
+    TS_ASSERT_THROWS_NOTHING( ws.getImageY(start,stop,width) );
+  }
+
+  void test_getImage_wrong_start()
+  {
+    WorkspaceTester ws;
+    ws.init(9,2,1);
+    auto &X = ws.dataX(0);
+    X[0] = 1.0;
+    X[1] = 2.0;
+    size_t start = 10;
+    size_t stop  = 8;
+    size_t width = 3;
+    TS_ASSERT_THROWS( ws.getImageY(start,stop,width), std::runtime_error );
+    start = 9;
+    TS_ASSERT_THROWS( ws.getImageY(start,stop,width), std::runtime_error );
+    start = 0;
+    TS_ASSERT_THROWS_NOTHING( ws.getImageY(start,stop,width) );
+  }
+
+  void test_getImage_wrong_stop()
+  {
+    WorkspaceTester ws;
+    ws.init(9,2,1);
+    auto &X = ws.dataX(0);
+    X[0] = 1.0;
+    X[1] = 2.0;
+    size_t start = 0;
+    size_t stop  = 18;
+    size_t width = 3;
+    TS_ASSERT_THROWS( ws.getImageY(start,stop,width), std::runtime_error );
+    stop = 9;
+    TS_ASSERT_THROWS( ws.getImageY(start,stop,width), std::runtime_error );
+    stop = 8;
+    TS_ASSERT_THROWS_NOTHING( ws.getImageY(start,stop,width) );
+  }
+
+  void test_getImage_empty_set()
+  {
+    WorkspaceTester ws;
+    ws.init(9,2,1);
+    auto &X = ws.dataX(0);
+    X[0] = 1.0;
+    X[1] = 2.0;
+    size_t start = 1;
+    size_t stop  = 0;
+    size_t width = 1;
+    TS_ASSERT_THROWS( ws.getImageY(start,stop,width), std::runtime_error );
+    stop = 1;
+    TS_ASSERT_THROWS_NOTHING( ws.getImageY(start,stop,width) );
+  }
+
+  void test_getImage_non_rectangular()
+  {
+    WorkspaceTester ws;
+    ws.init(9,2,1);
+    auto &X = ws.dataX(0);
+    X[0] = 1.0;
+    X[1] = 2.0;
+    size_t start = 0;
+    size_t stop  = 7;
+    size_t width = 3;
+    TS_ASSERT_THROWS( ws.getImageY(start,stop,width), std::runtime_error );
+  }
+
+  void test_getImage_wrong_indexStart()
+  {
+    WorkspaceTester ws;
+    ws.init(9,2,1);
+    auto &X = ws.dataX(0);
+    X[0] = 1.0;
+    X[1] = 2.0;
+    const size_t start = 0;
+    const size_t stop  = 8;
+    const size_t width = 3;
+    double startX = 3;
+    double endX = 4;
+    TS_ASSERT_THROWS( ws.getImageY(start,stop,width,startX,endX), std::runtime_error );
+
+    WorkspaceTester wsh;
+    wsh.init(9,1,1);
+    startX = 2;
+    endX = 2;
+    TS_ASSERT_THROWS( wsh.getImageY(start,stop,width,startX,endX), std::runtime_error );
+  }
+
+  void test_getImage_wrong_indexEnd()
+  {
+    WorkspaceTester ws;
+    ws.init(9,2,1);
+    auto &X = ws.dataX(0);
+    X[0] = 1.0;
+    X[1] = 2.0;
+    const size_t start = 0;
+    const size_t stop  = 8;
+    const size_t width = 3;
+    double startX = 1.0;
+    double endX = 0.0;
+    TS_ASSERT_THROWS( ws.getImageY(start,stop,width,startX,endX), std::runtime_error );
+
+    WorkspaceTester wsh;
+    wsh.init(9,2,2);
+    auto &X1 = ws.dataX(0);
+    X1[0] = 1.0;
+    X1[1] = 2.0;
+    startX = 1.0;
+    endX = 0.0;
+    TS_ASSERT_THROWS( wsh.getImageY(start,stop,width,startX,endX), std::runtime_error );
+  }
+
+  void test_getImage_single_bin_histo()
+  {
+    WorkspaceTester ws;
+    ws.init(9,2,1);
+    auto &X = ws.dataX(0);
+    X[0] = 1.0;
+    X[1] = 2.0;
+    for(size_t i = 0; i < ws.getNumberHistograms(); ++i)
+    {
+      ws.dataY(i)[0] = static_cast<double>( i + 1 );
+    }
+    const size_t start = 0;
+    const size_t stop  = 8;
+    const size_t width = 3;
+    double startX = 0;
+    double endX = 3;
+    Mantid::API::MantidImage_sptr image;
+    TS_ASSERT_THROWS_NOTHING( image = ws.getImageY(start,stop,width,startX,endX) );
+    if ( !image ) return;
+    TS_ASSERT_EQUALS( image->size(), 3 );
+    TS_ASSERT_EQUALS( (*image)[0].size(), 3 );
+    TS_ASSERT_EQUALS( (*image)[1].size(), 3 );
+    TS_ASSERT_EQUALS( (*image)[2].size(), 3 );
+
+    TS_ASSERT_EQUALS( (*image)[0][0], 1 );
+    TS_ASSERT_EQUALS( (*image)[0][1], 2 );
+    TS_ASSERT_EQUALS( (*image)[0][2], 3 );
+    TS_ASSERT_EQUALS( (*image)[1][0], 4 );
+    TS_ASSERT_EQUALS( (*image)[1][1], 5 );
+    TS_ASSERT_EQUALS( (*image)[1][2], 6 );
+    TS_ASSERT_EQUALS( (*image)[2][0], 7 );
+    TS_ASSERT_EQUALS( (*image)[2][1], 8 );
+    TS_ASSERT_EQUALS( (*image)[2][2], 9 );
+
+  }
+
+  void test_getImage_single_bin_points()
+  {
+    WorkspaceTester ws;
+    ws.init(9,1,1);
+    auto &X = ws.dataX(0);
+    X[0] = 1.0;
+    for(size_t i = 0; i < ws.getNumberHistograms(); ++i)
+    {
+      ws.dataY(i)[0] = static_cast<double>( i + 1 );
+    }
+    const size_t start = 0;
+    const size_t stop  = 8;
+    const size_t width = 3;
+    double startX = 1;
+    double endX = 1;
+    Mantid::API::MantidImage_sptr image;
+    TS_ASSERT_THROWS_NOTHING( image = ws.getImageY(start,stop,width,startX,endX) );
+    if ( !image ) return;
+    TS_ASSERT_EQUALS( image->size(), 3 );
+    TS_ASSERT_EQUALS( (*image)[0].size(), 3 );
+    TS_ASSERT_EQUALS( (*image)[1].size(), 3 );
+    TS_ASSERT_EQUALS( (*image)[2].size(), 3 );
+
+    TS_ASSERT_EQUALS( (*image)[0][0], 1 );
+    TS_ASSERT_EQUALS( (*image)[0][1], 2 );
+    TS_ASSERT_EQUALS( (*image)[0][2], 3 );
+    TS_ASSERT_EQUALS( (*image)[1][0], 4 );
+    TS_ASSERT_EQUALS( (*image)[1][1], 5 );
+    TS_ASSERT_EQUALS( (*image)[1][2], 6 );
+    TS_ASSERT_EQUALS( (*image)[2][0], 7 );
+    TS_ASSERT_EQUALS( (*image)[2][1], 8 );
+    TS_ASSERT_EQUALS( (*image)[2][2], 9 );
+
+  }
+
+  void test_getImage_multi_bin_histo()
+  {
+    WorkspaceTester ws;
+    ws.init(9,4,3);
+    auto &X = ws.dataX(0);
+    X[0] = 1.0;
+    X[1] = 2.0;
+    X[2] = 3.0;
+    X[3] = 4.0;
+    for(size_t i = 0; i < ws.getNumberHistograms(); ++i)
+    {
+      ws.dataY(i)[0] = static_cast<double>( i + 1 );
+      ws.dataY(i)[1] = static_cast<double>( i + 2 );
+      ws.dataY(i)[2] = static_cast<double>( i + 3 );
+    }
+    const size_t start = 0;
+    const size_t stop  = 8;
+    const size_t width = 3;
+    Mantid::API::MantidImage_sptr image;
+    TS_ASSERT_THROWS_NOTHING( image = ws.getImageY(start,stop,width) );
+    if ( !image ) return;
+    TS_ASSERT_EQUALS( image->size(), 3 );
+    TS_ASSERT_EQUALS( (*image)[0].size(), 3 );
+    TS_ASSERT_EQUALS( (*image)[1].size(), 3 );
+    TS_ASSERT_EQUALS( (*image)[2].size(), 3 );
+
+    TS_ASSERT_EQUALS( (*image)[0][0], 6 );
+    TS_ASSERT_EQUALS( (*image)[0][1], 9 );
+    TS_ASSERT_EQUALS( (*image)[0][2], 12 );
+    TS_ASSERT_EQUALS( (*image)[1][0], 15 );
+    TS_ASSERT_EQUALS( (*image)[1][1], 18 );
+    TS_ASSERT_EQUALS( (*image)[1][2], 21 );
+    TS_ASSERT_EQUALS( (*image)[2][0], 24 );
+    TS_ASSERT_EQUALS( (*image)[2][1], 27 );
+    TS_ASSERT_EQUALS( (*image)[2][2], 30 );
+
+  }
+
+  void test_getImage_multi_bin_points()
+  {
+    WorkspaceTester ws;
+    ws.init(9,3,3);
+    auto &X = ws.dataX(0);
+    X[0] = 1.0;
+    X[1] = 2.0;
+    X[2] = 3.0;
+    for(size_t i = 0; i < ws.getNumberHistograms(); ++i)
+    {
+      ws.dataY(i)[0] = static_cast<double>( i + 1 );
+      ws.dataY(i)[1] = static_cast<double>( i + 2 );
+      ws.dataY(i)[2] = static_cast<double>( i + 3 );
+    }
+    const size_t start = 0;
+    const size_t stop  = 8;
+    const size_t width = 3;
+    Mantid::API::MantidImage_sptr image;
+    TS_ASSERT_THROWS_NOTHING( image = ws.getImageY(start,stop,width) );
+    if ( !image ) return;
+    TS_ASSERT_EQUALS( image->size(), 3 );
+    TS_ASSERT_EQUALS( (*image)[0].size(), 3 );
+    TS_ASSERT_EQUALS( (*image)[1].size(), 3 );
+    TS_ASSERT_EQUALS( (*image)[2].size(), 3 );
+
+    TS_ASSERT_EQUALS( (*image)[0][0], 6 );
+    TS_ASSERT_EQUALS( (*image)[0][1], 9 );
+    TS_ASSERT_EQUALS( (*image)[0][2], 12 );
+    TS_ASSERT_EQUALS( (*image)[1][0], 15 );
+    TS_ASSERT_EQUALS( (*image)[1][1], 18 );
+    TS_ASSERT_EQUALS( (*image)[1][2], 21 );
+    TS_ASSERT_EQUALS( (*image)[2][0], 24 );
+    TS_ASSERT_EQUALS( (*image)[2][1], 27 );
+    TS_ASSERT_EQUALS( (*image)[2][2], 30 );
+
+  }
+
+  void test_setImage_too_large()
+  {
+    auto image = createImage(2,3);
+    WorkspaceTester ws;
+    ws.init(2,2,1);
+    TS_ASSERT_THROWS( ws.setImageY( *image ), std::runtime_error );
+  }
+
+  void test_setImage_not_single_bin()
+  {
+    auto image = createImage(2,3);
+    WorkspaceTester ws;
+    ws.init(20,3,2);
+    TS_ASSERT_THROWS( ws.setImageY( *image ), std::runtime_error );
+  }
+
+  void test_setImageY()
+  {
+    auto image = createImage(2,3);
+    WorkspaceTester ws;
+    ws.init(6,2,1);
+    TS_ASSERT_THROWS_NOTHING( ws.setImageY( *image ) );
+    TS_ASSERT_EQUALS( ws.readY(0)[0], 1 );
+    TS_ASSERT_EQUALS( ws.readY(1)[0], 2 );
+    TS_ASSERT_EQUALS( ws.readY(2)[0], 3 );
+    TS_ASSERT_EQUALS( ws.readY(3)[0], 4 );
+    TS_ASSERT_EQUALS( ws.readY(4)[0], 5 );
+    TS_ASSERT_EQUALS( ws.readY(5)[0], 6 );
+  }
+
+  void test_setImageE()
+  {
+    auto image = createImage(2,3);
+    WorkspaceTester ws;
+    ws.init(6,2,1);
+    TS_ASSERT_THROWS_NOTHING( ws.setImageE( *image ) );
+    TS_ASSERT_EQUALS( ws.readE(0)[0], 1 );
+    TS_ASSERT_EQUALS( ws.readE(1)[0], 2 );
+    TS_ASSERT_EQUALS( ws.readE(2)[0], 3 );
+    TS_ASSERT_EQUALS( ws.readE(3)[0], 4 );
+    TS_ASSERT_EQUALS( ws.readE(4)[0], 5 );
+    TS_ASSERT_EQUALS( ws.readE(5)[0], 6 );
+  }
+
+  void test_setImageY_start()
+  {
+    auto image = createImage(2,3);
+    WorkspaceTester ws;
+    ws.init(9,2,1);
+    TS_ASSERT_THROWS_NOTHING( ws.setImageY( *image, 3 ) );
+    TS_ASSERT_EQUALS( ws.readY(3)[0], 1 );
+    TS_ASSERT_EQUALS( ws.readY(4)[0], 2 );
+    TS_ASSERT_EQUALS( ws.readY(5)[0], 3 );
+    TS_ASSERT_EQUALS( ws.readY(6)[0], 4 );
+    TS_ASSERT_EQUALS( ws.readY(7)[0], 5 );
+    TS_ASSERT_EQUALS( ws.readY(8)[0], 6 );
+  }
+
+  void test_setImageE_start()
+  {
+    auto image = createImage(2,3);
+    WorkspaceTester ws;
+    ws.init(9,2,1);
+    TS_ASSERT_THROWS_NOTHING( ws.setImageE( *image, 2 ) );
+    TS_ASSERT_EQUALS( ws.readE(2)[0], 1 );
+    TS_ASSERT_EQUALS( ws.readE(3)[0], 2 );
+    TS_ASSERT_EQUALS( ws.readE(4)[0], 3 );
+    TS_ASSERT_EQUALS( ws.readE(5)[0], 4 );
+    TS_ASSERT_EQUALS( ws.readE(6)[0], 5 );
+    TS_ASSERT_EQUALS( ws.readE(7)[0], 6 );
+  }
+
 private:
+
+  Mantid::API::MantidImage_sptr createImage(size_t width, size_t height)
+  {
+    auto image = new Mantid::API::MantidImage(height);
+    double value = 1.0;
+    for(auto row = image->begin(); row != image->end(); ++row)
+    {
+      row->resize( width );
+      for(auto pixel = row->begin(); pixel != row->end(); ++pixel, value += 1.0)
+      {
+        *pixel = value;
+      }
+    }
+    return Mantid::API::MantidImage_sptr( image );
+  }
+
   boost::shared_ptr<MatrixWorkspace> ws;
 
 };
diff --git a/Code/Mantid/Framework/API/test/SampleEnvironmentTest.h b/Code/Mantid/Framework/API/test/SampleEnvironmentTest.h
index c4dd8bb0ce5d6750a86e8dfe8a23337fdc718eac..2b8806e2cbddac7347371aa9f46f326482017387 100644
--- a/Code/Mantid/Framework/API/test/SampleEnvironmentTest.h
+++ b/Code/Mantid/Framework/API/test/SampleEnvironmentTest.h
@@ -2,76 +2,96 @@
 #define TESTSAMPLEENVIRONMENT_H_
 
 #include "MantidAPI/SampleEnvironment.h"
-#include "MantidGeometry/Instrument/Component.h"
-#include "MantidGeometry/Instrument/ObjComponent.h"
-#include "MantidGeometry/Objects/Object.h"
-#include "MantidGeometry/Objects/ShapeFactory.h"
-#include "MantidKernel/NeutronAtom.h"
 #include "MantidKernel/V3D.h"
+#include "MantidTestHelpers/ComponentCreationHelper.h"
+
+#include <boost/make_shared.hpp>
 #include <cxxtest/TestSuite.h>
 
+
 using Mantid::API::SampleEnvironment;
-using namespace Mantid::PhysicalConstants;
-using namespace Mantid::Geometry;
-using namespace Mantid::Kernel;
 
 class SampleEnvironmentTest : public CxxTest::TestSuite
 {
-
 public:
-  
-  void test_That_Constructor_Giving_Name_Creates_The_Correct_Name()
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static SampleEnvironmentTest *createSuite() { return new SampleEnvironmentTest(); }
+  static void destroySuite( SampleEnvironmentTest *suite ) { delete suite; }
+
+  void testThatConstructorGivingNameCreatesTheCorrectName()
   {
     SampleEnvironment kit("TestKit");
-    TS_ASSERT_EQUALS(kit.getName(), "TestKit");
+    TS_ASSERT_EQUALS(kit.name(), "TestKit");
   }
 
-  void test_That_Type_Is_SampleEnvironment()
+  void testAddingElementIncreasesSizeByOne()
   {
-    SampleEnvironment kit("kit1");
-    TS_ASSERT_EQUALS(kit.type(), "SampleEnvironment");
+    using namespace Mantid::Geometry;
+    using namespace Mantid::Kernel;
+    SampleEnvironment kit("TestKit");
+
+    TS_ASSERT_EQUALS(0, kit.nelements());
+    auto shape = ComponentCreationHelper::createSphere(1.0);
+    TS_ASSERT_THROWS_NOTHING(kit.add(*shape));
+    TS_ASSERT_EQUALS(1, kit.nelements());
+
+    TS_ASSERT_THROWS_NOTHING(kit.add(*shape));
+    TS_ASSERT_EQUALS(2, kit.nelements());
   }
 
-  void test_That_Adding_A_Component_Without_A_Shape_Throws_Invalid_Argument()
+  void testIsValidTestsAllElements()
   {
-    Component part("part");
-    SampleEnvironment kit("TestKit");
-    TS_ASSERT_THROWS(kit.add(&part), std::invalid_argument);
-  }
+    using namespace Mantid::Geometry;
+    using namespace Mantid::Kernel;
 
+    auto kit = createTestKit();
 
-  //--------------------------------------------------------------------------------------------
-  Object_sptr createCappedCylinder(double radius, double height, const V3D & baseCentre, const V3D & axis, const std::string & id)
-  {
-    std::ostringstream xml;
-    xml << "<cylinder id=\"" << id << "\">"
-      << "<centre-of-bottom-base x=\"" << baseCentre.X() << "\" y=\"" << baseCentre.Y() << "\" z=\"" << baseCentre.Z() << "\"/>"
-      << "<axis x=\"" << axis.X() << "\" y=\"" << axis.Y() << "\" z=\"" << axis.Z() << "\"/>"
-      << "<radius val=\"" << radius << "\" />"
-      << "<height val=\"" << height << "\" />"
-      << "</cylinder>";
-
-    ShapeFactory shapeMaker;
-    return shapeMaker.createShape(xml.str());
+    V3D pt(0.1,0.0,0.0); //inside first, outside second
+    TS_ASSERT(kit->isValid(pt));
+    pt = V3D(0.3,0.0,0.0); //outside first, inside second
+    TS_ASSERT(kit->isValid(pt));
   }
-  ObjComponent * createSingleObjectComponent()
+
+  void testTrackIntersectionTestsAllElements()
   {
-    Object_sptr pixelShape = createCappedCylinder(0.5, 1.5, V3D(0.0,0.0,0.0), V3D(0.,1.0,0.), "tube");
-    return new ObjComponent("pixel", pixelShape);
+    using namespace Mantid::Geometry;
+    using namespace Mantid::Kernel;
+
+    auto kit = createTestKit();
+
+    Track ray(V3D(), V3D(1.0,0.0,0.0));
+    TS_ASSERT_THROWS_NOTHING(kit->interceptSurfaces(ray));
+    TS_ASSERT_EQUALS(2, ray.count());
   }
 
-  void test_That_Adding_Valid_Components_Gives_The_Correct_Number_Of_Elements_In_The_Environment()
+  void testBoundingBoxEncompassesWholeObject()
   {
-    ObjComponent *physicalObject = createSingleObjectComponent();
-    SampleEnvironment kit("TestKit");
-    
-    int numElements(0);
-    TS_ASSERT_THROWS_NOTHING(numElements = kit.add(physicalObject));
-    TS_ASSERT_EQUALS(numElements, 1);
+    using namespace Mantid::Geometry;
+    using namespace Mantid::Kernel;
+
+    auto kit = createTestKit();
+    auto bbox = kit->boundingBox();
+
+    auto widths = bbox.width();
+    TS_ASSERT_DELTA(0.45, widths.X(), 1e-12);
+    TS_ASSERT_DELTA(0.2, widths.Y(), 1e-12);
+    TS_ASSERT_DELTA(0.2, widths.Z(), 1e-12);
   }
 
+private:
+
+  boost::shared_ptr<SampleEnvironment> createTestKit()
+  {
+    using namespace Mantid::Geometry;
+    using namespace Mantid::Kernel;
 
+    auto kit = boost::make_shared<SampleEnvironment>("TestKit");
+    kit->add(*ComponentCreationHelper::createSphere(0.1)); //origin
+    kit->add(*ComponentCreationHelper::createSphere(0.1, V3D(0.25,0.0,0.0))); //shifted in +x
 
+    return kit;
+  }
 };
 
 
diff --git a/Code/Mantid/Framework/API/test/SampleShapeValidatorTest.h b/Code/Mantid/Framework/API/test/SampleShapeValidatorTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..e61bcef54ef44a810b6080980aefaae11462372b
--- /dev/null
+++ b/Code/Mantid/Framework/API/test/SampleShapeValidatorTest.h
@@ -0,0 +1,46 @@
+#ifndef MANTID_API_SAMPLESHAPEVALIDATORTEST_H_
+#define MANTID_API_SAMPLESHAPEVALIDATORTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidAPI/SampleShapeValidator.h"
+#include "MantidTestHelpers/ComponentCreationHelper.h"
+#include "MantidTestHelpers/FakeObjects.h"
+
+#include "boost/make_shared.hpp"
+
+using Mantid::API::SampleShapeValidator;
+
+class SampleShapeValidatorTest : public CxxTest::TestSuite
+{
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static SampleShapeValidatorTest *createSuite() { return new SampleShapeValidatorTest(); }
+  static void destroySuite( SampleShapeValidatorTest *suite ) { delete suite; }
+
+  void test_validator_passes_for_workspace_with_defined_sample_shape()
+  {
+    auto fakeWS = boost::make_shared<WorkspaceTester>();
+    // Add a sample shape
+    auto sphere = ComponentCreationHelper::createSphere(1.0, V3D(), "sphere");
+    fakeWS->mutableSample().setShape(*sphere);
+
+    auto sampleValidator = boost::make_shared<SampleShapeValidator>();
+    TS_ASSERT_EQUALS( sampleValidator->isValid(fakeWS), "" );
+  }
+
+  void test_validator_throws_error_for_workspace_without_shape()
+  {
+    auto fakeWS = boost::make_shared<WorkspaceTester>();
+
+    auto sampleValidator = boost::make_shared<SampleShapeValidator>();
+    TS_ASSERT_EQUALS( sampleValidator->isValid(fakeWS),
+                      "Invalid or no shape defined for sample" );
+  }
+
+
+};
+
+
+#endif /* MANTID_API_SAMPLESHAPEVALIDATORTEST_H_ */
diff --git a/Code/Mantid/Framework/API/test/SampleTest.h b/Code/Mantid/Framework/API/test/SampleTest.h
index ea38133089d0e578c48f0c54957a9b342c480df4..7e6de0f0a656365e8eae27211dba95f359c22ae7 100644
--- a/Code/Mantid/Framework/API/test/SampleTest.h
+++ b/Code/Mantid/Framework/API/test/SampleTest.h
@@ -4,13 +4,12 @@
 #include "MantidAPI/Sample.h"
 #include "MantidAPI/SampleEnvironment.h"
 #include "MantidGeometry/Crystal/OrientedLattice.h"
-#include "MantidGeometry/Instrument/ObjComponent.h"
-#include "MantidGeometry/Objects/Object.h"
-#include "MantidGeometry/Objects/ShapeFactory.h"
 #include "MantidKernel/Exception.h"
-#include <cxxtest/TestSuite.h>
+#include "MantidTestHelpers/ComponentCreationHelper.h"
 #include "MantidTestHelpers/NexusTestHelper.h"
 
+#include <cxxtest/TestSuite.h>
+
 using namespace Mantid;
 using namespace Mantid::Kernel;
 using namespace Mantid::Geometry;
@@ -29,39 +28,23 @@ public:
   }
 
   //--------------------------------------------------------------------------------------------
-  Object_sptr createCappedCylinder(double radius, double height, const V3D & baseCentre, const V3D & axis, const std::string & id)
-  {
-    std::ostringstream xml;
-    xml << "<cylinder id=\"" << id << "\">"
-      << "<centre-of-bottom-base x=\"" << baseCentre.X() << "\" y=\"" << baseCentre.Y() << "\" z=\"" << baseCentre.Z() << "\"/>"
-      << "<axis x=\"" << axis.X() << "\" y=\"" << axis.Y() << "\" z=\"" << axis.Z() << "\"/>"
-      << "<radius val=\"" << radius << "\" />"
-      << "<height val=\"" << height << "\" />"  << "</cylinder>";
-    ShapeFactory shapeMaker;
-    return shapeMaker.createShape(xml.str());
-  }
-  ObjComponent * createSingleObjectComponent()
-  {
-    Object_sptr pixelShape = createCappedCylinder(0.5, 1.5, V3D(0.0,0.0,0.0), V3D(0.,1.0,0.), "tube");
-    return new ObjComponent("pixel", pixelShape);
-  }
 
   void testShape()
   {
-    Object_sptr shape_sptr = 
-      createCappedCylinder(0.0127, 1.0, V3D(), V3D(0.0, 1.0, 0.0), "cyl");
+    Object_sptr shape_sptr = \
+      ComponentCreationHelper::createCappedCylinder(0.0127, 1.0, V3D(), V3D(0.0, 1.0, 0.0), "cyl");
     Sample sample;
     TS_ASSERT_THROWS_NOTHING(sample.setShape(*shape_sptr))
     const Object & sampleShape = sample.getShape();
     TS_ASSERT_EQUALS(shape_sptr->getName(), sampleShape.getName());
   }
 
-  void test_That_An_Setting_An_Invalid_Shape_Throws_An_Invalid_Argument()
+  void test_Setting_Default_Shape_Is_Accepted()
   {
     Sample sample;
     Object object;
     TS_ASSERT_EQUALS(object.hasValidShape(), false);
-    TS_ASSERT_THROWS(sample.setShape(object), std::invalid_argument);
+    TS_ASSERT_THROWS_NOTHING(sample.setShape(object));
   }
 
   void test_That_Requests_For_An_Undefined_Environment_Throw()
@@ -75,14 +58,14 @@ public:
     Sample sample;
     const std::string envName("TestKit");
     SampleEnvironment *kit = new SampleEnvironment(envName);
-    kit->add(createSingleObjectComponent());
-    
+    kit->add(Object());
+
     TS_ASSERT_THROWS_NOTHING(sample.setEnvironment(kit));
-    
+
     const SampleEnvironment & sampleKit = sample.getEnvironment();
     // Test that this references the correct object
     TS_ASSERT_EQUALS(&sampleKit, kit);
-    TS_ASSERT_EQUALS(sampleKit.getName(), envName);
+    TS_ASSERT_EQUALS(sampleKit.name(), envName);
     TS_ASSERT_EQUALS(sampleKit.nelements(), 1);
   }
 
@@ -229,7 +212,9 @@ public:
   {
     Material vanBlock("vanBlock", Mantid::PhysicalConstants::getNeutronAtom(23, 0), 0.072);
     Sample sample;
-    sample.setMaterial(vanBlock);
+    Object shape;
+    shape.setMaterial(vanBlock);
+    sample.setShape(shape);
 
     const Material& mat = sample.getMaterial();
     const double lambda(2.1);
@@ -261,7 +246,7 @@ public:
     sample.setName("test name for test_Multiple_Sample");
     boost::shared_ptr<Sample> sample2 = boost::shared_ptr<Sample>(new Sample());
     sample2->setName("test name for test_Multiple_Sample - 2");
-    
+
     TS_ASSERT_EQUALS(sample.size(),1);
     sample.addSample(sample2);
     TS_ASSERT_EQUALS(sample.size(),2);
@@ -274,7 +259,7 @@ public:
       TS_ASSERT(sample[1].getName()==sample2->getName());
       TS_ASSERT(sample[2].getName()==sample2->getName());
     );
-    
+
     TS_ASSERT_THROWS_ANYTHING(Sample& sampleRef = sample[3]; (void) sampleRef; );
   }
 
@@ -283,7 +268,8 @@ public:
     NexusTestHelper th(true);
     th.createFile("SampleTest.nxs");
 
-    Object_sptr shape_sptr = createCappedCylinder(0.0127, 1.0, V3D(), V3D(0.0, 1.0, 0.0), "cyl");
+    Object_sptr shape_sptr = \
+        ComponentCreationHelper::createCappedCylinder(0.0127, 1.0, V3D(), V3D(0.0, 1.0, 0.0), "cyl");
     Sample sample;
     sample.setShape(*shape_sptr);
     sample.setName("NameOfASample");
@@ -316,7 +302,7 @@ public:
 
   }
 
-  
+
 };
 
 #endif /*TESTSAMPLE_H_*/
diff --git a/Code/Mantid/Framework/Algorithms/CMakeLists.txt b/Code/Mantid/Framework/Algorithms/CMakeLists.txt
index 8d6bc86ced8ab57f2602625a9c2f86eb31ed1484..a448a33242581be51fa9c5aa4c88da54f9e3a8c4 100644
--- a/Code/Mantid/Framework/Algorithms/CMakeLists.txt
+++ b/Code/Mantid/Framework/Algorithms/CMakeLists.txt
@@ -9,6 +9,7 @@ set ( SRC_FILES
 	src/AddTimeSeriesLog.cpp
 	src/AlignDetectors.cpp
 	src/AlphaCalc.cpp
+	src/AnnularRingAbsorption.cpp
 	src/AnyShapeAbsorption.cpp
 	src/AppendSpectra.cpp
 	src/ApplyCalibration.cpp
@@ -256,6 +257,7 @@ set ( INC_FILES
 	inc/MantidAlgorithms/AddTimeSeriesLog.h
 	inc/MantidAlgorithms/AlignDetectors.h
 	inc/MantidAlgorithms/AlphaCalc.h
+	inc/MantidAlgorithms/AnnularRingAbsorption.h
 	inc/MantidAlgorithms/AnyShapeAbsorption.h
 	inc/MantidAlgorithms/AppendSpectra.h
 	inc/MantidAlgorithms/ApplyCalibration.h
@@ -515,6 +517,7 @@ set ( TEST_FILES
 	AddTimeSeriesLogTest.h
 	AlignDetectorsTest.h
 	AlphaCalcTest.h
+	AnnularRingAbsorptionTest.h
 	AnyShapeAbsorptionTest.h
 	AppendSpectraTest.h
 	ApplyCalibrationTest.h
@@ -588,6 +591,7 @@ set ( TEST_FILES
 	DiffractionFocussingTest.h
 	DivideTest.h
 	EditInstrumentGeometryTest.h
+  ElasticWindowTest.h
 	EstimatePDDetectorResolutionTest.h
 	ExponentialCorrectionTest.h
 	ExponentialTest.h
@@ -721,9 +725,9 @@ set ( TEST_FILES
 	WeightedMeanOfWorkspaceTest.h
 	WeightedMeanTest.h
 	WeightingStrategyTest.h
+	WienerSmoothTest.h
 	WorkspaceCreationHelperTest.h
 	WorkspaceGroupTest.h
-	WienerSmoothTest.h
 )
 
 set ( TEST_PY_FILES NormaliseToUnityTest.py )
diff --git a/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/AnnularRingAbsorption.h b/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/AnnularRingAbsorption.h
new file mode 100644
index 0000000000000000000000000000000000000000..920c2da51b759ef073de82f43e5c653ccfb3f833
--- /dev/null
+++ b/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/AnnularRingAbsorption.h
@@ -0,0 +1,76 @@
+#ifndef MANTID_ALGORITHMS_ANNULARRINGABSORPTION_H_
+#define MANTID_ALGORITHMS_ANNULARRINGABSORPTION_H_
+
+#include "MantidAPI/Algorithm.h"
+
+namespace Mantid
+{
+  //-----------------------------------------------------------------------------------------------
+  // Forward declarations
+  //-----------------------------------------------------------------------------------------------
+  namespace Kernel
+  {
+    class Material;
+    class V3D;
+  }
+  namespace Geometry
+  {
+    class Object;
+  }
+
+  namespace Algorithms
+  {
+
+    /**
+      Constructs a hollow sample shape, defines material for the sample and runs the
+      MonteCarloAbsorption algorithm.
+      
+      Copyright &copy; 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
+
+      This file is part of Mantid.
+
+      Mantid is free software; you can redistribute it and/or modify
+      it under the terms of the GNU General Public License as published by
+      the Free Software Foundation; either version 3 of the License, or
+      (at your option) any later version.
+
+      Mantid 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 General Public License for more details.
+
+      You should have received a copy of the GNU General Public License
+      along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+      File change history is stored at: <https://github.com/mantidproject/mantid>
+      Code Documentation is available at: <http://doxygen.mantidproject.org>
+    */
+    class DLLExport AnnularRingAbsorption  : public API::Algorithm
+    {
+    public:
+      AnnularRingAbsorption();
+      virtual ~AnnularRingAbsorption();
+
+      virtual const std::string name() const;
+      virtual int version() const;
+      virtual const std::string category() const;
+      virtual const std::string summary() const;
+
+    private:
+      void init();
+      void exec();
+
+      void attachSample(API::MatrixWorkspace_sptr & workspace);
+      void runCreateSampleShape(API::MatrixWorkspace_sptr & workspace);
+      std::string createSampleShapeXML(const Kernel::V3D &upAxis) const;
+      const std::string cylinderXML(const std::string &id, const Kernel::V3D & bottomCentre, const double radius,
+                                    const Kernel::V3D & axis, const double height) const;
+      void runSetSampleMaterial(API::MatrixWorkspace_sptr & workspace);
+      API::MatrixWorkspace_sptr runMonteCarloAbsorptionCorrection(const API::MatrixWorkspace_sptr & workspace);
+    };
+
+
+  } // namespace Algorithms
+} // namespace Mantid
+
+#endif  /* MANTID_ALGORITHMS_ANNULARRINGABSORPTION_H_ */
diff --git a/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/He3TubeEfficiency.h b/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/He3TubeEfficiency.h
index 16f855d7e0e2b8c578385bfc16bdcf466e011983..436944e8ad83ff5992e4d6d23f6b3f64a908021c 100644
--- a/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/He3TubeEfficiency.h
+++ b/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/He3TubeEfficiency.h
@@ -20,12 +20,12 @@ namespace Algorithms
     \f]
 
     where \f$A\f$ is a dimensionless scaling factor, \f$\alpha\f$ is a constant
-    with units \f$(Kelvin / (metres\: \AA\: atm))\f$, \f$P\f$ is pressure in
+    with units \f$(Kelvin / (metres\: \mbox{\AA}\: atm))\f$, \f$P\f$ is pressure in
     units of \f$atm\f$, \f$L\f$ is the tube diameter in units of \f$metres\f$,
     \f$W\f$ is the tube thickness in units of \f$metres\f$, \f$T\f$ is the
     temperature in units of \f$Kelvin\f$, \f$sin(\theta)\f$ is the angle of
     the neutron trajectory with respect to the long axis of the He3 tube and
-    \f$\lambda\f$ is in units of \f$\AA\f$.
+    \f$\lambda\f$ is in units of \f$\mbox{\AA}\f$.
 
     @author Michael Reuter
     @date 30/09/2010
diff --git a/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/MonteCarloAbsorption.h b/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/MonteCarloAbsorption.h
index 59c2fa12f310b06d443ce35614fb6c6a8d21fe9e..c5ccbaafc97290af5e46aecc6eabfdf4cb0c3dcb 100644
--- a/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/MonteCarloAbsorption.h
+++ b/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/MonteCarloAbsorption.h
@@ -5,9 +5,10 @@
 // Includes
 //------------------------------------------------------------------------------
 #include "MantidAPI/Algorithm.h"
-#include "MantidKernel/PseudoRandomNumberGenerator.h"
 #include "MantidGeometry/IComponent.h"
 
+#include <boost/random/mersenne_twister.hpp>
+
 namespace Mantid
 {
   namespace Geometry
@@ -18,36 +19,36 @@ namespace Mantid
 
   namespace Algorithms
   {
-    /** 
+    /**
       Calculates attenuation due to absorption and scattering in a sample +
       its environment using a weighted Monte Carlo.
- 
+
       @author Martyn Gigg, Tessella plc
       @date 22/11/2010
 
       Copyright &copy; 2010 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
-      
+
       This file is part of Mantid.
-      
+
       Mantid is free software; you can redistribute it and/or modify
       it under the terms of the GNU General Public License as published by
       the Free Software Foundation; either version 3 of the License, or
       (at your option) any later version.
-      
+
       Mantid 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 General Public License for more details.
-      
+
       You should have received a copy of the GNU General Public License
       along with this program.  If not, see <http://www.gnu.org/licenses/>.
-      
+
       File change history is stored at: <https://github.com/mantidproject/mantid>
       Code Documentation is available at: <http://doxygen.mantidproject.org>
     */
     class DLLExport MonteCarloAbsorption : public API::Algorithm
     {
-      
+
     public:
       /// Constructor
       MonteCarloAbsorption();
@@ -63,41 +64,70 @@ namespace Mantid
       ///Summary of algorithms purpose
       virtual const std::string summary() const {return "Calculates attenuation due to absorption and scattering in a sample & its environment using a weighted Monte Carlo.";}
 
-
     private:
       /// Initialize the algorithm
       void init();
       /// Execution code
       void exec();
-      
+
       /// Do the simulation for the given detector and wavelength
-      void doSimulation(const Geometry::IDetector * const detector, 
-			const double lambda, double & attenFactor, double & error);
+      void doSimulation(const Geometry::IDetector * const detector,
+                        const double lambda, double & attenFactor, double & error);
       /// Randomly select the location initial point within the beam from a square
       /// distribution
       Kernel::V3D sampleBeamProfile() const;
       /// Select a random location within the sample + container environment
       Kernel::V3D selectScatterPoint() const;
       /// Calculate the attenuation factor for the given single scatter setup
-      double attenuationFactor(const Kernel::V3D & startPos, 
-			       const Kernel::V3D & scatterPoint,
-			       const Kernel::V3D & finalPos, const double lambda);
+      bool attenuationFactor(const Kernel::V3D & startPos,
+                             const Kernel::V3D & scatterPoint,
+                             const Kernel::V3D & finalPos,
+                             const double lambda, double &factor);
       /// Calculate the attenuation for a given length, material and wavelength
       double attenuation(const double length, const Kernel::Material& material,
-			 const double lambda) const;
+                         const double lambda) const;
 
       /// Check the input and throw if invalid
       void retrieveInput();
-      /// Initialise the caches used here including setting up the random 
-      /// number generator
+      /// Initialise the caches used
       void initCaches();
+      /// Setting up the random number generator
+      void initRNG();
+      /// Return the random number generator for the current thread
+      boost::mt19937 & rgen() const;
+      /// Checks if a given box has any corners inside the sample or container
+      bool boxIntersectsSample(const double xmax, const double ymax, const double zmax,
+                               const double xmin, const double ymin, const double zmin) const;
+      /// Checks if the given point is inside the sample or container
+      bool ptIntersectsSample(const Kernel::V3D & pt) const;
 
     private:
+      /** @name Cached values */
+      //@{
+      /// The sample position
+      Kernel::V3D m_samplePos;
+      /// The source position
+      Kernel::V3D m_sourcePos;
+      ///
+      size_t m_numVolumeElements;
+      /// Object divided into little boxes
+      std::vector<Geometry::BoundingBox> m_blocks;
+
+      /// Half a single block width in X
+      double m_blkHalfX;
+      /// Half a single block width in Y
+      double m_blkHalfY;
+      /// Half a single block width in Z
+      double m_blkHalfZ;
+      /// Random number generator
+      std::vector<boost::mt19937> m_rngs;
+      //@}
+
       /// The input workspace
       API::MatrixWorkspace_sptr m_inputWS;
       /// The sample's shape
       const Geometry::Object *m_sampleShape;
-      /// The sample's material 
+      /// The sample's material
       const Kernel::Material *m_sampleMaterial;
       /// The container(s)
       const API::SampleEnvironment *m_container;
@@ -107,29 +137,6 @@ namespace Mantid
       int m_xStepSize;
       /// The number of events per point
       int m_numberOfEvents;
-      
-      /** @name Cached values */
-      //@{
-      /// The sample position
-      Kernel::V3D m_samplePos;
-      /// The source position
-      Kernel::V3D m_sourcePos;
-      /// Bounding box length
-      double m_bbox_length;
-      /// Half the bounding box length
-      double m_bbox_halflength;
-      /// Bounding box width
-      double m_bbox_width;
-      /// Half the bounding box width
-      double m_bbox_halfwidth;
-      /// Bounding box height
-      double m_bbox_height;
-      /// Bounding box height
-      double m_bbox_halfheight;
-      //@}      
-      
-      /// A pointer to the random number generator
-      Kernel::PseudoRandomNumberGenerator *m_randGen;
     };
 
   }
diff --git a/Code/Mantid/Framework/Algorithms/src/AbsorptionCorrection.cpp b/Code/Mantid/Framework/Algorithms/src/AbsorptionCorrection.cpp
index 02baf20f739c19f8a85756267eb5a9f540b86fda..9849307926adcccc8f12ff5aa04f7170ec43a7ca 100644
--- a/Code/Mantid/Framework/Algorithms/src/AbsorptionCorrection.cpp
+++ b/Code/Mantid/Framework/Algorithms/src/AbsorptionCorrection.cpp
@@ -225,7 +225,7 @@ void AbsorptionCorrection::retrieveBaseProperties()
   double sigma_atten = getProperty("AttenuationXSection"); // in barns
   double sigma_s = getProperty("ScatteringXSection"); // in barns
   double rho = getProperty("SampleNumberDensity"); // in Angstroms-3
-  const Material& sampleMaterial = m_inputWS->sample().getMaterial();
+  const Material& sampleMaterial = m_inputWS->sample().getShape().material();
   if( sampleMaterial.totalScatterXSection(NeutronAtom::ReferenceLambda) != 0.0)
   {
     if (rho == EMPTY_DBL()) rho =  sampleMaterial.numberDensity();
@@ -236,8 +236,10 @@ void AbsorptionCorrection::retrieveBaseProperties()
   {
     NeutronAtom neutron(static_cast<uint16_t>(EMPTY_DBL()), static_cast<uint16_t>(0),
                          0.0, 0.0, sigma_s, 0.0, sigma_s, sigma_atten);
-    Material mat("SetInAbsorptionCorrection", neutron, rho);
-    m_inputWS->mutableSample().setMaterial(mat);
+    
+    Object shape = m_inputWS->sample().getShape(); // copy
+    shape.setMaterial(Material("SetInAbsorptionCorrection", neutron, rho));
+    m_inputWS->mutableSample().setShape(shape);
   }
   rho *= 100;  // Needed to get the units right
   m_refAtten = -sigma_atten * rho / 1.798;
diff --git a/Code/Mantid/Framework/Algorithms/src/AnnularRingAbsorption.cpp b/Code/Mantid/Framework/Algorithms/src/AnnularRingAbsorption.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..59681e670d7dadced431b17a73d3c36146164094
--- /dev/null
+++ b/Code/Mantid/Framework/Algorithms/src/AnnularRingAbsorption.cpp
@@ -0,0 +1,287 @@
+#include "MantidAlgorithms/AnnularRingAbsorption.h"
+
+#include "MantidAPI/SampleEnvironment.h"
+#include "MantidAPI/WorkspaceValidators.h"
+
+#include "MantidGeometry/Instrument/ObjComponent.h"
+#include "MantidGeometry/Instrument/ReferenceFrame.h"
+#include "MantidGeometry/Objects/Object.h"
+#include "MantidGeometry/Objects/ShapeFactory.h"
+
+#include "MantidKernel/Atom.h"
+#include "MantidKernel/NeutronAtom.h"
+#include "MantidKernel/BoundedValidator.h"
+#include "MantidKernel/Material.h"
+#include "MantidKernel/MandatoryValidator.h"
+#include "MantidKernel/V3D.h"
+
+#include <boost/format.hpp>
+#include <boost/shared_ptr.hpp>
+
+namespace Mantid
+{
+  namespace Algorithms
+  {
+    using namespace Mantid::API;
+    using Mantid::Geometry::ObjComponent;
+    using namespace Mantid::Kernel;
+
+    // Register the algorithm into the AlgorithmFactory
+    DECLARE_ALGORITHM(AnnularRingAbsorption)
+
+
+    //----------------------------------------------------------------------------------------------
+    /** Constructor
+    */
+    AnnularRingAbsorption::AnnularRingAbsorption()
+    {
+    }
+
+    //----------------------------------------------------------------------------------------------
+    /** Destructor
+    */
+    AnnularRingAbsorption::~AnnularRingAbsorption()
+    {
+    }
+
+    //----------------------------------------------------------------------------------------------
+
+
+    /// Algorithm's name for identification. @see Algorithm::version
+    const std::string AnnularRingAbsorption::name() const
+    {
+      return "AnnularRingAbsorption";
+    }
+
+    /// Algorithm's version for identification. @see Algorithm::version
+    int AnnularRingAbsorption::version() const
+    {
+      return 1;
+    }
+
+    /// Algorithm's category for identification. @see Algorithm::category
+    const std::string AnnularRingAbsorption::category() const
+    {
+      return "CorrectionFunctions\\AbsorptionCorrections";
+    }
+
+     /// Algorithm's summary for use in the GUI and help. @see Algorithm::summary
+     const std::string AnnularRingAbsorption::summary() const
+     {
+       return "Calculates bin-by-bin correction factors for attenuation due to absorption "
+              "in a cylindrical sample in the wall of a hollow can";
+     }
+
+    //----------------------------------------------------------------------------------------------
+    /**
+     * Initialize the algorithm's properties.
+     */
+    void AnnularRingAbsorption::init()
+    {
+      // The input workspace must have an instrument and units of wavelength
+      auto wsValidator = boost::make_shared<CompositeValidator>();
+      wsValidator->add<WorkspaceUnitValidator>("Wavelength");
+      wsValidator->add<InstrumentValidator>();
+      declareProperty(new WorkspaceProperty<>("InputWorkspace","",Direction::Input,
+                                              wsValidator),
+                      "The input workspace in units of wavelength.");
+
+      declareProperty(new WorkspaceProperty<>("OutputWorkspace","",Direction::Output),
+                      "The name to use for the output workspace.");
+
+      // -- can properties --
+      auto mustBePositive = boost::make_shared<BoundedValidator<double> >();
+      mustBePositive->setLower(0.0);
+      declareProperty("CanOuterRadius", -1.0, mustBePositive,
+                      "The outer radius of the can in centimetres");
+      declareProperty("CanInnerRadius", -1.0, mustBePositive,
+                      "The inner radius of the can in centimetres");
+
+      // -- sample properties --
+      declareProperty("SampleHeight", -1.0, mustBePositive,
+                      "The height of the sample in centimetres");
+      declareProperty("SampleThickness", -1.0, mustBePositive,
+                      "The thickness of the sample in centimetres");
+      auto nonEmptyString = boost::make_shared<MandatoryValidator<std::string>>();
+      declareProperty("SampleChemicalFormula", "",
+                      "Chemical composition of the sample material",
+                      nonEmptyString);
+      declareProperty("SampleNumberDensity", -1.0, mustBePositive,
+                      "The number density of the sample in number of formulas per cubic angstrom");
+
+      // -- Monte Carlo properties --
+      auto positiveInt = boost::make_shared<Kernel::BoundedValidator<int> >();
+      positiveInt->setLower(1);
+      declareProperty("NumberOfWavelengthPoints", EMPTY_INT(), positiveInt,
+          "The number of wavelength points for which a simulation is atttempted (default: all points)");
+      declareProperty("EventsPerPoint", 300, positiveInt,
+          "The number of \"neutron\" events to generate per simulated point");
+      declareProperty("SeedValue", 123456789, positiveInt,
+          "Seed the random number generator with this value");
+    }
+
+    //----------------------------------------------------------------------------------------------
+    /**
+     * Execute the algorithm.
+     */
+    void AnnularRingAbsorption::exec()
+    {
+      MatrixWorkspace_sptr inputWS = getProperty("InputWorkspace");
+      // We neglect any absorption in the can so the actual shape defined is a hollow cylinder
+      // where the sample is in the centre of the can wall
+      attachSample(inputWS);
+
+      MatrixWorkspace_sptr factors = runMonteCarloAbsorptionCorrection(inputWS);
+      setProperty("OutputWorkspace", factors);
+    }
+
+    //---------------------------------------------------------------------------------------------
+    // Private members
+    //---------------------------------------------------------------------------------------------
+
+    /**
+     * @param workspace The workspace where the environment should be attached
+     */
+    void AnnularRingAbsorption::attachSample(MatrixWorkspace_sptr &workspace)
+    {
+      runCreateSampleShape(workspace);
+      runSetSampleMaterial(workspace);
+    }
+
+    /**
+     * @return Creates a new shape object for the sample
+     */
+    void AnnularRingAbsorption::runCreateSampleShape(API::MatrixWorkspace_sptr & workspace)
+    {
+      auto inst = workspace->getInstrument();
+      auto refFrame = inst->getReferenceFrame();
+
+      bool childLog = g_log.is(Logger::Priority::PRIO_DEBUG);
+      auto alg = this->createChildAlgorithm("CreateSampleShape", -1,-1, childLog);
+      alg->setProperty("InputWorkspace", workspace);
+      alg->setPropertyValue("ShapeXML", createSampleShapeXML(refFrame->vecPointingUp()));
+      try
+      {
+        alg->executeAsChildAlg();
+      }
+      catch(std::exception & exc)
+      {
+        throw std::invalid_argument(std::string("Unable to create sample shape: '") + exc.what() + "'");
+      }
+    }
+
+    /**
+     * Create the XML that defines a hollow cylinder with dimensions provided by the user
+     * The shape is a hollow cylinder where the inner/outer radius is defined by
+     * \f[
+     *    r_{\pm} = r_l + \frac{r_u-r_l}{2} \pm \frac{t}{2}
+     * \f]
+     * where \f$r_{l,u}\f$ are the inner & outer can radii respectively and \f$t\f$ is the sample
+     * thickness
+     * @param upAxis A vector pointing up
+     * @returns A string containing the shape XML
+     */
+    std::string AnnularRingAbsorption::createSampleShapeXML(const V3D & upAxis) const
+    {
+      // User input
+      const double canLowRadiusCM = getProperty("CanInnerRadius");
+      const double canUppRadiusCM = getProperty("CanOuterRadius");
+      const double sampleHeightCM = getProperty("SampleHeight");
+      const double sampleThickCM = getProperty("SampleThickness");
+      // Sample dimensions for approximation (converted to metres)
+      const double wallMidPtCM = canLowRadiusCM + 0.5*(canUppRadiusCM - canLowRadiusCM);
+      const double lowRadiusMtr = (wallMidPtCM - 0.5*sampleThickCM)/100.;
+      const double uppRadiusMtr = (wallMidPtCM + 0.5*sampleThickCM)/100.;
+
+      // Cylinders oriented along Y, with origin at centre of bottom base
+      const std::string innerCylID = std::string("inner-cyl");
+      const std::string innerCyl = cylinderXML(innerCylID, V3D(), lowRadiusMtr, upAxis,
+                                               sampleHeightCM/100.0);
+      const std::string outerCylID = std::string("outer-cyl");
+      const std::string outerCyl = cylinderXML(outerCylID, V3D(), uppRadiusMtr, upAxis,
+                                               sampleHeightCM/100.0);
+
+      // Combine shapes
+      boost::format algebra("<algebra val=\"(%1% (# %2%))\" />");
+      algebra % outerCylID % innerCylID;
+      auto xml = outerCyl + "\n" + innerCyl + "\n" + algebra.str();
+      g_log.debug() << "Sample shape XML:\n" << xml << "\n";
+      return xml;
+    }
+
+    /**
+     * @param id String id of object
+     * @param bottomCentre Point of centre of bottom base
+     * @param radius Radius of cylinder
+     * @param axis Cylinder will point along this axis
+     * @param height The height of the cylinder
+     * @return A string defining the XML
+     */
+    const std::string AnnularRingAbsorption::cylinderXML(const std::string &id, const V3D &bottomCentre,
+                                                                 const double radius, const V3D &axis,
+                                                                 const double height) const
+    {
+      // The newline characters are not necessary for the XML but they make it easier to read for debugging
+      static const char * CYL_TEMPLATE = \
+        "<cylinder id=\"%1%\">\n"
+        "<centre-of-bottom-base x=\"%2%\" y=\"%3%\" z=\"%4%\" />\n"
+        " <axis x=\"%5%\" y=\"%6%\" z=\"%7%\" />\n"
+        " <radius val=\"%8%\" />\n"
+        " <height val=\"%9%\" />\n"
+        "</cylinder>";
+
+      boost::format xml(CYL_TEMPLATE);
+      xml % id
+          % bottomCentre.X() % bottomCentre.Y() % bottomCentre.Z()
+          % axis.X() % axis.Y() % axis.Z()
+          % radius % height;
+      return xml.str();
+    }
+
+    /**
+     * @return Attaches a new Material object to the sample
+     */
+    void AnnularRingAbsorption::runSetSampleMaterial(API::MatrixWorkspace_sptr & workspace)
+    {
+      bool childLog = g_log.is(Logger::Priority::PRIO_DEBUG);
+      auto alg = this->createChildAlgorithm("SetSampleMaterial", -1,-1, childLog);
+      alg->setProperty("InputWorkspace", workspace);
+      alg->setProperty("ChemicalFormula", getPropertyValue("SampleChemicalFormula"));
+      alg->setProperty<double>("SampleNumberDensity", getProperty("SampleNumberDensity"));
+      try
+      {
+        alg->executeAsChildAlg();
+      }
+      catch(std::exception & exc)
+      {
+        throw std::invalid_argument(std::string("Unable to set sample material: '") + exc.what() + "'");
+      }
+    }
+
+    /**
+     * Run the MonteCarloAbsorption algorithm on the given workspace and return the calculated factors
+     * @param workspace The input workspace that has the sample and can defined
+     * @return A 2D workspace of attenuation factors
+     */
+    MatrixWorkspace_sptr AnnularRingAbsorption::runMonteCarloAbsorptionCorrection(const MatrixWorkspace_sptr &workspace)
+    {
+      bool childLog = g_log.is(Logger::Priority::PRIO_DEBUG);
+      auto alg = this->createChildAlgorithm("MonteCarloAbsorption", 0.1,1.0, childLog);
+      alg->setProperty("InputWorkspace", workspace);
+      alg->setProperty<int>("NumberOfWavelengthPoints", getProperty("NumberOfWavelengthPoints"));
+      alg->setProperty<int>("EventsPerPoint", getProperty("EventsPerPoint"));
+      alg->setProperty<int>("SeedValue", getProperty("SeedValue"));
+      try
+      {
+        alg->executeAsChildAlg();
+      }
+      catch(std::exception & exc)
+      {
+        throw std::invalid_argument(std::string("Error running absorption correction: '") + exc.what() + "'");
+      }
+
+      return alg->getProperty("OutputWorkspace");
+    }
+
+  } // namespace Algorithms
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/Algorithms/src/CopySample.cpp b/Code/Mantid/Framework/Algorithms/src/CopySample.cpp
index e7ee71c3b16b481fe81da2fc4ff6b5d3c588d790..9c2ce0c45fbe2ebf0bf01bc94404e9275d623279 100644
--- a/Code/Mantid/Framework/Algorithms/src/CopySample.cpp
+++ b/Code/Mantid/Framework/Algorithms/src/CopySample.cpp
@@ -137,16 +137,29 @@ namespace Algorithms
   void CopySample::copyParameters(Sample& from,Sample& to,bool nameFlag,bool materialFlag, bool environmentFlag, bool shapeFlag,bool latticeFlag, bool orientationOnlyFlag)
   {
     if (nameFlag) to.setName(from.getName());
-    if (materialFlag) to.setMaterial(from.getMaterial());
     if (environmentFlag) to.setEnvironment(new SampleEnvironment(from.getEnvironment()));
     if (shapeFlag)
     {
-      to.setShape(from.getShape());
+      auto rhsObject = from.getShape(); //copy
+      const auto & lhsMaterial = to.getMaterial();
+      // reset to original lhs material
+      if(!materialFlag)
+      {
+        rhsObject.setMaterial(lhsMaterial);
+      }
+      to.setShape(rhsObject);
       to.setGeometryFlag(from.getGeometryFlag());
       to.setHeight(from.getHeight());
       to.setThickness(from.getThickness());
       to.setWidth(from.getWidth());
     }
+    else if(materialFlag)
+    {
+      auto lhsObject = to.getShape(); //copy
+      lhsObject.setMaterial(from.getMaterial());
+      to.setShape(lhsObject);
+    }
+    
     if ((latticeFlag) && from.hasOrientedLattice())
     {
         if (to.hasOrientedLattice() && orientationOnlyFlag)
diff --git a/Code/Mantid/Framework/Algorithms/src/ElasticWindow.cpp b/Code/Mantid/Framework/Algorithms/src/ElasticWindow.cpp
index 7ca3cd780b56f909d58c758f06e4edb524d23fcf..4e988cc057d978f85c29b67e4bab02c6be4bac14 100644
--- a/Code/Mantid/Framework/Algorithms/src/ElasticWindow.cpp
+++ b/Code/Mantid/Framework/Algorithms/src/ElasticWindow.cpp
@@ -14,7 +14,6 @@ namespace Algorithms
 // Register the algorithm into the AlgorithmFactory
 DECLARE_ALGORITHM(ElasticWindow)
 
-
 using namespace Kernel;
 using namespace API;
 
@@ -48,16 +47,31 @@ void ElasticWindow::exec()
 
   MatrixWorkspace_sptr outputQ;
   MatrixWorkspace_sptr outputQSquared;
-  
+
   const bool childAlgLogging(true);
-  double startProgress(0.0), stepProgress(0.0), endProgress(0.0);
+  double startProgress(0.0), endProgress(0.0);
+
+  // Determine if we are converting from spectra number (red) or Q (Sqw)
+  const bool axisIsSpectrumNumber = inputWorkspace->getAxis(1)->isSpectra();
+  g_log.information() << "Axis is spectrum number: " << axisIsSpectrumNumber << std::endl;
+
   // Determine if we need to use the second time range...
-  if ( ! ( ( enR2S == enR2E ) && ( enR2S == EMPTY_DBL() ) ) )
+  const bool backgroundSubtraction = !((enR2S == enR2E) && (enR2S == EMPTY_DBL()));
+  g_log.information() << "Use background subtraction: " << backgroundSubtraction << std::endl;
+
+  // Calculate number of steps
+  size_t numSteps = 4;
+  if(backgroundSubtraction)
+    numSteps += 1;
+  if(axisIsSpectrumNumber)
+    numSteps += 1;
+
+  double stepProgress = 1.0 / static_cast<double>(numSteps);
+
+  if(backgroundSubtraction)
   {
-    stepProgress = 1.0/6.0;
-    
     // ... CalculateFlatBackground, Minus, Integration...
-    IAlgorithm_sptr flatBG = createChildAlgorithm("CalculateFlatBackground",startProgress, endProgress,childAlgLogging);
+    IAlgorithm_sptr flatBG = createChildAlgorithm("CalculateFlatBackground", startProgress, endProgress, childAlgLogging);
     flatBG->setProperty<MatrixWorkspace_sptr>("InputWorkspace", inputWorkspace);
     flatBG->setProperty<double>("StartX", enR2S);
     flatBG->setProperty<double>("EndX", enR2E);
@@ -69,7 +83,7 @@ void ElasticWindow::exec()
 
     MatrixWorkspace_sptr flatBGws = flatBG->getProperty("OutputWorkspace");
 
-    IAlgorithm_sptr integ = createChildAlgorithm("Integration",startProgress, endProgress,childAlgLogging);
+    IAlgorithm_sptr integ = createChildAlgorithm("Integration", startProgress, endProgress, childAlgLogging);
     integ->setProperty<MatrixWorkspace_sptr>("InputWorkspace", flatBGws);
     integ->setProperty<double>("RangeLower", enR1S);
     integ->setProperty<double>("RangeUpper", enR1E);
@@ -80,10 +94,8 @@ void ElasticWindow::exec()
   }
   else
   {
-    stepProgress = 1.0/5.0;
-
     // ... Just Integration ...
-    IAlgorithm_sptr integ = createChildAlgorithm("Integration",startProgress, endProgress,childAlgLogging);
+    IAlgorithm_sptr integ = createChildAlgorithm("Integration", startProgress, endProgress, childAlgLogging);
     integ->setProperty<MatrixWorkspace_sptr>("InputWorkspace", inputWorkspace);
     integ->setProperty<double>("RangeLower", enR1S);
     integ->setProperty<double>("RangeUpper", enR1E);
@@ -95,45 +107,80 @@ void ElasticWindow::exec()
   startProgress += stepProgress;
   endProgress += stepProgress;
 
-  // ... ConvertSpectrumAxis (ElasticQ). Version 2 to give the correct number
-  const int version = 2;
-  IAlgorithm_sptr csaQ = createChildAlgorithm("ConvertSpectrumAxis",startProgress,endProgress,childAlgLogging,version);
-  csaQ->setProperty<MatrixWorkspace_sptr>("InputWorkspace", integWS);
-  csaQ->setPropertyValue("Target", "ElasticQ");
-  csaQ->setPropertyValue("EMode", "Indirect");
-  csaQ->setPropertyValue("OutputWorkspace", "csaQ");
-  csaQ->execute();
-  MatrixWorkspace_sptr csaQws = csaQ->getProperty("OutputWorkspace");
-  startProgress += stepProgress;
-  endProgress += stepProgress;
-  
-  // ... ConvertSpectrumAxis (Q2) ...
-  IAlgorithm_sptr csaQ2 = createChildAlgorithm("ConvertSpectrumAxis",startProgress,endProgress,childAlgLogging,version);
-  csaQ2->setProperty<MatrixWorkspace_sptr>("InputWorkspace", integWS);
-  csaQ2->setPropertyValue("Target", "ElasticQSquared");
-  csaQ2->setPropertyValue("EMode", "Indirect");
-  csaQ2->setPropertyValue("OutputWorkspace", "csaQ2");
-  csaQ2->execute();
-  MatrixWorkspace_sptr csaQ2ws = csaQ2->getProperty("OutputWorkspace");
-  startProgress += stepProgress;
-  endProgress += stepProgress;
+  if(axisIsSpectrumNumber)
+  {
+    // Use ConvertSpectrumAxis v2 for correct result
+    const int version = 2;
+
+    // ... ConvertSpectrumAxis (Q) ...
+    IAlgorithm_sptr csaQ = createChildAlgorithm("ConvertSpectrumAxis", startProgress, endProgress, childAlgLogging, version);
+    csaQ->setProperty<MatrixWorkspace_sptr>("InputWorkspace", integWS);
+    csaQ->setPropertyValue("Target", "ElasticQ");
+    csaQ->setPropertyValue("EMode", "Indirect");
+    csaQ->setPropertyValue("OutputWorkspace", "csaQ");
+    csaQ->execute();
+    MatrixWorkspace_sptr csaQws = csaQ->getProperty("OutputWorkspace");
+    startProgress += stepProgress;
+    endProgress += stepProgress;
 
+    // ... ConvertSpectrumAxis (Q2) ...
+    IAlgorithm_sptr csaQ2 = createChildAlgorithm("ConvertSpectrumAxis", startProgress, endProgress, childAlgLogging, version);
+    csaQ2->setProperty<MatrixWorkspace_sptr>("InputWorkspace", integWS);
+    csaQ2->setPropertyValue("Target", "ElasticQSquared");
+    csaQ2->setPropertyValue("EMode", "Indirect");
+    csaQ2->setPropertyValue("OutputWorkspace", "csaQ2");
+    csaQ2->execute();
+    MatrixWorkspace_sptr csaQ2ws = csaQ2->getProperty("OutputWorkspace");
+    startProgress += stepProgress;
+    endProgress += stepProgress;
 
-  // ... Transpose A ...
-  IAlgorithm_sptr tranQ = createChildAlgorithm("Transpose",startProgress,endProgress,childAlgLogging);
-  tranQ->setProperty<MatrixWorkspace_sptr>("InputWorkspace",csaQws);
-  tranQ->setPropertyValue("OutputWorkspace", "outQ");
-  tranQ->execute();
-  outputQ = tranQ->getProperty("OutputWorkspace");
-  startProgress += stepProgress;
-  endProgress += stepProgress;
+    // ... Transpose (Q) ...
+    IAlgorithm_sptr tranQ = createChildAlgorithm("Transpose", startProgress, endProgress, childAlgLogging);
+    tranQ->setProperty<MatrixWorkspace_sptr>("InputWorkspace", csaQws);
+    tranQ->setPropertyValue("OutputWorkspace", "outQ");
+    tranQ->execute();
+    outputQ = tranQ->getProperty("OutputWorkspace");
+    startProgress += stepProgress;
+    endProgress += stepProgress;
+
+    // ... Transpose (Q2) ...
+    IAlgorithm_sptr tranQ2 = createChildAlgorithm("Transpose", startProgress, endProgress, childAlgLogging);
+    tranQ2->setProperty<MatrixWorkspace_sptr>("InputWorkspace", csaQ2ws);
+    tranQ2->setPropertyValue("OutputWorkspace", "outQSquared");
+    tranQ2->execute();
+    outputQSquared = tranQ2->getProperty("OutputWorkspace");
+    startProgress += stepProgress;
+    endProgress += stepProgress;
+  }
+  else
+  {
+    // ... Transpose (Q) ...
+    IAlgorithm_sptr tranQ = createChildAlgorithm("Transpose", startProgress, endProgress, childAlgLogging);
+    tranQ->setProperty<MatrixWorkspace_sptr>("InputWorkspace", integWS);
+    tranQ->setPropertyValue("OutputWorkspace", "outQ");
+    tranQ->execute();
+    outputQ = tranQ->getProperty("OutputWorkspace");
+    startProgress += stepProgress;
+    endProgress += stepProgress;
 
-  // ... Transpose B ...
-  IAlgorithm_sptr tranQ2 = createChildAlgorithm("Transpose", startProgress,endProgress,childAlgLogging);
-  tranQ2->setProperty<MatrixWorkspace_sptr>("InputWorkspace",csaQ2ws);
-  tranQ2->setPropertyValue("OutputWorkspace", "outQSquared");
-  tranQ2->execute();
-  outputQSquared = tranQ2->getProperty("OutputWorkspace");
+    // ... Convert to Histogram (Q2) ...
+    IAlgorithm_sptr histQ2 = createChildAlgorithm("ConvertToHistogram", startProgress, endProgress, childAlgLogging);
+    histQ2->setProperty<MatrixWorkspace_sptr>("InputWorkspace", outputQ);
+    histQ2->setPropertyValue("OutputWorkspace", "outQ");
+    histQ2->execute();
+    MatrixWorkspace_sptr qHistWS = histQ2->getProperty("OutputWorkspace");
+    startProgress += stepProgress;
+    endProgress += stepProgress;
+
+    // ... Convert Units (Q2) ...
+    IAlgorithm_sptr convUnitQ2 = createChildAlgorithm("ConvertUnits", startProgress, endProgress, childAlgLogging);
+    convUnitQ2->setProperty<MatrixWorkspace_sptr>("InputWorkspace", qHistWS);
+    convUnitQ2->setPropertyValue("Target", "QSquared");
+    convUnitQ2->setPropertyValue("EMode", "Indirect");
+    convUnitQ2->setPropertyValue("OutputWorkspace", "outQSquared");
+    convUnitQ2->execute();
+    outputQSquared = convUnitQ2->getProperty("OutputWorkspace");
+  }
 
   setProperty("OutputInQ", outputQ);
   setProperty("OutputInQSquared", outputQSquared);
diff --git a/Code/Mantid/Framework/Algorithms/src/HRPDSlabCanAbsorption.cpp b/Code/Mantid/Framework/Algorithms/src/HRPDSlabCanAbsorption.cpp
index dc64b2a511cebfad8dc22787bcb5013714e0cb08..47743d68ff9121c3a6a04ac04a0b41e82884e371 100644
--- a/Code/Mantid/Framework/Algorithms/src/HRPDSlabCanAbsorption.cpp
+++ b/Code/Mantid/Framework/Algorithms/src/HRPDSlabCanAbsorption.cpp
@@ -171,8 +171,10 @@ API::MatrixWorkspace_sptr HRPDSlabCanAbsorption::runFlatPlateAbsorption()
   {
     NeutronAtom neutron(static_cast<uint16_t>(EMPTY_DBL()), static_cast<uint16_t>(0),
                         0.0, 0.0, sigma_s, 0.0, sigma_s, sigma_atten);
-    Material mat("SetInSphericalAbsorption", neutron, rho);
-    m_inputWS->mutableSample().setMaterial(mat);
+    Object shape = m_inputWS->sample().getShape(); // copy
+    shape.setMaterial(Material("SetInSphericalAbsorption", neutron, rho));
+    m_inputWS->mutableSample().setShape(shape);
+  
   }
 
   // Call FlatPlateAbsorption as a Child Algorithm
diff --git a/Code/Mantid/Framework/Algorithms/src/Integration.cpp b/Code/Mantid/Framework/Algorithms/src/Integration.cpp
index 5c9ce61cc666d2b9853a118b76f5010bebd732c2..1e906c79ea0a78a75c2f1975222e92ebf222b34b 100644
--- a/Code/Mantid/Framework/Algorithms/src/Integration.cpp
+++ b/Code/Mantid/Framework/Algorithms/src/Integration.cpp
@@ -9,6 +9,7 @@
 #include "MantidAPI/Progress.h"
 #include <cmath>
 
+#include "MantidAPI/NumericAxis.h"
 #include "MantidAPI/TextAxis.h"
 #include "MantidKernel/BoundedValidator.h"
 
@@ -46,6 +47,20 @@ void Integration::init()
   declareProperty("IncludePartialBins", false, "If true then partial bins from the beginning and end of the input range are also included in the integration.");
 }
 
+/**
+ * Std-style comparision function object (satisfies the requirements of Compare)
+ * @return true if first argument < second argument (with some tolerance/epsilon)
+ */
+struct tolerant_less: public std::binary_function<double,double,bool>
+{
+public:
+  bool operator()(const double &left, const double &right) const
+  {
+    // soft equal, if the diff left-right is below a numerical error (uncertainty) threshold, we cannot say
+    return (left < right) && (std::abs(left - right) > 1*std::numeric_limits<double>::epsilon());
+  }
+};
+
 /** Executes the algorithm
  *
  *  @throw runtime_error Thrown if algorithm cannot execute
@@ -89,6 +104,7 @@ void Integration::exec()
   Progress progress(this, 0, 1, m_MaxSpec-m_MinSpec+1);
 
   const bool axisIsText = localworkspace->getAxis(1)->isText();
+  const bool axisIsNumeric = localworkspace->getAxis(1)->isNumeric();
 
   // Loop over spectra
   PARALLEL_FOR2(localworkspace,outputWorkspace)
@@ -104,6 +120,11 @@ void Integration::exec()
       Mantid::API::TextAxis* newAxis = dynamic_cast<Mantid::API::TextAxis*>(outputWorkspace->getAxis(1));
       newAxis->setLabel(outWI, localworkspace->getAxis(1)->label(i));
     }
+    else if ( axisIsNumeric )
+    {
+      Mantid::API::NumericAxis* newAxis = dynamic_cast<Mantid::API::NumericAxis*>(outputWorkspace->getAxis(1));
+      newAxis->setValue(outWI, (*(localworkspace->getAxis(1)))(i));
+    }
 
     // This is the output
     ISpectrum * outSpec = outputWorkspace->getSpectrum(outWI);
@@ -129,17 +150,29 @@ void Integration::exec()
 
     // Find the range [min,max]
     MantidVec::const_iterator lowit, highit;
-    if (m_MinRange == EMPTY_DBL()) lowit=X.begin();
-    else lowit=std::lower_bound(X.begin(),X.end(),m_MinRange);
+    if (m_MinRange == EMPTY_DBL())
+    {
+      lowit=X.begin();
+    }
+    else
+    {
+      lowit = std::lower_bound(X.begin(), X.end(), m_MinRange, tolerant_less());
+    }
 
-    if (m_MaxRange == EMPTY_DBL()) highit=X.end();
-    else highit=std::find_if(lowit,X.end(),std::bind2nd(std::greater<double>(),m_MaxRange));
+    if (m_MaxRange == EMPTY_DBL())
+    {
+      highit=X.end();
+    }
+    else
+    {
+      highit = std::upper_bound(lowit, X.end(), m_MaxRange, tolerant_less());
+    }
 
     // If range specified doesn't overlap with this spectrum then bail out
     if ( lowit == X.end() || highit == X.begin() ) continue;
 
     // Upper limit is the bin before, i.e. the last value smaller than MaxRange
-    --highit;
+    --highit; // (note: decrementing 'end()' is safe for vectors, at least according to the C++ standard)
 
     MantidVec::difference_type distmin = std::distance(X.begin(),lowit);
     MantidVec::difference_type distmax = std::distance(X.begin(),highit);
diff --git a/Code/Mantid/Framework/Algorithms/src/MonteCarloAbsorption.cpp b/Code/Mantid/Framework/Algorithms/src/MonteCarloAbsorption.cpp
index 08025459c2434c8bc29e88da4a024df8e319f192..aee3e72c857ff4b24642ead7d7908e1120029309 100644
--- a/Code/Mantid/Framework/Algorithms/src/MonteCarloAbsorption.cpp
+++ b/Code/Mantid/Framework/Algorithms/src/MonteCarloAbsorption.cpp
@@ -5,20 +5,24 @@
 #include "MantidAPI/WorkspaceProperty.h"
 #include "MantidAPI/WorkspaceValidators.h"
 #include "MantidAPI/SampleEnvironment.h"
-#include "MantidKernel/BoundedValidator.h"
 #include "MantidGeometry/IDetector.h"
 #include "MantidGeometry/Objects/Track.h"
-#include "MantidKernel/VectorHelper.h"
+#include "MantidKernel/BoundedValidator.h"
 #include "MantidKernel/NeutronAtom.h"
+#include "MantidKernel/VectorHelper.h"
 
-// @todo: This needs a factory
-#include "MantidKernel/MersenneTwister.h"
+#include <boost/random/uniform_int.hpp>
+#include <boost/random/uniform_real.hpp>
+#include <boost/random/variate_generator.hpp>
 
 /// @cond
 namespace
 {
   /// Number of attempts to choose a random point within the object before it gives up
-  const int MaxRandPointAttempts(20);
+  const int MaxRandPointAttempts(500);
+
+  /// Element size in mm
+  const double ELEMENT_SIZE = 1.0;
 }
 /// @endcond
 
@@ -26,15 +30,10 @@ namespace Mantid
 {
   namespace Algorithms
   {
-    
+
     DECLARE_ALGORITHM(MonteCarloAbsorption)
 
-    using API::WorkspaceProperty;
-    using API::WorkspaceUnitValidator;
-    using API::InstrumentValidator;
-    using API::MatrixWorkspace_sptr;
-    using API::WorkspaceFactory;
-    using API::Progress;
+    using namespace API;
     using namespace Geometry;
     using namespace Kernel;
 
@@ -45,28 +44,26 @@ namespace Mantid
     /**
      * Constructor
      */
-    MonteCarloAbsorption::MonteCarloAbsorption() : 
-      m_inputWS(), m_sampleShape(NULL), m_container(NULL), m_numberOfPoints(0), 
-      m_xStepSize(0), m_numberOfEvents(1), m_samplePos(), m_sourcePos(), 
-      m_bbox_length(0.0), m_bbox_halflength(0.0), m_bbox_width(0.0), 
-      m_bbox_halfwidth(0.0), m_bbox_height(0.0), m_bbox_halfheight(0.0), 
-      m_randGen(NULL)
+    MonteCarloAbsorption::MonteCarloAbsorption() :
+      m_samplePos(), m_sourcePos(), m_blocks(),
+      m_blkHalfX(0.0), m_blkHalfY(0.0), m_blkHalfZ(0.0),
+      m_rngs(0), m_inputWS(), m_sampleShape(NULL), m_container(NULL), m_numberOfPoints(0),
+      m_xStepSize(0), m_numberOfEvents(300)
     {
     }
-    
+
     /**
      * Destructor
      */
     MonteCarloAbsorption::~MonteCarloAbsorption()
     {
-      delete m_randGen;
     }
 
     //------------------------------------------------------------------------------
     // Private methods
     //------------------------------------------------------------------------------
-    
-    /** 
+
+    /**
      * Initialize the algorithm
      */
     void MonteCarloAbsorption::init()
@@ -77,49 +74,50 @@ namespace Mantid
       wsValidator->add<InstrumentValidator>();
 
       declareProperty(new WorkspaceProperty<>("InputWorkspace", "", Direction::Input,
-          wsValidator),
-          "The name of the input workspace.  The input workspace must have X units of wavelength.");
+                                              wsValidator),
+                      "The name of the input workspace.  The input workspace must have X units of wavelength.");
       declareProperty(new WorkspaceProperty<> ("OutputWorkspace", "", Direction::Output),
-          "The name to use for the output workspace.");
+                      "The name to use for the output workspace.");
       auto positiveInt = boost::make_shared<Kernel::BoundedValidator<int> >();
       positiveInt->setLower(1);
       declareProperty("NumberOfWavelengthPoints", EMPTY_INT(), positiveInt,
-          "The number of wavelength points for which a simulation is atttempted (default: all points)");
-      declareProperty("EventsPerPoint", 300, positiveInt,
-          "The number of \"neutron\" events to generate per simulated point");
+                      "The number of wavelength points for which a simulation is atttempted (default: all points)");
+      declareProperty("EventsPerPoint", m_numberOfEvents, positiveInt,
+                      "The number of \"neutron\" events to generate per simulated point");
       declareProperty("SeedValue", 123456789, positiveInt,
-          "Seed the random number generator with this value");
+                      "Seed the random number generator with this value");
 
     }
-    
+
     /**
      * Execution code
      */
     void MonteCarloAbsorption::exec()
     {
       retrieveInput();
-      initCaches();      
-      
+      initCaches();
+
+      g_log.debug() << "Creating output workspace\n";
       MatrixWorkspace_sptr correctionFactors = WorkspaceFactory::Instance().create(m_inputWS);
       correctionFactors->isDistribution(true); // The output of this is a distribution
       correctionFactors->setYUnit(""); // Need to explicitly set YUnit to nothing
       correctionFactors->setYUnitLabel("Attenuation factor");
-      
+
       const bool isHistogram = m_inputWS->isHistogramData();
       const int numHists = static_cast<int>(m_inputWS->getNumberHistograms());
       const int numBins = static_cast<int>(m_inputWS->blocksize());
-      
+
       // Compute the step size
       m_xStepSize = numBins/m_numberOfPoints;
 
-      std::ostringstream message;
-      message << "Simulation performed every " << m_xStepSize  << " wavelength points" << std::endl;
-      g_log.information(message.str());
-      message.str("");
-      
-      Progress prog(this,0.0,1.0,numHists);
+      g_log.information() << "Simulation performed every " << m_xStepSize
+                          << " wavelength points" << std::endl;
+
+      Progress prog(this,0.0,1.0, numHists*numBins/m_xStepSize);
+      PARALLEL_FOR1(correctionFactors)
       for( int i = 0; i < numHists; ++i )
       {
+        PARALLEL_START_INTERUPT_REGION
 
         // Copy over the X-values
         const MantidVec & xValues = m_inputWS->readX(i);
@@ -132,16 +130,19 @@ namespace Mantid
         }
         catch(Kernel::Exception::NotFoundError&)
         {
-          continue;
+          // intel compiler hangs with continue statements inside a catch
+          // block that is within an omp loop...
         }
+        if(!detector) continue;
 
         MantidVec & yValues = correctionFactors->dataY(i);
         MantidVec & eValues = correctionFactors->dataE(i);
         // Simulation for each requested wavelength point
         for( int bin = 0; bin < numBins; bin += m_xStepSize )
         {
+          prog.report("Computing corrections for bin " + boost::lexical_cast<std::string>(bin));
           const double lambda = isHistogram ?
-              (0.5 * (xValues[bin] + xValues[bin + 1]) ) : xValues[bin];
+                (0.5 * (xValues[bin] + xValues[bin + 1]) ) : xValues[bin];
           doSimulation(detector.get(), lambda, yValues[bin], eValues[bin]);
           // Ensure we have the last point for the interpolation
           if ( m_xStepSize > 1 && bin + m_xStepSize >= numBins && bin+1 != numBins)
@@ -153,11 +154,13 @@ namespace Mantid
         // Interpolate through points not simulated
         if( m_xStepSize > 1 )
         {
+          prog.report("Interpolating unsimulated points");
           Kernel::VectorHelper::linearlyInterpolateY(xValues, yValues, m_xStepSize);
         }
-        prog.report();
 
-     }
+        PARALLEL_END_INTERUPT_REGION
+      }
+      PARALLEL_CHECK_INTERUPT_REGION
 
       // Save the results
       setProperty("OutputWorkspace", correctionFactors);
@@ -175,9 +178,9 @@ namespace Mantid
                                             double & attenFactor, double & error)
     {
       /**
-       Currently, assuming square beam profile to pick start position then randomly selecting 
+       Currently, assuming square beam profile to pick start position then randomly selecting
        a point within the sample using it's bounding box.
-       This point defines the single scattering point and hence the attenuation path lengths and final 
+       This point defines the single scattering point and hence the attenuation path lengths and final
        directional vector to the detector
        */
       // Absolute detector position
@@ -190,15 +193,12 @@ namespace Mantid
       {
         V3D startPos = sampleBeamProfile();
         V3D scatterPoint = selectScatterPoint();
-        try
-        {
-          attenFactor += attenuationFactor(startPos, scatterPoint, detectorPos, lambda);
-        }
-        catch(std::logic_error &)
+        double eventFactor(0.0);
+        if(attenuationFactor(startPos, scatterPoint, detectorPos, lambda, eventFactor))
         {
-          continue;
+          attenFactor += eventFactor;
+          ++numDetected;
         }
-        ++numDetected;
       }
 
       // Attenuation factor is simply the average value
@@ -218,26 +218,35 @@ namespace Mantid
     }
 
     /**
-     * Selects a random location within the sample + container environment. 
+     * Selects a random location within the sample + container environment. The bounding box is
+     * used as an approximation to generate a point and this is then tested for its validity within
+     * the shape.
      * @returns Selected position as V3D object
      */
     V3D MonteCarloAbsorption::selectScatterPoint() const
     {
-      // Generate 3 random numbers, use them to calculate a random location
-      // within the bounding box of the sample environment + sample 
-      // and then check if this position is within the whole environment. 
-      // If it is return it, if not try again.
+      // Randomly select a block from the subdivided set and then randomly select a point
+      // within that block and test if it inside the sample/container. If yes then accept, else
+      // keep trying.
+      boost::uniform_int<size_t> uniIntDist(0, m_blocks.size() - 1);
+      boost::variate_generator<boost::mt19937&, boost::uniform_int<size_t>>
+          uniInt(rgen(), uniIntDist);
+      boost::uniform_real<> uniRealDist(0, 1.0);
+      boost::variate_generator<boost::mt19937&, boost::uniform_real<>>
+          uniReal(rgen(), uniRealDist);
+
       V3D scatterPoint;
       int nattempts(0);
       while( nattempts < MaxRandPointAttempts )
       {
-        const double x = m_bbox_halflength*(2.0*m_randGen->nextValue() - 1.0);
-        const double y = m_bbox_halfwidth*(2.0*m_randGen->nextValue() - 1.0);
-        const double z = m_bbox_halfheight*(2.0*m_randGen->nextValue() - 1.0);
+        size_t index = uniInt();
+        const auto & block = m_blocks[index];
+        const double x = m_blkHalfX*(2.0*uniReal() - 1.0) + block.xMin();
+        const double y = m_blkHalfY*(2.0*uniReal() - 1.0) + block.yMin();
+        const double z = m_blkHalfZ*(2.0*uniReal() - 1.0) + block.zMin();
         scatterPoint(x,y,z);
         ++nattempts;
-        if( m_sampleShape->isValid(scatterPoint) ||
-            (m_container && m_container->isValid(scatterPoint)) )
+        if( ptIntersectsSample(scatterPoint) )
         {
           scatterPoint += m_samplePos;
           return scatterPoint;
@@ -245,9 +254,8 @@ namespace Mantid
       }
       // If we got here then the shape is too strange for the bounding box to be of any use.
       g_log.error() << "Attempts to generate a random point with the sample/can "
-          << "have exceeded the allowed number of tries.\n";
+                    << "have exceeded the allowed number of tries.\n";
       throw std::runtime_error("Attempts to produce random scatter point failed. Check sample shape.");
-
     }
 
     /**
@@ -256,25 +264,27 @@ namespace Mantid
      * @param scatterPoint :: The point of scatter
      * @param finalPos :: The end point of the track
      * @param lambda :: The wavelength of the neutron
-     * @returns The attenuation factor for this neutron's track
+     * @param factor :: Output parameter storing the attenuation factor
+     * @returns True if the track was valid, false otherwise
      */
-    double 
+    bool
     MonteCarloAbsorption::attenuationFactor(const V3D & startPos, const V3D & scatterPoint,
-                                            const V3D & finalPos, const double lambda)
+                                            const V3D & finalPos, const double lambda,
+                                            double & factor)
     {
-      double factor(1.0);
-
-      // Define two tracks, before and after scatter, and trace check their 
+      // Start at one
+      factor = 1.0;
+      // Define two tracks, before and after scatter, and trace check their
       // intersections with the the environment and sample
       Track beforeScatter(scatterPoint, (startPos - scatterPoint));
       Track afterScatter(scatterPoint, (finalPos - scatterPoint));
       // Theoretically this should never happen as there should always be an intersection
       // but do to precision limitations points very close to the surface give
       // zero intersection, so just reject
-      if( m_sampleShape->interceptSurface(beforeScatter) == 0 || 
+      if( m_sampleShape->interceptSurface(beforeScatter) == 0 ||
           m_sampleShape->interceptSurface(afterScatter) == 0 )
       {
-        throw std::logic_error("Track has no surfaces intersections.");
+        return false;
       }
 
       double length = beforeScatter.begin()->distInsideObject;
@@ -291,14 +301,12 @@ namespace Mantid
           citr != cend; ++citr)
       {
         length = citr->distInsideObject;
-        IObjComponent *objComp = dynamic_cast<IObjComponent*>(citr->componentID);
-        Material_const_sptr mat = objComp->material();
-        factor *= attenuation(length, *mat, lambda);
+        factor *= attenuation(length, citr->object->material(), lambda);
       }
 
       length = afterScatter.begin()->distInsideObject;
       factor *= attenuation(length, *m_sampleMaterial, lambda);
-      
+
       afterScatter.clearIntersectionResults();
       if( m_container )
       {
@@ -310,22 +318,20 @@ namespace Mantid
           citr != cend; ++citr)
       {
         length = citr->distInsideObject;
-        IObjComponent *objComp = dynamic_cast<IObjComponent*>(citr->componentID);
-        Material_const_sptr mat = objComp->material();
-        factor *= attenuation(length, *mat, lambda);
+        factor *= attenuation(length, citr->object->material(), lambda);
       }
-        
-      return factor;
+
+      return true;
     }
 
     /**
      * Calculate the attenuation for a given length, material and wavelength
      * @param length :: Distance through the material
-     * @param material :: A reference to the Material 
+     * @param material :: A reference to the Material
      * @param lambda :: The wavelength
      * @returns The attenuation factor
      */
-    double 
+    double
     MonteCarloAbsorption::attenuation(const double length, const Kernel::Material& material,
                                       const double lambda) const
     {
@@ -344,24 +350,6 @@ namespace Mantid
     {
       m_inputWS = getProperty("InputWorkspace");
 
-      // // Define a test sample material
-      // Material *vanadium = new Material("Vanadium", PhysicalConstants::getNeutronAtom(23,0), 0.072);
-      // m_inputWS->mutableSample().setMaterial(*vanadium);
-
-      // // Define test environment
-      // std::ostringstream xml;
-      // xml << "<sphere id=\"" << "sp" <<  "\">"
-      // 	  << "<centre x=\"" << 0.0 << "\"  y=\"" << 0.0 << "\" z=\"" << 0.0 << "\" />"
-      // 	  << "<radius val=\"" << 0.05 << "\" />"
-      // 	  << "</sphere>";
-
-      // Geometry::ShapeFactory shapeMaker;
-      // Object_sptr p = shapeMaker.createShape(xml.str());
-
-      // API::SampleEnvironment * kit = new API::SampleEnvironment("TestEnv");
-      // kit->add(new ObjComponent("one", p, NULL, boost::shared_ptr<Material>(vanadium)));
-      // m_inputWS->mutableSample().setEnvironment(kit);
-
       m_sampleShape = &(m_inputWS->sample().getShape());
       m_sampleMaterial = &(m_inputWS->sample().getMaterial());
       if( !m_sampleShape->hasValidShape() )
@@ -370,13 +358,13 @@ namespace Mantid
                       << ", No. of surfaces: " << m_sampleShape->getSurfacePtr().size() << "\n";
         throw std::invalid_argument("Input workspace has an invalid sample shape.");
       }
-      
+
       if( m_sampleMaterial->totalScatterXSection(1.0) == 0.0 )
       {
         g_log.warning() << "The sample material appears to have zero scattering cross section.\n"
                         << "Result will most likely be nonsensical.\n";
       }
-      
+
       try
       {
         m_container = &(m_inputWS->sample().getEnvironment());
@@ -402,33 +390,152 @@ namespace Mantid
     }
 
     /**
-     * Initialise the caches used here including setting up the random 
+     * Initialise the caches used here including setting up the random
      * number generator
      */
     void MonteCarloAbsorption::initCaches()
     {
-      if( !m_randGen )
-      {
-        const int seedValue = getProperty("SeedValue");
-        m_randGen = new Kernel::MersenneTwister(seedValue);
-      }
-      
+      g_log.debug() << "Caching input\n";
+      // Setup random number generators for parallel execution
+      initRNG();
+
       m_samplePos = m_inputWS->getInstrument()->getSample()->getPos();
       m_sourcePos = m_inputWS->getInstrument()->getSource()->getPos();
       BoundingBox box(m_sampleShape->getBoundingBox());
       if( m_container )
       {
-        BoundingBox envBox;
-        m_container->getBoundingBox(envBox);
-        box.grow(envBox);
+        box.grow(m_container->boundingBox());
       }
-      //Save the dimensions for quicker calculations later
-      m_bbox_length = box.xMax() - box.xMin();
-      m_bbox_halflength = 0.5 * m_bbox_length;
-      m_bbox_width = box.yMax() - box.yMin();
-      m_bbox_halfwidth = 0.5 * m_bbox_width;
-      m_bbox_height = box.zMax() - box.zMin();
-      m_bbox_halfheight = 0.5 * m_bbox_height;
+
+      // Chop the bounding box up into a set of small boxes. This will be used
+      // as a first guess for generating a random scatter point
+      const double cubeSide = ELEMENT_SIZE*1e-3;
+      const double xLength = box.width().X();
+      const double yLength = box.width().Y();
+      const double zLength = box.width().Z();
+      const int numXSlices = static_cast<int>(xLength/cubeSide);
+      const int numYSlices = static_cast<int>(yLength/cubeSide);
+      const int numZSlices = static_cast<int>(zLength/cubeSide);
+      const double xThick = xLength/numXSlices;
+      const double yThick = yLength/numYSlices;
+      const double zThick = zLength/numZSlices;
+      m_blkHalfX = 0.5*xThick;
+      m_blkHalfY = 0.5*yThick;
+      m_blkHalfZ = 0.5*zThick;
+
+      const size_t numPossibleVolElements = numXSlices*numYSlices*numZSlices;
+      g_log.debug() << "Attempting to divide sample + container into " << numPossibleVolElements << " blocks.\n";
+
+      try
+      {
+        m_blocks.clear();
+        m_blocks.reserve(numPossibleVolElements/2);
+      }
+      catch (std::exception&)
+      {
+        // Typically get here if the number of volume elements is too large
+        // Provide a bit more information
+        g_log.error("Too many volume elements requested - try increasing the value of the ElementSize property.");
+        throw;
+      }
+
+      const auto boxCentre = box.centrePoint();
+      const double x0 = boxCentre.X() - 0.5*xLength;
+      const double y0 = boxCentre.Y() - 0.5*yLength;
+      const double z0 = boxCentre.Z() - 0.5*zLength;
+      // Store a chunk as a BoundingBox object.
+      // Only cache blocks that have some intersection with the
+      // sample or container.
+      for (int i = 0; i < numZSlices; ++i)
+      {
+        const double zmin = z0 + i*zThick;
+        const double zmax = zmin + zThick;
+        for (int j = 0; j < numYSlices; ++j)
+        {
+          const double ymin = y0 + j*yThick;
+          const double ymax = ymin + yThick;
+          for (int k = 0; k < numXSlices; ++k)
+          {
+            const double xmin = x0 + k*xThick;
+            const double xmax = xmin + xThick;
+            if(boxIntersectsSample(xmax, ymax, zmax, xmin, ymin, zmin))
+            {
+#if !(defined(__INTEL_COMPILER)) && !(defined(__clang__))
+                m_blocks.emplace_back(xmax, ymax, zmax, xmin, ymin, zmin);
+#else
+                m_blocks.push_back(BoundingBox(xmax, ymax, zmax, xmin, ymin, zmin));
+#endif
+            }
+          }
+        }
+      }
+
+      m_numVolumeElements = m_blocks.size();
+      g_log.debug() << "Sample + container divided into " << m_numVolumeElements << " blocks.";
+      if(m_numVolumeElements == numPossibleVolElements) g_log.debug("\n");
+      else g_log.debug() << " Skipped " << (numPossibleVolElements-m_numVolumeElements)
+                         << " blocks that do not intersect with the sample + container\n";
+    }
+
+    /**
+     */
+    void MonteCarloAbsorption::initRNG()
+    {
+      const int baseSeed = getProperty("SeedValue");
+      // For parallel execution use a vector of RNG, each with a seed one higher that the previous
+      m_rngs.resize(PARALLEL_GET_MAX_THREADS);
+      // Set the seeds
+      for(int i = 0; i < static_cast<int>(m_rngs.size()); ++i)
+      {
+        m_rngs[i].seed(baseSeed + i);
+      }
+    }
+
+    /**
+     * @return A reference to a boost::random::mt19937 object
+     */
+    boost::mt19937 &MonteCarloAbsorption::rgen() const
+    {
+      // Const from point of view of caller
+      return const_cast<MonteCarloAbsorption*>(this)->m_rngs[PARALLEL_THREAD_NUMBER];
+    }
+
+    /**
+     * @param xmax max x-coordinate of cuboid point
+     * @param ymax max y-coordinate of cuboid point
+     * @param zmax max z-coordinate of cuboid point
+     * @param xmin min z-coordinate of cuboid point
+     * @param ymin min z-coordinate of cuboid point
+     * @param zmin min z-coordinate of cuboid point
+     * @return True if any of the vertices intersect the sample or container
+     */
+    bool MonteCarloAbsorption::boxIntersectsSample(const double xmax, const double ymax, const double zmax,
+                                                   const double xmin, const double ymin, const double zmin) const
+    {
+      // Check all 8 corners for intersection
+      if( ptIntersectsSample(V3D(xmax, ymin, zmin)) || // left-front-bottom
+          ptIntersectsSample(V3D(xmax, ymax, zmin)) || // left-front-top
+          ptIntersectsSample(V3D(xmin, ymax, zmin)) || // right-front-top
+          ptIntersectsSample(V3D(xmin, ymin, zmin)) || // right-front-bottom
+          ptIntersectsSample(V3D(xmax, ymin, zmax)) || // left-back-bottom
+          ptIntersectsSample(V3D(xmax, ymax, zmax)) || // left-back-top
+          ptIntersectsSample(V3D(xmin, ymax, zmax)) || // right-back-top
+          ptIntersectsSample(V3D(xmin, ymin, zmax)) ) // right-back-bottom
+      {
+        return true;
+      }
+      else return false;
+    }
+
+    /**
+     *
+     * @param pt A V3D giving a point to test
+     * @return True if point is inside sample or container, false otherwise
+     */
+    bool MonteCarloAbsorption::ptIntersectsSample(const V3D &pt) const
+    {
+      return m_sampleShape->isValid(pt) ||
+          (m_container && m_container->isValid(pt));
     }
 
   }
diff --git a/Code/Mantid/Framework/Algorithms/src/MultipleScatteringCylinderAbsorption.cpp b/Code/Mantid/Framework/Algorithms/src/MultipleScatteringCylinderAbsorption.cpp
index 7dcf1d1cf188fc5aaa26f6631b365e8f2713da4b..f776f68d60df1b5832e54045d40d408d96f87896 100644
--- a/Code/Mantid/Framework/Algorithms/src/MultipleScatteringCylinderAbsorption.cpp
+++ b/Code/Mantid/Framework/Algorithms/src/MultipleScatteringCylinderAbsorption.cpp
@@ -127,8 +127,9 @@ void MultipleScatteringCylinderAbsorption::exec()
   {
     NeutronAtom neutron(static_cast<uint16_t>(EMPTY_DBL()), static_cast<uint16_t>(0),
                         0.0, 0.0, coeff3, 0.0, coeff3, coeff1);
-    Material mat("SetInMultipleScattering", neutron, coeff2);
-    in_WS->mutableSample().setMaterial(mat);
+    Object shape = in_WS->sample().getShape(); // copy
+    shape.setMaterial(Material("SetInMultipleScattering", neutron, coeff2));
+    in_WS->mutableSample().setShape(shape);
   }
   g_log.debug() << "radius=" << radius << " coeff1=" << coeff1 << " coeff2=" << coeff2
                 << " coeff3=" << coeff3 << "\n";
diff --git a/Code/Mantid/Framework/Algorithms/src/SphericalAbsorption.cpp b/Code/Mantid/Framework/Algorithms/src/SphericalAbsorption.cpp
index 1c902cec509584627e22006e6251b84efa287d2e..59b6187c4eaceb114465403b3b702dc4f43c9769 100644
--- a/Code/Mantid/Framework/Algorithms/src/SphericalAbsorption.cpp
+++ b/Code/Mantid/Framework/Algorithms/src/SphericalAbsorption.cpp
@@ -104,8 +104,9 @@ void SphericalAbsorption::retrieveBaseProperties()
   {
     NeutronAtom neutron(static_cast<uint16_t>(EMPTY_DBL()), static_cast<uint16_t>(0),
                          0.0, 0.0, sigma_s, 0.0, sigma_s, sigma_atten);
-    Material mat("SetInSphericalAbsorption", neutron, rho);
-    m_inputWS->mutableSample().setMaterial(mat);
+    Object shape = m_inputWS->sample().getShape(); // copy
+    shape.setMaterial(Material("SetInSphericalAbsorption", neutron, rho));
+    m_inputWS->mutableSample().setShape(shape);
   }
 
   m_refAtten = sigma_atten * rho;
diff --git a/Code/Mantid/Framework/Algorithms/test/AnnularRingAbsorptionTest.h b/Code/Mantid/Framework/Algorithms/test/AnnularRingAbsorptionTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..1772fd0a12573514814f32464489ad8eb5524b12
--- /dev/null
+++ b/Code/Mantid/Framework/Algorithms/test/AnnularRingAbsorptionTest.h
@@ -0,0 +1,143 @@
+#ifndef MANTID_ALGORITHMS_ANNULARRINGABSORPTIONTEST_H_
+#define MANTID_ALGORITHMS_ANNULARRINGABSORPTIONTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidAlgorithms/AnnularRingAbsorption.h"
+#include "MantidAPI/FrameworkManager.h"
+#include "MantidAPI/Sample.h"
+#include "MantidKernel/UnitFactory.h"
+
+#include "MantidTestHelpers/WorkspaceCreationHelper.h"
+
+using Mantid::Algorithms::AnnularRingAbsorption;
+
+class AnnularRingAbsorptionTest : public CxxTest::TestSuite
+{
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static AnnularRingAbsorptionTest *createSuite() { return new AnnularRingAbsorptionTest(); }
+  static void destroySuite( AnnularRingAbsorptionTest *suite ) { delete suite; }
+
+  void test_Init()
+  {
+    AnnularRingAbsorption alg;
+    TS_ASSERT_THROWS_NOTHING( alg.initialize() )
+    TS_ASSERT( alg.isInitialized() )
+  }
+
+  //-------------------- Success cases --------------------------------
+
+  void test_Algorithm_Attaches_Sample_To_InputWorkspace_And_Produces_Correct_Result()
+  {
+    using namespace Mantid::API;
+
+    auto alg = createAlgorithmForTestCan();
+    auto inputWS = createInputWorkspace();
+
+    TS_ASSERT_THROWS_NOTHING( alg->setProperty("InputWorkspace", inputWS) );
+    TS_ASSERT_THROWS_NOTHING( alg->setPropertyValue("OutputWorkspace", "UnusedForChild") );
+    const int numOMPThreads = FrameworkManager::Instance().getNumOMPThreads();
+    FrameworkManager::Instance().setNumOMPThreads(1); // To ensure reproducible results
+    TS_ASSERT_THROWS_NOTHING(alg->execute());
+    FrameworkManager::Instance().setNumOMPThreads(numOMPThreads);
+    TS_ASSERT( alg->isExecuted() );
+
+    MatrixWorkspace_sptr outWS = alg->getProperty("OutputWorkspace");
+    TS_ASSERT(outWS);
+
+    const double delta(1e-08);
+    const size_t middle_index = 4;
+    TS_ASSERT_DELTA(outWS->readY(0).front(), 0.984770748517, delta);
+    TS_ASSERT_DELTA(outWS->readY(0)[middle_index], 0.896084505371, delta);
+    TS_ASSERT_DELTA(outWS->readY(0).back(), 0.807794634447, delta);
+  }
+
+  //-------------------- Failure cases --------------------------------
+
+  void test_Workspace_With_No_Instrument_Is_Not_Accepted()
+  {
+    using Mantid::API::MatrixWorkspace_sptr;
+
+    auto alg = createAlgorithm();
+    // Create a simple test workspace that has no instrument
+    auto testWS = WorkspaceCreationHelper::Create2DWorkspace(10, 5);
+
+    TS_ASSERT_THROWS(alg->setProperty<MatrixWorkspace_sptr>("InputWorkspace", testWS),
+                     std::invalid_argument);
+  }
+
+  void test_Workspace_With_Units_Not_In_Wavelength_Is_Not_Accepted()
+  {
+    using Mantid::API::MatrixWorkspace_sptr;
+
+    auto alg = createAlgorithm();
+    // Create a simple test workspace that has no instrument
+    auto inputWS = WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(1, 5);
+
+    TS_ASSERT_THROWS(alg->setProperty<MatrixWorkspace_sptr>("InputWorkspace", inputWS),
+                     std::invalid_argument);
+  }
+
+  void test_Invalid_Sample_Material_Throws_Error()
+  {
+    using Mantid::API::MatrixWorkspace_sptr;
+
+    auto alg = createAlgorithmForTestCan();
+    auto inputWS = createInputWorkspace();
+
+    TS_ASSERT_THROWS_NOTHING( alg->setProperty("InputWorkspace", inputWS) );
+    TS_ASSERT_THROWS_NOTHING( alg->setProperty("SampleChemicalFormula", "A-lO") );
+    TS_ASSERT_THROWS(alg->execute(), std::invalid_argument );
+    TS_ASSERT( !alg->isExecuted() );
+  }
+
+  //-------------------- Helpers --------------------------------------
+
+private:
+
+  Mantid::API::IAlgorithm_sptr createAlgorithmForTestCan()
+  {
+    auto alg = createAlgorithm();
+
+    TS_ASSERT_THROWS_NOTHING( alg->setPropertyValue("OutputWorkspace", "UnusedForChild") );
+
+    TS_ASSERT_THROWS_NOTHING( alg->setProperty("CanOuterRadius", 1.1) );
+    TS_ASSERT_THROWS_NOTHING( alg->setProperty("CanInnerRadius", 0.92) );
+
+    TS_ASSERT_THROWS_NOTHING( alg->setProperty("SampleHeight", 3.8) );
+    TS_ASSERT_THROWS_NOTHING( alg->setProperty("SampleThickness", 0.05) );
+    TS_ASSERT_THROWS_NOTHING( alg->setProperty("SampleChemicalFormula", "Li2-Ir-O3") );
+    TS_ASSERT_THROWS_NOTHING( alg->setProperty("SampleNumberDensity", 0.004813) );
+
+    TS_ASSERT_THROWS_NOTHING( alg->setProperty<int>("NumberOfWavelengthPoints", 5000) );
+    TS_ASSERT_THROWS_NOTHING( alg->setProperty<int>("EventsPerPoint", 300) );
+
+    return alg;
+  }
+
+
+  Mantid::API::IAlgorithm_sptr createAlgorithm()
+  {
+    auto alg = boost::shared_ptr<Mantid::API::IAlgorithm>(new AnnularRingAbsorption());
+    alg->initialize();
+    alg->setChild(true);
+    alg->setRethrows(true);
+    return alg;
+  }
+
+  Mantid::API::MatrixWorkspace_sptr createInputWorkspace()
+  {
+    const int nspectra(1), nbins(9);
+    auto inputWS = WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(nspectra, nbins);
+    // Needs to have units of wavelength
+    inputWS->getAxis(0)->unit() = Mantid::Kernel::UnitFactory::Instance().create("Wavelength");
+
+    return inputWS;
+  }
+
+};
+
+
+#endif /* MANTID_ALGORITHMS_ANNULARRINGABSORPTIONTEST_H_ */
diff --git a/Code/Mantid/Framework/Algorithms/test/CopySampleTest.h b/Code/Mantid/Framework/Algorithms/test/CopySampleTest.h
index d3a0aad1fe26696ffa6e090a0908b371d6291ab1..3c5c3403f3de256a87e70bb51df5ff843d612d1b 100644
--- a/Code/Mantid/Framework/Algorithms/test/CopySampleTest.h
+++ b/Code/Mantid/Framework/Algorithms/test/CopySampleTest.h
@@ -3,7 +3,6 @@
 
 #include <cxxtest/TestSuite.h>
 #include "MantidKernel/Timer.h"
-#include "MantidKernel/System.h"
 #include <iostream>
 #include <iomanip>
 
@@ -20,6 +19,7 @@
 #include "MantidMDEvents/MDEvent.h"
 #include "MantidMDEvents/MDEventFactory.h"
 #include "MantidMDEvents/MDEventWorkspace.h"
+#include "MantidTestHelpers/ComponentCreationHelper.h"
 
 using namespace Mantid;
 using namespace Mantid::Algorithms;
@@ -33,7 +33,7 @@ class CopySampleTest : public CxxTest::TestSuite
 {
 public:
 
-    
+
   void test_Init()
   {
     CopySample alg;
@@ -41,38 +41,21 @@ public:
     TS_ASSERT( alg.isInitialized() )
   }
 
-  Object_sptr createCappedCylinder(double radius, double height, const V3D & baseCentre, const V3D & axis, const std::string & id)
-  {
-    std::ostringstream xml;
-    xml << "<cylinder id=\"" << id << "\">"
-      << "<centre-of-bottom-base x=\"" << baseCentre.X() << "\" y=\"" << baseCentre.Y() << "\" z=\"" << baseCentre.Z() << "\"/>"
-      << "<axis x=\"" << axis.X() << "\" y=\"" << axis.Y() << "\" z=\"" << axis.Z() << "\"/>"
-      << "<radius val=\"" << radius << "\" />"
-      << "<height val=\"" << height << "\" />"  << "</cylinder>";
-    ShapeFactory shapeMaker;
-    return shapeMaker.createShape(xml.str());
-  }
-  ObjComponent * createSingleObjectComponent()
-  {
-    Object_sptr pixelShape = createCappedCylinder(0.5, 1.5, V3D(0.0,0.0,0.0), V3D(0.,1.0,0.), "tube");
-    return new ObjComponent("pixel", pixelShape);
-  }
-
   Sample createsample()
   {
     Sample sample;
     sample.setName("test");
     const std::string envName("TestKit");
     SampleEnvironment *kit = new SampleEnvironment(envName);
-    kit->add(createSingleObjectComponent());
+    auto shape = ComponentCreationHelper::createCappedCylinder(0.5, 1.5, V3D(0.0,0.0,0.0), V3D(0.,1.0,0.), "tube");
+    kit->add(*shape);
     sample.setEnvironment(kit);
     OrientedLattice *latt = new OrientedLattice(1.0,2.0,3.0, 90, 90, 90);
     sample.setOrientedLattice(latt);
     delete latt;
-    Material vanBlock("vanBlock", Mantid::PhysicalConstants::getNeutronAtom(23, 0), 0.072);
-    sample.setMaterial(vanBlock);
-    Object_sptr shape_sptr =
-      createCappedCylinder(0.0127, 1.0, V3D(), V3D(0.0, 1.0, 0.0), "cyl");
+    Object_sptr shape_sptr = \
+      ComponentCreationHelper::createCappedCylinder(0.0127, 1.0, V3D(), V3D(0.0, 1.0, 0.0), "cyl");
+    shape_sptr->setMaterial(Material("vanBlock", Mantid::PhysicalConstants::getNeutronAtom(23, 0), 0.072));
     sample.setShape(*shape_sptr);
     return sample;
   }
@@ -103,7 +86,7 @@ public:
 
     TS_ASSERT_THROWS_NOTHING( alg.execute(); );
     TS_ASSERT( alg.isExecuted() );
-    
+
     // Retrieve the workspace from data service.
     MatrixWorkspace_sptr ws;
     TS_ASSERT_THROWS_NOTHING( ws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(outWSName) );
@@ -114,7 +97,7 @@ public:
     Sample copy=ws->mutableSample();
     TS_ASSERT_EQUALS(copy.getName(),"test" );
     TS_ASSERT_EQUALS(copy.getOrientedLattice().c(), 3.0);
-    TS_ASSERT_EQUALS(copy.getEnvironment().getName(), "TestKit");
+    TS_ASSERT_EQUALS(copy.getEnvironment().name(), "TestKit");
     TS_ASSERT_EQUALS(copy.getEnvironment().nelements(), 1);
     TS_ASSERT_DELTA(copy.getMaterial().cohScatterXSection(2.1), 0.0184,  1e-02);
     TS_ASSERT_EQUALS(copy.getShape().getName(),s.getShape().getName());
@@ -123,7 +106,7 @@ public:
     AnalysisDataService::Instance().remove(inWSName);
     AnalysisDataService::Instance().remove(outWSName);
   }
-  
+
 
   void test_exec_some()
   {
@@ -162,7 +145,7 @@ public:
     Sample copy=ws->mutableSample();
     TS_ASSERT_DIFFERS(copy.getName(),"test" );
     TS_ASSERT(!copy.hasOrientedLattice());
-    TS_ASSERT_EQUALS(copy.getEnvironment().getName(), "TestKit");
+    TS_ASSERT_EQUALS(copy.getEnvironment().name(), "TestKit");
     TS_ASSERT_EQUALS(copy.getEnvironment().nelements(), 1);
     TS_ASSERT_DELTA(copy.getMaterial().cohScatterXSection(2.1), 0.0184,  1e-02);
     TS_ASSERT_DIFFERS(copy.getShape().getName(),s.getShape().getName());
diff --git a/Code/Mantid/Framework/Algorithms/test/ElasticWindowTest.h b/Code/Mantid/Framework/Algorithms/test/ElasticWindowTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..9c0104fb8b98354cd41363a5f735414b30fb5246
--- /dev/null
+++ b/Code/Mantid/Framework/Algorithms/test/ElasticWindowTest.h
@@ -0,0 +1,192 @@
+#ifndef MANTID_ALGORITHMS_ELASTICWINDOWTEST_H_
+#define MANTID_ALGORITHMS_ELASTICWINDOWTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include <iostream>
+#include <iomanip>
+
+#include "MantidKernel/System.h"
+
+#include "MantidAlgorithms/ConvertUnits.h"
+#include "MantidAlgorithms/ConvertSpectrumAxis.h"
+#include "MantidAlgorithms/CreateSampleWorkspace.h"
+#include "MantidAlgorithms/ElasticWindow.h"
+#include "MantidAlgorithms/Rebin.h"
+#include "MantidAlgorithms/SetInstrumentParameter.h"
+
+using namespace Mantid;
+using namespace Mantid::Algorithms;
+using namespace Mantid::API;
+using namespace Mantid::Kernel;
+using namespace Mantid::Kernel::Units;
+
+class ElasticWindowTest : public CxxTest::TestSuite
+{
+public:
+
+  void setUp()
+  {
+    // Create a workspace and format it for the ElasticWindow algorithm
+
+    CreateSampleWorkspace createAlg;
+    createAlg.initialize();
+    createAlg.setProperty("Function", "User Defined");
+    createAlg.setProperty("UserDefinedFunction", "name=Lorentzian,Amplitude=100,PeakCentre=12700,FWHM=20;name=LinearBackground,A0=0.01");
+    createAlg.setProperty("XMin", 27000.0);
+    createAlg.setProperty("XMax", 28000.0);
+    createAlg.setProperty("BinWidth", 10.0);
+    createAlg.setProperty("NumBanks", 1);
+    createAlg.setProperty("OutputWorkspace", "__ElasticWindowTest_sample");
+    createAlg.execute();
+
+    ConvertUnits convertUnitsAlg;
+    convertUnitsAlg.initialize();
+    convertUnitsAlg.setProperty("InputWorkspace", "__ElasticWindowTest_sample");
+    convertUnitsAlg.setProperty("Target", "DeltaE");
+    convertUnitsAlg.setProperty("EMode", "Indirect");
+    convertUnitsAlg.setProperty("Efixed", 1.555);
+    convertUnitsAlg.setProperty("OutputWorkspace", "__ElasticWindowTest_sample");
+    convertUnitsAlg.execute();
+
+    Rebin rebinAlg;
+    rebinAlg.initialize();
+    rebinAlg.setProperty("InputWorkspace", "__ElasticWindowTest_sample");
+    rebinAlg.setProperty("Params", "-0.2,0.004,0.2");
+    rebinAlg.setProperty("OutputWorkspace", "__ElasticWindowTest_sample");
+    rebinAlg.execute();
+
+    SetInstrumentParameter setParamAlg;
+    setParamAlg.initialize();
+    setParamAlg.setProperty("Workspace", "__ElasticWindowTest_sample");
+    setParamAlg.setProperty("ParameterName", "Efixed");
+    setParamAlg.setProperty("ParameterType", "Number");
+    setParamAlg.setProperty("Value", "1.555");
+    setParamAlg.execute();
+  }
+
+  /**
+   * Converts the generated sample workspace spectra axis to Q.
+   */
+  void convertSampleWsToQ()
+  {
+    ConvertSpectrumAxis convQAlg;
+    convQAlg.initialize();
+
+    TS_ASSERT_THROWS_NOTHING( convQAlg.setProperty("InputWorkspace", "__ElasticWindowTest_sample") );
+    TS_ASSERT_THROWS_NOTHING( convQAlg.setProperty("Target", "MomentumTransfer") );
+    TS_ASSERT_THROWS_NOTHING( convQAlg.setProperty("EMode", "Indirect") );
+    TS_ASSERT_THROWS_NOTHING( convQAlg.setProperty("OutputWorkspace", "__ElasticWindowTest_sample") );
+
+    TS_ASSERT_THROWS_NOTHING( convQAlg.execute() );
+    TS_ASSERT( convQAlg.isExecuted() );
+  }
+
+  /**
+   * Test initialization of the algorithm is successful.
+   */
+  void test_init()
+  {
+    ElasticWindow alg;
+    TS_ASSERT_THROWS_NOTHING(alg.initialize());
+    TS_ASSERT(alg.isInitialized());
+  }
+
+  /**
+   * Test running ElasticWindow with just the peak range defined using reduced data.
+   */
+  void test_redPeakOnly()
+  {
+    ElasticWindow elwinAlg;
+    elwinAlg.initialize();
+
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("InputWorkspace", "__ElasticWindowTest_sample") );
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("Range1Start", -0.1) );
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("Range1End", 0.1) );
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("OutputInQ", "__ElasticWindowTest_outputQ") );
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("OutputInQSquared", "__ElasticWindowTest_outputQsq") );
+
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.execute() );
+    TS_ASSERT( elwinAlg.isExecuted() );
+
+    MatrixWorkspace_sptr qWs = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("__ElasticWindowTest_outputQ");
+    verifyQworkspace(qWs);
+  }
+
+  /**
+   * Test running ElasticWindow with just the peak range defined using S(Q,w) data.
+   */
+  void test_sqwPeakOnly()
+  {
+    // First convert the sample workspace from spectra number to elastic Q
+    convertSampleWsToQ();
+
+    ElasticWindow elwinAlg;
+    elwinAlg.initialize();
+
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("InputWorkspace", "__ElasticWindowTest_sample") );
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("Range1Start", -0.1) );
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("Range1End", 0.1) );
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("OutputInQ", "__ElasticWindowTest_outputQ") );
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("OutputInQSquared", "__ElasticWindowTest_outputQsq") );
+
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.execute() );
+    TS_ASSERT( elwinAlg.isExecuted() );
+
+    MatrixWorkspace_sptr qWs = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("__ElasticWindowTest_outputQ");
+    verifyQworkspace(qWs);
+  }
+
+  /**
+   * Test running ElasticWindow with both the peak and background ranges defined using reduced data.
+   */
+  void test_redPeakAndBackground()
+  {
+    ElasticWindow elwinAlg;
+    elwinAlg.initialize();
+
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("InputWorkspace", "__ElasticWindowTest_sample") );
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("Range1Start", -0.04) );
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("Range1End", 0.04) );
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("Range2Start", 0.05) );
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("Range2End", 0.06) );
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("OutputInQ", "__ElasticWindowTest_outputQ") );
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.setProperty("OutputInQSquared", "__ElasticWindowTest_outputQsq") );
+
+    TS_ASSERT_THROWS_NOTHING( elwinAlg.execute() );
+    TS_ASSERT( elwinAlg.isExecuted() );
+
+    MatrixWorkspace_sptr qWs = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("__ElasticWindowTest_outputQ");
+    verifyQworkspace(qWs);
+
+    MatrixWorkspace_sptr q2Ws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("__ElasticWindowTest_outputQsq");
+    verifyQ2workspace(q2Ws);
+  }
+
+private:
+
+  /**
+   * Ensures that a workspace is valid output in Q.
+   *
+   * @param ws Workspace to test
+   */
+  void verifyQworkspace(MatrixWorkspace_sptr ws)
+  {
+    std::string unitID = ws->getAxis(0)->unit()->unitID();
+    TS_ASSERT_EQUALS(unitID, "MomentumTransfer");
+  }
+
+  /**
+   * Ensures that a workspace is valid output in Q^2.
+   *
+   * @param ws Workspace to test
+   */
+  void verifyQ2workspace(MatrixWorkspace_sptr ws)
+  {
+    std::string unitID = ws->getAxis(0)->unit()->unitID();
+    TS_ASSERT_EQUALS(unitID, "QSquared");
+  }
+
+};
+
+#endif /* MANTID_ALGORITHMS_ELASTICWINDOWTEST_H_ */
diff --git a/Code/Mantid/Framework/Algorithms/test/IntegrationTest.h b/Code/Mantid/Framework/Algorithms/test/IntegrationTest.h
index ab4498a01145b5eb8a7ada3b4f772320379b001d..d3e1809ecb16159da1ba4a8979620c6d808dd0eb 100644
--- a/Code/Mantid/Framework/Algorithms/test/IntegrationTest.h
+++ b/Code/Mantid/Framework/Algorithms/test/IntegrationTest.h
@@ -354,6 +354,102 @@ public:
     doTestRebinned("-1.5", "1.75", 0, 3, true, 4, truth);
   }
 
+  void makeRealBinBoundariesWorkspace(const std::string inWsName)
+  {
+    const unsigned int lenX = 11, lenY = 10, lenE = lenY;
+
+    Workspace_sptr wsAsWs = WorkspaceFactory::Instance().create("Workspace2D", 1, lenX, lenY);
+    Workspace2D_sptr ws = boost::dynamic_pointer_cast<Workspace2D>(wsAsWs);
+
+    double x[lenX] = {-1, -0.8, -0.6, -0.4, -0.2, -2.22045e-16, 0.2, 0.4, 0.6, 0.8, 1};
+    for (unsigned int i = 0; i < lenX; i++)
+    {
+      ws->dataX(0)[i] = x[i];
+      // Generate some rounding errors. Note: if you increase errors by making this more complicated,
+      // you'll eventually make Integration "fail".
+      // Q is: how much tolerance should it have to inprecise numbers? For example, replace the 13.3
+      // multiplier/divisor by 13, and you'll get a -0.199999... sufficiently different from the
+      // initial -0.2 that Integration will fail to catch one bin and because of that some tests will fail.
+      ws->dataX(0)[i] /= 2.5671;
+      ws->dataX(0)[i] *= 13.3;
+      ws->dataX(0)[i] /= 13.3;
+      ws->dataX(0)[i] *= 2.5671;
+    }
+    double y[lenY] = {0, 0, 0, 2, 2, 2, 2, 0 , 0, 0};
+    for (unsigned int i = 0; i < lenY; i++)
+    {
+      ws->dataY(0)[i] = y[i];
+    }
+    double e[lenE] = {0, 0, 0, 0, 0, 0, 0, 0 , 0, 0};
+    for (unsigned int i = 0; i < lenE; i++)
+    {
+      ws->dataE(0)[i] = e[i];
+    }
+    AnalysisDataService::Instance().add(inWsName, ws);
+  }
+
+  void doTestRealBinBoundaries(const std::string inWsName,
+                               const std::string rangeLower,
+                               const std::string rangeUpper,
+                               const double expectedVal,
+                               const bool checkRanges = false,
+                               const bool IncPartialBins = false)
+  {
+    Workspace_sptr auxWs;
+    TS_ASSERT_THROWS_NOTHING(auxWs = AnalysisDataService::Instance().retrieve(inWsName));
+    Workspace2D_sptr inWs =  boost::dynamic_pointer_cast<Workspace2D>(auxWs);
+
+    std::string outWsName = "out_real_boundaries_ws";
+
+    Integration integ;
+    integ.initialize();
+    integ.setPropertyValue("InputWorkspace", inWs->getName());
+    integ.setPropertyValue("OutputWorkspace", outWsName);
+    integ.setPropertyValue("RangeLower", rangeLower);
+    integ.setPropertyValue("RangeUpper", rangeUpper);
+    integ.setProperty("IncludePartialBins", IncPartialBins);
+    integ.execute();
+
+    // should have created output work space
+    TS_ASSERT_THROWS_NOTHING(auxWs = AnalysisDataService::Instance().retrieve(outWsName));
+    Workspace2D_sptr outWs = boost::dynamic_pointer_cast<Workspace2D>(auxWs);
+    TS_ASSERT_EQUALS(inWs->getNumberHistograms(), outWs->getNumberHistograms());
+
+    if (checkRanges)
+    {
+      TS_ASSERT_LESS_THAN_EQUALS(atof(rangeLower.c_str()), outWs->dataX(0).front());
+      TS_ASSERT_LESS_THAN_EQUALS(outWs->dataX(0).back(), atof(rangeUpper.c_str()));
+    }
+    // At last, check numerical results
+    TS_ASSERT_DELTA(outWs->dataY(0)[0], expectedVal, 1e-8 );
+  }
+
+  void testProperHandlingOfIntegrationBoundaries()
+  {
+    std::string inWsName = "in_real_boundaries_ws";
+    makeRealBinBoundariesWorkspace(inWsName);
+
+    doTestRealBinBoundaries(inWsName, "-0.4", "-0.2", 2, true);
+    doTestRealBinBoundaries(inWsName, "-0.2", "-0.0", 2, true);
+    doTestRealBinBoundaries(inWsName, "-0.2", "0.2", 4, true);
+    doTestRealBinBoundaries(inWsName, "-0.2", "0.4", 6, true);
+    doTestRealBinBoundaries(inWsName, "-0.4", "0.2", 6, true);
+    doTestRealBinBoundaries(inWsName, "-0.4", "0.4", 8, true);
+    doTestRealBinBoundaries(inWsName, "-1", "1", 8, true);
+    doTestRealBinBoundaries(inWsName, "-1.8", "1.2", 8, true);
+
+    doTestRealBinBoundaries(inWsName, "-0.4", "-0.200001", 0, true);
+    doTestRealBinBoundaries(inWsName, "-0.399999", "-0.2", 0, true);
+    doTestRealBinBoundaries(inWsName, "-0.399999", "-0.200001", 0, true);
+    doTestRealBinBoundaries(inWsName, "-0.3999", "-0.2", 0, true);
+
+    doTestRealBinBoundaries(inWsName, "0.6", "6.5", 0, true);
+    doTestRealBinBoundaries(inWsName, "-1", "-0.8", 0, true);
+    doTestRealBinBoundaries(inWsName, "2.2", "3.03", 0);
+    doTestRealBinBoundaries(inWsName, "-42.2", "-3.03", 0);
+
+  }
+
 private:
   Integration alg;   // Test with range limits
   Integration alg2;  // Test without limits
diff --git a/Code/Mantid/Framework/Algorithms/test/MonteCarloAbsorptionTest.h b/Code/Mantid/Framework/Algorithms/test/MonteCarloAbsorptionTest.h
index 317d9a15efba6da56f9207006324e9aaad27b7c1..9347e30699b7eb75721454dc493778219ffbcb86 100644
--- a/Code/Mantid/Framework/Algorithms/test/MonteCarloAbsorptionTest.h
+++ b/Code/Mantid/Framework/Algorithms/test/MonteCarloAbsorptionTest.h
@@ -2,68 +2,68 @@
 #define MONTECARLOABSORPTIONTEST_H_
 
 #include "MantidAlgorithms/MonteCarloAbsorption.h"
+#include "MantidAPI/FrameworkManager.h"
 #include "MantidAPI/SampleEnvironment.h"
 #include "MantidGeometry/Objects/ShapeFactory.h"
-#include "MantidKernel/UnitFactory.h"
 #include "MantidKernel/PhysicalConstants.h"
+#include "MantidKernel/UnitFactory.h"
+
 #include <cxxtest/TestSuite.h>
 
-#include "MantidTestHelpers/WorkspaceCreationHelper.h"
 #include "MantidTestHelpers/ComponentCreationHelper.h"
-
-using namespace Mantid;
-using namespace Mantid::API;
-using namespace Mantid::Geometry;
-using namespace Mantid::Kernel;
-
-using Mantid::Algorithms::MonteCarloAbsorption;
-using Mantid::DataObjects::Workspace2D_sptr;
-using Mantid::Geometry::ShapeFactory;
-using Mantid::Kernel::V3D;
+#include "MantidTestHelpers/WorkspaceCreationHelper.h"
 
 class MonteCarloAbsorptionTest : public CxxTest::TestSuite
 {
 public:
-  
+
   void test_That_Workspace_With_No_Instrument_Is_Not_Accepted()
   {
-    IAlgorithm_sptr mcAbsorb = createAlgorithm();
+    using namespace Mantid::API;
+
+    auto mcAbsorb = createAlgorithm();
     // Create a simple test workspace that has no instrument
-    Workspace2D_sptr testWS = WorkspaceCreationHelper::Create2DWorkspace(10, 5);
-    
-    TS_ASSERT_THROWS(mcAbsorb->setProperty<MatrixWorkspace_sptr>("InputWorkspace", testWS), 
-		     std::invalid_argument);
+    auto testWS = WorkspaceCreationHelper::Create2DWorkspace(10, 5);
+
+    TS_ASSERT_THROWS(mcAbsorb->setProperty<MatrixWorkspace_sptr>("InputWorkspace", testWS),
+                     std::invalid_argument);
   }
 
-   void test_That_Workspace_With_An_Invalid_Sample_Shape_Is_Not_Accepted()
-   {
-     Workspace2D_sptr testWS = WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(9, 10);
-     // Needs to have units of wavelength
-     testWS->getAxis(0)->unit() = Mantid::Kernel::UnitFactory::Instance().create("Wavelength");
-     
-     IAlgorithm_sptr mcAbsorb = createAlgorithm();
-     TS_ASSERT_THROWS_NOTHING(mcAbsorb->setProperty<MatrixWorkspace_sptr>("InputWorkspace", testWS));
-     const std::string outputName("mctest-workspace");
-     TS_ASSERT_THROWS_NOTHING(mcAbsorb->setPropertyValue("OutputWorkspace",outputName));
-     TS_ASSERT_THROWS(mcAbsorb->execute(), std::invalid_argument);
-   }
+  void test_That_Workspace_With_An_Invalid_Sample_Shape_Is_Not_Accepted()
+  {
+    using namespace Mantid::API;
+
+    auto testWS = WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(9, 10);
+    // Needs to have units of wavelength
+    testWS->getAxis(0)->unit() = Mantid::Kernel::UnitFactory::Instance().create("Wavelength");
+
+    auto mcAbsorb = createAlgorithm();
+    TS_ASSERT_THROWS_NOTHING(mcAbsorb->setProperty<MatrixWorkspace_sptr>("InputWorkspace", testWS));
+    const std::string outputName("mctest-workspace");
+    TS_ASSERT_THROWS_NOTHING(mcAbsorb->setPropertyValue("OutputWorkspace",outputName));
+    TS_ASSERT_THROWS(mcAbsorb->execute(), std::invalid_argument);
+  }
 
   void test_That_Workspace_With_A_Correctly_Defined_Sample_Shape_And_Material_Succeeds()
   {
+    using namespace Mantid::API;
+
     const std::string inputName("mcabsorb-input");
     setUpWS(inputName);
 
     // Run the algorithm
-    IAlgorithm_sptr mcAbsorb = createAlgorithm();
+    auto mcAbsorb = createAlgorithm();
     TS_ASSERT_THROWS_NOTHING(mcAbsorb->setPropertyValue("InputWorkspace", inputName));
     const std::string outputName("mcabsorb-factors");
     TS_ASSERT_THROWS_NOTHING(mcAbsorb->setPropertyValue("OutputWorkspace",outputName));
-    mcAbsorb->execute();
+    const int numOMPThreads = FrameworkManager::Instance().getNumOMPThreads();
+    FrameworkManager::Instance().setNumOMPThreads(1); // To ensure reproducible results
     TS_ASSERT_THROWS_NOTHING(mcAbsorb->execute());
+    FrameworkManager::Instance().setNumOMPThreads(numOMPThreads);
 
     AnalysisDataServiceImpl & dataStore = AnalysisDataService::Instance();
-    MatrixWorkspace_sptr factorWS = 
-      boost::dynamic_pointer_cast<MatrixWorkspace>(dataStore.retrieve(outputName));
+    MatrixWorkspace_sptr factorWS =
+        boost::dynamic_pointer_cast<MatrixWorkspace>(dataStore.retrieve(outputName));
 
     TS_ASSERT(factorWS);
     if( !factorWS ) TS_FAIL("Cannot retrieve output workspace");
@@ -73,18 +73,18 @@ public:
     // Pick out some random values
     const double delta(1e-08);
     const size_t middle_index = (nbins/2) - 1;
-    TS_ASSERT_DELTA(factorWS->readY(0).front(), 0.00477768, delta);
-    TS_ASSERT_DELTA(factorWS->readY(0)[middle_index], 0.000134089, delta);
-    TS_ASSERT_DELTA(factorWS->readY(0).back(), 1.18e-7, delta);
-        
+    TS_ASSERT_DELTA(factorWS->readY(0).front(), 0.005869405757, delta);
+    TS_ASSERT_DELTA(factorWS->readY(0)[middle_index], 0.000104368636, delta);
+    TS_ASSERT_DELTA(factorWS->readY(0).back(), 0.000004337609, delta);
+
     // Different spectra
-    TS_ASSERT_DELTA(factorWS->readY(4).front(), 0.00868274, delta);
-    TS_ASSERT_DELTA(factorWS->readY(4)[middle_index], 0.000177871, delta);
-    TS_ASSERT_DELTA(factorWS->readY(4).back(), 0.000131046, delta);
+    TS_ASSERT_DELTA(factorWS->readY(2).front(), 0.007355971026, delta);
+    TS_ASSERT_DELTA(factorWS->readY(2)[middle_index], 0.000092901957, delta);
+    TS_ASSERT_DELTA(factorWS->readY(2).back(), 0.000003265731, delta);
 
-    TS_ASSERT_DELTA(factorWS->readY(8).front(), 0.00654336, delta);
-    TS_ASSERT_DELTA(factorWS->readY(8)[middle_index], 0.000224293, delta);
-    TS_ASSERT_DELTA(factorWS->readY(8).back(), 1.14231e-5, delta);
+    TS_ASSERT_DELTA(factorWS->readY(4).front(), 0.004037809093, delta);
+    TS_ASSERT_DELTA(factorWS->readY(4)[middle_index], 0.000190782521, delta);
+    TS_ASSERT_DELTA(factorWS->readY(4).back(), 0.000019473169, delta);
 
     dataStore.remove(inputName);
     dataStore.remove(outputName);
@@ -92,21 +92,20 @@ public:
 
   void test_That_Workspace_With_A_Defined_Sample_Shape_And_Container_Succeeds()
   {
+    using namespace Mantid::API;
+
     AnalysisDataServiceImpl & dataStore = AnalysisDataService::Instance();
     const std::string inputName("mcabsorb-input");
     setUpWS(inputName, 1, 10, true);
 
     // Run the algorithm
-    IAlgorithm_sptr mcAbsorb = createAlgorithm();
+    auto mcAbsorb = createAlgorithm();
     TS_ASSERT_THROWS_NOTHING(mcAbsorb->setPropertyValue("InputWorkspace", inputName));
     const std::string outputName("mcabsorb-factors");
     TS_ASSERT_THROWS_NOTHING(mcAbsorb->setPropertyValue("OutputWorkspace",outputName));
-    mcAbsorb->execute();
     TS_ASSERT_THROWS_NOTHING(mcAbsorb->execute());
 
-
-    MatrixWorkspace_sptr factorWS = 
-      boost::dynamic_pointer_cast<MatrixWorkspace>(dataStore.retrieve(outputName));
+    auto factorWS = boost::dynamic_pointer_cast<MatrixWorkspace>(dataStore.retrieve(outputName));
 
     TS_ASSERT(factorWS);
     if( !factorWS ) TS_FAIL("Cannot retrieve output workspace");
@@ -116,9 +115,9 @@ public:
     // Pick out some random values
     const double delta(1e-08);
     const size_t middle_index = (nbins/2) - 1;
-    TS_ASSERT_DELTA(factorWS->readY(0).front(), 1.9588e-05, delta);
-    TS_ASSERT_DELTA(factorWS->readY(0)[middle_index], 6.56478e-09, 1e-9);
-    TS_ASSERT_DELTA(factorWS->readY(0).back(), 2.3604e-11, 1e-12);
+    TS_ASSERT_DELTA(factorWS->readY(0).front(), 0.005122949, delta);
+    TS_ASSERT_DELTA(factorWS->readY(0)[middle_index], 0.000238143162, delta);
+    TS_ASSERT_DELTA(factorWS->readY(0).back(), 0.000003069996, delta);
 
     dataStore.remove(inputName);
     dataStore.remove(outputName);
@@ -126,43 +125,47 @@ public:
 
 
 private:
-  
-  void setUpWS(const std::string & name, const int nspectra = 9, const int nbins = 10,
-	       bool addContainer = false)
+
+  void setUpWS(const std::string & name, const int nspectra = 5, const int nbins = 10,
+               bool addContainer = false)
   {
-    Workspace2D_sptr space = WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(nspectra, nbins);
+    using namespace Mantid::API;
+    using namespace Mantid::Geometry;
+    using namespace Mantid::Kernel;
+    namespace PhysicalConstants = Mantid::PhysicalConstants;
+
+    auto space = WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(nspectra, nbins);
     // Needs to have units of wavelength
-    space->getAxis(0)->unit() = Mantid::Kernel::UnitFactory::Instance().create("Wavelength");
-    
+    space->getAxis(0)->unit() = UnitFactory::Instance().create("Wavelength");
+
     // Define a sample shape
     Object_sptr sampleShape = ComponentCreationHelper::createSphere(0.1, V3D(), "sample-sphere");
-    space->mutableSample().setShape(*sampleShape);
     // And a material
-    Material vanadium("Vanadium", PhysicalConstants::getNeutronAtom(23,0), 0.072);
-    space->mutableSample().setMaterial(vanadium);
+    sampleShape->setMaterial(Material("Vanadium", PhysicalConstants::getNeutronAtom(23,0), 0.072));
+    space->mutableSample().setShape(*sampleShape);
 
     if( addContainer )
     {
       const std::string id("container");
-      const double radius(0.25);
-      const double height(0.4);
-      const V3D baseCentre(0.0, -height/2.0,0.0);
+      const double radius(0.11);
+      const double height(0.03);
+      const V3D baseCentre(0.0, -height/2.0, 0.0);
       const V3D axis(0.0, 1.0,0.0);
-      
+
       // Define a container shape. Use a simple cylinder
       std::ostringstream xml;
-      xml << "<cylinder id=\"" << id << "\">" 
-	  << "<centre-of-bottom-base x=\"" << baseCentre.X() << "\" y=\"" << baseCentre.Y() << "\" z=\"" << baseCentre.Z() << "\"/>"
-	  << "<axis x=\"" << axis.X() << "\" y=\"" << axis.Y() << "\" z=\"" << axis.Z() << "\"/>"
-	  << "<radius val=\"" << radius << "\" />"
-	  << "<height val=\"" << height << "\" />"
-	  << "</cylinder>";
-      
+      xml << "<cylinder id=\"" << id << "\">"
+          << "<centre-of-bottom-base x=\"" << baseCentre.X() << "\" y=\"" << baseCentre.Y() << "\" z=\"" << baseCentre.Z() << "\"/>"
+          << "<axis x=\"" << axis.X() << "\" y=\"" << axis.Y() << "\" z=\"" << axis.Z() << "\"/>"
+          << "<radius val=\"" << radius << "\" />"
+          << "<height val=\"" << height << "\" />"
+          << "</cylinder>";
+
       ShapeFactory shapeMaker;
       Object_sptr containerShape = shapeMaker.createShape(xml.str());
-      Material_sptr canMaterial(new Material("CanMaterial", PhysicalConstants::getNeutronAtom(26, 0), 0.01));
+      containerShape->setMaterial(Material("CanMaterial", PhysicalConstants::getNeutronAtom(26, 0), 0.01));
       SampleEnvironment *can = new SampleEnvironment("can");
-      can->add(new ObjComponent("1", containerShape, NULL, canMaterial));
+      can->add(*containerShape);
       space->mutableSample().setEnvironment(can);
     }
 
@@ -170,9 +173,9 @@ private:
     AnalysisDataService::Instance().add(name, space);
   }
 
-  IAlgorithm_sptr createAlgorithm()
+  Mantid::API::IAlgorithm_sptr createAlgorithm()
   {
-    IAlgorithm_sptr mcAbsorb = boost::shared_ptr<IAlgorithm>(new MonteCarloAbsorption());
+    auto mcAbsorb = boost::shared_ptr<Mantid::API::IAlgorithm>(new Mantid::Algorithms::MonteCarloAbsorption());
     TS_ASSERT_THROWS_NOTHING(mcAbsorb->initialize());
     TS_ASSERT_EQUALS(mcAbsorb->isInitialized(), true);
     mcAbsorb->setRethrows(true);
diff --git a/Code/Mantid/Framework/Crystal/src/AnvredCorrection.cpp b/Code/Mantid/Framework/Crystal/src/AnvredCorrection.cpp
index 54189edf4ea61b31940ee12dab4c02060fd2d1f1..488afbdf9e3a1a50183119323f2ec46d4f659570 100644
--- a/Code/Mantid/Framework/Crystal/src/AnvredCorrection.cpp
+++ b/Code/Mantid/Framework/Crystal/src/AnvredCorrection.cpp
@@ -395,9 +395,10 @@ void AnvredCorrection::retrieveBaseProperties()
   else  //Save input in Sample with wrong atomic number and name
   {
     NeutronAtom neutron(static_cast<uint16_t>(EMPTY_DBL()), static_cast<uint16_t>(0),
-  			0.0, 0.0, smu, 0.0, smu, amu);
-    Material mat("SetInAnvredCorrection", neutron, 1.0);
-    m_inputWS->mutableSample().setMaterial(mat);
+                        0.0, 0.0, smu, 0.0, smu, amu);
+    Object shape = m_inputWS->sample().getShape(); // copy
+    shape.setMaterial(Material("SetInAnvredCorrection", neutron, 1.0));
+    m_inputWS->mutableSample().setShape(shape);
   }
   if (smu != EMPTY_DBL() && amu != EMPTY_DBL())
     g_log.notice() << "LinearScatteringCoef = " << smu << " 1/cm\n"
diff --git a/Code/Mantid/Framework/Crystal/src/LoadHKL.cpp b/Code/Mantid/Framework/Crystal/src/LoadHKL.cpp
index 82cfb1317096cb247e1f66aa703d27f38e9b2330..d4022c3f509bede1c8979339a0197d557ddcd8aa 100644
--- a/Code/Mantid/Framework/Crystal/src/LoadHKL.cpp
+++ b/Code/Mantid/Framework/Crystal/src/LoadHKL.cpp
@@ -161,9 +161,11 @@ namespace Crystal
     API::Run & mrun = ws->mutableRun();
     mrun.addProperty<double>("Radius", radius, true);
     NeutronAtom neutron(static_cast<uint16_t>(EMPTY_DBL()), static_cast<uint16_t>(0),
-  			0.0, 0.0, smu, 0.0, smu, amu);
-    Material mat("SetInLoadHKL", neutron, 1.0);
-    ws->mutableSample().setMaterial(mat);
+                        0.0, 0.0, smu, 0.0, smu, amu);
+    Object shape = ws->sample().getShape(); // copy
+    shape.setMaterial(Material("SetInLoadHKL", neutron, 1.0));
+    ws->mutableSample().setShape(shape);
+
     setProperty("OutputWorkspace", boost::dynamic_pointer_cast<PeaksWorkspace>(ws));
 
 
diff --git a/Code/Mantid/Framework/Crystal/src/SaveHKL.cpp b/Code/Mantid/Framework/Crystal/src/SaveHKL.cpp
index 1eacba2ab53fcc83d086dd468df38e6c5d5b8693..0962a6b6b8afcbf44fbc8895289854ec3422e22a 100644
--- a/Code/Mantid/Framework/Crystal/src/SaveHKL.cpp
+++ b/Code/Mantid/Framework/Crystal/src/SaveHKL.cpp
@@ -196,9 +196,11 @@ namespace Crystal
     else if (smu != EMPTY_DBL() && amu != EMPTY_DBL()) //Save input in Sample with wrong atomic number and name
     {
       NeutronAtom neutron(static_cast<uint16_t>(EMPTY_DBL()), static_cast<uint16_t>(0),
-    			0.0, 0.0, smu, 0.0, smu, amu);
-      Material mat("SetInAnvredCorrection", neutron, 1.0);
-      ws->mutableSample().setMaterial(mat);
+                          0.0, 0.0, smu, 0.0, smu, amu);
+      Object shape = ws->sample().getShape(); // copy
+      shape.setMaterial(Material("SetInSaveHKL", neutron, 1.0));
+      ws->mutableSample().setShape(shape);
+    
     }
     if (smu != EMPTY_DBL() && amu != EMPTY_DBL())
       g_log.notice() << "LinearScatteringCoef = " << smu << " 1/cm\n"
diff --git a/Code/Mantid/Framework/Crystal/test/LoadHKLTest.h b/Code/Mantid/Framework/Crystal/test/LoadHKLTest.h
index 7c84e690f646d1f5919ac31ac0076d97d862aed3..cf250a4730fc886c0ac15367005fe8ce7a49d2b3 100644
--- a/Code/Mantid/Framework/Crystal/test/LoadHKLTest.h
+++ b/Code/Mantid/Framework/Crystal/test/LoadHKLTest.h
@@ -42,9 +42,11 @@ public:
     double smu = 0.357;
     double amu = 0.011;
     NeutronAtom neutron(static_cast<uint16_t>(EMPTY_DBL()), static_cast<uint16_t>(0),
-  			0.0, 0.0, smu, 0.0, smu, amu);
-    Material mat("SetInAnvredCorrection", neutron, 1.0);
-    ws->mutableSample().setMaterial(mat);
+                        0.0, 0.0, smu, 0.0, smu, amu);
+    Object sampleShape;
+    sampleShape.setMaterial(Material("SetInAnvredCorrection", neutron, 1.0));
+    ws->mutableSample().setShape(sampleShape);
+
     API::Run & mrun = ws->mutableRun();
     mrun.addProperty<double>("Radius", 0.1, true);
 
diff --git a/Code/Mantid/Framework/Crystal/test/SaveHKLTest.h b/Code/Mantid/Framework/Crystal/test/SaveHKLTest.h
index 61c3c415692105badd9205b4fde9584fd5422cb6..317d53b7bc742a187c3f4136b24e85e62b94923f 100644
--- a/Code/Mantid/Framework/Crystal/test/SaveHKLTest.h
+++ b/Code/Mantid/Framework/Crystal/test/SaveHKLTest.h
@@ -41,9 +41,11 @@ public:
     double smu = 0.357;
     double amu = 0.011;
     NeutronAtom neutron(static_cast<uint16_t>(EMPTY_DBL()), static_cast<uint16_t>(0),
-  			0.0, 0.0, smu, 0.0, smu, amu);
-    Material mat("SetInSaveHKLTest", neutron, 1.0);
-    ws->mutableSample().setMaterial(mat);
+                        0.0, 0.0, smu, 0.0, smu, amu);
+    Object sampleShape;
+    sampleShape.setMaterial(Material("SetInSaveHKLTest", neutron, 1.0));
+    ws->mutableSample().setShape(sampleShape);
+    
     API::Run & mrun = ws->mutableRun();
     mrun.addProperty<double>("Radius", 0.1, true);
 
diff --git a/Code/Mantid/Framework/Crystal/test/SortHKLTest.h b/Code/Mantid/Framework/Crystal/test/SortHKLTest.h
index 5a0791f269992ee23a3feb4c8aba49d24fd89d48..4fb1ae8f5d3dda5f06ec20707e02c3d973f081d4 100644
--- a/Code/Mantid/Framework/Crystal/test/SortHKLTest.h
+++ b/Code/Mantid/Framework/Crystal/test/SortHKLTest.h
@@ -42,9 +42,11 @@ public:
     double smu = 0.357;
     double amu = 0.011;
     NeutronAtom neutron(static_cast<uint16_t>(EMPTY_DBL()), static_cast<uint16_t>(0),
-  			0.0, 0.0, smu, 0.0, smu, amu);
-    Material mat("SetInSaveHKLTest", neutron, 1.0);
-    ws->mutableSample().setMaterial(mat);
+                        0.0, 0.0, smu, 0.0, smu, amu);
+    Object sampleShape;
+    sampleShape.setMaterial(Material("SetInSaveHKLTest", neutron, 1.0));
+    ws->mutableSample().setShape(sampleShape);
+    
     API::Run & mrun = ws->mutableRun();
     mrun.addProperty<double>("Radius", 0.1, true);
 
diff --git a/Code/Mantid/Framework/CurveFitting/CMakeLists.txt b/Code/Mantid/Framework/CurveFitting/CMakeLists.txt
index c0906757d86a153f51650c8a9ad346827c2c05fa..25c639f653aa6e299a99bdcc5a591f4aa0ea2bba 100644
--- a/Code/Mantid/Framework/CurveFitting/CMakeLists.txt
+++ b/Code/Mantid/Framework/CurveFitting/CMakeLists.txt
@@ -12,6 +12,7 @@ set ( SRC_FILES
 	src/Bk2BkExpConvPV.cpp
 	src/BoundaryConstraint.cpp
 	src/CalculateGammaBackground.cpp
+	src/CalculateMSVesuvio.cpp
 	src/Chebyshev.cpp
 	src/ComptonPeakProfile.cpp
 	src/ComptonProfile.cpp
@@ -32,6 +33,7 @@ set ( SRC_FILES
 	src/ExpDecay.cpp
 	src/ExpDecayMuon.cpp
 	src/ExpDecayOsc.cpp
+	src/FABADAMinimizer.cpp
 	src/FRConjugateGradientMinimizer.cpp
 	src/Fit.cpp
 	src/Fit1D.cpp
@@ -56,6 +58,7 @@ set ( SRC_FILES
 	src/LogNormal.cpp
 	src/Lorentzian.cpp
 	src/Lorentzian1D.cpp
+	src/MSVesuvioHelpers.cpp
 	src/MultiDomainCreator.cpp
 	src/MuonFInteraction.cpp
 	src/NeutronBk2BkExpConvPVoigt.cpp
@@ -96,14 +99,11 @@ set ( SRC_FILES
 	src/UserFunction1D.cpp
   src/VesuvioResolution.cpp
 	src/Voigt.cpp
-  src/FakeMinimizer.cpp
-
 )
-                
+
 set ( SRC_UNITY_IGNORE_FILES src/Fit1D.cpp src/GSLFunctions.cpp )
 
 set ( INC_FILES
-  inc/MantidCurveFitting/FakeMinimizer.h
 	#	inc/MantidCurveFitting/CostFuncIgnorePosPeaks.h
 	#	inc/MantidCurveFitting/SCDPanelErrors.h
 	# inc/MantidCurveFitting/ChebyshevPolynomialBackground.h
@@ -117,6 +117,7 @@ set ( INC_FILES
 	inc/MantidCurveFitting/Bk2BkExpConvPV.h
 	inc/MantidCurveFitting/BoundaryConstraint.h
 	inc/MantidCurveFitting/CalculateGammaBackground.h
+	inc/MantidCurveFitting/CalculateMSVesuvio.h
 	inc/MantidCurveFitting/Chebyshev.h
 	inc/MantidCurveFitting/ComptonPeakProfile.h
 	inc/MantidCurveFitting/ComptonProfile.h
@@ -131,13 +132,14 @@ set ( INC_FILES
 	inc/MantidCurveFitting/DampingMinimizer.h
 	inc/MantidCurveFitting/DeltaFunction.h
 	inc/MantidCurveFitting/DerivMinimizer.h
-	inc/MantidCurveFitting/DiffSphere.h
 	inc/MantidCurveFitting/DiffRotDiscreteCircle.h
+	inc/MantidCurveFitting/DiffSphere.h
 	inc/MantidCurveFitting/DllConfig.h
 	inc/MantidCurveFitting/EndErfc.h
 	inc/MantidCurveFitting/ExpDecay.h
 	inc/MantidCurveFitting/ExpDecayMuon.h
 	inc/MantidCurveFitting/ExpDecayOsc.h
+	inc/MantidCurveFitting/FABADAMinimizer.h
 	inc/MantidCurveFitting/FRConjugateGradientMinimizer.h
 	inc/MantidCurveFitting/Fit.h
 	inc/MantidCurveFitting/Fit1D.h
@@ -165,6 +167,7 @@ set ( INC_FILES
 	inc/MantidCurveFitting/LogNormal.h
 	inc/MantidCurveFitting/Lorentzian.h
 	inc/MantidCurveFitting/Lorentzian1D.h
+	inc/MantidCurveFitting/MSVesuvioHelpers.h
 	inc/MantidCurveFitting/MultiDomainCreator.h
 	inc/MantidCurveFitting/MuonFInteraction.h
 	inc/MantidCurveFitting/NeutronBk2BkExpConvPVoigt.h
@@ -206,7 +209,7 @@ set ( INC_FILES
   inc/MantidCurveFitting/VesuvioResolution.h
 	inc/MantidCurveFitting/Voigt.h
 )
-              
+
 set ( TEST_FILES
 	# ChebyshevPolynomialBackgroundTest.h
 	# RefinePowderInstrumentParametersTest.h
@@ -220,6 +223,7 @@ set ( TEST_FILES
 	Bk2BkExpConvPVTest.h
 	BoundaryConstraintTest.h
 	CalculateGammaBackgroundTest.h
+	CalculateMSVesuvioTest.h
 	ChebyshevTest.h
 	CompositeFunctionTest.h
 	ComptonPeakProfileTest.h
@@ -237,6 +241,7 @@ set ( TEST_FILES
 	ExpDecayMuonTest.h
 	ExpDecayOscTest.h
 	ExpDecayTest.h
+	FABADAMinimizerTest.h
 	FRConjugateGradientTest.h
   FitMWTest.h
   FitTest.h
diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/CalculateMSVesuvio.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/CalculateMSVesuvio.h
new file mode 100644
index 0000000000000000000000000000000000000000..0938057d47fe86db09c1afc4aef41b77a3cf1a72
--- /dev/null
+++ b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/CalculateMSVesuvio.h
@@ -0,0 +1,148 @@
+#ifndef MANTID_CURVEFITTING_CALCULATEMSVESUVIO_H_
+#define MANTID_CURVEFITTING_CALCULATEMSVESUVIO_H_
+//-----------------------------------------------------------------------------
+// Includes
+//-----------------------------------------------------------------------------
+#include "MantidAPI/Algorithm.h"
+#include "MantidGeometry/Instrument/ReferenceFrame.h"
+#include "MantidKernel/V3D.h"
+
+namespace Mantid
+{
+  namespace CurveFitting
+  {
+    //-----------------------------------------------------------------------------
+    // CurveFitting forward declarations
+    //-----------------------------------------------------------------------------
+    struct DetectorParams;
+    struct ResolutionParams;
+    namespace MSVesuvioHelper
+    {
+      class RandomNumberGenerator;
+      struct Simulation;
+      struct SimulationWithErrors;
+    }
+
+    /**
+      Calculates the multiple scattering & total scattering contributions
+      for a flat-plate or cylindrical sample.
+
+      Copyright &copy; 2014 ISIS Rutherford Appleton Laboratory &
+      NScD Oak Ridge National Laboratory
+
+      This file is part of Mantid.
+
+      Mantid is free software; you can redistribute it and/or modify
+      it under the terms of the GNU General Public License as published by
+      the Free Software Foundation; either version 3 of the License, or
+      (at your option) any later version.
+
+      Mantid 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 General Public License for more details.
+
+      You should have received a copy of the GNU General Public License
+      along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+      File change history is stored at: <https://github.com/mantidproject/mantid>
+      Code Documentation is available at: <http://doxygen.mantidproject.org>
+    */
+    class DLLExport CalculateMSVesuvio : public API::Algorithm
+    {
+    private:
+      // Holds date on the compton scattering properties of an atom
+      struct ComptonNeutronAtom
+      {
+        ComptonNeutronAtom()
+          : mass(-1.0), sclength(-1.0), profile(-1.0) {}
+        double mass; // in amu
+        double sclength; // 4pi/xsec
+        double profile; // s.d of J(y)
+      };
+      // Holds data about sample as a whole.
+      struct SampleComptonProperties
+      {
+        SampleComptonProperties(const int nprops)
+          : atoms(nprops), density(-1.0), totalxsec(-1.0),
+            mu(-1.0) {}
+
+        std::vector<ComptonNeutronAtom> atoms;
+        double density; // g/cm^3
+        double totalxsec; // total free-scattering cross section
+        double mu; // attenuation factor (1/m)
+      };
+
+    public:
+      CalculateMSVesuvio();
+      ~CalculateMSVesuvio();
+
+      /// @copydoc Algorithm::name
+      virtual const std::string name() const { return "CalculateMSVesuvio"; }
+      /// @copydoc Algorithm::version
+      virtual int version() const { return 1; }
+      /// @copydoc Algorithm::category
+      virtual const std::string category() const { return "ISIS"; }
+      /// @copydoc Algorithm::summary
+      virtual const std::string summary() const
+      {
+        return "Calculates the contributions of multiple scattering "
+               "on a flat plate sample for VESUVIO";
+      }
+
+    private:
+      void init();
+      void exec();
+
+      void cacheInputs();
+      void calculateMS(const size_t wsIndex, API::ISpectrum & totalsc,
+                       API::ISpectrum & multsc) const;
+      void simulate(const DetectorParams & detpar,
+                    const ResolutionParams &respar,
+                    MSVesuvioHelper::Simulation & simulCounts) const;
+      void assignToOutput(const MSVesuvioHelper::SimulationWithErrors & avgCounts,
+                          API::ISpectrum & totalsc, API::ISpectrum & multsc) const;
+      double calculateCounts(const DetectorParams & detpar,
+                             const ResolutionParams &respar,
+                             MSVesuvioHelper::Simulation & simulation) const;
+
+      // single-event helpers
+      Kernel::V3D generateSrcPos(const double l1) const;
+      double generateE0(const double l1, const double t2, double &weight) const;
+      double generateTOF(const double gaussTOF, const double dtof, const double dl1) const;
+      bool generateScatter(const Kernel::V3D &startPos, const Kernel::V3D &direc, double &weight,
+                           Kernel::V3D &scatterPt) const;
+      std::pair<double, double> calculateE1Range(const double theta, const double en0) const;
+      double partialDiffXSec(const double en0, const double en1, const double theta) const;
+      Kernel::V3D generateDetectorPos(const Kernel::V3D & nominalPos, const double energy,
+                                      const Kernel::V3D &scatterPt,
+                                      const Kernel::V3D & direcBeforeSc,
+                                      double &scang, double &distToExit) const;
+      double generateE1(const double angle, const double e1nom, const double e1res) const;
+
+      // Member Variables
+      MSVesuvioHelper::RandomNumberGenerator *m_randgen; // random number generator
+
+      size_t m_acrossIdx, m_upIdx, m_beamIdx; // indices of each direction
+      Kernel::V3D m_beamDir; // Directional vector for beam
+      double m_srcR2; // beam penumbra radius (m)
+      double m_halfSampleHeight, m_halfSampleWidth, m_halfSampleThick; // (m)
+      double m_maxWidthSampleFrame; // Maximum width in sample frame (m)
+      Geometry::Object const *m_sampleShape; // sample shape
+      SampleComptonProperties *m_sampleProps; // description of sample properties
+      double m_detHeight, m_detWidth, m_detThick; // (m)
+      double m_tmin, m_tmax, m_delt; // min, max & dt TOF value
+      double m_foilRes; // resolution in energy of foil
+
+      size_t m_nscatters; // highest order of scattering to generate
+      size_t m_nruns; // number of runs per spectrum
+      size_t m_nevents; // number of single events per run
+
+      API::Progress *m_progress;
+      API::MatrixWorkspace_sptr m_inputWS;
+    };
+
+  } // namespace CurveFitting
+} // namespace Mantid
+
+#endif  /* MANTID_CURVEFITTING_CALCULATEMSVESUVIO_H_ */
diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/ConvertToYSpace.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/ConvertToYSpace.h
index 3bbbfeaa2292096f0b959821d8654d151e5c719d..caadecb044346b81e564d8143d62fa86619f1ca9 100644
--- a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/ConvertToYSpace.h
+++ b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/ConvertToYSpace.h
@@ -14,6 +14,7 @@ namespace CurveFitting
   {
     double l1; ///< source-sample distance in metres
     double l2; ///< sample-detector distance in metres
+    Kernel::V3D pos; ///< Full 3D position
     double theta; ///< scattering angle in radians
     double t0; ///< time delay in seconds
     double efixed; ///< final energy
diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/FABADAMinimizer.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/FABADAMinimizer.h
new file mode 100644
index 0000000000000000000000000000000000000000..b2c12fddc4e8403984e16e50c6ae70cd391db03e
--- /dev/null
+++ b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/FABADAMinimizer.h
@@ -0,0 +1,95 @@
+#ifndef MANTID_CURVEFITTING_FABADAMINIMIZER_H_
+#define MANTID_CURVEFITTING_FABADAMINIMIZER_H_
+
+#include "MantidKernel/System.h"
+#include "MantidAPI/IFuncMinimizer.h"
+#include "MantidCurveFitting/GSLVector.h"
+#include "MantidCurveFitting/GSLMatrix.h"
+#include <boost/random/normal_distribution.hpp>
+#include <boost/random/mersenne_twister.hpp>
+
+
+namespace Mantid
+{
+namespace CurveFitting
+{
+class CostFuncLeastSquares;
+
+  /** FABADA : TODO: DESCRIPTION
+    
+    Copyright &copy; 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+  */
+  class DLLExport FABADAMinimizer : public API::IFuncMinimizer
+  {
+  public:
+    /// Constructor
+    FABADAMinimizer();
+    virtual ~FABADAMinimizer();
+    ///Lo ha puesto Roman y no se para que!! creo que es el destructor
+    
+    /// Name of the minimizer.
+    std::string name() const {return "FABADA";}
+    /// Initialize minimizer, i.e. pass a function to minimize.
+    virtual void initialize(API::ICostFunction_sptr function, size_t  maxIterations);
+    /// Do one iteration.
+    virtual bool iterate(size_t iter);
+    /// Return current value of the cost function
+    virtual double costFunctionVal();
+
+  private:
+    /// Pointer to the cost function. Must be the least squares.
+    /// Intentar encontrar una manera de sacar aqui el numero de parametros  que no sea necesaria la cost function
+    boost::shared_ptr<CostFuncLeastSquares> m_leastSquares;
+    /// The number of iterations done.
+    size_t m_counter;
+    ///
+    size_t m_numberIterations;
+    /// The number of changes done in each parameter.
+    std::vector<double> m_changes;
+    /// The jump for each parameter
+    std::vector<double> m_jump;
+    /// Parameters.
+    GSLVector m_parameters;
+    /// Markov chain.
+    std::vector<std::vector<double>> m_chain;
+    /// The chi square result of previous iteration;
+    double m_chi2;
+    /// Boolean that indicates if converged
+    bool m_converged;
+    /// The point when convergence starts
+    size_t m_conv_point;
+    /// Convergence of each parameter
+    std::vector<bool> m_par_converged;
+    ///Lower bound for each parameter
+    std::vector<double> m_lower;
+    ///Upper bound for each parameter
+    std::vector<double> m_upper;
+    /// Bool that indicates if there is any boundary constraint
+    std::vector<bool> m_bound;
+    /// Convergence criteria for each parameter
+    std::vector<double> m_criteria;
+  };
+
+
+} // namespace CurveFitting
+} // namespace Mantid
+
+#endif  /* MANTID_CURVEFITTING_FABADAMINIMIZER_H_ */
diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/FakeMinimizer.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/FakeMinimizer.h
deleted file mode 100644
index 65ed977845bbad47d6f2b4b994acdc8686772505..0000000000000000000000000000000000000000
--- a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/FakeMinimizer.h
+++ /dev/null
@@ -1,65 +0,0 @@
-#ifndef MANTID_CURVEFITTING_FAKEMINIMIZER_H_
-#define MANTID_CURVEFITTING_FAKEMINIMIZER_H_
-
-//----------------------------------------------------------------------
-// Includes
-//----------------------------------------------------------------------
-#include "MantidAPI/IFuncMinimizer.h"
-
-namespace Mantid
-{
-namespace CurveFitting
-{
-/** Fake minimizer for testing output workspace properties.
-    Must be deleted before closing ticket #10008.
-
-    Copyright &copy; 2009 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
-
-    This file is part of Mantid.
-
-    Mantid is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 3 of the License, or
-    (at your option) any later version.
-
-    Mantid 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 General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-    File change history is stored at: <https://github.com/mantidproject/mantid>.
-    Code Documentation is available at: <http://doxygen.mantidproject.org>
-*/
-class DLLExport FakeMinimizer : public API::IFuncMinimizer
-{
-public:
-  /// Constructor setting a value for the relative error acceptance (default=0.01)
-  FakeMinimizer();
-  /// Destructor
-  ~FakeMinimizer();
-
-  /// Overloading base class methods
-  std::string name()const{return "Fake";}
-  /// Do one iteration
-  bool iterate(size_t);
-  /// Return current value of the cost function
-  double costFunctionVal();
-  /// Initialize minimizer, i.e. pass a function to minimize.
-  virtual void initialize(API::ICostFunction_sptr function, size_t maxIterations = 0);
-
-private:
-  size_t m_maxIters;
-  std::vector<double> m_data;
-  int m_someInt;
-  double m_someDouble;
-  std::string m_someString;
-};
-
-
-} // namespace CurveFitting
-} // namespace Mantid
-
-#endif /*MANTID_CURVEFITTING_FAKEMINIMIZER_H_*/
diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/MSVesuvioHelpers.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/MSVesuvioHelpers.h
new file mode 100644
index 0000000000000000000000000000000000000000..9084339ea9ebb6bb0ef59082cf96df0dd9d52e68
--- /dev/null
+++ b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/MSVesuvioHelpers.h
@@ -0,0 +1,75 @@
+#ifndef MANTID_CURVEFITTING_MSVESUVIOHELPERS_H
+#define MANTID_CURVEFITTING_MSVESUVIOHELPERS_H
+
+#include <vector>
+
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/normal_distribution.hpp>
+#include <boost/random/uniform_real.hpp>
+
+namespace Mantid { namespace CurveFitting
+{
+  namespace MSVesuvioHelper
+  {
+    // Absorption energy for double-difference gold foil
+    double finalEnergyAuDD(const double randv);
+    // Absorption energy for gold foil YAP
+    double finalEnergyAuYap(const double randv);
+    // Absorption energy for uranium
+    double finalEnergyUranium(const double randv);
+
+    // Ties together random numbers with various probability distributions
+    // @todo: Should move to Kernel
+    class RandomNumberGenerator
+    {
+      typedef boost::uniform_real<double> uniform_double;
+      typedef boost::normal_distribution<double> gaussian_double;
+    public:
+      RandomNumberGenerator(const int seed);
+      /// Returns a flat random number between 0.0 & 1.0
+      double flat();
+      /// Returns a random number distributed  by a normal distribution
+      double gaussian(const double mean, const double sigma);
+
+    private:
+      RandomNumberGenerator();
+      boost::mt19937 m_generator;
+    };
+
+    // Stores counts for each scatter order
+    // for a "run" of a given number of events
+    struct Simulation
+    {
+      Simulation(const size_t order, const size_t ntimes);
+
+      std::vector<std::vector<double>> counts;
+      size_t maxorder;
+    };
+    // Stores counts for each scatter order with errors
+    struct SimulationWithErrors
+    {
+      SimulationWithErrors(const size_t order, const size_t ntimes) :
+        sim(order, ntimes), errors(order, std::vector<double>(ntimes)) {}
+
+      void normalise();
+      Simulation sim;
+      std::vector<std::vector<double>> errors;
+    };
+
+    // Accumulates and averages the results of a set of simulations
+    struct SimulationAggregator
+    {
+      SimulationAggregator(const size_t nruns);
+
+      // Creates a placeholder for a new simulation
+      Simulation & newSimulation(const size_t order,
+                                 const size_t ntimes);
+      SimulationWithErrors average() const;
+
+      std::vector<Simulation> results;
+    };
+
+  }
+}}
+
+#endif // MANTID_CURVEFITTING_MSVESUVIOHELPERS_H
diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/VesuvioResolution.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/VesuvioResolution.h
index f03970f602238b8b5c0353dbbb76c0d96c004b0c..543363c119e95124405196c895c33a190540195a 100644
--- a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/VesuvioResolution.h
+++ b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/VesuvioResolution.h
@@ -20,11 +20,12 @@ namespace CurveFitting
   /// It avoids some functions taking a huge number of arguments
   struct ResolutionParams
   {
-    double dl1; ///< spread in source-sample distance
-    double dl2; ///< spread in sample-detector distance
-    double dthe; ///< spread in scattering angle
-    double dEnLorentz; ///< lorentz width in energy
-    double dEnGauss; ///< gaussian width in energy
+    double dl1; ///< spread in source-sample distance (m)
+    double dl2; ///< spread in sample-detector distance (m)
+    double dtof; ///< spread in tof measurement (us)
+    double dthe; ///< spread in scattering angle (radians)
+    double dEnLorentz; ///< lorentz width in energy (meV)
+    double dEnGauss; ///< gaussian width in energy (meV
   };
 
   /**
@@ -54,6 +55,11 @@ namespace CurveFitting
   class MANTID_CURVEFITTING_DLL VesuvioResolution : public virtual API::ParamFunction, public virtual API::IFunction1D
   {
   public:
+
+    /// Creates a POD struct containing the required resolution parameters for this spectrum
+    static ResolutionParams getResolutionParameters(const API::MatrixWorkspace_const_sptr & ws,
+                                                    const size_t index);
+    
     /// Default constructor required for factory
     VesuvioResolution();
 
diff --git a/Code/Mantid/Framework/CurveFitting/src/CalculateGammaBackground.cpp b/Code/Mantid/Framework/CurveFitting/src/CalculateGammaBackground.cpp
index e3027dc59b8979a892ba14c1d6d7b94d98adefbd..a408a931f7f46e22a9dc1682a8953fc162aa5ffd 100644
--- a/Code/Mantid/Framework/CurveFitting/src/CalculateGammaBackground.cpp
+++ b/Code/Mantid/Framework/CurveFitting/src/CalculateGammaBackground.cpp
@@ -1,6 +1,7 @@
 #include "MantidCurveFitting/CalculateGammaBackground.h"
 #include "MantidCurveFitting/ComptonProfile.h"
 #include "MantidCurveFitting/ConvertToYSpace.h"
+#include "MantidCurveFitting/VesuvioResolution.h"
 
 #include "MantidAPI/CompositeFunction.h"
 #include "MantidAPI/FunctionProperty.h"
@@ -231,24 +232,9 @@ namespace Mantid
     */
     void CalculateGammaBackground::calculateSpectrumFromDetector(const size_t inputIndex, const size_t outputIndex)
     {
-      auto det = m_inputWS->getDetector(inputIndex);
-      const auto & pmap = m_inputWS->constInstrumentParameters();
-      auto detPos = det->getPos();
-
       // -- Setup detector & resolution parameters --
-      DetectorParams detPar;
-      detPar.l1 = m_l1;
-      detPar.l2 = m_samplePos.distance(detPos);
-      detPar.theta = m_inputWS->detectorTwoTheta(det); //radians
-      detPar.t0 = ConvertToYSpace::getComponentParameter(det, pmap, "t0")*1e-6; // seconds
-      detPar.efixed = ConvertToYSpace::getComponentParameter(det, pmap,"efixed");
-
-      ResolutionParams detRes;
-      detRes.dl1 = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_l1"); // DL0
-      detRes.dl2 = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_l2"); // DL1
-      detRes.dthe = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_theta"); //DTH in radians
-      detRes.dEnGauss = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_gauss");
-      detRes.dEnLorentz = ConvertToYSpace::getComponentParameter(det, pmap, "hwhm_lorentz");
+      DetectorParams detPar = ConvertToYSpace::getDetectorParameters(m_inputWS, inputIndex);
+      ResolutionParams detRes = VesuvioResolution::getResolutionParameters(m_inputWS, inputIndex);
 
       // Compute a time of flight spectrum convolved with a Voigt resolution function for each mass
       // at the detector point & sum to a single spectrum
@@ -269,24 +255,9 @@ namespace Mantid
     */
     void CalculateGammaBackground::calculateBackgroundFromFoils(const size_t inputIndex, const size_t outputIndex)
     {
-      auto det = m_inputWS->getDetector(inputIndex);
-      const auto & pmap = m_inputWS->constInstrumentParameters();
-      auto detPos = det->getPos();
-
       // -- Setup detector & resolution parameters --
-      DetectorParams detPar;
-      detPar.l1 = m_l1;
-      detPar.l2 = m_samplePos.distance(detPos);
-      detPar.theta = m_inputWS->detectorTwoTheta(det); //radians
-      detPar.t0 = ConvertToYSpace::getComponentParameter(det, pmap, "t0")*1e-6; // seconds
-      detPar.efixed = ConvertToYSpace::getComponentParameter(det, pmap,"efixed");
-
-      ResolutionParams detRes;
-      detRes.dl1 = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_l1"); // DL0
-      detRes.dl2 = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_l2"); // DL1
-      detRes.dthe = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_theta"); //DTH in radians
-      detRes.dEnGauss = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_gauss");
-      detRes.dEnLorentz = ConvertToYSpace::getComponentParameter(det, pmap, "hwhm_lorentz");
+      DetectorParams detPar = ConvertToYSpace::getDetectorParameters(m_inputWS, inputIndex);
+      ResolutionParams detRes = VesuvioResolution::getResolutionParameters(m_inputWS, inputIndex);
 
       const size_t nxvalues = m_backgroundWS->blocksize();
       std::vector<double> foilSpectrum(nxvalues);
@@ -297,13 +268,13 @@ namespace Mantid
       for(size_t i = 0; i < m_foils0.size(); ++i)
       {
         foilSpectrum.assign(nxvalues,0.0);
-        calculateBackgroundSingleFoil(foilSpectrum, outputIndex,m_foils1[i], detPos, detPar, detRes);
+        calculateBackgroundSingleFoil(foilSpectrum, outputIndex,m_foils1[i], detPar.pos, detPar, detRes);
         // sum spectrum values from first position
         std::transform(ctfoil.begin(), ctfoil.end(), foilSpectrum.begin(), ctfoil.begin(),
           std::plus<double>());
 
         foilSpectrum.assign(nxvalues,0.0);
-        calculateBackgroundSingleFoil(foilSpectrum, outputIndex,m_foils0[i], detPos, detPar, detRes);
+        calculateBackgroundSingleFoil(foilSpectrum, outputIndex,m_foils0[i], detPar.pos, detPar, detRes);
         // subtract spectrum values from zeroth position
         std::transform(ctfoil.begin(), ctfoil.end(), foilSpectrum.begin(), ctfoil.begin(),
           std::minus<double>());
@@ -472,14 +443,14 @@ namespace Mantid
       {
         for(size_t i = 0; i < m_inputWS->getNumberHistograms(); ++i)
         {
-          m_indices[i] = i; // 1-to-1
+          m_indices.insert(std::make_pair(i,i)); // 1-to-1
         }
       }
       else
       {
         for(size_t i = 0; i < requestedIndices.size(); ++i)
         {
-          m_indices[i] = static_cast<size_t>(requestedIndices[i]); //user-requested->increasing on output
+          m_indices.insert(std::make_pair(i, static_cast<size_t>(requestedIndices[i]))); //user-requested->increasing on output
         }
       }
 
diff --git a/Code/Mantid/Framework/CurveFitting/src/CalculateMSVesuvio.cpp b/Code/Mantid/Framework/CurveFitting/src/CalculateMSVesuvio.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..532e4dab4e5d5c2f10844ea4e7efeb18a428e723
--- /dev/null
+++ b/Code/Mantid/Framework/CurveFitting/src/CalculateMSVesuvio.cpp
@@ -0,0 +1,788 @@
+//-----------------------------------------------------------------------------
+// Includes
+//-----------------------------------------------------------------------------
+#include "MantidCurveFitting/CalculateMSVesuvio.h"
+// Use helpers for storing detector/resolution parameters
+#include "MantidCurveFitting/ConvertToYSpace.h"
+#include "MantidCurveFitting/MSVesuvioHelpers.h"
+#include "MantidCurveFitting/VesuvioResolution.h"
+
+#include "MantidAPI/SampleShapeValidator.h"
+#include "MantidAPI/WorkspaceValidators.h"
+
+#include "MantidGeometry/Instrument/ParameterMap.h"
+#include "MantidGeometry/Objects/Track.h"
+
+#include "MantidKernel/ArrayLengthValidator.h"
+#include "MantidKernel/ArrayProperty.h"
+#include "MantidKernel/BoundedValidator.h"
+#include "MantidKernel/CompositeValidator.h"
+#include "MantidKernel/MersenneTwister.h"
+#include "MantidKernel/VectorHelper.h"
+
+#include <boost/make_shared.hpp>
+
+namespace Mantid
+{
+  namespace CurveFitting
+  {
+    using namespace API;
+    using namespace Kernel;
+    using Geometry::Link;
+    using Geometry::ParameterMap;
+    using Geometry::Track;
+
+    namespace
+    {
+      const size_t MAX_SCATTER_PT_TRIES = 25;
+      /// Conversion constant
+      const double MASS_TO_MEV = 0.5*PhysicalConstants::NeutronMass/PhysicalConstants::meV;
+    } // end anonymous namespace
+
+    //-------------------------------------------------------------------------
+    // Member functions
+    //-------------------------------------------------------------------------
+
+    // Register the algorithm into the AlgorithmFactory
+    DECLARE_ALGORITHM(CalculateMSVesuvio)
+
+    /// Constructor
+    CalculateMSVesuvio::CalculateMSVesuvio() : Algorithm(),
+      m_randgen(NULL),
+      m_acrossIdx(0), m_upIdx(1), m_beamIdx(3), m_beamDir(), m_srcR2(0.0),
+      m_halfSampleHeight(0.0), m_halfSampleWidth(0.0), m_halfSampleThick(0.0),
+      m_maxWidthSampleFrame(0.0), m_sampleShape(NULL), m_sampleProps(NULL),
+      m_detHeight(-1.0), m_detWidth(-1.0), m_detThick(-1.0),
+      m_tmin(-1.0), m_tmax(-1.0), m_delt(-1.0), m_foilRes(-1.0),
+      m_nscatters(0), m_nruns(0), m_nevents(0),
+      m_progress(NULL), m_inputWS()
+    {
+    }
+
+    /// Destructor
+    CalculateMSVesuvio::~CalculateMSVesuvio()
+    {
+      delete m_randgen;
+      delete m_progress;
+      delete m_sampleProps;
+    }
+
+    /**
+     * Initialize the algorithm's properties.
+     */
+    void CalculateMSVesuvio::init()
+    {
+      // Inputs
+      auto inputWSValidator = boost::make_shared<CompositeValidator>();
+      inputWSValidator->add<WorkspaceUnitValidator>("TOF");
+      inputWSValidator->add<SampleShapeValidator>();
+      declareProperty(new WorkspaceProperty<>("InputWorkspace","",
+                                              Direction::Input, inputWSValidator),
+                      "Input workspace to be corrected, in units of TOF.");
+
+      // -- Sample --
+      auto positiveInt = boost::make_shared<Kernel::BoundedValidator<int>>();
+      positiveInt->setLower(1);
+      declareProperty("NoOfMasses", -1, positiveInt,
+                      "The number of masses contained within the sample");
+
+      auto positiveNonZero = boost::make_shared<BoundedValidator<double>>();
+      positiveNonZero->setLower(0.0);
+      positiveNonZero->setLowerExclusive(true);
+      declareProperty("SampleDensity", -1.0, positiveNonZero,
+                      "The density of the sample in gm/cm^3");
+
+      auto nonEmptyArray = boost::make_shared<ArrayLengthValidator<double>>();
+      nonEmptyArray->setLengthMin(3);
+      declareProperty(new ArrayProperty<double>("AtomicProperties", nonEmptyArray),
+                      "Atomic properties of masses within the sample. "
+                      "The expected format is 3 consecutive values per mass: "
+                      "mass(amu), cross-section (barns) & s.d of Compton profile.");
+      setPropertyGroup("NoOfMasses", "Sample");
+      setPropertyGroup("SampleDensity", "Sample");
+      setPropertyGroup("AtomicProperties", "Sample");
+
+      // -- Beam --
+      declareProperty("BeamRadius", -1.0, positiveNonZero,
+                      "Radius, in cm, of beam");
+
+      // -- Algorithm --
+      declareProperty("Seed", 123456789, positiveInt,
+                      "Seed the random number generator with this value");
+      declareProperty("NumScatters", 3, positiveInt,
+                      "Number of scattering orders to calculate");
+      declareProperty("NumRuns", 10, positiveInt,
+                      "Number of simulated runs per spectrum");
+      declareProperty("NumEventsPerRun", 50000, positiveInt,
+                      "Number of events per run");
+      setPropertyGroup("Seed", "Algorithm");
+      setPropertyGroup("NumScatters", "Algorithm");
+      setPropertyGroup("NumRuns", "Algorithm");
+      setPropertyGroup("NumEventsPerRun", "Algorithm");
+
+      // Outputs
+      declareProperty(new WorkspaceProperty<>("TotalScatteringWS","", Direction::Output),
+                      "Workspace to store the calculated total scattering counts");
+      declareProperty(new WorkspaceProperty<>("MultipleScatteringWS","", Direction::Output),
+                      "Workspace to store the calculated total scattering counts");
+    }
+
+    /**
+     * Execute the algorithm.
+     */
+    void CalculateMSVesuvio::exec()
+    {
+      m_inputWS = getProperty("InputWorkspace");
+      cacheInputs();
+
+      // Create new workspaces
+      MatrixWorkspace_sptr totalsc = WorkspaceFactory::Instance().create(m_inputWS);
+      MatrixWorkspace_sptr multsc = WorkspaceFactory::Instance().create(m_inputWS);
+
+      // Initialize random number generator
+      m_randgen = new MSVesuvioHelper::RandomNumberGenerator(getProperty("Seed"));
+
+      // Setup progress
+      const size_t nhist = m_inputWS->getNumberHistograms();
+      m_progress = new API::Progress(this, 0.0, 1.0, nhist*m_nruns*2);
+      for(size_t i = 0; i < nhist; ++i)
+      {
+
+        // Copy over the X-values
+        const MantidVec & xValues = m_inputWS->readX(i);
+        totalsc->dataX(i) = xValues;
+        multsc->dataX(i) = xValues;
+
+        // Final detector position
+        Geometry::IDetector_const_sptr detector;
+        try
+        {
+          detector = m_inputWS->getDetector(i);
+        }
+        catch(Kernel::Exception::NotFoundError&)
+        {
+          // intel compiler doesn't like continue in a catch inside an OMP loop
+        }
+        if(!detector)
+        {
+          std::ostringstream os;
+          os << "No valid detector object found for spectrum at workspace index '" << i << "'. No correction calculated.";
+          g_log.information(os.str());
+          continue;
+        }
+
+        // the output spectrum objects have references to where the data will be stored
+        calculateMS(i, *totalsc->getSpectrum(i), *multsc->getSpectrum(i));
+      }
+
+      setProperty("TotalScatteringWS", totalsc);
+      setProperty("MultipleScatteringWS", multsc);
+    }
+
+    /**
+     * Caches inputs insuitable form for speed in later calculations
+     */
+    void CalculateMSVesuvio::cacheInputs()
+    {
+      // Algorithm
+      int nscatters = getProperty("NumScatters");
+      m_nscatters = static_cast<size_t>(nscatters);
+      int nruns = getProperty("NumRuns");
+      m_nruns = static_cast<size_t>(nruns);
+      int nevents = getProperty("NumEventsPerRun");
+      m_nevents = static_cast<size_t>(nevents);
+      
+      // -- Geometry --
+      const auto instrument = m_inputWS->getInstrument();
+      m_beamDir = instrument->getSample()->getPos() - instrument->getSource()->getPos();
+      m_beamDir.normalize();
+
+      const auto rframe = instrument->getReferenceFrame();
+      m_acrossIdx = rframe->pointingHorizontal();
+      m_upIdx = rframe->pointingUp();
+      m_beamIdx = rframe->pointingAlongBeam();
+
+      m_srcR2 = getProperty("BeamRadius");
+      // Convert to metres
+      m_srcR2 /= 100.0;
+
+      // Sample shape
+      m_sampleShape = &(m_inputWS->sample().getShape());
+      // We know the shape is valid from the property validator
+      // Use the bounding box as an approximation to determine the extents
+      // as this will match in both height and width for a cuboid & cylinder
+      // sample shape
+      Geometry::BoundingBox bounds = m_sampleShape->getBoundingBox();
+      V3D boxWidth = bounds.width();
+      // Use half-width/height for easier calculation later
+      m_halfSampleWidth = 0.5*boxWidth[m_acrossIdx];
+      m_halfSampleHeight = 0.5*boxWidth[m_upIdx];
+      m_halfSampleThick = 0.5*boxWidth[m_beamIdx];
+
+      // -- Workspace --
+      const auto & inX = m_inputWS->readX(0);
+      m_tmin = inX.front()*1e-06;
+      m_tmax = inX.back()*1e-06;
+      m_delt = (inX[1] - inX.front());
+
+      // -- Sample --
+      int nmasses = getProperty("NoOfMasses");
+      std::vector<double> sampleInfo = getProperty("AtomicProperties");
+      const int nInputAtomProps = static_cast<int>(sampleInfo.size());
+      const int nExptdAtomProp(3);
+      if(nInputAtomProps != nExptdAtomProp*nmasses)
+      {
+        std::ostringstream os;
+        os << "Inconsistent AtomicProperties list defined. Expected " << nExptdAtomProp*nmasses
+           << " values, however, only " << sampleInfo.size() << " have been given.";
+        throw std::invalid_argument(os.str());
+      }
+      const int natoms = nInputAtomProps/3;
+      m_sampleProps = new SampleComptonProperties(natoms);
+      m_sampleProps->density = getProperty("SampleDensity");
+
+      double totalMass(0.0); // total mass in grams
+      m_sampleProps->totalxsec = 0.0;
+      for(int i = 0; i < natoms; ++i)
+      {
+        auto & comptonAtom = m_sampleProps->atoms[i];
+        comptonAtom.mass = sampleInfo[nExptdAtomProp*i];
+        totalMass += comptonAtom.mass*PhysicalConstants::AtomicMassUnit*1000;
+
+        const double xsec = sampleInfo[nExptdAtomProp*i + 1];
+        comptonAtom.sclength = sqrt(xsec/(4.0*M_PI));
+        const double factor = 1.0 + (PhysicalConstants::NeutronMassAMU/comptonAtom.mass);
+        m_sampleProps->totalxsec += (xsec/(factor*factor));
+
+        comptonAtom.profile = sampleInfo[nExptdAtomProp*i + 2];
+      }
+      const double numberDensity = m_sampleProps->density*1e6/totalMass; // formula units/m^3
+      m_sampleProps->mu = numberDensity*m_sampleProps->totalxsec*1e-28;
+
+      // -- Detector geometry -- choose first detector that is not a monitor
+      Geometry::IDetector_const_sptr detPixel;
+      for(size_t i = 0; i < m_inputWS->getNumberHistograms(); ++i)
+      {
+        try
+        {
+          detPixel = m_inputWS->getDetector(i);
+        }
+        catch(Exception::NotFoundError &)
+        {
+          continue;
+        }
+        if(!detPixel->isMonitor()) break;
+      }
+      // Bounding box in detector frame
+      Geometry::Object_const_sptr pixelShape = detPixel->shape();
+      if(!pixelShape || !pixelShape->hasValidShape())
+      {
+        throw std::invalid_argument("Detector pixel has no defined shape!");
+      }
+      Geometry::BoundingBox detBounds = pixelShape->getBoundingBox();
+      V3D detBoxWidth = detBounds.width();
+      m_detWidth = detBoxWidth[m_acrossIdx];
+      m_detHeight = detBoxWidth[m_upIdx];
+      m_detThick = detBoxWidth[m_beamIdx];
+
+      // Foil resolution
+      auto foil = instrument->getComponentByName("foil-pos0");
+      if(!foil)
+      {
+        throw std::runtime_error("Workspace has no gold foil component defined.");
+      }
+      auto param = m_inputWS->instrumentParameters().get(foil.get(), "hwhm_lorentz");
+      if(!param)
+      {
+        throw std::runtime_error("Foil component has no hwhm_lorentz parameter defined.");
+      }
+      m_foilRes = param->value<double>();
+    }
+
+    /**
+     * Calculate the total scattering and contributions from higher-order scattering for given
+     * spectrum
+     * @param wsIndex The index on the input workspace for the chosen spectrum
+     * @param totalsc A non-const reference to the spectrum that will contain the total scattering calculation
+     * @param multsc A non-const reference to the spectrum that will contain the multiple scattering contribution
+     */
+    void CalculateMSVesuvio::calculateMS(const size_t wsIndex, API::ISpectrum & totalsc,
+                                         API::ISpectrum & multsc) const
+    {
+      // Detector information
+      DetectorParams detpar = ConvertToYSpace::getDetectorParameters(m_inputWS, wsIndex);
+      detpar.t0 *= 1e6; // t0 in microseconds here
+      ResolutionParams respar = VesuvioResolution::getResolutionParameters(m_inputWS, wsIndex);
+
+      // Final counts averaged over all simulations
+      MSVesuvioHelper::SimulationAggregator accumulator(m_nruns);
+      for(size_t i = 0; i < m_nruns; ++i)
+      {
+        m_progress->report("MS calculation: idx=" + boost::lexical_cast<std::string>(wsIndex)
+                           + ", run=" + boost::lexical_cast<std::string>(i));
+        
+        simulate(detpar, respar,
+                 accumulator.newSimulation(m_nscatters, m_inputWS->blocksize()));
+
+        m_progress->report("MS calculation: idx=" + boost::lexical_cast<std::string>(wsIndex)
+                           + ", run=" + boost::lexical_cast<std::string>(i));
+      }
+
+      // Average over all runs and assign to output workspaces
+      MSVesuvioHelper::SimulationWithErrors avgCounts = accumulator.average();
+      avgCounts.normalise();
+      assignToOutput(avgCounts, totalsc, multsc);
+    }
+
+    /**
+     * Perform a single simulation of a given number of events for up to a maximum number of
+     * scatterings on a chosen detector
+     * @param detpar Detector information describing the final detector position
+     * @param respar Resolution information on the intrument as a whole
+     * @param simulCounts Simulation object used to storing the calculated number of counts
+     */
+    void CalculateMSVesuvio::simulate(const DetectorParams & detpar,
+                                      const ResolutionParams &respar,
+                                      MSVesuvioHelper::Simulation & simulCounts) const
+    {
+      for(size_t i = 0; i < m_nevents; ++i)
+      {
+        calculateCounts(detpar, respar, simulCounts);
+      }
+    }
+
+    /**
+     * Assign the averaged counts to the correct workspaces
+     * @param avgCounts Counts & errors separated for each scattering order
+     * @param totalsc A non-const reference to the spectrum for the total scattering calculation
+     * @param multsc A non-const reference to the spectrum for the multiple scattering contribution
+     */
+    void
+    CalculateMSVesuvio::assignToOutput(const  MSVesuvioHelper::SimulationWithErrors &avgCounts,
+                                       API::ISpectrum & totalsc, API::ISpectrum & multsc) const
+    {
+      // Sum up all multiple scatter events
+      auto & msscatY = multsc.dataY();
+      auto & msscatE = multsc.dataE();
+      for(size_t i = 1; i < m_nscatters; ++i) //(i >= 1 for multiple scatters)
+      {
+        const auto & counts = avgCounts.sim.counts[i];
+        // equivalent to msscatY[j] += counts[j]
+        std::transform(counts.begin(), counts.end(), msscatY.begin(), msscatY.begin(),
+                       std::plus<double>());
+        const auto & scerrors = avgCounts.errors[i];
+        // sum errors in quadrature
+        std::transform(scerrors.begin(), scerrors.end(), msscatE.begin(), msscatE.begin(),
+                       VectorHelper::SumGaussError<double>());
+      }
+      // for total scattering add on single-scatter events
+      auto & totalscY = totalsc.dataY();
+      auto & totalscE = totalsc.dataE();
+      const auto & counts0 = avgCounts.sim.counts.front();
+      std::transform(counts0.begin(), counts0.end(), msscatY.begin(), totalscY.begin(),
+                     std::plus<double>());
+      const auto & errors0 = avgCounts.errors.front();
+      std::transform(errors0.begin(), errors0.end(), msscatE.begin(), totalscE.begin(),
+                     VectorHelper::SumGaussError<double>());
+    }
+
+    /**
+     * @param detpar Detector information describing the final detector position
+     * @param respar Resolution information on the intrument as a whole
+     * @param simulation [Output] Store the calculated counts here
+     * @return The sum of the weights for all scatters
+     */
+    double CalculateMSVesuvio::calculateCounts(const DetectorParams &detpar,
+                                               const ResolutionParams &respar,
+                                               MSVesuvioHelper::Simulation &simulation) const
+    {
+      double weightSum(0.0);
+
+      // moderator coord in lab frame
+      V3D srcPos = generateSrcPos(detpar.l1);
+      if(fabs(srcPos[m_acrossIdx]) > m_halfSampleWidth ||
+         fabs(srcPos[m_upIdx]) > m_halfSampleHeight)
+      {
+        return 0.0; // misses sample
+      }
+
+      // track various variables during calculation
+      std::vector<double> weights(m_nscatters, 1.0), // start at 1.0
+        tofs(m_nscatters, 0.0), // tof accumulates for each piece of the calculation
+        en1(m_nscatters, 0.0);
+
+      const double vel2 = sqrt(detpar.efixed/MASS_TO_MEV);
+      const double t2 = detpar.l2/vel2;
+      en1[0] = generateE0(detpar.l1, t2, weights[0]);
+      tofs[0] = generateTOF(en1[0], respar.dtof, respar.dl1); // correction for resolution in l1
+
+      // Neutron path
+      std::vector<V3D> scatterPts(m_nscatters), // track origin of each scatter
+          neutronDirs(m_nscatters); // neutron directions
+      V3D startPos(srcPos);
+      neutronDirs[0] = m_beamDir;
+
+      generateScatter(startPos, neutronDirs[0], weights[0], scatterPts[0]);
+      double distFromStart = startPos.distance(scatterPts[0]);
+      // Compute TOF for first scatter event
+      const double vel0 = sqrt(en1[0]/MASS_TO_MEV);
+      tofs[0] += (distFromStart*1e6/vel0);
+
+      // multiple scatter events within sample, i.e not including zeroth
+      for(size_t i = 1; i < m_nscatters; ++i)
+      {
+        weights[i] = weights[i-1];
+        tofs[i] = tofs[i-1];
+
+        // Generate a new direction of travel
+        const V3D & prevSc = scatterPts[i-1];
+        V3D & curSc = scatterPts[i];
+        const V3D & oldDir = neutronDirs[i-1];
+        V3D & newDir = neutronDirs[i];
+        size_t ntries(0);
+        do
+        {
+          const double randth = acos(2.0*m_randgen->flat() - 1.0);
+          const double randphi = 2.0*M_PI*m_randgen->flat();
+          newDir.azimuth_polar_SNS(1.0, randphi, randth);
+
+          // Update weight
+          const double wgt = weights[i];
+          if(generateScatter(prevSc, newDir, weights[i], curSc))
+            break;
+          else
+          {
+            weights[i] = wgt; // put it back to what it was
+            ++ntries;
+          }
+        }
+        while(ntries < MAX_SCATTER_PT_TRIES);
+        if(ntries == MAX_SCATTER_PT_TRIES)
+        {
+          throw std::runtime_error("Unable to generate scatter point in sample. Check sample shape.");
+        }
+
+        const double scang = newDir.angle(oldDir);
+        auto e1range = calculateE1Range(scang, en1[i-1]);
+        en1[i] = e1range.first + m_randgen->flat()*(e1range.second - e1range.first);
+        const double d2sig = partialDiffXSec(en1[i-1], en1[i], scang);
+        double weight = d2sig*4.0*M_PI*(e1range.second - e1range.first)/m_sampleProps->totalxsec;
+        // accumulate total weight
+        weightSum += weight;
+        weights[i] *= weight; // account for this scatter on top of previous
+
+        // Increment time of flight...
+        const double veli = sqrt(en1[i]/MASS_TO_MEV);
+        tofs[i] += (curSc.distance(prevSc)*1e6/veli);
+      }
+
+      // force all orders in to current detector
+      const auto & inX = m_inputWS->readX(0);
+      for(size_t i = 0; i < m_nscatters; ++i)
+      {
+        double scang(0.0), distToExit(0.0);
+        V3D detPos = generateDetectorPos(detpar.pos, en1[i], scatterPts[i], neutronDirs[i],
+                                         scang, distToExit);
+        // Weight by probability neutron leaves sample
+        double & curWgt = weights[i];
+        curWgt *= exp(-m_sampleProps->mu*distToExit);
+        // Weight by cross-section for the final energy
+        const double efinal = generateE1(detpar.theta, detpar.efixed, m_foilRes);
+        curWgt *= partialDiffXSec(en1[i], efinal, scang)/m_sampleProps->totalxsec;
+        // final TOF
+        const double veli = sqrt(efinal/MASS_TO_MEV);
+        tofs[i] += detpar.t0 + (scatterPts[i].distance(detPos)*1e6)/veli;
+        // "Bin" weight into appropriate place
+        std::vector<double> &counts = simulation.counts[i];
+        const double finalTOF = tofs[i];
+
+        for (size_t it = 0; it < inX.size(); ++it)
+        {
+          if (inX[it] - 0.5*m_delt < finalTOF && finalTOF < inX[it] + 0.5*m_delt)
+          {
+            counts[it] += curWgt;
+            break;
+          }
+        }
+      }
+
+      return weightSum;
+    }
+
+    /**
+      * Sample from the moderator assuming it can be seen
+      * as a cylindrical ring with inner and outer radius
+      * @param l1 Src-sample distance (m)
+      * @returns Position on the moderator of the generated point
+      */
+    V3D CalculateMSVesuvio::generateSrcPos(const double l1) const
+    {
+      double radius(-1.0), widthPos(0.0), heightPos(0.0);
+      do
+      {
+        widthPos = -m_srcR2 + 2.0*m_srcR2*m_randgen->flat();
+        heightPos = -m_srcR2 + 2.0*m_srcR2*m_randgen->flat();
+        using std::sqrt;
+        radius = sqrt(widthPos*widthPos + heightPos*heightPos);
+      }
+      while(radius > m_srcR2);
+      // assign to output
+      V3D srcPos;
+      srcPos[m_acrossIdx] = widthPos;
+      srcPos[m_upIdx] = heightPos;
+      srcPos[m_beamIdx] = -l1;
+
+      return srcPos;
+    }
+
+    /**
+     * Generate an incident energy based on a randomly-selected TOF value
+     * It is assigned a weight = (2.0*E0/(T-t2))/E0^0.9.
+     * @param l1 Distance from src to sample (metres)
+     * @param t2 Nominal time from sample to detector (seconds)
+     * @param weight [Out] Weight factor to modify for the generated energy value
+     * @return
+     */
+    double CalculateMSVesuvio::generateE0(const double l1, const double t2, double &weight) const
+    {
+      const double tof = m_tmin + (m_tmax - m_tmin)*m_randgen->flat();
+      const double t1 = (tof - t2);
+      const double vel0 = l1/t1;
+      const double en0 = MASS_TO_MEV*vel0*vel0;
+
+      weight = 2.0*en0/t1/pow(en0, 0.9);
+      weight *= 1e-4; // Reduce weight to ~1
+
+      return en0;
+    }
+
+    /**
+     * Generate an initial tof from this distribution:
+     * 1-(0.5*X**2/T0**2+X/T0+1)*EXP(-X/T0), where x is the time and t0
+     * is the src-sample time.
+     * @param dtof Error in time resolution (us)
+     * @param en0 Value of the incident energy
+     * @param dl1 S.d of moderator to sample distance
+     * @return tof Guass TOF modified for asymmetric pulse
+     */
+    double CalculateMSVesuvio::generateTOF(const double en0, const double dtof,
+                                           const double dl1) const
+    {
+      const double vel1 = sqrt(en0/MASS_TO_MEV);
+      const double dt1 = (dl1/vel1)*1e6;
+      const double xmin(0.0), xmax(15.0*dt1);
+      double dx = 0.5*(xmax - xmin);
+      // Generate a random y position in th distribution
+      const double yv = m_randgen->flat();
+
+      double xt(xmin);
+      double tof = m_randgen->gaussian(0.0, dtof);
+      while(true)
+      {
+        xt += dx;
+        //Y=1-(0.5*X**2/T0**2+X/T0+1)*EXP(-X/T0)
+        double y = 1.0 - (0.5*xt*xt/(dt1*dt1) + xt/dt1 + 1)*exp(-xt/dt1);
+        if(fabs(y - yv) < 1e-4)
+        {
+          tof += xt - 3*dt1;
+          break;
+        }
+        if(y > yv)
+        {
+          dx = -fabs(0.5*dx);
+        }
+        else
+        {
+          dx = fabs(0.5*dx);
+        }
+      }
+      return tof;
+    }
+
+    /**
+     * Generate a scatter event and update the weight according to the
+     * amount the beam would be attenuted by the sample
+     * @param startPos Starting position
+     * @param direc Direction of travel for the neutron
+     * @param weight [InOut] Multiply the incoming weight by the attenuation factor
+     * @param scatterPt [Out] Generated scattering point
+     * @return True if the scatter event was generated, false otherwise
+     */
+    bool CalculateMSVesuvio::generateScatter(const Kernel::V3D &startPos, const Kernel::V3D &direc,
+                                             double &weight, V3D &scatterPt) const
+    {
+      Track particleTrack(startPos, direc);
+      if(m_sampleShape->interceptSurface(particleTrack) != 1)
+      {
+        return false;
+      }
+      // Find distance inside object and compute probability of scattering
+      const auto & link = particleTrack.begin();
+      double totalObjectDist = link->distInsideObject;
+      const double scatterProb = 1.0 - exp(-m_sampleProps->mu*totalObjectDist);
+      // Select a random point on the track that is the actual scatter point
+      // from the scattering probability distribution
+      const double dist = -log(1.0 - m_randgen->flat()*scatterProb)/m_sampleProps->mu;
+      const double fraction = dist/totalObjectDist;
+      // Scatter point is then entry point + fraction of width in each direction
+      scatterPt = link->entryPoint;
+      V3D edgeDistances = (link->exitPoint - link->entryPoint);
+      scatterPt += edgeDistances*fraction;
+      // Update weight
+      weight *= scatterProb;
+      return true;
+    }
+
+    /**
+     * @param theta Neutron scattering angle (radians)
+     * @param en0 Computed incident energy
+     * @return The range of allowed final energies for the neutron
+     */
+    std::pair<double, double> CalculateMSVesuvio::calculateE1Range(const double theta, const double en0) const
+    {
+      const double k0 = sqrt(en0/PhysicalConstants::E_mev_toNeutronWavenumberSq);
+      const double sth(sin(theta)), cth(cos(theta));
+
+      double e1min(1e10), e1max(-1e10); // large so that anything else is smaller
+      const auto & atoms = m_sampleProps->atoms;
+      for(size_t i = 0; i < atoms.size(); ++i)
+      {
+        const double mass = atoms[i].mass;
+
+        const double fraction = (cth + sqrt(mass*mass - sth*sth))/(1.0 + mass);
+        const double k1 = fraction*k0;
+        const double en1 = PhysicalConstants::E_mev_toNeutronWavenumberSq*k1*k1;
+        const double qr = sqrt(k0*k0 + k1*k1 - 2.0*k0*k1*cth);
+        const double wr = en0 - en1;
+        const double width = PhysicalConstants::E_mev_toNeutronWavenumberSq*atoms[i].profile*qr/mass;
+        const double e1a = en0 - wr - 10.0*width;
+        const double e1b = en0 - wr + 10.0*width;
+        if(e1a < e1min) e1min = e1a;
+        if(e1b > e1max) e1max = e1b;
+      }
+      if(e1min < 0.0) e1min = 0.0;
+      return std::make_pair(e1min, e1max);
+    }
+
+    /**
+     * Compute the partial differential cross section for this energy and theta.
+     * @param en0 Initial energy (meV)
+     * @param en1 Final energy (meV)
+     * @param theta Scattering angle
+     * @return Value of differential cross section
+     */
+    double CalculateMSVesuvio::partialDiffXSec(const double en0, const double en1, const double theta) const
+    {
+      const double rt2pi = sqrt(2.0*M_PI);
+
+      const double k0 = sqrt(en0/PhysicalConstants::E_mev_toNeutronWavenumberSq);
+      const double k1 = sqrt(en1/PhysicalConstants::E_mev_toNeutronWavenumberSq);
+      const double q = sqrt(k0*k0 + k1*k1 - 2.0*k0*k1*cos(theta));
+      const double w = en0 - en1;
+
+      double pdcs(0.0);
+      const auto & atoms = m_sampleProps->atoms;
+      if(q > 0.0) // avoid continuous checking in loop
+      {
+        for(size_t i = 0; i < atoms.size(); ++i)
+        {
+          const double jstddev = atoms[i].profile;
+          const double mass = atoms[i].mass;
+          const double y = mass*w/(4.18036*q) - 0.5*q;
+          const double jy = exp(-0.5*y*y/(jstddev*jstddev))/(jstddev*rt2pi);
+          const double sqw = mass*jy/(4.18036*q);
+
+          const double sclength = atoms[i].sclength;
+          pdcs += sclength*sclength*(k1/k0)*sqw;
+        }
+      }
+      else
+      {
+        for(size_t i = 0; i < atoms.size(); ++i)
+        {
+          const double sclength = atoms[i].sclength;
+          pdcs += sclength*sclength;
+        }
+      }
+
+      return pdcs;
+    }
+
+    /**
+     * Generate a random position within the final detector in the lab frame
+     * @param nominalPos The poisiton of the centre point of the detector
+     * @param energy The final energy of the neutron
+     * @param scatterPt The position of the scatter event that lead to this detector
+     * @param direcBeforeSc Directional vector that lead to scatter point that hit this detector
+     * @param scang [Output] The value of the scattering angle for the generated point
+     * @param distToExit [Output] The distance covered within the object from scatter to exit
+     * @return A new position in the detector
+     */
+    V3D CalculateMSVesuvio::generateDetectorPos(const V3D &nominalPos, const double energy,
+                                                const V3D &scatterPt, const V3D &direcBeforeSc,
+                                                double &scang, double &distToExit) const
+    {
+      const double mu = 7430.0/sqrt(energy); // Inverse attenuation length (m-1) for vesuvio det.
+      const double ps = 1.0 - exp(-mu*m_detThick); // Probability of detection in path thickness.
+      V3D detPos;
+      scang = 0.0; distToExit = 0.0;
+      size_t ntries(0);
+      do
+      {
+        // Beam direction by moving to front of "box"define by detector dimensions and then
+        // computing expected distance travelled based on probability
+        detPos[m_beamIdx] = (nominalPos[m_beamIdx] - 0.5*m_detThick) - \
+            (log(1.0 - m_randgen->flat()*ps)/mu);
+        // perturb away from nominal position
+        detPos[m_acrossIdx] = nominalPos[m_acrossIdx] + (m_randgen->flat() - 0.5)*m_detWidth;
+        detPos[m_upIdx] = nominalPos[m_upIdx] + (m_randgen->flat() - 0.5)*m_detHeight;
+
+        // Distance to exit the sample for this order
+        V3D scToDet = detPos - scatterPt;
+        scToDet.normalize();
+        Geometry::Track scatterToDet(scatterPt, scToDet);
+        if(m_sampleShape->interceptSurface(scatterToDet) > 0)
+        {
+          scang = direcBeforeSc.angle(scToDet);
+          const auto & link = scatterToDet.begin();
+          distToExit = link->distInsideObject;
+          break;
+        }
+        // if point is very close surface then there may be no valid intercept so try again
+        ++ntries;
+      }
+      while(ntries < MAX_SCATTER_PT_TRIES);
+      if(ntries == MAX_SCATTER_PT_TRIES)
+      {
+        throw std::runtime_error("Unable to create track from sample to detector. "
+                                 "Detector shape may be too small.");
+      }
+      return detPos;
+    }
+
+    /**
+     * Generate the final energy of the analyser
+     * @param angle Detector angle from sample
+     * @param e1nom The nominal final energy of the analyzer
+     * @param e1res The resoltion in energy of the analyser
+     * @return A value for the final energy of the neutron
+     */
+    double CalculateMSVesuvio::generateE1(const double angle, const double e1nom,
+                                          const double e1res) const
+    {
+      if(e1res == 0.0) return e1nom;
+
+      const double randv = m_randgen->flat();
+      if(e1nom < 5000.0)
+      {
+        if(angle > 90.0) return MSVesuvioHelper::finalEnergyAuDD(randv);
+        else return MSVesuvioHelper::finalEnergyAuYap(randv);
+      }
+      else
+      {
+        return MSVesuvioHelper::finalEnergyUranium(randv);
+      }
+    }
+
+  } // namespace Algorithms
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/CurveFitting/src/ConvertToYSpace.cpp b/Code/Mantid/Framework/CurveFitting/src/ConvertToYSpace.cpp
index 0c615888a88a91e6f7020c659ff88ac64a62c23e..9d36aa11d099e15f504e046d38b718a2f9305319 100644
--- a/Code/Mantid/Framework/CurveFitting/src/ConvertToYSpace.cpp
+++ b/Code/Mantid/Framework/CurveFitting/src/ConvertToYSpace.cpp
@@ -34,10 +34,10 @@ namespace Mantid
 
     //----------------------------------------------------------------------------------------------
     /// Algorithm's name for identification. @see Algorithm::name
-    const std::string ConvertToYSpace::name() const { return "ConvertToYSpace";};
+    const std::string ConvertToYSpace::name() const { return "ConvertToYSpace";}
 
     /// Algorithm's version for identification. @see Algorithm::version
-    int ConvertToYSpace::version() const { return 1;};
+    int ConvertToYSpace::version() const { return 1;}
 
     /// Algorithm's category for identification. @see Algorithm::category
     const std::string ConvertToYSpace::category() const { return "Transforms\\Units";}
@@ -75,6 +75,7 @@ namespace Mantid
       const auto & pmap = ws->constInstrumentParameters();
       detpar.l1 = sample->getDistance(*source);
       detpar.l2 = det->getDistance(*sample);
+      detpar.pos = det->getPos();
       detpar.theta = ws->detectorTwoTheta(det);
       detpar.t0 = ConvertToYSpace::getComponentParameter(det, pmap, "t0")*1e-6; // Convert to seconds
       detpar.efixed = ConvertToYSpace::getComponentParameter(det, pmap, "efixed");
@@ -215,18 +216,7 @@ namespace Mantid
     {
       try
       {
-
-        auto det = m_inputWS->getDetector(index);
-        const auto & pmap = m_inputWS->constInstrumentParameters();
-        auto detPos = det->getPos();
-
-        // -- Setup detector & resolution parameters --
-        DetectorParams detPar;
-        detPar.l1 = m_l1;
-        detPar.l2 = m_samplePos.distance(detPos);
-        detPar.theta = m_inputWS->detectorTwoTheta(det); //radians
-        detPar.t0 = getComponentParameter(det, pmap, "t0")*1e-06; // seconds
-        detPar.efixed = getComponentParameter(det, pmap,"efixed");
+        DetectorParams detPar = getDetectorParameters(m_inputWS, index);
         const double v1 = std::sqrt(detPar.efixed/MASS_TO_MEV);
         const double k1 = std::sqrt(detPar.efixed/PhysicalConstants::E_mev_toNeutronWavenumberSq);
 
diff --git a/Code/Mantid/Framework/CurveFitting/src/FABADAMinimizer.cpp b/Code/Mantid/Framework/CurveFitting/src/FABADAMinimizer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..45f3477eb1fbcd5ecd346a56cc2ea6a68e26b558
--- /dev/null
+++ b/Code/Mantid/Framework/CurveFitting/src/FABADAMinimizer.cpp
@@ -0,0 +1,559 @@
+#include "MantidCurveFitting/FABADAMinimizer.h"
+#include "MantidCurveFitting/CostFuncLeastSquares.h"
+#include "MantidCurveFitting/BoundaryConstraint.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+#include "MantidAPI/CostFunctionFactory.h"
+#include "MantidAPI/FuncMinimizerFactory.h"
+#include "MantidAPI/IFunction.h"
+#include "MantidAPI/WorkspaceFactory.h"
+#include "MantidAPI/MatrixWorkspace.h"
+#include "MantidAPI/WorkspaceProperty.h"
+#include "MantidAPI/AnalysisDataService.h"
+#include "MantidAPI/ITableWorkspace.h"
+#include "MantidAPI/TableRow.h"
+#include "MantidKernel/MersenneTwister.h"
+#include "MantidKernel/PseudoRandomNumberGenerator.h"
+
+#include "MantidKernel/Logger.h"
+
+#include <boost/random/normal_distribution.hpp>
+#include <boost/random/uniform_real.hpp>
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/version.hpp>
+#include <boost/math/special_functions/fpclassify.hpp>
+
+#include <iostream>
+#include <ctime>
+
+
+namespace Mantid
+{
+namespace CurveFitting
+{
+
+namespace
+{
+  // static logger object
+  Kernel::Logger g_log("FABADAMinimizer");
+  // absolute maximum number of iterations when fit must converge
+  const size_t convergenceMaxIterations = 50000;
+  // histogram length for the PDF output workspace
+  const size_t pdf_length = 50;
+  // number of iterations when convergence isn't expected
+  const size_t lowerIterationLimit = 350;
+}
+
+
+DECLARE_FUNCMINIMIZER(FABADAMinimizer, FABADA)
+
+
+  //----------------------------------------------------------------------------------------------
+/// Constructor
+FABADAMinimizer::FABADAMinimizer():API::IFuncMinimizer(),m_conv_point(0)
+  {
+    declareProperty("ChainLength",static_cast<size_t>(10000),"Length of the converged chain.");
+    declareProperty("ConvergenceCriteria",0.0001,"Variance in Chi square for considering convergence reached.");
+    declareProperty(
+      new API::WorkspaceProperty<>("OutputWorkspacePDF","pdf",Kernel::Direction::Output),
+      "The name to give the output workspace");
+    declareProperty(
+      new API::WorkspaceProperty<>("OutputWorkspaceChain","chain",Kernel::Direction::Output),
+      "The name to give the output workspace");
+    declareProperty(
+      new API::WorkspaceProperty<>("OutputWorkspaceConverged","",Kernel::Direction::Output,API::PropertyMode::Optional),
+      "The name to give the output workspace");
+    declareProperty(
+          new API::WorkspaceProperty<API::ITableWorkspace>("ChiSquareTable","chi2",Kernel::Direction::Output),
+      "The name to give the output workspace");
+    declareProperty(
+          new API::WorkspaceProperty<API::ITableWorkspace>("PdfError","pdfE",Kernel::Direction::Output),
+      "The name to give the output workspace");
+
+
+  }
+    
+  //----------------------------------------------------------------------------------------------
+/// Destructor
+FABADAMinimizer::~FABADAMinimizer()
+  {
+  }
+
+/// Initialize minimizer. Set initial values for all private members.
+  void FABADAMinimizer::initialize(API::ICostFunction_sptr function, size_t maxIterations)
+  {
+
+    m_leastSquares = boost::dynamic_pointer_cast<CostFuncLeastSquares>(function);
+    if ( !m_leastSquares )
+      {
+        throw std::invalid_argument("FABADA works only with least squares. Different function was given.");
+      }
+
+    m_counter = 0;
+    m_leastSquares->getParameters(m_parameters);
+    API::IFunction_sptr fun = m_leastSquares->getFittingFunction();
+    
+    if ( fun->nParams() == 0 )
+    {
+      throw std::invalid_argument("Function has 0 fitting parameters.");
+    }
+
+    size_t n = getProperty("ChainLength");
+    m_numberIterations = n / fun->nParams();
+
+    if ( m_numberIterations > maxIterations )
+    {
+        g_log.warning() << "MaxIterations property reduces the required number of iterations (" << m_numberIterations << ")." << std::endl;
+        m_numberIterations = maxIterations;
+    }
+
+    for (size_t i=0 ; i<m_leastSquares->nParams(); ++i)
+    {
+      double p = m_parameters.get(i);
+      m_bound.push_back(false);
+      API::IConstraint *iconstr = fun->getConstraint(i);
+      if ( iconstr )
+      {
+          BoundaryConstraint *bcon = dynamic_cast<BoundaryConstraint*>(iconstr);
+          if ( bcon )
+          {
+             m_bound[i] = true;
+             if ( bcon -> hasLower()) {
+                 m_lower.push_back(bcon->lower());
+             }
+             else {
+                 m_lower.push_back(-10e100);
+             }
+             if ( bcon -> hasUpper()){
+                 m_upper.push_back(bcon -> upper());
+             }
+             else {
+                 m_upper.push_back(10e100);
+             }
+             if (p<m_lower[i]) {
+                 p = m_lower[i];
+                 m_parameters.set(i,p);
+             }
+             if (p>m_upper[i]) {
+                 p = m_upper[i];
+                 m_parameters.set(i,p);
+             }
+
+          }
+
+      }
+      std::vector<double> v;
+      v.push_back(p);
+      m_chain.push_back(v);
+      m_changes.push_back(0);
+      m_par_converged.push_back(false);
+      m_criteria.push_back(getProperty("ConvergenceCriteria"));
+      if (p != 0.0) {
+        m_jump.push_back(std::abs(p/10));
+      }
+      else {
+        m_jump.push_back(0.01);
+      }
+    }
+    m_chi2 = m_leastSquares -> val();
+    std::vector<double> v;
+    v.push_back(m_chi2);
+    m_chain.push_back(v);
+    m_converged = false;
+  }
+    
+
+
+/// Do one iteration. Returns true if iterations to be continued, false if they must stop.
+  bool FABADAMinimizer::iterate(size_t)
+  {
+
+    if ( !m_leastSquares )
+      {
+        throw std::runtime_error("Cost function isn't set up.");
+      }
+
+    size_t n = m_leastSquares->nParams();
+    size_t m = n;
+
+    // Just for the last iteration. For doing exactly the indicated number of iterations.
+    if(m_converged && m_counter == (m_numberIterations)){
+        size_t t = getProperty("ChainLength");
+        m = t % n;
+    }
+
+    // Do one iteration of FABADA's algorithm for each parameter.
+    for(size_t i = 0; i<m ; i++)
+    {
+      GSLVector new_parameters = m_parameters;
+
+      // Calculate the step, depending on convergence reached or not
+      double step;
+      if (m_converged)
+      {
+        boost::mt19937 mt;
+        mt.seed(123*(int(m_counter)+45*int(i)));
+
+        boost::normal_distribution<double> distr(0.0,std::abs(m_jump[i]));
+        boost::variate_generator<boost::mt19937,boost::normal_distribution<double>> gen( mt, distr );
+        
+        step = gen();
+        
+      }
+      else {
+          step = m_jump[i];
+      }
+      // Couts just for helping when developing when coding
+      ///std::cout << std::endl << m_counter << "." << i << std::endl<<std::endl<< m_parameters.get(i)<<std::endl; //DELETE AT THE END
+      ///std::cout << "Real step:  " << step << "      Due to the m_jump:  " << m_jump[i] << std::endl; //DELETE AT THE END
+
+      // Calculate the new value of the parameter
+      double new_value = m_parameters.get(i) + step;
+
+      // Comproves if it is inside the boundary constrinctions. If not, changes it.
+      if (m_bound[i])
+      {
+          if (new_value < m_lower[i]) {
+              new_value = m_lower[i] + (m_lower[i]-new_value)/2;
+          }
+          if (new_value > m_upper[i]) {
+              new_value = m_upper[i] - (new_value-m_upper[i])/2;
+          }
+      }
+
+      // Set the new value in order to calculate the new Chi square value
+      if ( boost::math::isnan(new_value) )
+      {
+        throw std::runtime_error("Parameter value is NaN.");
+      }
+      new_parameters.set(i,new_value);
+      m_leastSquares -> setParameter(i,new_value);
+      double chi2_new = m_leastSquares -> val();
+
+      ///std::cout << "OLD Chi2: " << m_chi2 << "      NEW Chi2:  " << chi2_new << std::endl; // DELETE AT THE END
+
+      // If new Chi square value is lower, jumping directly to new parameter
+      if (chi2_new < m_chi2)
+      {
+        for (size_t j=0; j<n ; j++) {
+            m_chain[j].push_back(new_parameters.get(j));
+        }
+        m_chain[n].push_back(chi2_new);
+        m_parameters = new_parameters;
+        m_chi2 = chi2_new;
+        m_changes[i] += 1;
+        ///std::cout << "Salta directamente!!" << std::endl;// DELETE AT THE END
+      }
+
+      //If new Chi square value is higher, it depends on the probability
+      else
+      {
+        // Calculate probability of change
+        double prob = exp((m_chi2/2.0)-(chi2_new/2.0));
+        ///std::cout  << "PROBABILIDAD cambio:   " << prob << std::endl;// DELETE AT THE END
+
+        // Decide if changing or not
+        boost::mt19937 mt;
+        mt.seed(int(time_t())+48*(int(m_counter)+76*int(i)));
+        boost::uniform_real<> distr(0.0,1.0);
+        double p = distr(mt);
+        ///std::cout << " Random number " << p << std::endl;// DELETE AT THE END
+        if (p<=prob)
+        {
+            for (size_t j = 0; j<n ; j++) {
+                m_chain[j].push_back(new_parameters.get(j));
+            }
+            m_chain[n].push_back(chi2_new);
+            m_parameters = new_parameters;
+            m_chi2 = chi2_new;
+            m_changes[i] += 1;
+            ///std::cout << "SI hay cambio" << std::endl;// DELETE AT THE END
+        }
+        else
+        {
+            for (size_t j = 0; j<n ; j++) {
+                m_chain[j].push_back(m_parameters.get(j));
+            }
+            m_chain[n].push_back(m_chi2);
+            m_leastSquares -> setParameter(i,new_value-m_jump[i]);
+            m_jump[i] = -m_jump[i];
+            ///std::cout << "NO hay cambio" << std::endl;// DELETE AT THE END
+        }
+      }
+
+      ///std::cout << std::endl << std::endl << std::endl;// DELETE AT THE END
+
+      const size_t jumpCheckingRate = 200;
+      const double lowJumpLimit = 1e-15;
+
+      // Update the jump once each jumpCheckingRate iterations
+      if (m_counter % jumpCheckingRate == 150)
+      {
+          double jnew;
+          // All this is just a temporal test...
+          std::vector<double>::const_iterator first = m_chain[n].end()-41;
+          std::vector<double>::const_iterator last = m_chain[n].end();
+          std::vector<double> test(first, last);
+          int c = 0;
+          for(int j=0;j<39;++j) {
+              if (test[j] == test[j+1]) {
+                  c += 1;
+              }
+          }
+          if (c>38) {
+              jnew = m_jump[i]/100;
+          }  // ...untill here.
+
+          else {
+          if (m_changes[i] == 0.0) {
+                jnew = m_jump[i]/10.0;
+          }
+          else {
+                double f = m_changes[i]/double(m_counter);
+                jnew = m_jump[i]*f/0.6666666666;
+                ///std::cout << f << "   m_counter  "<< m_counter << "   m_changes   " << m_changes[i] << std::endl; // DELETE AT THE END
+          }
+          }
+          m_jump[i] = jnew;
+
+          // Check if the new jump is too small. It means that it has been a wrong convergence.
+          if (std::abs(m_jump[i])<lowJumpLimit) {
+                API::IFunction_sptr fun = m_leastSquares->getFittingFunction();
+                throw std::runtime_error("Wrong convergence for parameter " + fun -> parameterName(i) +". Try to set a proper initial value this parameter" );
+          }
+      }
+
+      // Check if the Chi square value has converged for parameter i.
+      if (!m_par_converged[i] && m_counter > 350) // It only check since the iteration number 350
+      {
+          if (chi2_new != m_chi2) {
+            double chi2_quotient = std::abs(chi2_new-m_chi2)/m_chi2;
+            if (chi2_quotient < m_criteria[i]){
+                  m_par_converged[i] = true;
+            }
+          }
+      }
+    }
+
+    m_counter += 1; // Update the counter, after finishing the iteration for each parameter
+
+    // Check if Chi square has converged for all the parameters.
+    if (m_counter > lowerIterationLimit && !m_converged)
+    {
+        size_t t = 0;
+        for(size_t i = 0; i<n ; i++) {
+            if (m_par_converged[i]) {
+                t += 1;
+            }
+        }
+        // If all parameters have converged:
+            // It set up both the counter and the changes' vector to 0, in order to consider only the
+            // data of the converged part of the chain, when updating the jump.
+        if (t == n) {
+                m_converged = true;
+                m_conv_point = m_counter*n+1;
+                m_counter = 0;
+                for (size_t i=0 ; i<n ; ++i) {
+                    m_changes[i] = 0;
+                }
+
+            }
+    }
+
+    if ( !m_converged )
+    {
+        // If there is not convergence continue the iterations.
+        if ( m_counter <= convergenceMaxIterations && m_counter < m_numberIterations -  1 )
+        {
+            return true;
+        }
+        // If there is not convergence, but it has been made convergenceMaxIterations iterations, stop and throw the error.
+        else
+        {
+            API::IFunction_sptr fun = m_leastSquares->getFittingFunction();
+            std::string failed = "";
+            for(size_t i=0; i<n; ++i) {
+                if(!m_par_converged[i]){
+                    failed = failed + fun -> parameterName(i) + ", ";
+                }
+            }
+            failed.replace(failed.end()-2,failed.end(),".");
+            throw std::runtime_error("Convegence NOT reached after " + boost::lexical_cast<std::string>(m_counter)
+                                    + " iterations.\n   Try to set better initial values for parameters: " + failed);
+        }
+    }
+    else
+    {
+        // If convergence has been reached, continue untill complete the chain length.
+        if (m_counter <= m_numberIterations)
+        {
+            return true;
+        }
+        // When the all the iterations have been done, calculate and show all the results.
+        else
+        {
+            // Create the workspace for the Probability Density Functions
+            API::MatrixWorkspace_sptr ws = API::WorkspaceFactory::Instance().create("Workspace2D",n, pdf_length + 1, pdf_length);
+
+            // Create the workspace for the parameters' value and errors.
+            API::ITableWorkspace_sptr wsPdfE = API::WorkspaceFactory::Instance().createTable("TableWorkspace");
+            wsPdfE -> addColumn("str","Name");
+            wsPdfE -> addColumn("double","Value");
+            wsPdfE -> addColumn("double","Left's error");
+            wsPdfE -> addColumn("double","Rigth's error");
+
+            std::vector<double>::iterator pos_min = std::min_element(m_chain[n].begin()+m_conv_point,m_chain[n].end()); // Calculate the position of the minimum Chi aquare value
+            m_chi2 = *pos_min;
+            // index of the minimum chi^2
+            size_t minIndex = static_cast<size_t>( std::distance( m_chain[n].begin(), pos_min) );
+
+            std::vector<double> par_def(n);
+            API::IFunction_sptr fun = m_leastSquares->getFittingFunction();
+
+            // Do one iteration for each parameter.
+            for (size_t j =0; j < n; ++j)
+            {
+                // Calculate the parameter value and the errors
+                par_def[j]=m_chain[j][minIndex];
+                std::vector<double>::const_iterator first = m_chain[j].begin()+m_conv_point;
+                std::vector<double>::const_iterator last = m_chain[j].end();
+                std::vector<double> conv_chain(first, last);
+                size_t conv_length = conv_chain.size();
+                std::sort(conv_chain.begin(),conv_chain.end());
+                std::vector<double>::const_iterator pos_par = std::find(conv_chain.begin(),conv_chain.end(),par_def[j]);
+                int sigma = int(0.34*double(conv_length));
+                // make sure the iterator is valid in any case
+                std::vector<double>::const_iterator pos_left = conv_chain.begin();
+                if ( sigma < static_cast<int>(std::distance(pos_left,pos_par)) )
+                {
+                  pos_left = pos_par - sigma;
+                }
+                // make sure the iterator is valid in any case
+                std::vector<double>::const_iterator pos_right = conv_chain.end() - 1;
+                if ( sigma < static_cast<int>(std::distance(pos_par,pos_right)) )
+                {
+                  pos_right = pos_par + sigma;
+                }
+                API::TableRow row = wsPdfE -> appendRow();
+                row << fun->parameterName(j) << par_def[j] << *pos_left - *pos_par << *pos_right - *pos_par;
+
+                // Calculate the Probability Density Function
+                std::vector<double> pdf_y(pdf_length,0);
+                double start = conv_chain[0];
+                double bin = (conv_chain[conv_length-1] - start)/pdf_length;
+                size_t step = 0;
+                MantidVec & X = ws->dataX(j);
+                MantidVec & Y = ws->dataY(j);
+                X[0] = start;
+                for (size_t i = 1; i<pdf_length+1; i++)
+                {
+                    double bin_end = start + static_cast<double>(i)*bin;
+                    X[i] = bin_end;
+                    while(step<conv_length && conv_chain[step] <= bin_end) {
+                        pdf_y[i-1] += 1;
+                        ++step;
+                    }
+                    Y[i-1] = pdf_y[i-1]/(double(conv_length)*bin);
+                }
+
+                // Calculate the most probable value, from the PDF.
+                std::vector<double>::iterator pos_MP = std::max_element(pdf_y.begin(),pdf_y.end());
+                double mostP = X[pos_MP-pdf_y.begin()]+(bin/2.0);
+                m_leastSquares -> setParameter(j,mostP);
+            }
+
+
+            // Set and name the two workspaces already calculated.
+            setProperty("OutputWorkspacePDF",ws);
+            setProperty("PdfError",wsPdfE);
+
+            // Create the workspace for the complete parameters' chain (the last histogram is for the Chi square).
+            size_t chain_length = m_chain[0].size();
+            API::MatrixWorkspace_sptr wsC = API::WorkspaceFactory::Instance().create("Workspace2D",n+1, chain_length, chain_length);
+
+            // Do one iteration for each parameter plus one for Chi square.
+            for (size_t j =0; j < n+1; ++j)
+            {
+                MantidVec & X = wsC->dataX(j);
+                MantidVec & Y = wsC->dataY(j);
+                for(size_t k=0; k < chain_length; ++k) {
+                    X[k] = double(k);
+                    Y[k] = m_chain[j][k];
+                }
+            }
+
+            // Set and name the workspace for the complete chain
+            setProperty("OutputWorkspaceChain",wsC);
+
+            // Read if necessary to show the workspace for the converged part of the chain.
+            const bool con = !getPropertyValue("OutputWorkspaceConverged").empty();
+
+            if (con)
+            {
+              // Create the workspace for the converged part of the chain.
+              size_t conv_length = (m_counter-1)*n + m;
+              API::MatrixWorkspace_sptr wsConv = API::WorkspaceFactory::Instance().create("Workspace2D",n+1, conv_length, conv_length);
+
+              // Do one iteration for each parameter plus one for Chi square.
+              for (size_t j =0; j < n+1; ++j)
+              {
+                  std::vector<double>::const_iterator first = m_chain[j].begin()+m_conv_point;
+                  std::vector<double>::const_iterator last = m_chain[j].end();
+                  std::vector<double> conv_chain(first, last);
+                  MantidVec & X = wsConv->dataX(j);
+                  MantidVec & Y = wsConv->dataY(j);
+                  for(size_t k=0; k < conv_length; ++k) {
+                      X[k] = double(k);
+                      Y[k] = conv_chain[k];
+                  }
+              }
+
+              // Set and name the workspace for the converged part of the chain.
+              setProperty("OutputWorkspaceConverged",wsConv);
+            }
+
+            // Create the workspace for the Chi square values.
+            API::ITableWorkspace_sptr wsChi2 = API::WorkspaceFactory::Instance().createTable("TableWorkspace");
+            wsChi2 -> addColumn("double","Chi2min");
+            wsChi2 -> addColumn("double","Chi2MP");
+            wsChi2 -> addColumn("double","Chi2min_red");
+            wsChi2 -> addColumn("double","Chi2MP_red");
+
+            // Calculate de Chi square most probable.
+            double Chi2MP = m_leastSquares -> val();
+
+            // Reset the best parameter values ---> Si al final no se muestra la tabla que sale por defecto, esto se podra borrar...
+            for (size_t j =0; j<n; ++j){
+                m_leastSquares -> setParameter(j,par_def[j]);
+            }
+
+            // Obtain the quantity of the initial data.
+            API::FunctionDomain_sptr domain = m_leastSquares -> getDomain();
+            size_t data_number = domain->size();
+
+            // Calculate the value for the reduced Chi square.
+            double Chi2min_red = *pos_min/(double(data_number-n)); // For de minimum value.
+            double Chi2MP_red = Chi2MP/(double(data_number-n)); // For the most probable.
+
+            // Add the information to the workspace and name it.
+            API::TableRow row = wsChi2 -> appendRow();
+            row << *pos_min << Chi2MP << Chi2min_red << Chi2MP_red;
+            setProperty("ChiSquareTable",wsChi2);
+
+
+            return false;
+        }
+    }
+
+    return true;
+  }
+  double FABADAMinimizer::costFunctionVal() {
+      return m_chi2;
+  }
+  
+
+} // namespace CurveFitting
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/CurveFitting/src/FakeMinimizer.cpp b/Code/Mantid/Framework/CurveFitting/src/FakeMinimizer.cpp
deleted file mode 100644
index 5bc52675633077289b89d798c40d93b9fd33d570..0000000000000000000000000000000000000000
--- a/Code/Mantid/Framework/CurveFitting/src/FakeMinimizer.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-//----------------------------------------------------------------------
-// Includes
-//----------------------------------------------------------------------
-#include "MantidCurveFitting/FakeMinimizer.h"
-#include "MantidCurveFitting/CostFuncFitting.h"
-
-#include "MantidAPI/FuncMinimizerFactory.h"
-#include "MantidAPI/WorkspaceProperty.h"
-#include "MantidAPI/MatrixWorkspace.h"
-#include "MantidAPI/WorkspaceFactory.h"
-#include "MantidKernel/UnitFactory.h"
-#include "MantidKernel/Unit.h"
-
-#include "MantidKernel/Logger.h"
-
-namespace Mantid
-{
-namespace CurveFitting
-{
-  namespace
-  {
-    /// static logger
-    Kernel::Logger g_log("FakeMinimizer");
-  }
-
-DECLARE_FUNCMINIMIZER(FakeMinimizer,Fake)
-
-
-FakeMinimizer::FakeMinimizer()
-{
-    declareProperty(new API::WorkspaceProperty<API::MatrixWorkspace>("SomeOutput","abc",Kernel::Direction::Output),
-        "Name of the output Workspace holding some output.");
-    declareProperty("SomeInt",0,"Some integer value");
-    declareProperty("SomeDouble",0.0,"Some double value");
-    declareProperty("SomeString","Some units","Some string value");
-}
-
-FakeMinimizer::~FakeMinimizer()
-{
-}
-
-void FakeMinimizer::initialize(API::ICostFunction_sptr, size_t maxIters)
-{
-    m_maxIters = maxIters;
-    m_data.resize(m_maxIters);
-    m_someInt = getProperty("SomeInt");
-    m_someDouble = getProperty("SomeDouble");
-    m_someString = getPropertyValue("SomeString");
-}
-
-/**
- * Do one iteration.
- * @param iter :: Current iteration number.
- * @return :: true if iterations to be continued, false if they can stop
- */
-bool FakeMinimizer::iterate(size_t iter)
-{
-    m_data[iter] = static_cast<double>(iter) / static_cast<double>(m_maxIters - 1);
-
-    if ( iter >= m_maxIters - 1 )
-    {
-      API::MatrixWorkspace_sptr ws = API::WorkspaceFactory::Instance().create("Workspace2D",1,m_maxIters,m_maxIters);
-      auto & X = ws->dataX(0);
-      for(size_t i = 0; i < X.size(); ++i)
-      {
-          X[i] = static_cast<double>(i + 1);
-      }
-      auto & Y = ws->dataY(0);
-      Y.assign( m_data.begin(), m_data.end() );
-
-      auto &E = ws->dataE(0);
-      if ( m_maxIters > 0 )
-        E[0] = static_cast<double>( m_someInt );
-      if ( m_maxIters > 1 )
-        E[1] = m_someDouble;
-
-      auto ilabel = Kernel::UnitFactory::Instance().create("Label");
-      auto label = boost::dynamic_pointer_cast<Kernel::Units::Label>(ilabel);
-      label->setLabel( m_someString );
-      auto axis = ws->getAxis(0);
-      axis->unit() = ilabel;
-
-      setProperty("SomeOutput",ws);
-      return false;
-    }
-
-    return true;
-}
-
-double FakeMinimizer::costFunctionVal()
-{
-  return 0.0;
-}
-
-} // namespace CurveFitting
-} // namespace Mantid
diff --git a/Code/Mantid/Framework/CurveFitting/src/Fit.cpp b/Code/Mantid/Framework/CurveFitting/src/Fit.cpp
index 63d424221d4542f09bed9e8261684ea51556cbd4..19634cb1f99cabba5f2ef880854fd85128d1a839 100644
--- a/Code/Mantid/Framework/CurveFitting/src/Fit.cpp
+++ b/Code/Mantid/Framework/CurveFitting/src/Fit.cpp
@@ -118,7 +118,7 @@ namespace CurveFitting
       auto &properties = minimizer.getProperties();
       for(auto prop = properties.begin(); prop != properties.end(); ++prop)
       {
-          if ( (**prop).direction() == Kernel::Direction::Output )
+          if ( (**prop).direction() == Kernel::Direction::Output && (**prop).isValid() == "" )
           {
               Kernel::Property* property = (**prop).clone();
               declareProperty( property );
@@ -335,7 +335,7 @@ namespace CurveFitting
 
     declareProperty("Minimizer","Levenberg-Marquardt",
       Kernel::IValidator_sptr(new Kernel::StartsWithValidator(minimizerOptions)),
-      "Minimizer to use for fitting. Minimizers available are \"Levenberg-Marquardt\", \"Simplex\", \"Conjugate gradient (Fletcher-Reeves imp.)\", \"Conjugate gradient (Polak-Ribiere imp.)\", \"BFGS\", and \"Levenberg-MarquardtMD\"");
+      "Minimizer to use for fitting. Minimizers available are \"Levenberg-Marquardt\", \"Simplex\", \"FABADA\", \"Conjugate gradient (Fletcher-Reeves imp.)\", \"Conjugate gradient (Polak-Ribiere imp.)\", \"BFGS\", and \"Levenberg-MarquardtMD\"");
 
     std::vector<std::string> costFuncOptions = API::CostFunctionFactory::Instance().getKeys();
     // select only CostFuncFitting variety
diff --git a/Code/Mantid/Framework/CurveFitting/src/MSVesuvioHelpers.cpp b/Code/Mantid/Framework/CurveFitting/src/MSVesuvioHelpers.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7b6aef7d63655051deb98d771ed8f1704bbf16de
--- /dev/null
+++ b/Code/Mantid/Framework/CurveFitting/src/MSVesuvioHelpers.cpp
@@ -0,0 +1,419 @@
+//-----------------------------------------------------------------------------
+// Includes
+//-----------------------------------------------------------------------------
+#include "MantidCurveFitting/MSVesuvioHelpers.h"
+
+#include <algorithm>
+#include <numeric>
+
+#include <boost/random/variate_generator.hpp>
+
+namespace Mantid { namespace CurveFitting
+{
+  namespace MSVesuvioHelper
+  {
+
+    /**
+     * Generate the final energy of a neutron for gold foil analyser at 293K
+     * in double-difference mode:
+     *   - THIN FOIL NUMBER DENSITY = 1.456E20 ATOMS/SQ CM.
+     *   - THICK FOIL NUMBER DENSITY = 3.0* 1.456E20 ATOMS/SQ CM.
+     * @param randv A random number between 0.0 & 1.0, sample from a flat distribution
+     * @return A value to use for the final energy
+     */
+    double finalEnergyAuDD(const double randv)
+    {
+      // Tabulated values of absoprtion energies from S.F. Mughabghab, Neutron Cross Sections, Academic
+      // Press, Orlando, Florida, 1984.
+      static const double ENERGIES[300] = {\
+        2000.0, 2020.7, 2041.5, 2062.2, 2082.9, 2103.7, 2124.4, 2145.2, 2165.9, 2186.6, 2207.4, 2228.1,
+        2248.8, 2269.6, 2290.3, 2311.0, 2331.8, 2352.5, 2373.2, 2394.0, 2414.7, 2435.5, 2456.2, 2476.9,
+        2497.7, 2518.4, 2539.1, 2559.9, 2580.6, 2601.3, 2622.1, 2642.8, 2663.5, 2684.3, 2705.0, 2725.8,
+        2746.5, 2767.2, 2788.0, 2808.7, 2829.4, 2850.2, 2870.9, 2891.6, 2912.4, 2933.1, 2953.8, 2974.6,
+        2995.3, 3016.1, 3036.8, 3057.5, 3078.3, 3099.0, 3119.7, 3140.5, 3161.2, 3181.9, 3202.7, 3223.4,
+        3244.1, 3264.9, 3285.6, 3306.4, 3327.1, 3347.8, 3368.6, 3389.3, 3410.0, 3430.8, 3451.5, 3472.2,
+        3493.0, 3513.7, 3534.4, 3555.2, 3575.9, 3596.7, 3617.4, 3638.1, 3658.9, 3679.6, 3700.3, 3721.1,
+        3741.8, 3762.5, 3783.3, 3804.0, 3824.7, 3845.5, 3866.2, 3887.0, 3907.7, 3928.4, 3949.2, 3969.9,
+        3990.6, 4011.4, 4032.1, 4052.8, 4073.6, 4094.3, 4115.1, 4135.8, 4156.5, 4177.3, 4198.0, 4218.7,
+        4239.5, 4260.2, 4280.9, 4301.7, 4322.4, 4343.1, 4363.9, 4384.6, 4405.4, 4426.1, 4446.8, 4467.6,
+        4488.3, 4509.0, 4529.8, 4550.5, 4571.2, 4592.0, 4612.7, 4633.4, 4654.2, 4674.9, 4695.7, 4716.4,
+        4737.1, 4757.9, 4778.6, 4799.3, 4820.1, 4840.8, 4861.5, 4882.3, 4903.0, 4923.7, 4944.5, 4965.2,
+        4986.0, 5006.7, 5027.4, 5048.2, 5068.9, 5089.6, 5110.4, 5131.1, 5151.8, 5172.6, 5193.3, 5214.0,
+        5234.8, 5255.5, 5276.3, 5297.0, 5317.7, 5338.5, 5359.2, 5379.9, 5400.7, 5421.4, 5442.1, 5462.9,
+        5483.6, 5504.3, 5525.1, 5545.8, 5566.6, 5587.3, 5608.0, 5628.8, 5649.5, 5670.2, 5691.0, 5711.7,
+        5732.4, 5753.2, 5773.9, 5794.6, 5815.4, 5836.1, 5856.9, 5877.6, 5898.3, 5919.1, 5939.8, 5960.5,
+        5981.3, 6002.0, 6022.7, 6043.5, 6064.2, 6085.0, 6105.7, 6126.4, 6147.2, 6167.9, 6188.6, 6209.4,
+        6230.1, 6250.8, 6271.6, 6292.3, 6313.0, 6333.8, 6354.5, 6375.3, 6396.0, 6416.7, 6437.5, 6458.2,
+        6478.9, 6499.7, 6520.4, 6541.1, 6561.9, 6582.6, 6603.3, 6624.1, 6644.8, 6665.6, 6686.3, 6707.0,
+        6727.8, 6748.5, 6769.2, 6790.0, 6810.7, 6831.4, 6852.2, 6872.9, 6893.6, 6914.4, 6935.1, 6955.9,
+        6976.6, 6997.3, 7018.1, 7038.8, 7059.5, 7080.3, 7101.0, 7121.7, 7142.5, 7163.2, 7183.9, 7204.7,
+        7225.4, 7246.2, 7266.9, 7287.6, 7308.4, 7329.1, 7349.8, 7370.6, 7391.3, 7412.0, 7432.8, 7453.5,
+        7474.2, 7495.0, 7515.7, 7536.5, 7557.2, 7577.9, 7598.7, 7619.4, 7640.1, 7660.9, 7681.6, 7702.3,
+        7723.1, 7743.8, 7764.5, 7785.3, 7806.0, 7826.8, 7847.5, 7868.2, 7889.0, 7909.7, 7930.4, 7951.2,
+        7971.9, 7992.6, 8013.4, 8034.1, 8054.8, 8075.6, 8096.3, 8117.1, 8137.8, 8158.5, 8179.3, 8200.0
+      };
+      static const double XVALUES[300] = {\
+        0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
+        0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000,
+        0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00010, 0.00010,
+        0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010,
+        0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010,
+        0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00010, 0.00020, 0.00020, 0.00020, 0.00020, 0.00020, 0.00020,
+        0.00020, 0.00020, 0.00020, 0.00020, 0.00020, 0.00020, 0.00030, 0.00030, 0.00030, 0.00030, 0.00030, 0.00030,
+        0.00030, 0.00030, 0.00040, 0.00040, 0.00040, 0.00040, 0.00040, 0.00050, 0.00050, 0.00050, 0.00050, 0.00060,
+        0.00060, 0.00070, 0.00070, 0.00070, 0.00080, 0.00090, 0.00090, 0.00100, 0.00110, 0.00110, 0.00120, 0.00130,
+        0.00150, 0.00160, 0.00170, 0.00190, 0.00210, 0.00230, 0.00260, 0.00290, 0.00320, 0.00360, 0.00410, 0.00470,
+        0.00540, 0.00620, 0.00720, 0.00840, 0.00990, 0.01180, 0.01420, 0.01740, 0.02140, 0.02680, 0.03410, 0.04400,
+        0.05770, 0.07680, 0.10360, 0.14050, 0.18960, 0.25110, 0.32310, 0.40240, 0.48540, 0.56870, 0.64930, 0.72370,
+        0.78850, 0.84150, 0.88240, 0.91260, 0.93440, 0.95000, 0.96130, 0.96960, 0.97570, 0.98030, 0.98380, 0.98650,
+        0.98870, 0.99040, 0.99180, 0.99290, 0.99380, 0.99460, 0.99520, 0.99580, 0.99620, 0.99660, 0.99700, 0.99730,
+        0.99750, 0.99770, 0.99790, 0.99810, 0.99830, 0.99840, 0.99850, 0.99860, 0.99870, 0.99880, 0.99890, 0.99900,
+        0.99900, 0.99910, 0.99910, 0.99920, 0.99920, 0.99930, 0.99930, 0.99940, 0.99940, 0.99940, 0.99940, 0.99950,
+        0.99950, 0.99950, 0.99950, 0.99960, 0.99960, 0.99960, 0.99960, 0.99960, 0.99960, 0.99970, 0.99970, 0.99970,
+        0.99970, 0.99970, 0.99970, 0.99970, 0.99970, 0.99970, 0.99980, 0.99980, 0.99980, 0.99980, 0.99980, 0.99980,
+        0.99980, 0.99980, 0.99980, 0.99980, 0.99980, 0.99980, 0.99980, 0.99980, 0.99980, 0.99980, 0.99990, 0.99990,
+        0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990,
+        0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990,
+        0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990, 0.99990,
+        0.99990, 0.99990, 0.99990, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
+        1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
+        1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000
+      };
+
+      const double *xp1 = std::lower_bound(XVALUES, XVALUES+300, randv);
+      if(xp1 == XVALUES+300) return 0.0;
+      const double *xm1 = xp1 - 1;
+      const double *ep1 = ENERGIES + (xp1 - XVALUES);
+      const double *em1 = ep1 - 1;
+      const double ef = (*em1) + (randv - *xm1)*(*ep1 - *em1)/(*xp1 - *xm1);
+      if( ef < 100.0 ) return 0.0;
+      else return ef;
+    }
+    
+    /**
+     * Generate the final energy of a neutron for gold foil analyser at 293K
+     * with number density of 7.35E19 atoms/cm^2 in yap difference mode.
+     * @param randv A random number between 0.0 & 1.0, sample from a flat distribution
+     * @return A value to use for the final energy
+     */
+    double finalEnergyAuYap(const double randv)
+    {
+      // Tabulated values of absoprtion energies from S.F. Mughabghab, Neutron Cross Sections, Academic
+      // Press, Orlando, Florida, 1984.
+      static const double ENERGIES[600] = {\
+        4000.0, 4003.3, 4006.7, 4010.0, 4013.4, 4016.7, 4020.0, 4023.4, 4026.7, 4030.1, 4033.4, 4036.7,
+        4040.1, 4043.4, 4046.7, 4050.1, 4053.4, 4056.8, 4060.1, 4063.4, 4066.8, 4070.1, 4073.5, 4076.8,
+        4080.1, 4083.5, 4086.8, 4090.2, 4093.5, 4096.8, 4100.2, 4103.5, 4106.8, 4110.2, 4113.5, 4116.9,
+        4120.2, 4123.5, 4126.9, 4130.2, 4133.6, 4136.9, 4140.2, 4143.6, 4146.9, 4150.3, 4153.6, 4156.9,
+        4160.3, 4163.6, 4166.9, 4170.3, 4173.6, 4177.0, 4180.3, 4183.6, 4187.0, 4190.3, 4193.7, 4197.0,
+        4200.3, 4203.7, 4207.0, 4210.4, 4213.7, 4217.0, 4220.4, 4223.7, 4227.0, 4230.4, 4233.7, 4237.1,
+        4240.4, 4243.7, 4247.1, 4250.4, 4253.8, 4257.1, 4260.4, 4263.8, 4267.1, 4270.5, 4273.8, 4277.1,
+        4280.5, 4283.8, 4287.1, 4290.5, 4293.8, 4297.2, 4300.5, 4303.8, 4307.2, 4310.5, 4313.9, 4317.2,
+        4320.5, 4323.9, 4327.2, 4330.6, 4333.9, 4337.2, 4340.6, 4343.9, 4347.2, 4350.6, 4353.9, 4357.3,
+        4360.6, 4363.9, 4367.3, 4370.6, 4374.0, 4377.3, 4380.6, 4384.0, 4387.3, 4390.7, 4394.0, 4397.3,
+        4400.7, 4404.0, 4407.3, 4410.7, 4414.0, 4417.4, 4420.7, 4424.0, 4427.4, 4430.7, 4434.1, 4437.4,
+        4440.7, 4444.1, 4447.4, 4450.8, 4454.1, 4457.4, 4460.8, 4464.1, 4467.4, 4470.8, 4474.1, 4477.5,
+        4480.8, 4484.1, 4487.5, 4490.8, 4494.2, 4497.5, 4500.8, 4504.2, 4507.5, 4510.9, 4514.2, 4517.5,
+        4520.9, 4524.2, 4527.5, 4530.9, 4534.2, 4537.6, 4540.9, 4544.2, 4547.6, 4550.9, 4554.3, 4557.6,
+        4560.9, 4564.3, 4567.6, 4571.0, 4574.3, 4577.6, 4581.0, 4584.3, 4587.6, 4591.0, 4594.3, 4597.7,
+        4601.0, 4604.3, 4607.7, 4611.0, 4614.4, 4617.7, 4621.0, 4624.4, 4627.7, 4631.1, 4634.4, 4637.7,
+        4641.1, 4644.4, 4647.7, 4651.1, 4654.4, 4657.8, 4661.1, 4664.4, 4667.8, 4671.1, 4674.5, 4677.8,
+        4681.1, 4684.5, 4687.8, 4691.2, 4694.5, 4697.8, 4701.2, 4704.5, 4707.8, 4711.2, 4714.5, 4717.9,
+        4721.2, 4724.5, 4727.9, 4731.2, 4734.6, 4737.9, 4741.2, 4744.6, 4747.9, 4751.3, 4754.6, 4757.9,
+        4761.3, 4764.6, 4767.9, 4771.3, 4774.6, 4778.0, 4781.3, 4784.6, 4788.0, 4791.3, 4794.7, 4798.0,
+        4801.3, 4804.7, 4808.0, 4811.4, 4814.7, 4818.0, 4821.4, 4824.7, 4828.0, 4831.4, 4834.7, 4838.1,
+        4841.4, 4844.7, 4848.1, 4851.4, 4854.8, 4858.1, 4861.4, 4864.8, 4868.1, 4871.5, 4874.8, 4878.1,
+        4881.5, 4884.8, 4888.1, 4891.5, 4894.8, 4898.2, 4901.5, 4904.8, 4908.2, 4911.5, 4914.9, 4918.2,
+        4921.5, 4924.9, 4928.2, 4931.6, 4934.9, 4938.2, 4941.6, 4944.9, 4948.2, 4951.6, 4954.9, 4958.3,
+        4961.6, 4964.9, 4968.3, 4971.6, 4975.0, 4978.3, 4981.6, 4985.0, 4988.3, 4991.7, 4995.0, 4998.3,
+        5001.7, 5005.0, 5008.3, 5011.7, 5015.0, 5018.4, 5021.7, 5025.0, 5028.4, 5031.7, 5035.1, 5038.4,
+        5041.7, 5045.1, 5048.4, 5051.8, 5055.1, 5058.4, 5061.8, 5065.1, 5068.4, 5071.8, 5075.1, 5078.5,
+        5081.8, 5085.1, 5088.5, 5091.8, 5095.2, 5098.5, 5101.8, 5105.2, 5108.5, 5111.9, 5115.2, 5118.5,
+        5121.9, 5125.2, 5128.5, 5131.9, 5135.2, 5138.6, 5141.9, 5145.2, 5148.6, 5151.9, 5155.3, 5158.6,
+        5161.9, 5165.3, 5168.6, 5172.0, 5175.3, 5178.6, 5182.0, 5185.3, 5188.6, 5192.0, 5195.3, 5198.7,
+        5202.0, 5205.3, 5208.7, 5212.0, 5215.4, 5218.7, 5222.0, 5225.4, 5228.7, 5232.1, 5235.4, 5238.7,
+        5242.1, 5245.4, 5248.7, 5252.1, 5255.4, 5258.8, 5262.1, 5265.4, 5268.8, 5272.1, 5275.5, 5278.8,
+        5282.1, 5285.5, 5288.8, 5292.2, 5295.5, 5298.8, 5302.2, 5305.5, 5308.8, 5312.2, 5315.5, 5318.9,
+        5322.2, 5325.5, 5328.9, 5332.2, 5335.6, 5338.9, 5342.2, 5345.6, 5348.9, 5352.3, 5355.6, 5358.9,
+        5362.3, 5365.6, 5368.9, 5372.3, 5375.6, 5379.0, 5382.3, 5385.6, 5389.0, 5392.3, 5395.7, 5399.0,
+        5402.3, 5405.7, 5409.0, 5412.4, 5415.7, 5419.0, 5422.4, 5425.7, 5429.0, 5432.4, 5435.7, 5439.1,
+        5442.4, 5445.7, 5449.1, 5452.4, 5455.8, 5459.1, 5462.4, 5465.8, 5469.1, 5472.5, 5475.8, 5479.1,
+        5482.5, 5485.8, 5489.1, 5492.5, 5495.8, 5499.2, 5502.5, 5505.8, 5509.2, 5512.5, 5515.9, 5519.2,
+        5522.5, 5525.9, 5529.2, 5532.6, 5535.9, 5539.2, 5542.6, 5545.9, 5549.2, 5552.6, 5555.9, 5559.3,
+        5562.6, 5565.9, 5569.3, 5572.6, 5576.0, 5579.3, 5582.6, 5586.0, 5589.3, 5592.7, 5596.0, 5599.3,
+        5602.7, 5606.0, 5609.3, 5612.7, 5616.0, 5619.4, 5622.7, 5626.0, 5629.4, 5632.7, 5636.1, 5639.4,
+        5642.7, 5646.1, 5649.4, 5652.8, 5656.1, 5659.4, 5662.8, 5666.1, 5669.4, 5672.8, 5676.1, 5679.5,
+        5682.8, 5686.1, 5689.5, 5692.8, 5696.2, 5699.5, 5702.8, 5706.2, 5709.5, 5712.9, 5716.2, 5719.5,
+        5722.9, 5726.2, 5729.5, 5732.9, 5736.2, 5739.6, 5742.9, 5746.2, 5749.6, 5752.9, 5756.3, 5759.6,
+        5762.9, 5766.3, 5769.6, 5773.0, 5776.3, 5779.6, 5783.0, 5786.3, 5789.6, 5793.0, 5796.3, 5799.7,
+        5803.0, 5806.3, 5809.7, 5813.0, 5816.4, 5819.7, 5823.0, 5826.4, 5829.7, 5833.1, 5836.4, 5839.7,
+        5843.1, 5846.4, 5849.7, 5853.1, 5856.4, 5859.8, 5863.1, 5866.4, 5869.8, 5873.1, 5876.5, 5879.8,
+        5883.1, 5886.5, 5889.8, 5893.2, 5896.5, 5899.8, 5903.2, 5906.5, 5909.8, 5913.2, 5916.5, 5919.9,
+        5923.2, 5926.5, 5929.9, 5933.2, 5936.6, 5939.9, 5943.2, 5946.6, 5949.9, 5953.3, 5956.6, 5959.9,
+        5963.3, 5966.6, 5970.0, 5973.3, 5976.6, 5980.0, 5983.3, 5986.6, 5990.0, 5993.3, 5996.7, 6000.0
+      };
+      static const double XVALUES[600] = {\
+        0.00000, 0.00000, 0.00000, 0.00002, 0.00003, 0.00003, 0.00004, 0.00005, 0.00005, 0.00006, 0.00007, 0.00007,
+        0.00008, 0.00009, 0.00010, 0.00010, 0.00011, 0.00012, 0.00013, 0.00014, 0.00015, 0.00015, 0.00016, 0.00017,
+        0.00018, 0.00019, 0.00020, 0.00021, 0.00022, 0.00023, 0.00024, 0.00025, 0.00026, 0.00027, 0.00028, 0.00029,
+        0.00030, 0.00031, 0.00032, 0.00033, 0.00034, 0.00035, 0.00037, 0.00038, 0.00039, 0.00040, 0.00041, 0.00043,
+        0.00044, 0.00045, 0.00047, 0.00048, 0.00049, 0.00051, 0.00052, 0.00054, 0.00055, 0.00057, 0.00058, 0.00060,
+        0.00061, 0.00063, 0.00065, 0.00066, 0.00068, 0.00070, 0.00072, 0.00074, 0.00075, 0.00077, 0.00079, 0.00081,
+        0.00083, 0.00085, 0.00087, 0.00089, 0.00092, 0.00094, 0.00096, 0.00098, 0.00101, 0.00103, 0.00106, 0.00108,
+        0.00111, 0.00113, 0.00116, 0.00118, 0.00121, 0.00124, 0.00127, 0.00130, 0.00133, 0.00136, 0.00139, 0.00142,
+        0.00146, 0.00149, 0.00152, 0.00156, 0.00159, 0.00163, 0.00167, 0.00171, 0.00174, 0.00178, 0.00182, 0.00187,
+        0.00191, 0.00195, 0.00200, 0.00204, 0.00209, 0.00214, 0.00219, 0.00224, 0.00229, 0.00235, 0.00240, 0.00246,
+        0.00251, 0.00257, 0.00263, 0.00269, 0.00276, 0.00282, 0.00289, 0.00296, 0.00303, 0.00310, 0.00318, 0.00325,
+        0.00333, 0.00341, 0.00349, 0.00358, 0.00367, 0.00376, 0.00385, 0.00394, 0.00404, 0.00414, 0.00425, 0.00435,
+        0.00446, 0.00458, 0.00469, 0.00481, 0.00494, 0.00507, 0.00520, 0.00533, 0.00548, 0.00562, 0.00577, 0.00592,
+        0.00608, 0.00625, 0.00642, 0.00659, 0.00677, 0.00696, 0.00716, 0.00736, 0.00757, 0.00778, 0.00800, 0.00823,
+        0.00847, 0.00872, 0.00898, 0.00924, 0.00952, 0.00980, 0.01010, 0.01041, 0.01073, 0.01106, 0.01141, 0.01177,
+        0.01214, 0.01253, 0.01293, 0.01335, 0.01379, 0.01425, 0.01472, 0.01522, 0.01573, 0.01627, 0.01683, 0.01742,
+        0.01803, 0.01867, 0.01934, 0.02004, 0.02077, 0.02154, 0.02234, 0.02317, 0.02405, 0.02497, 0.02594, 0.02695,
+        0.02801, 0.02913, 0.03030, 0.03153, 0.03282, 0.03419, 0.03561, 0.03712, 0.03871, 0.04037, 0.04213, 0.04398,
+        0.04594, 0.04799, 0.05017, 0.05246, 0.05488, 0.05743, 0.06013, 0.06297, 0.06598, 0.06915, 0.07251, 0.07605,
+        0.07979, 0.08374, 0.08791, 0.09230, 0.09694, 0.10183, 0.10698, 0.11241, 0.11812, 0.12411, 0.13041, 0.13703,
+        0.14395, 0.15119, 0.15877, 0.16667, 0.17490, 0.18347, 0.19237, 0.20159, 0.21114, 0.22100, 0.23117, 0.24164,
+        0.25240, 0.26344, 0.27473, 0.28628, 0.29807, 0.31007, 0.32228, 0.33468, 0.34725, 0.35999, 0.37286, 0.38586,
+        0.39898, 0.41219, 0.42549, 0.43886, 0.45228, 0.46575, 0.47925, 0.49277, 0.50628, 0.51980, 0.53329, 0.54674,
+        0.56016, 0.57350, 0.58677, 0.59996, 0.61304, 0.62600, 0.63883, 0.65152, 0.66403, 0.67638, 0.68853, 0.70048,
+        0.71220, 0.72369, 0.73492, 0.74590, 0.75659, 0.76700, 0.77711, 0.78691, 0.79640, 0.80557, 0.81442, 0.82294,
+        0.83113, 0.83900, 0.84654, 0.85376, 0.86067, 0.86726, 0.87355, 0.87954, 0.88525, 0.89067, 0.89583, 0.90073,
+        0.90537, 0.90979, 0.91398, 0.91794, 0.92170, 0.92527, 0.92865, 0.93185, 0.93489, 0.93776, 0.94049, 0.94307,
+        0.94552, 0.94784, 0.95005, 0.95213, 0.95412, 0.95600, 0.95779, 0.95949, 0.96110, 0.96264, 0.96410, 0.96549,
+        0.96681, 0.96807, 0.96927, 0.97041, 0.97150, 0.97254, 0.97353, 0.97447, 0.97538, 0.97624, 0.97706, 0.97785,
+        0.97860, 0.97933, 0.98002, 0.98068, 0.98131, 0.98192, 0.98250, 0.98306, 0.98359, 0.98411, 0.98460, 0.98507,
+        0.98553, 0.98596, 0.98638, 0.98679, 0.98718, 0.98755, 0.98791, 0.98826, 0.98859, 0.98892, 0.98923, 0.98953,
+        0.98981, 0.99009, 0.99036, 0.99062, 0.99087, 0.99111, 0.99135, 0.99158, 0.99179, 0.99201, 0.99221, 0.99241,
+        0.99260, 0.99279, 0.99296, 0.99314, 0.99331, 0.99347, 0.99363, 0.99378, 0.99393, 0.99408, 0.99422, 0.99435,
+        0.99448, 0.99461, 0.99473, 0.99486, 0.99497, 0.99509, 0.99520, 0.99530, 0.99541, 0.99551, 0.99561, 0.99571,
+        0.99580, 0.99589, 0.99598, 0.99607, 0.99615, 0.99623, 0.99631, 0.99639, 0.99647, 0.99654, 0.99661, 0.99668,
+        0.99675, 0.99682, 0.99688, 0.99694, 0.99701, 0.99707, 0.99713, 0.99718, 0.99724, 0.99729, 0.99735, 0.99740,
+        0.99745, 0.99750, 0.99755, 0.99760, 0.99764, 0.99769, 0.99773, 0.99778, 0.99782, 0.99786, 0.99790, 0.99794,
+        0.99798, 0.99802, 0.99806, 0.99809, 0.99813, 0.99816, 0.99820, 0.99823, 0.99827, 0.99830, 0.99833, 0.99836,
+        0.99839, 0.99842, 0.99845, 0.99848, 0.99850, 0.99853, 0.99856, 0.99859, 0.99861, 0.99864, 0.99866, 0.99869,
+        0.99871, 0.99873, 0.99876, 0.99878, 0.99880, 0.99882, 0.99884, 0.99886, 0.99889, 0.99891, 0.99893, 0.99895,
+        0.99896, 0.99898, 0.99900, 0.99902, 0.99904, 0.99906, 0.99907, 0.99909, 0.99911, 0.99912, 0.99914, 0.99915,
+        0.99917, 0.99919, 0.99920, 0.99922, 0.99923, 0.99924, 0.99926, 0.99927, 0.99929, 0.99930, 0.99931, 0.99933,
+        0.99934, 0.99935, 0.99936, 0.99938, 0.99939, 0.99940, 0.99941, 0.99942, 0.99943, 0.99944, 0.99946, 0.99947,
+        0.99948, 0.99949, 0.99950, 0.99951, 0.99952, 0.99953, 0.99954, 0.99955, 0.99956, 0.99956, 0.99957, 0.99958,
+        0.99959, 0.99960, 0.99961, 0.99962, 0.99963, 0.99963, 0.99964, 0.99965, 0.99966, 0.99967, 0.99967, 0.99968,
+        0.99969, 0.99970, 0.99970, 0.99971, 0.99972, 0.99973, 0.99973, 0.99974, 0.99975, 0.99975, 0.99976, 0.99977,
+        0.99977, 0.99978, 0.99979, 0.99979, 0.99980, 0.99980, 0.99981, 0.99982, 0.99982, 0.99983, 0.99983, 0.99984,
+        0.99984, 0.99985, 0.99985, 0.99986, 0.99986, 0.99987, 0.99988, 0.99988, 0.99989, 0.99989, 0.99990, 0.99990,
+        0.99990, 0.99991, 0.99991, 0.99992, 0.99992, 0.99993, 0.99993, 0.99994, 0.99994, 0.99994, 0.99995, 0.99995,
+        0.99996, 0.99996, 0.99997, 0.99997, 0.99997, 0.99998, 0.99998, 0.99998, 0.99999, 0.99999, 1.00000, 1.00000
+      };
+
+      const double *xp1 = std::lower_bound(XVALUES, XVALUES+600, randv);
+      if(xp1 == XVALUES+600) return 0.0;
+      const double *xm1 = xp1 - 1;
+      const double *ep1 = ENERGIES + (xp1 - XVALUES);
+      const double *em1 = ep1 - 1;
+      return (*em1) + (randv - *xm1)*(*ep1 - *em1)/(*xp1 - *xm1);
+    }
+
+    /**
+       * Generate the final energy of a neutron for uranium foil analyser at 293K
+       * with number density of 1.456E20 atoms/cm^2 in double-difference mode.
+       * @param randv A random number between 0.0 & 1.0, sample from a flat distribution
+       * @return A value to use for the final energy
+       */
+    double finalEnergyUranium(const double randv)
+    {
+      static const double ENERGIES[201] = {\
+        5959.0, 5967.7, 5976.4, 5985.1, 5993.8, 6002.5, 6011.2, 6019.9, 6028.6, 6037.3, 6046.0, 6054.8,
+        6063.5, 6072.2, 6080.9, 6089.6, 6098.3, 6107.0, 6115.7, 6124.4, 6133.1, 6141.8, 6150.5, 6159.2,
+        6167.9, 6176.6, 6185.3, 6194.0, 6202.7, 6211.4, 6220.1, 6228.9, 6237.6, 6246.3, 6255.0, 6263.7,
+        6272.4, 6281.1, 6289.8, 6298.5, 6307.2, 6315.9, 6324.6, 6333.3, 6342.0, 6350.7, 6359.4, 6368.1,
+        6376.8, 6385.5, 6394.3, 6403.0, 6411.7, 6420.4, 6429.1, 6437.8, 6446.5, 6455.2, 6463.9, 6472.6,
+        6481.3, 6490.0, 6498.7, 6507.4, 6516.1, 6524.8, 6533.5, 6542.2, 6550.9, 6559.6, 6568.4, 6577.1,
+        6585.8, 6594.5, 6603.2, 6611.9, 6620.6, 6629.3, 6638.0, 6646.7, 6655.4, 6664.1, 6672.8, 6681.5,
+        6690.2, 6698.9, 6707.6, 6716.3, 6725.0, 6733.7, 6742.5, 6751.2, 6759.9, 6768.6, 6777.3, 6786.0,
+        6794.7, 6803.4, 6812.1, 6820.8, 6829.5, 6838.2, 6846.9, 6855.6, 6864.3, 6873.0, 6881.7, 6890.4,
+        6899.1, 6907.8, 6916.5, 6925.3, 6934.0, 6942.7, 6951.4, 6960.1, 6968.8, 6977.5, 6986.2, 6994.9,
+        7003.6, 7012.3, 7021.0, 7029.7, 7038.4, 7047.1, 7055.8, 7064.5, 7073.2, 7081.9, 7090.6, 7099.4,
+        7108.1, 7116.8, 7125.5, 7134.2, 7142.9, 7151.6, 7160.3, 7169.0, 7177.7, 7186.4, 7195.1, 7203.8,
+        7212.5, 7221.2, 7229.9, 7238.6, 7247.3, 7256.0, 7264.8, 7273.5, 7282.2, 7290.9, 7299.6, 7308.3,
+        7317.0, 7325.7, 7334.4, 7343.1, 7351.8, 7360.5, 7369.2, 7377.9, 7386.6, 7395.3, 7404.0, 7412.7,
+        7421.4, 7430.1, 7438.9, 7447.6, 7456.3, 7465.0, 7473.7, 7482.4, 7491.1, 7499.8, 7508.5, 7517.2,
+        7525.9, 7534.6, 7543.3, 7552.0, 7560.7, 7569.4, 7578.1, 7586.8, 7595.5, 7604.2, 7613.0, 7621.7,
+        7630.4, 7639.1, 7647.8, 7656.5, 7665.2, 7673.9, 7682.6, 7691.3, 7700.0
+      };
+      static const double XVALUES[201] = {\
+        0.00000, 0.00000, 0.00000, 0.00020, 0.00030, 0.00040, 0.00050, 0.00060, 0.00070, 0.00080, 0.00090, 0.00110,
+        0.00120, 0.00140, 0.00150, 0.00170, 0.00190, 0.00210, 0.00230, 0.00250, 0.00270, 0.00290, 0.00310, 0.00340,
+        0.00360, 0.00390, 0.00410, 0.00440, 0.00470, 0.00500, 0.00530, 0.00560, 0.00590, 0.00620, 0.00650, 0.00690,
+        0.00720, 0.00760, 0.00800, 0.00840, 0.00880, 0.00920, 0.00960, 0.01010, 0.01050, 0.01100, 0.01150, 0.01210,
+        0.01270, 0.01330, 0.01390, 0.01460, 0.01530, 0.01610, 0.01690, 0.01780, 0.01870, 0.01970, 0.02090, 0.02210,
+        0.02350, 0.02500, 0.02660, 0.02850, 0.03070, 0.03320, 0.03620, 0.03990, 0.04440, 0.05020, 0.05780, 0.06790,
+        0.08120, 0.09880, 0.12150, 0.15020, 0.18520, 0.22640, 0.27340, 0.32510, 0.38050, 0.43830, 0.49720, 0.55580,
+        0.61290, 0.66710, 0.71740, 0.76250, 0.80190, 0.83510, 0.86220, 0.88380, 0.90050, 0.91340, 0.92340, 0.93100,
+        0.93710, 0.94200, 0.94600, 0.94940, 0.95230, 0.95490, 0.95710, 0.95920, 0.96100, 0.96270, 0.96430, 0.96580,
+        0.96710, 0.96840, 0.96950, 0.97060, 0.97170, 0.97270, 0.97360, 0.97450, 0.97540, 0.97620, 0.97700, 0.97770,
+        0.97840, 0.97910, 0.97980, 0.98040, 0.98100, 0.98160, 0.98220, 0.98280, 0.98330, 0.98390, 0.98440, 0.98490,
+        0.98540, 0.98590, 0.98630, 0.98680, 0.98720, 0.98770, 0.98810, 0.98850, 0.98890, 0.98930, 0.98970, 0.99010,
+        0.99050, 0.99090, 0.99130, 0.99160, 0.99200, 0.99230, 0.99270, 0.99300, 0.99330, 0.99360, 0.99400, 0.99430,
+        0.99460, 0.99480, 0.99510, 0.99540, 0.99560, 0.99590, 0.99610, 0.99640, 0.99660, 0.99680, 0.99710, 0.99730,
+        0.99750, 0.99770, 0.99780, 0.99800, 0.99820, 0.99840, 0.99850, 0.99870, 0.99880, 0.99890, 0.99910, 0.99920,
+        0.99930, 0.99940, 0.99950, 0.99960, 0.99960, 0.99970, 0.99980, 0.99980, 0.99990, 0.99990, 0.99990, 1.00000,
+        1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000
+      };
+
+      const double *xp1 = std::lower_bound(XVALUES, XVALUES+201, randv);
+      if(xp1 == XVALUES+201) return 0.0;
+      const double *xm1 = xp1 - 1;
+      const double *ep1 = ENERGIES + (xp1 - XVALUES);
+      const double *em1 = ep1 - 1;
+      return (*em1) + (randv - *xm1)*(*ep1 - *em1)/(*xp1 - *xm1);
+    }
+    
+    //-------------------------------------------------------------------------
+    // RandomNumberGenerator
+    //-------------------------------------------------------------------------
+    /**
+     * Produces random numbers with various probability distributions
+     */
+    RandomNumberGenerator::RandomNumberGenerator(const int seed) : m_generator()
+    {
+      m_generator.seed(static_cast<boost::mt19937::result_type>(seed));
+    }
+    /// Returns a flat random number between 0.0 & 1.0
+    double RandomNumberGenerator::flat()
+    {
+      typedef boost::variate_generator<boost::mt19937&,
+                                       uniform_double> uniform_generator;
+      return uniform_generator(m_generator,
+                               uniform_double(0.0, 1.0))();
+    }
+    /// Returns a random number distributed  by a normal distribution
+    double RandomNumberGenerator::gaussian(const double mean, const double sigma)
+    {
+      typedef boost::variate_generator<boost::mt19937&,
+                                       gaussian_double> gauss_generator;
+      return gauss_generator(m_generator,
+                             gaussian_double(mean, sigma))();
+    }
+    
+    //-------------------------------------------------------------------------
+    // Simulation
+    //-------------------------------------------------------------------------
+    /**
+     * Stores counts for each scatter order
+     * for a "run" of a given number of events
+     */
+    Simulation::Simulation(const size_t order, const size_t ntimes) :
+      counts(order, std::vector<double>(ntimes)),
+      maxorder(order)
+    {}
+
+    //-------------------------------------------------------------------------
+    // SimulationAggreator
+    //-------------------------------------------------------------------------
+    /**
+     * Accumulates and averages the results
+     * of each simulation
+     * @param nruns The number of runs that will be computed
+     */
+    SimulationAggregator::SimulationAggregator(const size_t nruns)
+    {
+      results.reserve(nruns);
+    }
+
+    /**
+     * @param order The number of requested scatterings
+     * @param ntimes The number of times on input workspace
+     * @return A reference to a new Simulation object
+    */
+    Simulation & SimulationAggregator::newSimulation(const size_t order, const size_t ntimes)
+    {
+      results.push_back(Simulation(order, ntimes));
+      return results.back();
+    }
+    
+    /**
+     * @return The mean and standard deviation of the current set of simulations
+     */
+    SimulationWithErrors
+    SimulationAggregator::average() const
+    {
+      const size_t maxorder(results[0].maxorder), ntimes(results[0].counts[0].size()),
+          nruns(results.size());
+      SimulationWithErrors retval(maxorder, ntimes);
+      
+      for(size_t i = 0; i < maxorder; ++i)
+      {
+        auto & orderCounts = retval.sim.counts[i];
+        auto & orderErrors = retval.errors[i];
+        for(size_t j = 0; j < ntimes; ++j)
+        {
+          double mean(0.0);
+          size_t npoints(0);
+          for(size_t k = 0; k < nruns; ++k)
+          {
+            const double val = results[k].counts[i][j];
+            if(val > 0.0)
+            {
+              mean += val;
+              npoints +=1;
+            }
+          }
+          if(npoints < 2)
+          {
+            orderCounts[j] = 0.0;
+            orderErrors[j] = 0.0;
+          }
+          else
+          {
+            const double dblPts = static_cast<double>(npoints);
+            orderCounts[j] = mean/dblPts;
+            // error is std dev
+            double sumsq(0.0);
+            for(size_t k = 0; k < nruns; ++k)
+            {
+              const double val = results[k].counts[i][j];
+              if(val > 0.0)
+              {
+                const double diff = (val - mean);
+                sumsq += diff*diff;
+              }
+            }
+            orderErrors[j] = sqrt(sumsq/(dblPts*(dblPts-1)));
+          }
+        }
+      }
+      
+      return retval;
+    }
+    //-------------------------------------------------------------------------
+    // SimulationWithErrors
+    //-------------------------------------------------------------------------
+    /**
+     * Normalise the counts so that the integral over the single-scatter
+     * events is 1.
+     */
+    void SimulationWithErrors::normalise()
+    {
+      const double sumSingle = std::accumulate(sim.counts.front().begin(),
+                                               sim.counts.front().end(), 0.0);
+      if(sumSingle > 0.0)
+      {
+        const double invSum = 1.0/sumSingle; // multiply is faster
+        // Divide everything by the sum
+        const size_t nscatters = sim.counts.size();
+        for(size_t i = 0; i < nscatters; ++i)
+        {
+          auto & counts = sim.counts[i];
+          auto & scerrors = this->errors[i];
+          for(auto cit = counts.begin(), eit = scerrors.begin(); cit != counts.end();
+              ++cit, ++eit)
+          {
+            (*cit) *= invSum;
+            (*eit) *= invSum;
+          }
+        }
+      }
+    }
+
+  } // namespace MSVesuvioHelper
+}}
diff --git a/Code/Mantid/Framework/CurveFitting/src/VesuvioResolution.cpp b/Code/Mantid/Framework/CurveFitting/src/VesuvioResolution.cpp
index c0adfc1b6a560949ac48e89b3c5f1c2fff540e91..6bcf01387e115fa9ae72381405aaf5afe847f05a 100644
--- a/Code/Mantid/Framework/CurveFitting/src/VesuvioResolution.cpp
+++ b/Code/Mantid/Framework/CurveFitting/src/VesuvioResolution.cpp
@@ -22,8 +22,44 @@ namespace CurveFitting
   // Register into factory
   DECLARE_FUNCTION(VesuvioResolution);
 
+  //---------------------------------------------------------------------------
+  // Static functions
+  //---------------------------------------------------------------------------
+
   /**
-   */
+  * @param ws The workspace with attached instrument
+  * @param index Index of the spectrum
+  * @return DetectorParams structure containing the relevant parameters
+  */
+  ResolutionParams VesuvioResolution::getResolutionParameters(const API::MatrixWorkspace_const_sptr & ws,
+                                                              const size_t index)
+  {
+    Geometry::IDetector_const_sptr detector;
+    try
+    {
+      detector = ws->getDetector(index);
+    }
+    catch (Kernel::Exception::NotFoundError &)
+    {
+      throw std::invalid_argument("VesuvioResolution - Workspace has no detector attached to histogram at index " + \
+        boost::lexical_cast<std::string>(index));
+    }
+
+    ResolutionParams respar;
+    const auto & pmap = ws->constInstrumentParameters();
+    respar.dl1 = ConvertToYSpace::getComponentParameter(detector, pmap, "sigma_l1");
+    respar.dl2 = ConvertToYSpace::getComponentParameter(detector, pmap, "sigma_l2");
+    respar.dtof = ConvertToYSpace::getComponentParameter(detector, pmap, "sigma_tof");
+    respar.dthe = ConvertToYSpace::getComponentParameter(detector, pmap, "sigma_theta"); //radians
+    respar.dEnLorentz = ConvertToYSpace::getComponentParameter(detector, pmap, "hwhm_lorentz");
+    respar.dEnGauss = ConvertToYSpace::getComponentParameter(detector, pmap, "sigma_gauss");
+    return respar;
+  }
+  
+  //---------------------------------------------------------------------------
+  // Member functions
+  //---------------------------------------------------------------------------
+  
   VesuvioResolution::VesuvioResolution() : API::ParamFunction(), API::IFunction1D(),
       m_log("VesuvioResolution"),
       m_wsIndex(0), m_mass(0.0), m_voigt(),
@@ -63,34 +99,9 @@ namespace CurveFitting
     UNUSED_ARG(startX);
     UNUSED_ARG(endX);
 
-    auto inst = workspace->getInstrument();
-    auto sample = inst->getSample();
-    auto source = inst->getSource();
-    if(!sample || !source)
-    {
-      throw std::invalid_argument("VesuvioResolution - Workspace has no source/sample.");
-    }
     m_wsIndex = wsIndex;
-    Geometry::IDetector_const_sptr det;
-    try
-    {
-     det = workspace->getDetector(m_wsIndex);
-    }
-    catch (Kernel::Exception::NotFoundError &)
-    {
-      throw std::invalid_argument("VesuvioResolution - Workspace has no detector attached to histogram at index " + boost::lexical_cast<std::string>(m_wsIndex));
-    }
-
     DetectorParams detpar = ConvertToYSpace::getDetectorParameters(workspace, m_wsIndex);
-    const auto & pmap = workspace->constInstrumentParameters();
-
-    ResolutionParams respar;
-    respar.dl1 = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_l1");
-    respar.dl2 = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_l2");
-    respar.dthe = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_theta"); //radians
-    respar.dEnLorentz = ConvertToYSpace::getComponentParameter(det, pmap, "hwhm_lorentz");
-    respar.dEnGauss = ConvertToYSpace::getComponentParameter(det, pmap, "sigma_gauss");
-
+    ResolutionParams respar = getResolutionParameters(workspace, m_wsIndex);
     this->cacheResolutionComponents(detpar, respar);
   }
 
@@ -156,7 +167,7 @@ namespace CurveFitting
     double wl2 = 2.0*STDDEV_TO_HWHM*std::abs((std::pow(k0y0,3)/(k1*qy0*detpar.l1))*common)*respar.dl2;
 
     m_resolutionSigma = std::sqrt(std::pow(wgauss,2) + std::pow(wtheta,2) + std::pow(wl1,2) + std::pow(wl2,2));
-    
+
     m_log.notice() << "--------------------- Mass=" << m_mass << " -----------------------" << std::endl;
     m_log.notice() << "w_l1 (FWHM)=" << wl2 << std::endl;
     m_log.notice() << "w_l0 (FWHM)=" << wl1 << std::endl;
@@ -203,7 +214,7 @@ namespace CurveFitting
   {
     voigtApprox(voigt, xValues, lorentzPos, lorentzAmp, m_lorentzFWHM, m_resolutionSigma);
   }
-  
+
   /**
    * Transforms the input y coordinates using the Voigt function approximation. The area is normalized to lorentzAmp
    * @param voigt [Out] Output values (vector is expected to be of the correct size
diff --git a/Code/Mantid/Framework/CurveFitting/test/CalculateMSVesuvioTest.h b/Code/Mantid/Framework/CurveFitting/test/CalculateMSVesuvioTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..1c58cb8e71c6a19691212373fd4c191d9d1c97d7
--- /dev/null
+++ b/Code/Mantid/Framework/CurveFitting/test/CalculateMSVesuvioTest.h
@@ -0,0 +1,212 @@
+#ifndef MANTID_CURVEFITTING_CALCULATEMSVESUIVIOTEST_H_
+#define MANTID_CURVEFITTING_CALCULATEMSVESUIVIOTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidCurveFitting/CalculateMSVesuvio.h"
+#include "MantidGeometry/Instrument/Goniometer.h"
+#include "MantidGeometry/Objects/ShapeFactory.h"
+
+#include "MantidTestHelpers/ComponentCreationHelper.h"
+#include "MantidTestHelpers/WorkspaceCreationHelper.h"
+
+#include "ComptonProfileTestHelpers.h"
+
+using Mantid::CurveFitting::CalculateMSVesuvio;
+
+class CalculateMSVesuvioTest : public CxxTest::TestSuite
+{
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static CalculateMSVesuvioTest *createSuite() { return new CalculateMSVesuvioTest(); }
+  static void destroySuite( CalculateMSVesuvioTest *suite ) { delete suite; }
+
+  // ------------------------ Success Cases -----------------------------------------
+
+  void test_init()
+  {
+    CalculateMSVesuvio alg;
+    TS_ASSERT_THROWS_NOTHING(alg.initialize());
+    TS_ASSERT(alg.isInitialized());
+  }
+
+  void test_exec_with_flat_plate_sample()
+  {
+    auto alg = createTestAlgorithm(createFlatPlateSampleWS());
+    TS_ASSERT_THROWS_NOTHING(alg->execute());
+    TS_ASSERT(alg->isExecuted());
+    
+    checkOutputValuesAsExpected(alg, 0.0099824991, 0.0020558473);
+  }
+
+  // ------------------------ Failure Cases -----------------------------------------
+
+  void test_setting_input_workspace_not_in_tof_throws_invalid_argument()
+  {
+    CalculateMSVesuvio alg;
+    alg.initialize();
+
+    auto testWS = WorkspaceCreationHelper::Create2DWorkspace(1, 1);
+    TS_ASSERT_THROWS(alg.setProperty("InputWorkspace", testWS), std::invalid_argument);
+  }
+
+  void test_setting_workspace_with_no_sample_shape_throws_invalid_argument()
+  {
+    CalculateMSVesuvio alg;
+    alg.initialize();
+
+    auto testWS = WorkspaceCreationHelper::Create2DWorkspace(1, 1);
+    testWS->getAxis(0)->setUnit("TOF");
+    TS_ASSERT_THROWS(alg.setProperty("InputWorkspace", testWS), std::invalid_argument);
+  }
+
+  void test_setting_nmasses_zero_or_negative_throws_invalid_argument()
+  {
+    CalculateMSVesuvio alg;
+    alg.initialize();
+
+    TS_ASSERT_THROWS(alg.setProperty("NoOfMasses", -1), std::invalid_argument);
+    TS_ASSERT_THROWS(alg.setProperty("NoOfMasses", 0), std::invalid_argument);
+  }
+
+  void test_setting_sampledensity_zero_or_negative_throws_invalid_argument()
+  {
+    CalculateMSVesuvio alg;
+    alg.initialize();
+
+    TS_ASSERT_THROWS(alg.setProperty("SampleDensity", -1), std::invalid_argument);
+    TS_ASSERT_THROWS(alg.setProperty("SampleDensity", 0), std::invalid_argument);
+  }
+
+  void test_setting_atomic_properties_not_length_three_times_nmasses_throws_invalid_argument_on_execute()
+  {
+    auto alg = createTestAlgorithm(createFlatPlateSampleWS());
+
+    alg->setProperty("NoOfMasses", 2);
+    const double sampleProps[5] = {1.007900, 0.9272392, 5.003738, 16.00000, 3.2587662E-02};
+    alg->setProperty("AtomicProperties", std::vector<double>(sampleProps, sampleProps + 5));
+
+    TS_ASSERT_THROWS(alg->execute(), std::invalid_argument);
+  }
+
+  void test_setting_zero_or_negative_beam_radius_values_throws_invalid_argument()
+  {
+    CalculateMSVesuvio alg;
+    alg.initialize();
+
+    TS_ASSERT_THROWS(alg.setProperty("BeamRadius", -1.5), std::invalid_argument);
+    TS_ASSERT_THROWS(alg.setProperty("BeamRadius", 0.0), std::invalid_argument);
+  }
+
+  void test_input_workspace_with_detector_that_has_no_shape_throws_exception()
+  {
+    auto alg = createTestAlgorithm(createFlatPlateSampleWS(false));
+
+    TS_ASSERT_THROWS(alg->execute(), std::invalid_argument);
+  }
+
+private:
+
+  Mantid::API::IAlgorithm_sptr createTestAlgorithm(const Mantid::API::MatrixWorkspace_sptr & inputWS)
+  {
+    Mantid::API::IAlgorithm_sptr alg = boost::shared_ptr<Mantid::API::IAlgorithm>(new CalculateMSVesuvio);
+    alg->initialize();
+    alg->setRethrows(true);
+    alg->setChild(true);
+    // inputs
+    alg->setProperty("InputWorkspace", inputWS);
+    alg->setProperty("NoOfMasses", 3);
+    alg->setProperty("SampleDensity", 241.0);
+    const double sampleProps[9] = {1.007900, 0.9272392, 5.003738, 16.00000, 3.2587662E-02, 13.92299,
+                                   27.50000, 4.0172841E-02, 15.07701};
+    alg->setProperty("AtomicProperties", std::vector<double>(sampleProps, sampleProps + 9));
+    alg->setProperty("BeamRadius", 2.5);
+    // reduce number of events for test purposes
+    alg->setProperty("NumEventsPerRun", 10000);
+
+    // outputs
+    alg->setPropertyValue("TotalScatteringWS", "__unused_for_child");
+    alg->setPropertyValue("MultipleScatteringWS", "__unused_for_child");
+
+    return alg;
+  }
+
+  Mantid::API::MatrixWorkspace_sptr createFlatPlateSampleWS(const bool detShape = true)
+  {
+    auto testWS = createTestWorkspace(detShape);
+    // Sample shape
+    const double halfHeight(0.05), halfWidth(0.05), halfThick(0.0025);
+    std::ostringstream sampleShapeXML;
+    sampleShapeXML <<  " <cuboid id=\"detector-shape\"> "
+      << "<left-front-bottom-point x=\"" << halfWidth << "\" y=\"" << -halfHeight << "\" z=\"" << -halfThick <<"\"  /> "
+      << "<left-front-top-point  x=\"" << halfWidth <<"\" y=\"" << halfHeight <<"\" z=\"" << -halfThick << "\"  /> "
+      << "<left-back-bottom-point  x=\"" << halfWidth <<"\" y=\"" << -halfHeight << "\" z=\"" << halfThick <<"\"  /> "
+      << "<right-front-bottom-point  x=\"" << -halfWidth <<"\" y=\"" << -halfHeight << "\" z=\"" << -halfThick << "\"  /> "
+      << "</cuboid>";
+    auto sampleShape = Mantid::Geometry::ShapeFactory().createShape(sampleShapeXML.str());
+    testWS->mutableSample().setShape(*sampleShape);
+
+    return testWS;
+  }
+
+
+  Mantid::API::MatrixWorkspace_sptr createTestWorkspace(const bool detShape = true)
+  {
+    using namespace Mantid::Geometry;
+    using namespace Mantid::Kernel;
+
+    const int nhist(1);
+    const double x0(50.0), x1(562.0), dx(1.0);
+    const bool singleMassSpec(false), foilChanger(true);
+    auto ws2d = ComptonProfileTestHelpers::createTestWorkspace(nhist, x0, x1, dx,
+                                                               singleMassSpec, foilChanger);
+
+    if(detShape)
+    {
+      // replace instrument with one that has a detector with a shape
+      const std::string shapeXML = \
+        "<cuboid id=\"shape\">"
+          "<left-front-bottom-point x=\"0.0125\" y=\"-0.0395\" z= \"0.0045\" />"
+          "<left-front-top-point x=\"0.0125\" y=\"0.0395\" z= \"0.0045\" />"
+          "<left-back-bottom-point x=\"0.0125\" y=\"-0.0395\" z= \"-0.0045\" />"
+          "<right-front-bottom-point x=\"-0.0125\" y=\"-0.0395\" z= \"0.0045\" />"
+        "</cuboid>"
+        "<algebra val=\"shape\" />";
+      const auto pos = ws2d->getDetector(0)->getPos();
+      auto instrument = ComptonProfileTestHelpers::createTestInstrumentWithFoilChanger(1, pos, shapeXML);
+      ws2d->setInstrument(instrument);
+      ComptonProfileTestHelpers::addResolutionParameters(ws2d, 1);
+      ComptonProfileTestHelpers::addFoilResolution(ws2d, "foil-pos0");
+    }
+
+    return ws2d;
+  }
+
+  void checkOutputValuesAsExpected(const Mantid::API::IAlgorithm_sptr & alg,
+                                   const double expectedTotal, const double expectedMS)
+  {
+    using Mantid::API::MatrixWorkspace_sptr;
+    const size_t checkIdx = 100;
+    const double tolerance(1e-8);
+    
+    // Values for total scattering
+    MatrixWorkspace_sptr totScatter = alg->getProperty("TotalScatteringWS");
+    TS_ASSERT(totScatter);
+    const auto & totY = totScatter->readY(0);
+    TS_ASSERT_DELTA(expectedTotal, totY[checkIdx], tolerance);
+    const auto & totX = totScatter->readX(0);
+    TS_ASSERT_DELTA(150.0, totX[checkIdx], tolerance); // based on workspace setup
+
+    // Values for multiple scatters
+    MatrixWorkspace_sptr multScatter = alg->getProperty("MultipleScatteringWS");
+    TS_ASSERT(multScatter);
+    const auto & msY = multScatter->readY(0);
+    TS_ASSERT_DELTA(expectedMS, msY[checkIdx], tolerance);
+    const auto & msX = multScatter->readX(0);
+    TS_ASSERT_DELTA(150.0, msX[checkIdx], tolerance); // based on workspace setup
+  }
+};
+
+
+#endif /* MANTID_CURVEFITTING_CALCULATEMSVESUIVIOTEST_H_ */
diff --git a/Code/Mantid/Framework/CurveFitting/test/ComptonProfileTestHelpers.h b/Code/Mantid/Framework/CurveFitting/test/ComptonProfileTestHelpers.h
index 199fabefdd645ca619ad54897ebaeb103bab3e0e..83c29bd6fb0ca8bd6e0dff62ed85d53de62d6242 100644
--- a/Code/Mantid/Framework/CurveFitting/test/ComptonProfileTestHelpers.h
+++ b/Code/Mantid/Framework/CurveFitting/test/ComptonProfileTestHelpers.h
@@ -2,6 +2,7 @@
 #define COMPTONPROFILETESTHELPERS_H_
 
 #include "MantidGeometry/Instrument/Detector.h"
+#include "MantidGeometry/Objects/ShapeFactory.h"
 #include "MantidKernel/MersenneTwister.h"
 
 #include "MantidTestHelpers/ComponentCreationHelper.h"
@@ -14,9 +15,12 @@ namespace ComptonProfileTestHelpers
   static Mantid::API::MatrixWorkspace_sptr createTestWorkspace(const size_t nhist,const double x0, const double x1,
                                                                const double dx, const bool singleMassSpectrum = false,
                                                                const bool addFoilChanger = false);
-  static Mantid::Geometry::Instrument_sptr createTestInstrumentWithFoilChanger(const Mantid::detid_t id,const Mantid::Kernel::V3D &);
+  static Mantid::Geometry::Instrument_sptr createTestInstrumentWithFoilChanger(const Mantid::detid_t id,
+                                                                               const Mantid::Kernel::V3D &,
+                                                                               const std::string &detShapeXML = "");
   static Mantid::Geometry::Instrument_sptr createTestInstrumentWithNoFoilChanger(const Mantid::detid_t id,
-                                                                                 const Mantid::Kernel::V3D &);
+                                                                                 const Mantid::Kernel::V3D &,
+                                                                                 const std::string & detShape = "");
   static void addResolutionParameters(const Mantid::API::MatrixWorkspace_sptr & ws,
                                       const Mantid::detid_t detID);
   static void addFoilResolution(const Mantid::API::MatrixWorkspace_sptr & ws,
@@ -60,14 +64,14 @@ namespace ComptonProfileTestHelpers
     {
       double r(0.553), theta(66.5993), phi(138.6);
       Mantid::Kernel::V3D detPos;
-      detPos.spherical(r, theta, phi);
+      detPos.spherical_rad(r, theta*M_PI/180.0, phi*M_PI/180.0);
       ws2d->setInstrument(createTestInstrumentWithFoilChanger(id,detPos));
     }
     else
     {
       double r(0.55), theta(66.5993), phi(0.0);
       Mantid::Kernel::V3D detPos;
-      detPos.spherical(r, theta, phi);
+      detPos.spherical_rad(r, theta*M_PI/180.0, phi*M_PI/180.0);
       ws2d->setInstrument(createTestInstrumentWithNoFoilChanger(id,detPos));
     }
 
@@ -90,15 +94,19 @@ namespace ComptonProfileTestHelpers
     return ws2d;
   }
 
-  static Mantid::Geometry::Instrument_sptr createTestInstrumentWithFoilChanger(const Mantid::detid_t id,
-                                                                               const Mantid::Kernel::V3D & detPos)
+  static Mantid::Geometry::Instrument_sptr
+  createTestInstrumentWithFoilChanger(const Mantid::detid_t id,
+                                      const Mantid::Kernel::V3D & detPos,
+                                      const std::string &detShapeXML)
   {
     using Mantid::Kernel::V3D;
     using namespace Mantid::Geometry;
 
-    auto inst = createTestInstrumentWithNoFoilChanger(id, detPos);
+    auto inst = createTestInstrumentWithNoFoilChanger(id, detPos, detShapeXML);
     // add changer
-    auto changerShape = ComponentCreationHelper::createCappedCylinder(0.05,0.4,V3D(0.0,-0.2,0.0),V3D(0.0,1,0.0), "cylinder");
+    auto changerShape = \
+        ComponentCreationHelper::createCappedCylinder(0.05, 0.4, V3D(0.0,-0.2,0.0),
+                                                      V3D(0.0,1,0.0), "cylinder");
     auto *changer = new ObjComponent("foil-changer",changerShape);
     changer->setPos(V3D(0.0,0.0,0.0));
     inst->add(changer);
@@ -120,8 +128,10 @@ namespace ComptonProfileTestHelpers
     return inst;
   }
 
-  static Mantid::Geometry::Instrument_sptr createTestInstrumentWithNoFoilChanger(const Mantid::detid_t id,
-                                                                                 const Mantid::Kernel::V3D & detPos)
+  static Mantid::Geometry::Instrument_sptr
+  createTestInstrumentWithNoFoilChanger(const Mantid::detid_t id,
+                                        const Mantid::Kernel::V3D & detPos,
+                                        const std::string &detShapeXML)
   {
     using Mantid::Kernel::V3D;
     using namespace Mantid::Geometry;
@@ -140,7 +150,16 @@ namespace ComptonProfileTestHelpers
     inst->markAsSamplePos(sampleHolder);
 
     //Just give it a single detector
-    auto *det0 = new Detector("det0",id,NULL);
+    Detector *det0(NULL);
+    if(!detShapeXML.empty())
+    {
+      auto shape = ShapeFactory().createShape(detShapeXML);
+      det0 = new Detector("det0", id, shape, NULL);
+    }
+    else
+    {
+      det0 = new Detector("det0", id, NULL);
+    }
     det0->setPos(detPos);
     inst->add(det0);
     inst->markAsDetector(det0);
@@ -163,6 +182,7 @@ namespace ComptonProfileTestHelpers
     pmap.addDouble(compID, "t0", -0.32);
     pmap.addDouble(compID, "hwhm_lorentz", 24);
     pmap.addDouble(compID, "sigma_gauss", 73);
+    pmap.addDouble(compID, "sigma_tof", 0.3);
   }
 
   static void addFoilResolution(const Mantid::API::MatrixWorkspace_sptr & ws,
diff --git a/Code/Mantid/Framework/CurveFitting/test/FABADAMinimizerTest.h b/Code/Mantid/Framework/CurveFitting/test/FABADAMinimizerTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..a8f1857f0f065c6b8cbb6b988828c70a02a36323
--- /dev/null
+++ b/Code/Mantid/Framework/CurveFitting/test/FABADAMinimizerTest.h
@@ -0,0 +1,183 @@
+#ifndef MANTID_CURVEFITTING_FABADAMINIMIZERTEST_H_
+#define MANTID_CURVEFITTING_FABADAMINIMIZERTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidCurveFitting/FABADAMinimizer.h"
+
+#include "MantidCurveFitting/Fit.h"
+#include "MantidAPI/AlgorithmManager.h"
+
+#include "MantidCurveFitting/ExpDecay.h"
+#include "MantidKernel/PropertyManager.h"
+#include "MantidTestHelpers/FakeObjects.h"
+#include "MantidKernel/Exception.h"
+
+
+using Mantid::CurveFitting::FABADAMinimizer;
+using namespace Mantid::API;
+using namespace Mantid;
+using namespace Mantid::CurveFitting;
+
+class FABADAMinimizerTest : public CxxTest::TestSuite
+{
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static FABADAMinimizerTest *createSuite() { return new FABADAMinimizerTest(); }
+  static void destroySuite( FABADAMinimizerTest *suite ) { delete suite; }
+
+
+  void test_expDecay()
+  {
+    const bool histogram(false);
+    auto ws2 = createTestWorkspace(histogram);
+
+    API::IFunction_sptr fun(new ExpDecay);
+    fun->setParameter("Height",8.);
+    fun->setParameter("Lifetime",1.0);
+
+    Fit fit;
+    fit.initialize();
+
+    fit.setRethrows(true);
+    fit.setProperty("Function",fun);
+    fit.setProperty("InputWorkspace",ws2);
+    fit.setProperty("WorkspaceIndex",0);
+    fit.setProperty("CreateOutput",true);
+    fit.setProperty("MaxIterations",100000);
+    fit.setProperty("Minimizer", "FABADA,ChainLength=5000,ConvergenceCriteria = 0.1, OutputWorkspaceConverged=conv");
+
+    TS_ASSERT_THROWS_NOTHING( fit.execute() );
+
+    TS_ASSERT(fit.isExecuted());
+
+    TS_ASSERT_DELTA( fun->getParameter("Height"), 10.0, 1e-1);
+    TS_ASSERT_DELTA( fun->getParameter("Lifetime"), 0.5, 1e-2);
+
+    TS_ASSERT_EQUALS(fit.getPropertyValue("OutputStatus"), "success");
+
+    size_t n = fun -> nParams();
+
+    TS_ASSERT( AnalysisDataService::Instance().doesExist("pdf") );
+    MatrixWorkspace_sptr wsPDF = boost::dynamic_pointer_cast<MatrixWorkspace>(
+      API::AnalysisDataService::Instance().retrieve("pdf"));
+    TS_ASSERT(wsPDF);
+    TS_ASSERT_EQUALS(wsPDF->getNumberHistograms(),n);
+
+    const Mantid::MantidVec& X = wsPDF->dataX(0);
+    const Mantid::MantidVec& Y = wsPDF->dataY(0);
+    TS_ASSERT_EQUALS(X.size(), 51);
+    TS_ASSERT_EQUALS(Y.size(), 50);
+
+    TS_ASSERT( AnalysisDataService::Instance().doesExist("chi2") );
+    ITableWorkspace_sptr chi2table = boost::dynamic_pointer_cast<ITableWorkspace>(
+      API::AnalysisDataService::Instance().retrieve("chi2"));
+
+    TS_ASSERT(chi2table);
+    TS_ASSERT_EQUALS(chi2table->columnCount(), 4);
+    TS_ASSERT_EQUALS(chi2table->rowCount(), 1);
+    TS_ASSERT_EQUALS(chi2table->getColumn(0)->type(), "double");
+    TS_ASSERT_EQUALS(chi2table->getColumn(0)->name(), "Chi2min");
+    TS_ASSERT_EQUALS(chi2table->getColumn(1)->type(), "double");
+    TS_ASSERT_EQUALS(chi2table->getColumn(1)->name(), "Chi2MP");
+    TS_ASSERT_EQUALS(chi2table->getColumn(2)->type(), "double");
+    TS_ASSERT_EQUALS(chi2table->getColumn(2)->name(), "Chi2min_red");
+    TS_ASSERT_EQUALS(chi2table->getColumn(3)->type(), "double");
+    TS_ASSERT_EQUALS(chi2table->getColumn(3)->name(), "Chi2MP_red");
+    TS_ASSERT(chi2table->Double(0,0) <= chi2table->Double(0,1));
+    TS_ASSERT(chi2table->Double(0,2) <= chi2table->Double(0,3));
+    TS_ASSERT_DELTA(chi2table->Double(0,0), chi2table->Double(0,1), 1);
+    TS_ASSERT_DELTA(chi2table->Double(0,0), 0.0, 1.0);
+
+    TS_ASSERT( AnalysisDataService::Instance().doesExist("conv") );
+    MatrixWorkspace_sptr wsConv = boost::dynamic_pointer_cast<MatrixWorkspace>(
+      API::AnalysisDataService::Instance().retrieve("conv"));
+    TS_ASSERT(wsConv);
+    TS_ASSERT_EQUALS(wsConv->getNumberHistograms(),n+1);
+
+    const Mantid::MantidVec& Xconv = wsConv->dataX(0);
+    TS_ASSERT_EQUALS(Xconv.size(), 5000);
+    TS_ASSERT_EQUALS(Xconv[2437], 2437);
+
+    TS_ASSERT( AnalysisDataService::Instance().doesExist("chain") );
+    MatrixWorkspace_sptr wsChain = boost::dynamic_pointer_cast<MatrixWorkspace>(
+      API::AnalysisDataService::Instance().retrieve("chain"));
+    TS_ASSERT(wsChain);
+    TS_ASSERT_EQUALS(wsChain->getNumberHistograms(),n+1);
+
+    const Mantid::MantidVec& Xchain = wsChain->dataX(0);
+    TS_ASSERT_EQUALS(Xchain.size(), 6881);
+    TS_ASSERT_EQUALS(Xchain[5000], 5000);
+
+    TS_ASSERT(Xconv.size() < Xchain.size());
+
+    TS_ASSERT( AnalysisDataService::Instance().doesExist("pdfE") );
+    ITableWorkspace_sptr Etable = boost::dynamic_pointer_cast<ITableWorkspace>(
+      API::AnalysisDataService::Instance().retrieve("pdfE"));
+
+    TS_ASSERT(Etable);
+    TS_ASSERT_EQUALS(Etable->columnCount(), 4);
+    TS_ASSERT_EQUALS(Etable->rowCount(), n);
+    TS_ASSERT_EQUALS(Etable->getColumn(0)->type(), "str");
+    TS_ASSERT_EQUALS(Etable->getColumn(0)->name(), "Name");
+    TS_ASSERT_EQUALS(Etable->getColumn(1)->type(), "double");
+    TS_ASSERT_EQUALS(Etable->getColumn(1)->name(), "Value");
+    TS_ASSERT_EQUALS(Etable->getColumn(2)->type(), "double");
+    TS_ASSERT_EQUALS(Etable->getColumn(2)->name(), "Left's error");
+    TS_ASSERT_EQUALS(Etable->getColumn(3)->type(), "double");
+    TS_ASSERT_EQUALS(Etable->getColumn(3)->name(), "Rigth's error");
+    TS_ASSERT(Etable->Double(0,1) == fun->getParameter("Height"));
+    TS_ASSERT(Etable->Double(1,1) == fun->getParameter("Lifetime"));
+
+  }
+
+  void test_low_MaxIterations()
+  {
+    const bool histogram(false);
+    auto ws2 = createTestWorkspace(histogram);
+
+    API::IFunction_sptr fun(new ExpDecay);
+    fun->setParameter("Height",1.);
+    fun->setParameter("Lifetime",1.0);
+
+    Fit fit;
+    fit.initialize();
+
+    fit.setRethrows(true);
+    fit.setProperty("Function",fun);
+    fit.setProperty("InputWorkspace",ws2);
+    fit.setProperty("WorkspaceIndex",0);
+    fit.setProperty("CreateOutput",true);
+    fit.setProperty("MaxIterations",10);
+    fit.setProperty("Minimizer", "FABADA,ChainLength=5000,ConvergenceCriteria = 0.01, OutputWorkspaceConverged=conv");
+
+    TS_ASSERT_THROWS( fit.execute(), std::runtime_error );
+
+    TS_ASSERT( !fit.isExecuted() );
+
+  }
+private:
+
+  API::MatrixWorkspace_sptr createTestWorkspace(const bool histogram)
+  {
+    MatrixWorkspace_sptr ws2(new WorkspaceTester);
+    ws2->initialize(2,20,20);
+
+    for(size_t is = 0; is < ws2->getNumberHistograms(); ++is)
+    {
+      Mantid::MantidVec& x = ws2->dataX(is);
+      Mantid::MantidVec& y = ws2->dataY(is);
+      for(size_t i = 0; i < ws2->blocksize(); ++i)
+      {
+        x[i] = 0.1 * double(i);
+        y[i] =  (10.0 + double(is)) * exp( -(x[i])/ (0.5*(1 + double(is))) );
+      }
+      if(histogram) x.back() = x[x.size()-2] + 0.1;
+    }
+    return ws2;
+  }
+};
+
+
+#endif /* MANTID_CURVEFITTING_FABADAMINIMIZERTEST_H_ */
diff --git a/Code/Mantid/Framework/DataHandling/CMakeLists.txt b/Code/Mantid/Framework/DataHandling/CMakeLists.txt
index e0a7349e7f16a1db94ceaac57727904e938ede99..5df27be94a931908b81b813d713e90355e7669de 100644
--- a/Code/Mantid/Framework/DataHandling/CMakeLists.txt
+++ b/Code/Mantid/Framework/DataHandling/CMakeLists.txt
@@ -25,7 +25,6 @@ set ( SRC_FILES
 	src/LoadAscii2.cpp
 	src/LoadBBY.cpp
 	src/LoadCalFile.cpp
-	src/LoadVulcanCalFile.cpp
 	src/LoadCanSAS1D.cpp
 	src/LoadCanSAS1D2.cpp
 	src/LoadDaveGrp.cpp
@@ -94,6 +93,7 @@ set ( SRC_FILES
 	src/LoadSpec.cpp
 	src/LoadSpice2D.cpp
 	src/LoadTOFRawNexus.cpp
+	src/LoadVulcanCalFile.cpp
 	src/MaskDetectors.cpp
 	src/MaskDetectorsInShape.cpp
 	src/MergeLogs.cpp
@@ -128,9 +128,12 @@ set ( SRC_FILES
 	src/SaveNXSPE.cpp
 	src/SaveNexus.cpp
 	src/SaveNexusProcessed.cpp
+	src/SaveNXTomo.cpp
 	src/SaveParameterFile.cpp
 	src/SavePAR.cpp
+	src/SavePDFGui.cpp
 	src/SavePHX.cpp
+	src/SaveParameterFile.cpp
 	src/SaveRKH.cpp
 	src/SaveReflTBL.cpp
 	src/SaveSPE.cpp
@@ -166,9 +169,8 @@ set ( INC_FILES
 	inc/MantidDataHandling/LoadANSTOHelper.h
 	inc/MantidDataHandling/LoadAscii.h
 	inc/MantidDataHandling/LoadAscii2.h
-    inc/MantidDataHandling/LoadBBY.h
+	inc/MantidDataHandling/LoadBBY.h
 	inc/MantidDataHandling/LoadCalFile.h
-	inc/MantidDataHandling/LoadVulcanCalFile.h
 	inc/MantidDataHandling/LoadCanSAS1D.h
 	inc/MantidDataHandling/LoadCanSAS1D2.h
 	inc/MantidDataHandling/LoadDaveGrp.h
@@ -231,7 +233,8 @@ set ( INC_FILES
 	inc/MantidDataHandling/LoadSassena.h
 	inc/MantidDataHandling/LoadSpec.h
 	inc/MantidDataHandling/LoadSpice2D.h
-	inc/MantidDataHandling/LoadTOFRawNexus.h	
+	inc/MantidDataHandling/LoadTOFRawNexus.h
+	inc/MantidDataHandling/LoadVulcanCalFile.h
 	inc/MantidDataHandling/MaskDetectors.h
 	inc/MantidDataHandling/MaskDetectorsInShape.h
 	inc/MantidDataHandling/MergeLogs.h
@@ -266,9 +269,12 @@ set ( INC_FILES
 	inc/MantidDataHandling/SaveNXSPE.h
 	inc/MantidDataHandling/SaveNexus.h
 	inc/MantidDataHandling/SaveNexusProcessed.h
+	inc/MantidDataHandling/SaveNXTomo.h
 	inc/MantidDataHandling/SaveParameterFile.h
 	inc/MantidDataHandling/SavePAR.h
+	inc/MantidDataHandling/SavePDFGui.h
 	inc/MantidDataHandling/SavePHX.h
+	inc/MantidDataHandling/SaveParameterFile.h
 	inc/MantidDataHandling/SaveRKH.h
 	inc/MantidDataHandling/SaveReflTBL.h
 	inc/MantidDataHandling/SaveSPE.h
@@ -308,7 +314,6 @@ set ( TEST_FILES
 	LoadAsciiTest.h
 	LoadBBYTest.h
 	LoadCalFileTest.h
-	LoadVulcanCalFileTest.h
 	LoadCanSAS1dTest.h
 	LoadDaveGrpTest.h
 	LoadDetectorInfoTest.h
@@ -366,6 +371,7 @@ set ( TEST_FILES
 	LoadSpice2dTest.h
 	LoadTOFRawNexusTest.h
 	LoadTest.h
+	LoadVulcanCalFileTest.h
 	MaskDetectorsInShapeTest.h
 	MaskDetectorsTest.h
 	MergeLogsTest.h
@@ -399,9 +405,10 @@ set ( TEST_FILES
 	SaveNXSPETest.h
 	SaveNexusProcessedTest.h
 	SaveNexusTest.h
-	SaveParameterFileTest.h
 	SavePARTest.h
+	SavePDFGuiTest.h
 	SavePHXTest.h
+	SaveParameterFileTest.h
 	SaveRKHTest.h
 	SaveReflTBLTest.h
 	SaveSPETest.h
diff --git a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadEventNexus.h b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadEventNexus.h
index 1fb26799447331fc5934d10c334f4021c4f465e9..d680380e7c644f8ad59f7642b41f02e8487cbe48 100644
--- a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadEventNexus.h
+++ b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadEventNexus.h
@@ -129,6 +129,9 @@ namespace DataHandling
 
     static void loadSampleDataISIScompatibility(::NeXus::File& file, Mantid::API::MatrixWorkspace_sptr WS);
 
+    /// method used to return instrument name for some old ISIS files where it is not written properly within the instrument
+    static std::string readInstrumentFromISIS_VMSCompat(::NeXus::File &hFile);
+
   public:
 
     /// The name and path of the input file
@@ -142,6 +145,13 @@ namespace DataHandling
     /// Filter by a maximum time-of-flight
     double filter_tof_max;
 
+		/// Spectra list to load
+		std::vector<int32_t> m_specList;
+		/// Minimum spectrum to load
+		int32_t m_specMin;
+		/// Maximum spectrum to load
+		int32_t m_specMax;
+
     /// Filter by start time
     Kernel::DateAndTime filter_time_start;
     /// Filter by stop time
@@ -245,6 +255,9 @@ namespace DataHandling
 
     void filterDuringPause(API::MatrixWorkspace_sptr workspace);
 
+		// Validate the optional spectra input properties and initialize m_specList
+		void createSpectraList(int32_t min, int32_t max);
+
   public:
     /// name of top level NXentry to use
     std::string m_top_entry_name;
diff --git a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadFITS.h b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadFITS.h
index 1ed0521b9067aa7862769ec7bf1a13561197bd84..dcfc964b646f4c3ac9af52b99f55ae3d2870a338 100644
--- a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadFITS.h
+++ b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadFITS.h
@@ -102,7 +102,9 @@ namespace DataHandling
     void loadChunkOfBinsFromFile(Mantid::API::MatrixWorkspace_sptr &workspace, vector<vector<double> > &yVals, vector<vector<double> > &eVals, void *&bufferAny, MantidVecPtr &x, size_t spetraCount, int bitsPerPixel, size_t binChunkStartIndex);
     /// Initialises a workspace with IDF and fills it with data
     API::MatrixWorkspace_sptr initAndPopulateHistogramWorkspace();
-
+    /// Creates a comma separated string of rotations from a file
+    std::string ReadRotations(std::string rotFilePath, size_t fileCount);
+    
     vector<FITSInfo> m_allHeaderInfo;
     size_t m_binChunkSize;
     static const int FIXED_HEADER_SIZE = 2880;    
diff --git a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadISISNexus2.h b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadISISNexus2.h
index 9181a2be9b270cd8897f05d0a2af8b4398867f92..fe9acf88471f34109afb135e0661a4323544635c 100644
--- a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadISISNexus2.h
+++ b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadISISNexus2.h
@@ -91,42 +91,70 @@ namespace Mantid
       struct SpectraBlock
       {
         /// Constructor - initialize the block
-        SpectraBlock(int64_t f,int64_t l,bool m):first(f),last(l),isMonitor(m){}
+        SpectraBlock(int64_t f,int64_t l,bool is_mon,const std::string &monname):
+          first(f),last(l),isMonitor(is_mon),monName(monname){}
+
         int64_t first; ///< first spectrum number of the block
         int64_t last; ///< last spectrum number of the block
         bool isMonitor; ///< is the data in a monitor group
+        std::string monName;
       };
+
+      /// The structure describes parameters of a single time-block written in the nexus file
+      struct DataBlock
+      {
+        // The number of data periods
+        int numberOfPeriods;
+        // The number of time channels per spectrum (N histogram bins -1)
+        std::size_t numberOfChannels;   
+        // The number of spectra
+        size_t numberOfSpectra;
+        // minimal spectra Id (by default 1, undefined -- max_value)
+        int64_t spectraID_min;
+        // maximal spectra Id (by default 1, undefined  -- 0)
+        int64_t spectraID_max;
+
+        DataBlock():numberOfPeriods(0),numberOfChannels(0),numberOfSpectra(0),spectraID_min(std::numeric_limits<int64_t>::max()),spectraID_max(0){}
+
+        DataBlock(const NeXus::NXInt &data):
+          numberOfPeriods(data.dim0()),
+          numberOfChannels(data.dim2()),
+          numberOfSpectra (data.dim1()),
+          spectraID_min(std::numeric_limits<int64_t>::max()),
+          spectraID_max(0)
+        {};
+     };
     private:
       /// Overwrites Algorithm method.
       void init();
       /// Overwrites Algorithm method
       void exec();
       // Validate the optional input properties
-      void checkOptionalProperties();
+      void checkOptionalProperties(const std::map<int64_t,std::string> &ExcludedMonitors);
       /// Prepare a vector of SpectraBlock structures to simplify loading
-      size_t prepareSpectraBlocks();
+      size_t prepareSpectraBlocks(std::map<int64_t,std::string > &monitors, const std::map<int64_t,specid_t> &specInd2specNum_map,const DataBlock &LoadBlock);
       /// Run LoadInstrument as a ChildAlgorithm
-      void runLoadInstrument(DataObjects::Workspace2D_sptr);
+      void runLoadInstrument(DataObjects::Workspace2D_sptr &);
       /// Load in details about the run
-      void loadRunDetails(DataObjects::Workspace2D_sptr local_workspace, Mantid::NeXus::NXEntry & entry);
+      void loadRunDetails(DataObjects::Workspace2D_sptr &local_workspace, Mantid::NeXus::NXEntry & entry);
       /// Parse an ISO formatted date-time string into separate date and time strings
       void parseISODateTime(const std::string & datetime_iso, std::string & date, std::string & time) const;
       /// Load in details about the sample
-      void loadSampleData(DataObjects::Workspace2D_sptr, Mantid::NeXus::NXEntry & entry);
+      void loadSampleData(DataObjects::Workspace2D_sptr &, Mantid::NeXus::NXEntry & entry);
       /// Load log data from the nexus file
-      void loadLogs(DataObjects::Workspace2D_sptr ws, Mantid::NeXus::NXEntry & entry);
+      void loadLogs(DataObjects::Workspace2D_sptr &ws, Mantid::NeXus::NXEntry & entry);
       // Load a given period into the workspace
-      void loadPeriodData(int64_t period, Mantid::NeXus::NXEntry & entry, DataObjects::Workspace2D_sptr local_workspace);
+      void loadPeriodData(int64_t period, Mantid::NeXus::NXEntry & entry, DataObjects::Workspace2D_sptr &local_workspace);
       // Load a data block
       void loadBlock(Mantid::NeXus::NXDataSetTyped<int> & data, int64_t blocksize, int64_t period, int64_t start,
-          int64_t &hist, int64_t& spec_num, DataObjects::Workspace2D_sptr localWorkspace);
+          int64_t &hist, int64_t& spec_num, DataObjects::Workspace2D_sptr &localWorkspace);
 
       // Create period logs
-      void createPeriodLogs(int64_t period, DataObjects::Workspace2D_sptr local_workspace);
+      void createPeriodLogs(int64_t period, DataObjects::Workspace2D_sptr &local_workspace);
       // Validate multi-period logs
-      void validateMultiPeriodLogs(Mantid::API::MatrixWorkspace_sptr);
+      void validateMultiPeriodLogs(Mantid::API::MatrixWorkspace_sptr );
       // build the list of spectra numbers to load and include in the spectra list
-      void buildSpectraInd2SpectraNumMap(const std::vector<int64_t>  &spec_list);
+      void buildSpectraInd2SpectraNumMap(bool range_supplied,int64_t range_min,int64_t range_max,const std::vector<int64_t>  &spec_list,const std::map<int64_t,std::string> &ExcludedMonitors);
 
 
       /// The name and path of the input file
@@ -136,28 +164,19 @@ namespace Mantid
       /// The sample name read from Nexus
       std::string m_samplename;
 
-      /// The number of spectra
-      std::size_t m_numberOfSpectra;
-      /// The number of spectra in the raw file
-      std::size_t m_numberOfSpectraInFile;
-      /// The number of periods
-      int m_numberOfPeriods;
-      /// The number of periods in the raw file
-      int m_numberOfPeriodsInFile;
-      /// The number of time channels per spectrum
-      std::size_t m_numberOfChannels;
-      /// The number of time channels per spectrum in the raw file
-      std::size_t m_numberOfChannelsInFile;
+      // the description of the data block in the file to load.
+       // the description of single time-range data block, obtained from detectors
+      DataBlock m_detBlockInfo;
+      // the description of single time-range data block, obtained from monitors
+      DataBlock m_monBlockInfo;
+      // description of the block to be loaded may include monitors and detectors with the same time binning if the detectors and monitors are loaded together
+      // in single workspace or equal to the detectorBlock if monitors are excluded
+      // or monBlockInfo if only monitors are loaded.
+      DataBlock m_loadBlockInfo;
+
       /// Is there a detector block
       bool m_have_detector;
 
-
-      /// Have the spectrum_min/max properties been set?
-      bool m_range_supplied;
-       /// The value of the SpectrumMin property
-      int64_t m_spec_min;
-      /// The value of the SpectrumMax property
-      int64_t m_spec_max;
       /// if true, a spectra list or range of spectra is supplied
       bool m_load_selected_spectra;
       /// map of spectra Index to spectra Number (spectraID)
@@ -192,8 +211,10 @@ namespace Mantid
       static double dblSqrt(double in);
 
       // C++ interface to the NXS file
-      ::NeXus::File * m_cppFile;
+      boost::scoped_ptr< ::NeXus::File> m_cppFile;
 
+      bool findSpectraDetRangeInFile(NeXus::NXEntry &entry,boost::shared_array<int>  &spectrum_index,int64_t ndets,int64_t n_vms_compat_spectra,
+                                  std::map<int64_t,std::string> &monitors,bool excludeMonitors,bool separateMonitors,std::map<int64_t,std::string> &ExcludedMonitors);
     };
 
   } // namespace DataHandling
diff --git a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadInstrument.h b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadInstrument.h
index 2ad801b20fc2355b88c6064cd3532a52d55d1bb9..5e8201bca7d1cab1c89b38bd1d0ed64eec4653c0 100644
--- a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadInstrument.h
+++ b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadInstrument.h
@@ -87,7 +87,7 @@ namespace Mantid
       /// Algorithm's name for identification overriding a virtual method
       virtual const std::string name() const { return "LoadInstrument";};
     ///Summary of algorithms purpose
-    virtual const std::string summary() const {return "Loads an Instrument Definition File (IDF) into a workspace. After the IDF has been read this algorithm will attempt to run the Child Algorithm LoadParameterFile; where if IDF filename is of the form IDENTIFIER_Definition.xml then the instrument parameters in the file named IDENTIFIER_Parameters.xml would be loaded (in the directory specified by the parameterDefinition.directory Mantid property).";}
+    virtual const std::string summary() const {return "Loads an Instrument Definition File (IDF) into a workspace. After the IDF has been read this algorithm will attempt to run the Child Algorithm LoadParameterFile; where if IDF filename is of the form IDENTIFIER_Definition.xml then the instrument parameters in the file named IDENTIFIER_Parameters.xml would be loaded.";}
 
       /// Algorithm's version for identification overriding a virtual method
       virtual int version() const { return 1;};
diff --git a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadNXSPE.h b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadNXSPE.h
index 73c12b72f787b9ced9c08b79d90abb508d2bc048..2145b9733d062d54a20ce1780d4da7267e8d0d07 100644
--- a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadNXSPE.h
+++ b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadNXSPE.h
@@ -57,6 +57,9 @@ namespace DataHandling
     /// Returns a confidence value that this algorithm can load a file
     virtual int confidence(Kernel::NexusDescriptor & descriptor) const;
 
+    /// Confidence in identifier.
+    static int identiferConfidence(const std::string& value);
+
   private:
     
     /// Initialise the properties
diff --git a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadRaw3.h b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadRaw3.h
index 1203d8d98bfd32f4c4383e5fd0e41177c4974327..326f4830d43e66ac34712339e8b09d123af2412f 100644
--- a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadRaw3.h
+++ b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadRaw3.h
@@ -21,7 +21,7 @@ namespace Mantid
 
     Loads an file in ISIS RAW format and stores it in a 2D workspace
     (Workspace2D class). LoadRaw is an algorithm and LoadRawHelper class and
-	overrides the init() & exec() methods.
+  overrides the init() & exec() methods.
     LoadRaw3 uses less memory by only loading up the datablocks as required.
 
     Copyright &copy; 2007-9 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
@@ -71,12 +71,6 @@ namespace Mantid
 
       /// returns true if the given spectrum is a monitor
       bool isMonitor(const std::vector<specid_t>& monitorIndexes,specid_t spectrumNum);
-      /// returns true if the Exclude Monitor option(property) selected
-      bool isExcludeMonitors(const std::string &monitorOption);
-      ///  returns true if the Separate Monitor Option  selected
-      bool isSeparateMonitors(const std::string &monitorOption);
-      ///  returns true if the Include Monitor Option  selected
-      bool isIncludeMonitors(const std::string &monitorOption);
 
       /// validate workspace sizes
       void validateWorkspaceSizes( bool bexcludeMonitors ,bool bseparateMonitors,
diff --git a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadRawHelper.h b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadRawHelper.h
index 70178fc433c2cab78d30c5304b61d404c1d79afe..96fd62201711fe20ea95cf44d36a0688b7bc3307 100644
--- a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadRawHelper.h
+++ b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadRawHelper.h
@@ -27,32 +27,32 @@ namespace Mantid
   {
     /** @class LoadRawHelper DataHandling/LoadRawHelper.h
 
-	Helper class for LoadRaw algorithms.
+    Helper class for LoadRaw algorithms.
 
 
-	@author Sofia Antony, ISIS,RAL
-	@date 14/04/2010
+    @author Sofia Antony, ISIS,RAL
+    @date 14/04/2010
 
-	Copyright &copy; 2007-9 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
+    Copyright &copy; 2007-9 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
 
-	This file is part of Mantid.
+    This file is part of Mantid.
 
-	Mantid is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 3 of the License, or
-	(at your option) any later version.
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
 
-	Mantid 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 General Public License for more details.
+    Mantid 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 General Public License for more details.
 
-	You should have received a copy of the GNU General Public License
-	along with this program.  If not, see <http://www.gnu.org/licenses/>.
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-	File change history is stored at: <https://github.com/mantidproject/mantid>.
-	Code Documentation is available at: <http://doxygen.mantidproject.org>
-     */
+    File change history is stored at: <https://github.com/mantidproject/mantid>.
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+    */
     class DLLExport LoadRawHelper: public API::IFileLoader<Kernel::FileDescriptor>
     {
     public:
@@ -74,6 +74,37 @@ namespace Mantid
       /// Returns a confidence value that this algorithm can load a file
       virtual int confidence(Kernel::FileDescriptor & descriptor) const;
 
+      /// returns true if the Exclude Monitor option(property) selected
+      static bool isExcludeMonitors(const std::string &monitorOption);
+      ///  returns true if the Separate Monitor Option  selected
+      static bool isSeparateMonitors(const std::string &monitorOption);
+      ///  returns true if the Include Monitor Option  selected
+      static bool isIncludeMonitors(const std::string &monitorOption);
+
+
+      static void ProcessLoadMonitorOptions(bool &bincludeMonitors,bool &bseparateMonitors,bool &bexcludeMonitors,API::Algorithm *const pAlgo);
+      ///creates monitor workspace
+      static void createMonitorWorkspace(DataObjects::Workspace2D_sptr& monws_sptr,
+        DataObjects::Workspace2D_sptr& ws_sptr,API::WorkspaceGroup_sptr& mongrp_sptr,
+        const int64_t mwsSpecs,const int64_t nwsSpecs,const int64_t numberOfPeriods,const int64_t lenthIn,std::string title,API::Algorithm *const pAlg);
+      /// creates  shared pointer to group workspace 
+      static API::WorkspaceGroup_sptr createGroupWorkspace();
+
+      ///creates shared pointer to workspace from parent workspace
+      static DataObjects::Workspace2D_sptr createWorkspace(DataObjects::Workspace2D_sptr ws_sptr,
+        int64_t nVectors=-1,int64_t xLengthIn=-1,int64_t yLengthIn=-1);
+
+      /// overloaded method to create shared pointer to workspace
+      static  DataObjects::Workspace2D_sptr createWorkspace(int64_t nVectors,int64_t xlengthIn,int64_t ylengthIn,const std::string& title);
+
+      /// sets the workspace property 
+      static void setWorkspaceProperty(const std::string & propertyName,const std::string& title,
+        API::WorkspaceGroup_sptr grpws_sptr,DataObjects::Workspace2D_sptr ws_sptr,int64_t numberOfPeriods,bool bMonitor,API::Algorithm * const pAlg);
+
+      /// overloaded method to set the workspace property 
+      static void setWorkspaceProperty(DataObjects::Workspace2D_sptr ws_sptr,API::WorkspaceGroup_sptr grpws_sptr,const int64_t period,bool bmonitors,API::Algorithm *const pAlg);
+
+
     protected:
       /// Overwrites Algorithm method.
       void init();
@@ -95,19 +126,6 @@ namespace Mantid
       bool readData(FILE* file,int histToRead);
       bool readData(FILE* file,int64_t histToRead);
 
-      ///creates shared pointer to workspace from parent workspace
-      DataObjects::Workspace2D_sptr createWorkspace(DataObjects::Workspace2D_sptr ws_sptr,
-          int64_t nVectors=-1,int64_t xLengthIn=-1,int64_t yLengthIn=-1);
-
-      /// overloaded method to create shared pointer to workspace
-      DataObjects::Workspace2D_sptr createWorkspace(int64_t nVectors,int64_t xlengthIn,int64_t ylengthIn,const std::string& title);
-      ///creates monitor workspace
-      void createMonitorWorkspace(DataObjects::Workspace2D_sptr& monws_sptr,
-          DataObjects::Workspace2D_sptr& ws_sptr,API::WorkspaceGroup_sptr& mongrp_sptr,
-          const int64_t mwsSpecs,const int64_t nwsSpecs,const int64_t numberOfPeriods,const int64_t lenthIn,std::string title);
-
-      /// creates  shared pointer to group workspace 
-      API::WorkspaceGroup_sptr createGroupWorkspace();
 
       //Constructs the time channel (X) vector(s)     
       std::vector<boost::shared_ptr<MantidVec> > getTimeChannels(const int64_t& regimes, const int64_t& lengthIn);
@@ -126,16 +144,10 @@ namespace Mantid
       ///gets the monitor spectrum list from the workspace
       std::vector<specid_t> getmonitorSpectrumList(const API::SpectrumDetectorMapping& mapping);
 
-      /// sets the workspace property 
-      void setWorkspaceProperty(const std::string & propertyName,const std::string& title,
-          API::WorkspaceGroup_sptr grpws_sptr,DataObjects::Workspace2D_sptr ws_sptr,int64_t numberOfPeriods,bool bMonitor);
-
-      /// overloaded method to set the workspace property 
-      void setWorkspaceProperty(DataObjects::Workspace2D_sptr ws_sptr,API::WorkspaceGroup_sptr grpws_sptr,const int64_t period,bool bmonitors);
 
       /// This method sets the raw file data to workspace vectors
       void setWorkspaceData(DataObjects::Workspace2D_sptr newWorkspace,const std::vector<boost::shared_ptr<MantidVec> >& 
-          timeChannelsVec,int64_t wsIndex,specid_t nspecNum,int64_t noTimeRegimes,int64_t lengthIn,int64_t binStart);
+        timeChannelsVec,int64_t wsIndex,specid_t nspecNum,int64_t noTimeRegimes,int64_t lengthIn,int64_t binStart);
 
 
       /// ISISRAW class instance which does raw file reading. Shared pointer to prevent memory leak when an exception is thrown.
@@ -161,10 +173,10 @@ namespace Mantid
       specid_t  calculateWorkspaceSize();
       /// calculate workspace sizes if separate or exclude monitors are selected
       void calculateWorkspacesizes(const std::vector<specid_t>& monitorSpecList,
-          specid_t& normalwsSpecs, specid_t& monitorwsSpecs);
-      /// load the specra
+        specid_t& normalwsSpecs, specid_t& monitorwsSpecs);
+      /// load the spectra
       void loadSpectra(FILE* file,const int& period, const int& m_total_specs,
-          DataObjects::Workspace2D_sptr ws_sptr,std::vector<boost::shared_ptr<MantidVec> >);
+        DataObjects::Workspace2D_sptr ws_sptr,std::vector<boost::shared_ptr<MantidVec> >);
 
       /// Has the spectrum_list property been set?
       bool m_list;
diff --git a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SaveNXTomo.h b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SaveNXTomo.h
new file mode 100644
index 0000000000000000000000000000000000000000..cf83e7184b31bc479edcb656e10864a40c015854
--- /dev/null
+++ b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SaveNXTomo.h
@@ -0,0 +1,106 @@
+#ifndef MANTID_DATAHANDLING_SAVENXTOMO_H_
+#define MANTID_DATAHANDLING_SAVENXTOMO_H_
+
+//---------------------------------------------------
+// Includes
+//---------------------------------------------------
+#include "vector"
+#include "MantidGeometry/Instrument/RectangularDetector.h"
+
+namespace Mantid
+{
+  namespace DataHandling
+  {
+
+    /**
+     * Saves a workspace into a NeXus/HDF5 NXTomo file.
+     * File format is defined here: http://download.nexusformat.org/sphinx/classes/applications/NXtomo.html
+     *
+     * Required properties:
+     * <ul>
+     * <li> InputWorkspace - The workspace to save. </li>
+     * <li> Filename - The filename for output </li>
+     * </ul>
+     *
+     * @author John R Hill, RAL 
+     * @date 10/09/2014
+     *
+     * This file is part of Mantid.
+     *
+     *   Mantid is free software; you can redistribute it and/or modify
+     *   it under the terms of the GNU General Public License as published by
+     *   the Free Software Foundation; either version 3 of the License, or
+     *   (at your option) any later version.
+     *
+     *   Mantid 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 General Public License for more details.
+     *
+     *   You should have received a copy of the GNU General Public License
+     *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+     *
+     *   File change history is stored at: <https://github.com/mantidproject/mantid>
+     *   Code Documentation is available at: <http://doxygen.mantidproject.org>
+     *
+     */
+
+    class DLLExport SaveNXTomo: public API::Algorithm
+    {
+    public:
+      SaveNXTomo();
+      /// Virtual dtor
+      virtual ~SaveNXTomo() {}
+
+      /// Algorithm's name for identification overriding a virtual method
+      virtual const std::string name() const {  return "SaveNXTomo"; }
+
+      ///Summary of algorithms purpose
+      virtual const std::string summary() const {return "Writes a MatrixWorkspace to a file in the NXTomo format.";}
+
+      /// Algorithm's version
+      virtual int version() const  {  return (1);  }
+
+      /// Algorithm's category for identification
+      virtual const std::string category() const { return "DataHandling\\Nexus;DataHandling\\Tomo;Diffraction";  }
+
+    private:      
+      /// Initialisation code
+      void init();
+      /// Execution code
+      void exec();
+
+      /// Save all data to file
+
+      /// Save batch of images to the file
+
+      /// Fetch all rectangular Detector objects defined for an instrument
+      std::vector<boost::shared_ptr<const Mantid::Geometry::RectangularDetector>> getRectangularDetectors(const Geometry::Instrument_const_sptr &instrument);
+
+      /// Populate dims_array with the dimensions defined in the rectangular detector in the instrument
+      std::vector<int64_t> getDimensionsFromDetector(const std::vector<boost::shared_ptr<const Mantid::Geometry::RectangularDetector>> &rectDetectors, size_t useDetectorIndex = 0);
+
+      // Number of rows to 
+      size_t m_numberOfRows;
+
+      // Include error data in the written file
+      bool m_includeError;
+
+      ///the number of bins in each histogram, as the histogram must have common bins this shouldn't change
+      //size_t m_nBins;
+      /// The filename of the output file
+      std::string m_filename;      
+
+      // Some constants to be written for masked values.
+      /// Value for data if pixel is masked
+      static const double MASK_FLAG;
+      /// Value for error if pixel is masked
+      static const double MASK_ERROR;
+      /// file format version
+      static const std::string NXTOMO_VER;
+    };
+
+  } // namespace DataHandling
+} // namespace Mantid
+
+#endif // MANTID_DATAHANDLING_SAVENXTOMO_H_
diff --git a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SavePDFGui.h b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SavePDFGui.h
new file mode 100644
index 0000000000000000000000000000000000000000..3d147e8dc442e83b2c53fa436f8ec90db0a33785
--- /dev/null
+++ b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SavePDFGui.h
@@ -0,0 +1,55 @@
+#ifndef MANTID_DATAHANDLING_SAVEPDFGUI_H_
+#define MANTID_DATAHANDLING_SAVEPDFGUI_H_
+
+#include "MantidKernel/System.h"
+#include "MantidAPI/Algorithm.h"
+
+namespace Mantid
+{
+namespace DataHandling
+{
+
+  /** SavePDFGui : TODO: DESCRIPTION
+
+    Copyright &copy; 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+  */
+  class DLLExport SavePDFGui  : public API::Algorithm
+  {
+  public:
+    SavePDFGui();
+    virtual ~SavePDFGui();
+    
+    virtual const std::string name() const;
+    virtual int version() const;
+    virtual const std::string category() const;
+    virtual const std::string summary() const;
+    virtual std::map<std::string, std::string> validateInputs();
+
+  private:
+    void init();
+    void exec();
+  };
+
+
+} // namespace DataHandling
+} // namespace Mantid
+
+#endif  /* MANTID_DATAHANDLING_SAVEPDFGUI_H_ */
diff --git a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SaveParameterFile.h b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SaveParameterFile.h
index fcf51fb54fc00f0f202b4eb3e11da7b8e34aad99..3ef96391c4ba0d03de89b1f878bcd9fe3db0a784 100644
--- a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SaveParameterFile.h
+++ b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/SaveParameterFile.h
@@ -3,7 +3,7 @@
 
 #include "MantidKernel/System.h"
 #include "MantidAPI/Algorithm.h"
-
+#include "MantidGeometry/Instrument/FitParameter.h"
 namespace Mantid
 {
 
diff --git a/Code/Mantid/Framework/DataHandling/src/Load.cpp b/Code/Mantid/Framework/DataHandling/src/Load.cpp
index 0ee51f8d0b4baa40c8ce61aefccee042f831e06e..e9702b44c91c6e3c3788b5a3cc4d44ce0f56c0bf 100644
--- a/Code/Mantid/Framework/DataHandling/src/Load.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/Load.cpp
@@ -171,7 +171,7 @@ namespace Mantid
             std::string name = loader->name();
             int version = loader->version();
 
-            std::string ext = fileNames[0].substr(fileNames[0].find_last_of("."));
+            //std::string ext = fileNames[0].substr(fileNames[0].find_last_of("."));
             
             auto ifl = boost::dynamic_pointer_cast<IFileLoader<Kernel::FileDescriptor>>(loader);
             auto iflNexus = boost::dynamic_pointer_cast<IFileLoader<Kernel::NexusDescriptor>>(loader);                     
@@ -181,10 +181,11 @@ namespace Mantid
               // If it's loading into a single file, perform a cursory check on file extensions only.              
               if((ifl && ifl->loadMutipleAsOne()) || (iflNexus && iflNexus->loadMutipleAsOne()))
               {
-                if( fileNames[i].substr(fileNames[i].find_last_of(".")) != ext)
+                // Currently disabled for ticket http://trac.mantidproject.org/mantid/ticket/10397 : should be put back in when completing 10231
+                /*  if( fileNames[i].substr(fileNames[i].find_last_of(".")) != ext)
                 {
                   throw std::runtime_error("Cannot load multiple files when more than one Loader is needed.");   
-                }
+                }*/
               }
               else
               {
@@ -320,6 +321,7 @@ namespace Mantid
       exts.push_back(".h5");
       exts.push_back(".hd5");
       exts.push_back(".sqw");
+      exts.push_back(".fits");
 
       declareProperty(new MultipleFileProperty("Filename", exts),
         "The name of the file(s) to read, including the full or relative "
diff --git a/Code/Mantid/Framework/DataHandling/src/LoadEventNexus.cpp b/Code/Mantid/Framework/DataHandling/src/LoadEventNexus.cpp
index ef501b221f70a40547ad3cffcf8e510a953d270f..7007ce0de174cb25ae3a9c8c7a6ec035627b471c 100644
--- a/Code/Mantid/Framework/DataHandling/src/LoadEventNexus.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/LoadEventNexus.cpp
@@ -30,2016 +30,2101 @@ using namespace ::NeXus;
 
 namespace Mantid
 {
-namespace DataHandling
-{
+  namespace DataHandling
+  {
 
-  DECLARE_NEXUS_FILELOADER_ALGORITHM(LoadEventNexus)
+    DECLARE_NEXUS_FILELOADER_ALGORITHM(LoadEventNexus)
 
-  using namespace Kernel;
-  using namespace Geometry;
-  using namespace API;
-  using namespace DataObjects;
+    using namespace Kernel;
+    using namespace Geometry;
+    using namespace API;
+    using namespace DataObjects;
 
-  //===============================================================================================
-  // BankPulseTimes
-  //===============================================================================================
+    //===============================================================================================
+    // BankPulseTimes
+    //===============================================================================================
 
-  //----------------------------------------------------------------------------------------------
-  /** Constructor. Loads the pulse times from the bank entry of the file
-   *
-   * @param file :: nexus file open in the right bank entry
-   */
-  BankPulseTimes::BankPulseTimes(::NeXus::File & file)
-  {
-    file.openData("event_time_zero");
-    // Read the offset (time zero)
-    file.getAttr("offset", startTime);
-    DateAndTime start(startTime);
-    // Load the seconds offsets
-    std::vector<double> seconds;
-    file.getData(seconds);
-    file.closeData();
-    // Now create the pulseTimes
-    numPulses = seconds.size();
-    if (numPulses == 0)
-      throw std::runtime_error("event_time_zero field has no data!");
-    pulseTimes = new DateAndTime[numPulses];
-    for (size_t i=0; i<numPulses; i++)
-      pulseTimes[i] = start + seconds[i];
-  }
-
-  //----------------------------------------------------------------------------------------------
-  /** Constructor. Build from a vector of date and times.
-   *  Handles a zero-sized vector */
-  BankPulseTimes::BankPulseTimes(const std::vector<Kernel::DateAndTime> & times)
-  {
-    numPulses = times.size();
-    pulseTimes = NULL;
-    if (numPulses == 0)
-      return;
-    pulseTimes = new DateAndTime[numPulses];
-    for (size_t i=0; i<numPulses; i++)
-      pulseTimes[i] = times[i];
-  }
-
-  //----------------------------------------------------------------------------------------------
-  /** Destructor */
-  BankPulseTimes::~BankPulseTimes()
-  {
-    delete [] this->pulseTimes;
-  }
-
-  //----------------------------------------------------------------------------------------------
-  /** Comparison. Is this bank's pulse times array the same as another one.
-   *
-   * @param otherNumPulse :: number of pulses in the OTHER bank event_time_zero.
-   * @param otherStartTime :: "offset" attribute of the OTHER bank event_time_zero.
-   * @return true if the pulse times are the same and so don't need to be reloaded.
-   */
-  bool BankPulseTimes::equals(size_t otherNumPulse, std::string otherStartTime)
-  {
-    return ((this->startTime == otherStartTime) && (this->numPulses == otherNumPulse));
-  }
-
-  //==============================================================================================
-  // Class ProcessBankData
-  //==============================================================================================
-  /** This task does the disk IO from loading the NXS file,
-  * and so will be on a disk IO mutex */
-  class ProcessBankData : public Task
-  {
-  public:
     //----------------------------------------------------------------------------------------------
-    /** Constructor
-     *
-     * @param alg :: LoadEventNexus
-     * @param entry_name :: name of the bank
-     * @param prog :: Progress reporter
-     * @param scheduler :: ThreadScheduler running this task
-     * @param event_id :: array with event IDs
-     * @param event_time_of_flight :: array with event TOFS
-     * @param numEvents :: how many events in the arrays
-     * @param startAt :: index of the first event from event_index
-     * @param event_index :: vector of event index (length of # of pulses)
-     * @param thisBankPulseTimes :: ptr to the pulse times for this particular bank.
-     * @param have_weight :: flag for handling simulated files
-     * @param event_weight :: array with weights for events
-     * @param min_event_id ;: minimum detector ID to load
-     * @param max_event_id :: maximum detector ID to load
-     * @return
-     */
-    ProcessBankData(LoadEventNexus * alg, std::string entry_name,
-                    Progress * prog, ThreadScheduler * scheduler,
-                    boost::shared_array<uint32_t> event_id,
-                    boost::shared_array<float> event_time_of_flight,
-                    size_t numEvents, size_t startAt,
-                    boost::shared_ptr<std::vector<uint64_t> > event_index,
-                    boost::shared_ptr<BankPulseTimes> thisBankPulseTimes,
-                    bool have_weight, boost::shared_array<float> event_weight,
-                    detid_t min_event_id, detid_t max_event_id)
-      : Task(), alg(alg), entry_name(entry_name), pixelID_to_wi_vector(alg->pixelID_to_wi_vector),
-        pixelID_to_wi_offset(alg->pixelID_to_wi_offset),
-        prog(prog), scheduler(scheduler),
-        event_id(event_id), event_time_of_flight(event_time_of_flight), numEvents(numEvents), startAt(startAt),
-        event_index(event_index),
-        thisBankPulseTimes(thisBankPulseTimes), have_weight(have_weight),
-        event_weight(event_weight), m_min_id(min_event_id), m_max_id(max_event_id)
+    /** Constructor. Loads the pulse times from the bank entry of the file
+    *
+    * @param file :: nexus file open in the right bank entry
+    */
+    BankPulseTimes::BankPulseTimes(::NeXus::File & file)
+    {
+      file.openData("event_time_zero");
+      // Read the offset (time zero)
+      file.getAttr("offset", startTime);
+      DateAndTime start(startTime);
+      // Load the seconds offsets
+      std::vector<double> seconds;
+      file.getData(seconds);
+      file.closeData();
+      // Now create the pulseTimes
+      numPulses = seconds.size();
+      if (numPulses == 0)
+        throw std::runtime_error("event_time_zero field has no data!");
+      pulseTimes = new DateAndTime[numPulses];
+      for (size_t i=0; i<numPulses; i++)
+        pulseTimes[i] = start + seconds[i];
+    }
+
+    //----------------------------------------------------------------------------------------------
+    /** Constructor. Build from a vector of date and times.
+    *  Handles a zero-sized vector */
+    BankPulseTimes::BankPulseTimes(const std::vector<Kernel::DateAndTime> & times)
     {
-      // Cost is approximately proportional to the number of events to process.
-      m_cost = static_cast<double>(numEvents);
+      numPulses = times.size();
+      pulseTimes = NULL;
+      if (numPulses == 0)
+        return;
+      pulseTimes = new DateAndTime[numPulses];
+      for (size_t i=0; i<numPulses; i++)
+        pulseTimes[i] = times[i];
     }
 
     //----------------------------------------------------------------------------------------------
-    /** Run the data processing
-      */
-    void run()
+    /** Destructor */
+    BankPulseTimes::~BankPulseTimes()
     {
-      //Local tof limits
-      double my_shortest_tof = static_cast<double>(std::numeric_limits<uint32_t>::max()) * 0.1;
-      double my_longest_tof = 0.;
-      // A count of "bad" TOFs that were too high
-      size_t badTofs = 0;
-      size_t my_discarded_events(0);
+      delete [] this->pulseTimes;
+    }
 
-      prog->report(entry_name + ": precount");
+    //----------------------------------------------------------------------------------------------
+    /** Comparison. Is this bank's pulse times array the same as another one.
+    *
+    * @param otherNumPulse :: number of pulses in the OTHER bank event_time_zero.
+    * @param otherStartTime :: "offset" attribute of the OTHER bank event_time_zero.
+    * @return true if the pulse times are the same and so don't need to be reloaded.
+    */
+    bool BankPulseTimes::equals(size_t otherNumPulse, std::string otherStartTime)
+    {
+      return ((this->startTime == otherStartTime) && (this->numPulses == otherNumPulse));
+    }
 
-      // ---- Pre-counting events per pixel ID ----
-      auto & outputWS = *(alg->WS);
+    //==============================================================================================
+    // Class ProcessBankData
+    //==============================================================================================
+    /** This task does the disk IO from loading the NXS file,
+    * and so will be on a disk IO mutex */
+    class ProcessBankData : public Task
+    {
+    public:
+      //----------------------------------------------------------------------------------------------
+      /** Constructor
+      *
+      * @param alg :: LoadEventNexus
+      * @param entry_name :: name of the bank
+      * @param prog :: Progress reporter
+      * @param scheduler :: ThreadScheduler running this task
+      * @param event_id :: array with event IDs
+      * @param event_time_of_flight :: array with event TOFS
+      * @param numEvents :: how many events in the arrays
+      * @param startAt :: index of the first event from event_index
+      * @param event_index :: vector of event index (length of # of pulses)
+      * @param thisBankPulseTimes :: ptr to the pulse times for this particular bank.
+      * @param have_weight :: flag for handling simulated files
+      * @param event_weight :: array with weights for events
+      * @param min_event_id ;: minimum detector ID to load
+      * @param max_event_id :: maximum detector ID to load
+      * @return
+      */
+      ProcessBankData(LoadEventNexus * alg, std::string entry_name,
+        Progress * prog, ThreadScheduler * scheduler,
+        boost::shared_array<uint32_t> event_id,
+        boost::shared_array<float> event_time_of_flight,
+        size_t numEvents, size_t startAt,
+        boost::shared_ptr<std::vector<uint64_t> > event_index,
+        boost::shared_ptr<BankPulseTimes> thisBankPulseTimes,
+        bool have_weight, boost::shared_array<float> event_weight,
+        detid_t min_event_id, detid_t max_event_id)
+        : Task(), alg(alg), entry_name(entry_name), pixelID_to_wi_vector(alg->pixelID_to_wi_vector),
+        pixelID_to_wi_offset(alg->pixelID_to_wi_offset),
+        prog(prog), scheduler(scheduler),
+        event_id(event_id), event_time_of_flight(event_time_of_flight), numEvents(numEvents), startAt(startAt),
+        event_index(event_index),
+        thisBankPulseTimes(thisBankPulseTimes), have_weight(have_weight),
+        event_weight(event_weight), m_min_id(min_event_id), m_max_id(max_event_id)
+      {
+        // Cost is approximately proportional to the number of events to process.
+        m_cost = static_cast<double>(numEvents);
+      }
 
-      if (alg->precount)
+      //----------------------------------------------------------------------------------------------
+      /** Run the data processing
+      */
+      void run()
       {
-        std::vector<size_t> counts(m_max_id-m_min_id+1, 0);
-        for (size_t i=0; i < numEvents; i++)
+        //Local tof limits
+        double my_shortest_tof = static_cast<double>(std::numeric_limits<uint32_t>::max()) * 0.1;
+        double my_longest_tof = 0.;
+        // A count of "bad" TOFs that were too high
+        size_t badTofs = 0;
+        size_t my_discarded_events(0);
+
+        prog->report(entry_name + ": precount");
+
+        // ---- Pre-counting events per pixel ID ----
+        auto & outputWS = *(alg->WS);
+        if (alg->precount)
         {
-          detid_t thisId = detid_t(event_id[i]);
-          if (thisId >= m_min_id && thisId <= m_max_id)
-            counts[thisId-m_min_id]++;
-        }
 
-        // Now we pre-allocate (reserve) the vectors of events in each pixel counted
-        const size_t numEventLists = outputWS.getNumberHistograms();
-        for (detid_t pixID = m_min_id; pixID <= m_max_id; pixID++)
-        {
-          if (counts[pixID-m_min_id] > 0)
+				if ( alg->m_specMin !=EMPTY_INT() && alg->m_specMax !=EMPTY_INT() )
+				{
+					m_min_id = alg->m_specMin;
+					m_max_id = alg->m_specMax;
+				}
+
+          std::vector<size_t> counts(m_max_id-m_min_id+1, 0);
+          for (size_t i=0; i < numEvents; i++)
+          {
+            detid_t thisId = detid_t(event_id[i]);
+            if (thisId >= m_min_id && thisId <= m_max_id)
+              counts[thisId-m_min_id]++;
+          }
+
+          // Now we pre-allocate (reserve) the vectors of events in each pixel counted
+          const size_t numEventLists = outputWS.getNumberHistograms();
+          for (detid_t pixID = m_min_id; pixID <= m_max_id; pixID++)
           {
-            //Find the the workspace index corresponding to that pixel ID
-            size_t wi = pixelID_to_wi_vector[pixID+pixelID_to_wi_offset];
-            // Allocate it
-            if ( wi < numEventLists )
+            if (counts[pixID-m_min_id] > 0)
             {
-              outputWS.getEventList(wi).reserve( counts[pixID-m_min_id] );
+              //Find the the workspace index corresponding to that pixel ID
+              size_t wi = pixelID_to_wi_vector[pixID+pixelID_to_wi_offset];
+              // Allocate it
+              if ( wi < numEventLists )
+              {
+                outputWS.getEventList(wi).reserve( counts[pixID-m_min_id] );
+              }
+              if (alg->getCancel()) break; // User cancellation
             }
-            if (alg->getCancel()) break; // User cancellation
           }
         }
-      }
 
-      // Check for cancelled algorithm
-      if (alg->getCancel())
-      {
-        return;
-      }
+        // Check for canceled algorithm
+        if (alg->getCancel())
+        {
+          return;
+        }
 
-      //Default pulse time (if none are found)
-      Mantid::Kernel::DateAndTime pulsetime;
-      Mantid::Kernel::DateAndTime lastpulsetime(0);
+        //Default pulse time (if none are found)
+        Mantid::Kernel::DateAndTime pulsetime;
+        Mantid::Kernel::DateAndTime lastpulsetime(0);
 
-      bool pulsetimesincreasing = true;
+        bool pulsetimesincreasing = true;
 
-      // Index into the pulse array
-      int pulse_i = 0;
+        // Index into the pulse array
+        int pulse_i = 0;
 
-      // And there are this many pulses
-      int numPulses = static_cast<int>(thisBankPulseTimes->numPulses);
-      if (numPulses > static_cast<int>(event_index->size()))
-      {
-        alg->getLogger().warning() << "Entry " << entry_name << "'s event_index vector is smaller than the event_time_zero field. This is inconsistent, so we cannot find pulse times for this entry.\n";
-        //This'll make the code skip looking for any pulse times.
-        pulse_i = numPulses + 1;
-      }
+        // And there are this many pulses
+        int numPulses = static_cast<int>(thisBankPulseTimes->numPulses);
+        if (numPulses > static_cast<int>(event_index->size()))
+        {
+          alg->getLogger().warning() << "Entry " << entry_name << "'s event_index vector is smaller than the event_time_zero field. This is inconsistent, so we cannot find pulse times for this entry.\n";
+          //This'll make the code skip looking for any pulse times.
+          pulse_i = numPulses + 1;
+        }
 
-      prog->report(entry_name + ": filling events");
+        prog->report(entry_name + ": filling events");
 
-      // Will we need to compress?
-      bool compress = (alg->compressTolerance >= 0);
+        // Will we need to compress?
+        bool compress = (alg->compressTolerance >= 0);
 
-      // Which detector IDs were touched? - only matters if compress is on
-      std::vector<bool> usedDetIds;
-      if (compress) usedDetIds.assign(m_max_id-m_min_id+1, false);
+        // Which detector IDs were touched? - only matters if compress is on
+        std::vector<bool> usedDetIds;
+        if (compress) usedDetIds.assign(m_max_id-m_min_id+1, false);
 
-      //Go through all events in the list
-      for (std::size_t i = 0; i < numEvents; i++)
-      {
-        //------ Find the pulse time for this event index ---------
-        if (pulse_i < numPulses-1)
+        //Go through all events in the list
+        for (std::size_t i = 0; i < numEvents; i++)
         {
-          bool breakOut = false;
-          //Go through event_index until you find where the index increases to encompass the current index. Your pulse = the one before.
-          while ( (i+startAt < event_index->operator[](pulse_i))
-                  || (i+startAt >= event_index->operator[](pulse_i+1)) )
+          //------ Find the pulse time for this event index ---------
+          if (pulse_i < numPulses-1)
           {
-            pulse_i++;
-            // Check once every new pulse if you need to cancel (checking on every event might slow things down more)
-            if (alg->getCancel()) breakOut = true;
-            if (pulse_i >= (numPulses-1))
-              break;
-          }
+            bool breakOut = false;
+            //Go through event_index until you find where the index increases to encompass the current index. Your pulse = the one before.
+            while ( (i+startAt < event_index->operator[](pulse_i))
+              || (i+startAt >= event_index->operator[](pulse_i+1)) )
+            {
+              pulse_i++;
+              // Check once every new pulse if you need to cancel (checking on every event might slow things down more)
+              if (alg->getCancel()) breakOut = true;
+              if (pulse_i >= (numPulses-1))
+                break;
+            }
 
-          //Save the pulse time at this index for creating those events
-          pulsetime = thisBankPulseTimes->pulseTimes[pulse_i];
+            //Save the pulse time at this index for creating those events
+            pulsetime = thisBankPulseTimes->pulseTimes[pulse_i];
 
-          // Determine if pulse times continue to increase
-          if (pulsetime < lastpulsetime)
-            pulsetimesincreasing = false;
-          else
-            lastpulsetime = pulsetime;
+            // Determine if pulse times continue to increase
+            if (pulsetime < lastpulsetime)
+              pulsetimesincreasing = false;
+            else
+              lastpulsetime = pulsetime;
 
-          // Flag to break out of the event loop without using goto
-          if (breakOut)
-            break;
-        }
+            // Flag to break out of the event loop without using goto
+            if (breakOut)
+              break;
+          }
 
-        // We cached a pointer to the vector<tofEvent> -> so retrieve it and add the event
-        detid_t detId = event_id[i];
-        if (detId >= m_min_id && detId <= m_max_id)
-        {
-          //Create the tofevent
-          double tof = static_cast<double>( event_time_of_flight[i] );
-          if ((tof >= alg->filter_tof_min) && (tof <= alg->filter_tof_max))
+          // We cached a pointer to the vector<tofEvent> -> so retrieve it and add the event
+          detid_t detId = event_id[i];
+          if (detId >= m_min_id && detId <= m_max_id)
           {
-            // Handle simulated data if present
-            if (have_weight)
+            //Create the tofevent
+            double tof = static_cast<double>( event_time_of_flight[i] );
+            if ((tof >= alg->filter_tof_min) && (tof <= alg->filter_tof_max))
             {
-              double weight = static_cast<double>(event_weight[i]);
-              double errorSq = weight * weight;
-              std::vector<Mantid::DataObjects::WeightedEvent> *eventVector = alg->weightedEventVectors[detId];
-              // NULL eventVector indicates a bad spectrum lookup
-              if(eventVector)
+              // Handle simulated data if present
+              if (have_weight)
               {
+                double weight = static_cast<double>(event_weight[i]);
+                double errorSq = weight * weight;
+                std::vector<Mantid::DataObjects::WeightedEvent> *eventVector = alg->weightedEventVectors[detId];
+                // NULL eventVector indicates a bad spectrum lookup
+                if(eventVector)
+                {
 #if !(defined(__INTEL_COMPILER)) && !(defined(__clang__))
-                // This avoids a copy constructor call but is only available with GCC (requires variadic templates)
-                eventVector->emplace_back( tof, pulsetime, weight, errorSq );
+                  // This avoids a copy constructor call but is only available with GCC (requires variadic templates)
+                  eventVector->emplace_back( tof, pulsetime, weight, errorSq );
 #else
-                eventVector->push_back( WeightedEvent(tof, pulsetime, weight, errorSq) );
+                  eventVector->push_back( WeightedEvent(tof, pulsetime, weight, errorSq) );
 #endif
+                }
+                else
+                {
+                  ++my_discarded_events;
+                }
               }
               else
               {
-                ++my_discarded_events;
-              }
-            }
-            else
-            {
-              // We have cached the vector of events for this detector ID
-              std::vector<Mantid::DataObjects::TofEvent> *eventVector = alg->eventVectors[detId];
-              // NULL eventVector indicates a bad spectrum lookup
-              if(eventVector)
-              {
+                // We have cached the vector of events for this detector ID
+                std::vector<Mantid::DataObjects::TofEvent> *eventVector = alg->eventVectors[detId];
+                // NULL eventVector indicates a bad spectrum lookup
+                if(eventVector)
+                {
 #if !(defined(__INTEL_COMPILER)) && !(defined(__clang__))
-                // This avoids a copy constructor call but is only available with GCC (requires variadic templates)
-                eventVector->emplace_back( tof, pulsetime );
+                  // This avoids a copy constructor call but is only available with GCC (requires variadic templates)
+                  eventVector->emplace_back( tof, pulsetime );
 #else
-                eventVector->push_back( TofEvent(tof, pulsetime) );
+                  eventVector->push_back( TofEvent(tof, pulsetime) );
 #endif
+                }
+                else
+                {
+                  ++my_discarded_events;
+                }
               }
-              else
+
+              //Local tof limits
+              if (tof < my_shortest_tof) { my_shortest_tof = tof;}
+              // Skip any events that are the cause of bad DAS data (e.g. a negative number in uint32 -> 2.4 billion * 100 nanosec = 2.4e8 microsec)
+              if (tof < 2e8)
               {
-                ++my_discarded_events;
+                if (tof > my_longest_tof) { my_longest_tof = tof;}
               }
-            }
-
-            //Local tof limits
-            if (tof < my_shortest_tof) { my_shortest_tof = tof;}
-            // Skip any events that are the cause of bad DAS data (e.g. a negative number in uint32 -> 2.4 billion * 100 nanosec = 2.4e8 microsec)
-            if (tof < 2e8)
-            {
-              if (tof > my_longest_tof) { my_longest_tof = tof;}
-            }
-            else
-              badTofs++;
+              else
+                badTofs++;
 
-            // Track all the touched wi (only necessary when compressing events, for thread safety)
-            if (compress) usedDetIds[detId-m_min_id] = true;
-          } // valid time-of-flight
+              // Track all the touched wi (only necessary when compressing events, for thread safety)
+              if (compress) usedDetIds[detId-m_min_id] = true;
+            } // valid time-of-flight
 
-        } // valid detector IDs
-      } //(for each event)
+          } // valid detector IDs
+        } //(for each event)
 
-      //------------ Compress Events (or set sort order) ------------------
-      // Do it on all the detector IDs we touched
-      if (compress)
-      {
-        for (detid_t pixID = m_min_id; pixID <= m_max_id; pixID++)
+        //------------ Compress Events (or set sort order) ------------------
+        // Do it on all the detector IDs we touched
+        if (compress)
         {
-          if (usedDetIds[pixID-m_min_id])
+          for (detid_t pixID = m_min_id; pixID <= m_max_id; pixID++)
           {
-            //Find the the workspace index corresponding to that pixel ID
-            size_t wi = pixelID_to_wi_vector[pixID+pixelID_to_wi_offset];
-            EventList * el = outputWS.getEventListPtr(wi);
-            if (compress)
-              el->compressEvents(alg->compressTolerance, el);
-            else
+            if (usedDetIds[pixID-m_min_id])
             {
-              if (pulsetimesincreasing)
-                el->setSortOrder(DataObjects::PULSETIME_SORT);
+              //Find the the workspace index corresponding to that pixel ID
+              size_t wi = pixelID_to_wi_vector[pixID+pixelID_to_wi_offset];
+              EventList * el = outputWS.getEventListPtr(wi);
+              if (compress)
+                el->compressEvents(alg->compressTolerance, el);
               else
-                el->setSortOrder(DataObjects::UNSORTED);
+              {
+                if (pulsetimesincreasing)
+                  el->setSortOrder(DataObjects::PULSETIME_SORT);
+                else
+                  el->setSortOrder(DataObjects::UNSORTED);
+              }
             }
           }
         }
-      }
-      prog->report(entry_name + ": filled events");
+        prog->report(entry_name + ": filled events");
 
-      alg->getLogger().debug() << entry_name << (pulsetimesincreasing ? " had " : " DID NOT have ") <<
-                                  "monotonically increasing pulse times" << std::endl;
+        alg->getLogger().debug() << entry_name << (pulsetimesincreasing ? " had " : " DID NOT have ") <<
+          "monotonically increasing pulse times" << std::endl;
 
-      //Join back up the tof limits to the global ones
-      PARALLEL_CRITICAL(tof_limits)
-      {
-        //This is not thread safe, so only one thread at a time runs this.
-        if (my_shortest_tof < alg->shortest_tof) { alg->shortest_tof = my_shortest_tof;}
-        if (my_longest_tof > alg->longest_tof ) { alg->longest_tof  = my_longest_tof;}
-        alg->bad_tofs += badTofs;
-        alg->discarded_events += my_discarded_events;
-      }
+        //Join back up the tof limits to the global ones
+        PARALLEL_CRITICAL(tof_limits)
+        {
+          //This is not thread safe, so only one thread at a time runs this.
+          if (my_shortest_tof < alg->shortest_tof) { alg->shortest_tof = my_shortest_tof;}
+          if (my_longest_tof > alg->longest_tof ) { alg->longest_tof  = my_longest_tof;}
+          alg->bad_tofs += badTofs;
+          alg->discarded_events += my_discarded_events;
+        }
 
 
-      // For Linux with tcmalloc, make sure memory goes back;
-      // but don't call if more than 15% of memory is still available, since that slows down the loading.
-      MemoryManager::Instance().releaseFreeMemoryIfAbove(0.85);
+        // For Linux with tcmalloc, make sure memory goes back;
+        // but don't call if more than 15% of memory is still available, since that slows down the loading.
+        MemoryManager::Instance().releaseFreeMemoryIfAbove(0.85);
 
 #ifndef _WIN32
-      alg->getLogger().debug() << "Time to process " << entry_name << " " << m_timer << "\n";
+        alg->getLogger().debug() << "Time to process " << entry_name << " " << m_timer << "\n";
 #endif
-    }
+      }
 
 
-  private:
-    /// Algorithm being run
-    LoadEventNexus * alg;
-    /// NXS path to bank
-    std::string entry_name;
-    /// Vector where (index = pixel ID+pixelID_to_wi_offset), value = workspace index)
-    const std::vector<size_t> & pixelID_to_wi_vector;
-    /// Offset in the pixelID_to_wi_vector to use.
-    detid_t pixelID_to_wi_offset;
-    /// Progress reporting
-    Progress * prog;
-    /// ThreadScheduler running this task
-    ThreadScheduler * scheduler;
-    /// event pixel ID array
-    boost::shared_array<uint32_t> event_id;
-    /// event TOF array
-    boost::shared_array<float> event_time_of_flight;
-    /// # of events in arrays
-    size_t numEvents;
-    /// index of the first event from event_index
-    size_t startAt;
-    /// vector of event index (length of # of pulses)
-    boost::shared_ptr<std::vector<uint64_t> > event_index;
-    /// Pulse times for this bank
-    boost::shared_ptr<BankPulseTimes> thisBankPulseTimes;
-    /// Flag for simulated data
-    bool have_weight;
-    /// event weights array
-    boost::shared_array<float> event_weight;
-    /// Minimum pixel id
-    detid_t m_min_id;
-    /// Maximum pixel id
-    detid_t m_max_id;
-    /// timer for performance
-    Mantid::Kernel::Timer m_timer;
-  }; // END-DEF-CLASS ProcessBankData
-
-
-  //==============================================================================================
-  // Class LoadBankFromDiskTask
-  //==============================================================================================
-  /** This task does the disk IO from loading the NXS file,
-   * and so will be on a disk IO mutex */
-  class LoadBankFromDiskTask : public Task
-  {
+    private:
+      /// Algorithm being run
+      LoadEventNexus * alg;
+      /// NXS path to bank
+      std::string entry_name;
+      /// Vector where (index = pixel ID+pixelID_to_wi_offset), value = workspace index)
+      const std::vector<size_t> & pixelID_to_wi_vector;
+      /// Offset in the pixelID_to_wi_vector to use.
+      detid_t pixelID_to_wi_offset;
+      /// Progress reporting
+      Progress * prog;
+      /// ThreadScheduler running this task
+      ThreadScheduler * scheduler;
+      /// event pixel ID array
+      boost::shared_array<uint32_t> event_id;
+      /// event TOF array
+      boost::shared_array<float> event_time_of_flight;
+      /// # of events in arrays
+      size_t numEvents;
+      /// index of the first event from event_index
+      size_t startAt;
+      /// vector of event index (length of # of pulses)
+      boost::shared_ptr<std::vector<uint64_t> > event_index;
+      /// Pulse times for this bank
+      boost::shared_ptr<BankPulseTimes> thisBankPulseTimes;
+      /// Flag for simulated data
+      bool have_weight;
+      /// event weights array
+      boost::shared_array<float> event_weight;
+      /// Minimum pixel id
+      detid_t m_min_id;
+      /// Maximum pixel id
+      detid_t m_max_id;
+      /// timer for performance
+      Mantid::Kernel::Timer m_timer;
+    }; // END-DEF-CLASS ProcessBankData
+
+
+    //==============================================================================================
+    // Class LoadBankFromDiskTask
+    //==============================================================================================
+    /** This task does the disk IO from loading the NXS file,
+    * and so will be on a disk IO mutex */
+    class LoadBankFromDiskTask : public Task
+    {
 
-  public:
-    //---------------------------------------------------------------------------------------------------
-    /** Constructor
-     *
-     * @param alg :: Handle to the main algorithm
-     * @param entry_name :: The pathname of the bank to load
-     * @param entry_type :: The classtype of the entry to load
-     * @param numEvents :: The number of events in the bank.
-     * @param oldNeXusFileNames :: Identify if file is of old variety.
-     * @param prog :: an optional Progress object
-     * @param ioMutex :: a mutex shared for all Disk I-O tasks
-     * @param scheduler :: the ThreadScheduler that runs this task.
-     */
-    LoadBankFromDiskTask(LoadEventNexus * alg, const std::string& entry_name, const std::string & entry_type,
-                         const std::size_t numEvents, const bool oldNeXusFileNames,
-                         Progress * prog, boost::shared_ptr<Mutex> ioMutex, ThreadScheduler * scheduler)
-      : Task(),
+    public:
+      //---------------------------------------------------------------------------------------------------
+      /** Constructor
+      *
+      * @param alg :: Handle to the main algorithm
+      * @param entry_name :: The pathname of the bank to load
+      * @param entry_type :: The classtype of the entry to load
+      * @param numEvents :: The number of events in the bank.
+      * @param oldNeXusFileNames :: Identify if file is of old variety.
+      * @param prog :: an optional Progress object
+      * @param ioMutex :: a mutex shared for all Disk I-O tasks
+      * @param scheduler :: the ThreadScheduler that runs this task.
+      */
+      LoadBankFromDiskTask(LoadEventNexus * alg, const std::string& entry_name, const std::string & entry_type,
+        const std::size_t numEvents, const bool oldNeXusFileNames,
+        Progress * prog, boost::shared_ptr<Mutex> ioMutex, ThreadScheduler * scheduler)
+        : Task(),
         alg(alg), entry_name(entry_name), entry_type(entry_type),
         pixelID_to_wi_vector(alg->pixelID_to_wi_vector), pixelID_to_wi_offset(alg->pixelID_to_wi_offset),
         // prog(prog), scheduler(scheduler), thisBankPulseTimes(NULL), m_loadError(false),
         prog(prog), scheduler(scheduler), m_loadError(false),
         m_oldNexusFileNames(oldNeXusFileNames), m_loadStart(), m_loadSize(), m_event_id(NULL),
         m_event_time_of_flight(NULL), m_have_weight(false), m_event_weight(NULL)
-    {
-      setMutex(ioMutex);
-      m_cost = static_cast<double>(numEvents);
-      m_min_id = std::numeric_limits<uint32_t>::max();
-      m_max_id = 0;
-    }
-
-    //---------------------------------------------------------------------------------------------------
-    /** Load the pulse times, if needed. This sets
-     * thisBankPulseTimes to the right pointer.
-     * */
-    void loadPulseTimes(::NeXus::File & file)
-    {
-      try
-      {
-        // First, get info about the event_time_zero field in this bank
-        file.openData("event_time_zero");
-      }
-      catch (::NeXus::Exception&)
       {
-        // Field not found error is most likely.
-        // Use the "proton_charge" das logs.
-        thisBankPulseTimes = alg->m_allBanksPulseTimes;
-        return;
+        setMutex(ioMutex);
+        m_cost = static_cast<double>(numEvents);
+        m_min_id = std::numeric_limits<uint32_t>::max();
+        m_max_id = 0;
       }
-      std::string thisStartTime = "";
-      size_t thisNumPulses = 0;
-      file.getAttr("offset", thisStartTime);
-      if (file.getInfo().dims.size() > 0)
-        thisNumPulses = file.getInfo().dims[0];
-      file.closeData();
 
-      // Now, we look through existing ones to see if it is already loaded
-      // thisBankPulseTimes = NULL;
-      for (size_t i=0; i<alg->m_bankPulseTimes.size(); i++)
+      //---------------------------------------------------------------------------------------------------
+      /** Load the pulse times, if needed. This sets
+      * thisBankPulseTimes to the right pointer.
+      * */
+      void loadPulseTimes(::NeXus::File & file)
       {
-        if (alg->m_bankPulseTimes[i]->equals(thisNumPulses, thisStartTime))
+        try
+        {
+          // First, get info about the event_time_zero field in this bank
+          file.openData("event_time_zero");
+        }
+        catch (::NeXus::Exception&)
         {
-          thisBankPulseTimes = alg->m_bankPulseTimes[i];
+          // Field not found error is most likely.
+          // Use the "proton_charge" das logs.
+          thisBankPulseTimes = alg->m_allBanksPulseTimes;
           return;
         }
-      }
+        std::string thisStartTime = "";
+        size_t thisNumPulses = 0;
+        file.getAttr("offset", thisStartTime);
+        if (file.getInfo().dims.size() > 0)
+          thisNumPulses = file.getInfo().dims[0];
+        file.closeData();
 
-      // Not found? Need to load and add it
-      thisBankPulseTimes = boost::make_shared<BankPulseTimes>(boost::ref(file));
-      alg->m_bankPulseTimes.push_back(thisBankPulseTimes);
-    }
+        // Now, we look through existing ones to see if it is already loaded
+        // thisBankPulseTimes = NULL;
+        for (size_t i=0; i<alg->m_bankPulseTimes.size(); i++)
+        {
+          if (alg->m_bankPulseTimes[i]->equals(thisNumPulses, thisStartTime))
+          {
+            thisBankPulseTimes = alg->m_bankPulseTimes[i];
+            return;
+          }
+        }
 
+        // Not found? Need to load and add it
+        thisBankPulseTimes = boost::make_shared<BankPulseTimes>(boost::ref(file));
+        alg->m_bankPulseTimes.push_back(thisBankPulseTimes);
+      }
 
-    //---------------------------------------------------------------------------------------------------
-    /** Load the event_index field
-     (a list of size of # of pulses giving the index in the event list for that pulse)
 
-     * @param file :: File handle for the NeXus file
-     * @param event_index :: ref to the vector
-     */
-    void loadEventIndex(::NeXus::File & file, std::vector<uint64_t> & event_index)
-    {
-      // Get the event_index (a list of size of # of pulses giving the index in the event list for that pulse)
-      file.openData("event_index");
-      //Must be uint64
-      if (file.getInfo().type == ::NeXus::UINT64)
-        file.getData(event_index);
-      else
-      {
-        alg->getLogger().warning() << "Entry " << entry_name << "'s event_index field is not UINT64! It will be skipped.\n";
-        m_loadError = true;
-      }
-      file.closeData();
+      //---------------------------------------------------------------------------------------------------
+      /** Load the event_index field
+      (a list of size of # of pulses giving the index in the event list for that pulse)
 
-      // Look for the sign that the bank is empty
-      if (event_index.size()==1)
+      * @param file :: File handle for the NeXus file
+      * @param event_index :: ref to the vector
+      */
+      void loadEventIndex(::NeXus::File & file, std::vector<uint64_t> & event_index)
       {
-        if (event_index[0] == 0)
+        // Get the event_index (a list of size of # of pulses giving the index in the event list for that pulse)
+        file.openData("event_index");
+        //Must be uint64
+        if (file.getInfo().type == ::NeXus::UINT64)
+          file.getData(event_index);
+        else
         {
-          //One entry, only zero. This means NO events in this bank.
+          alg->getLogger().warning() << "Entry " << entry_name << "'s event_index field is not UINT64! It will be skipped.\n";
           m_loadError = true;
-          alg->getLogger().debug() << "Bank " << entry_name << " is empty.\n";
         }
-      }
-
-      return;
-    }
+        file.closeData();
 
+        // Look for the sign that the bank is empty
+        if (event_index.size()==1)
+        {
+          if (event_index[0] == 0)
+          {
+            //One entry, only zero. This means NO events in this bank.
+            m_loadError = true;
+            alg->getLogger().debug() << "Bank " << entry_name << " is empty.\n";
+          }
+        }
 
-    //---------------------------------------------------------------------------------------------------
-    /** Open the event_id field and validate the contents
-     *
-     * @param file :: File handle for the NeXus file
-     * @param start_event :: set to the index of the first event
-     * @param stop_event :: set to the index of the last event + 1
-     * @param event_index ::  (a list of size of # of pulses giving the index in the event list for that pulse)
-     */
-    void prepareEventId(::NeXus::File & file, size_t & start_event, size_t & stop_event, std::vector<uint64_t> & event_index)
-    {
-      // Get the list of pixel ID's
-      if (m_oldNexusFileNames)
-        file.openData("event_pixel_id");
-      else
-        file.openData("event_id");
+        return;
+      }
 
-      // By default, use all available indices
-      start_event = 0;
-      ::NeXus::Info id_info = file.getInfo();
-      // dims[0] can be negative in ISIS meaning 2^32 + dims[0]. Take that into account
-      int64_t dim0 = recalculateDataSize(id_info.dims[0]);
-      stop_event = static_cast<size_t>(dim0);
 
-      //Handle the time filtering by changing the start/end offsets.
-      for (size_t i=0; i < thisBankPulseTimes->numPulses; i++)
+      //---------------------------------------------------------------------------------------------------
+      /** Open the event_id field and validate the contents
+      *
+      * @param file :: File handle for the NeXus file
+      * @param start_event :: set to the index of the first event
+      * @param stop_event :: set to the index of the last event + 1
+      * @param event_index ::  (a list of size of # of pulses giving the index in the event list for that pulse)
+      */
+      void prepareEventId(::NeXus::File & file, size_t & start_event, size_t & stop_event, std::vector<uint64_t> & event_index)
       {
-        if (thisBankPulseTimes->pulseTimes[i] >= alg->filter_time_start)
+        // Get the list of pixel ID's
+        if (m_oldNexusFileNames)
+          file.openData("event_pixel_id");
+        else
+          file.openData("event_id");
+
+        // By default, use all available indices
+        start_event = 0;
+        ::NeXus::Info id_info = file.getInfo();
+        // dims[0] can be negative in ISIS meaning 2^32 + dims[0]. Take that into account
+        int64_t dim0 = recalculateDataSize(id_info.dims[0]);
+        stop_event = static_cast<size_t>(dim0);
+
+        //Handle the time filtering by changing the start/end offsets.
+        for (size_t i=0; i < thisBankPulseTimes->numPulses; i++)
         {
-          start_event = event_index[i];
-          break; // stop looking
+          if (thisBankPulseTimes->pulseTimes[i] >= alg->filter_time_start)
+          {
+            start_event = event_index[i];
+            break; // stop looking
+          }
         }
-      }
 
-      if (start_event > static_cast<size_t>(dim0))
-      {
-        // If the frame indexes are bad then we can't construct the times of the events properly and filtering by time
-        // will not work on this data
-        alg->getLogger().warning()
+        if (start_event > static_cast<size_t>(dim0))
+        {
+          // If the frame indexes are bad then we can't construct the times of the events properly and filtering by time
+          // will not work on this data
+          alg->getLogger().warning()
             << this->entry_name << "'s field 'event_index' seems to be invalid (start_index > than the number of events in the bank)."
             << "All events will appear in the same frame and filtering by time will not be possible on this data.\n";
-        start_event = 0;
-        stop_event =  static_cast<size_t>(dim0);
-      }
-      else
-      {
-        for (size_t i=0; i < thisBankPulseTimes->numPulses; i++)
+          start_event = 0;
+          stop_event =  static_cast<size_t>(dim0);
+        }
+        else
         {
-          if (thisBankPulseTimes->pulseTimes[i] > alg->filter_time_stop)
+          for (size_t i=0; i < thisBankPulseTimes->numPulses; i++)
           {
-            stop_event = event_index[i];
-            break;
+            if (thisBankPulseTimes->pulseTimes[i] > alg->filter_time_stop)
+            {
+              stop_event = event_index[i];
+              break;
+            }
           }
         }
-      }
-      // We are loading part - work out the event number range
-      if (alg->chunk != EMPTY_INT())
-      {
-        start_event = (alg->chunk - alg->firstChunkForBank) * alg->eventsPerChunk;
-        // Don't change stop_event for the final chunk
-        if ( start_event + alg->eventsPerChunk < stop_event ) stop_event = start_event + alg->eventsPerChunk;
-      }
+        // We are loading part - work out the event number range
+        if (alg->chunk != EMPTY_INT())
+        {
+          start_event = (alg->chunk - alg->firstChunkForBank) * alg->eventsPerChunk;
+          // Don't change stop_event for the final chunk
+          if ( start_event + alg->eventsPerChunk < stop_event ) stop_event = start_event + alg->eventsPerChunk;
+        }
 
-      // Make sure it is within range
-      if (stop_event > static_cast<size_t>(dim0))
-        stop_event = dim0;
+        // Make sure it is within range
+        if (stop_event > static_cast<size_t>(dim0))
+          stop_event = dim0;
 
-      alg->getLogger().debug() << entry_name << ": start_event " << start_event << " stop_event "<< stop_event << "\n";
+        alg->getLogger().debug() << entry_name << ": start_event " << start_event << " stop_event "<< stop_event << "\n";
 
-      return;
-    }
+        return;
+      }
 
 
-    //---------------------------------------------------------------------------------------------------
-    /** Load the event_id field, which has been open
+      //---------------------------------------------------------------------------------------------------
+      /** Load the event_id field, which has been open
       */
-    void loadEventId(::NeXus::File & file)
-    {
-      // This is the data size
-      ::NeXus::Info id_info = file.getInfo();
-      int64_t dim0 = recalculateDataSize(id_info.dims[0]);
+      void loadEventId(::NeXus::File & file)
+      {
+        // This is the data size
+        ::NeXus::Info id_info = file.getInfo();
+        int64_t dim0 = recalculateDataSize(id_info.dims[0]);
 
-      // Now we allocate the required arrays
-      m_event_id = new uint32_t[m_loadSize[0]];
+        // Now we allocate the required arrays
+        m_event_id = new uint32_t[m_loadSize[0]];
 
-      // Check that the required space is there in the file.
-      if (dim0 < m_loadSize[0]+m_loadStart[0])
-      {
-        alg->getLogger().warning() << "Entry " << entry_name << "'s event_id field is too small (" << dim0
-                                   << ") to load the desired data size (" << m_loadSize[0]+m_loadStart[0] << ").\n";
-        m_loadError = true;
-      }
+        // Check that the required space is there in the file.
+        if (dim0 < m_loadSize[0]+m_loadStart[0])
+        {
+          alg->getLogger().warning() << "Entry " << entry_name << "'s event_id field is too small (" << dim0
+            << ") to load the desired data size (" << m_loadSize[0]+m_loadStart[0] << ").\n";
+          m_loadError = true;
+        }
 
-      if (alg->getCancel()) m_loadError = true; //To allow cancelling the algorithm
+        if (alg->getCancel()) m_loadError = true; //To allow cancelling the algorithm
 
-      if (!m_loadError)
-      {
-      //Must be uint32
-      if (id_info.type == ::NeXus::UINT32)
-        file.getSlab(m_event_id, m_loadStart, m_loadSize);
-      else
-      {
-        alg->getLogger().warning() << "Entry " << entry_name << "'s event_id field is not UINT32! It will be skipped.\n";
-        m_loadError = true;
-      }
-      file.closeData();
+        if (!m_loadError)
+        {
+          //Must be uint32
+          if (id_info.type == ::NeXus::UINT32)
+            file.getSlab(m_event_id, m_loadStart, m_loadSize);
+          else
+          {
+            alg->getLogger().warning() << "Entry " << entry_name << "'s event_id field is not UINT32! It will be skipped.\n";
+            m_loadError = true;
+          }
+          file.closeData();
 
-      // determine the range of pixel ids
-      uint32_t temp;
-      for (auto i = 0; i < m_loadSize[0]; ++i)
-      {
-        temp = m_event_id[i];
-        if (temp < m_min_id) m_min_id = temp;
-        if (temp > m_max_id) m_max_id = temp;
+          // determine the range of pixel ids
+          uint32_t temp;
+          for (auto i = 0; i < m_loadSize[0]; ++i)
+          {
+            temp = m_event_id[i];
+            if (temp < m_min_id) m_min_id = temp;
+            if (temp > m_max_id) m_max_id = temp;
+          }
+
+          if ( m_min_id > static_cast<uint32_t>(alg->eventid_max) )
+          {
+            // All the detector IDs in the bank are higher than the highest 'known' (from the IDF)
+            // ID. Setting this will abort the loading of the bank.
+            m_loadError = true;
+          }
+          // fixup the maximum pixel id in the case that it's higher than the highest 'known' id
+          if (m_max_id > static_cast<uint32_t>(alg->eventid_max)) m_max_id = static_cast<uint32_t>(alg->eventid_max);
+        }
+
+        return;
       }
 
-      if ( m_min_id > static_cast<uint32_t>(alg->eventid_max) )
+      //---------------------------------------------------------------------------------------------------
+      /** Open and load the times-of-flight data
+      */
+      void loadTof(::NeXus::File & file)
       {
-        // All the detector IDs in the bank are higher than the highest 'known' (from the IDF)
-        // ID. Setting this will abort the loading of the bank.
-        m_loadError = true;
-      }
-      // fixup the maximum pixel id in the case that it's higher than the highest 'known' id
-      if (m_max_id > static_cast<uint32_t>(alg->eventid_max)) m_max_id = static_cast<uint32_t>(alg->eventid_max);
-      }
+        // Allocate the array
+        float* temp = new float[m_loadSize[0]];
+        delete [] m_event_time_of_flight;
+        m_event_time_of_flight = temp;
+
+        // Get the list of event_time_of_flight's
+        if (!m_oldNexusFileNames)
+          file.openData("event_time_offset");
+        else
+          file.openData("event_time_of_flight");
+
+        // Check that the required space is there in the file.
+        ::NeXus::Info tof_info = file.getInfo();
+        int64_t tof_dim0 = recalculateDataSize(tof_info.dims[0]);
+        if (tof_dim0 < m_loadSize[0]+m_loadStart[0])
+        {
+          alg->getLogger().warning() << "Entry " << entry_name << "'s event_time_offset field is too small to load the desired data.\n";
+          m_loadError = true;
+        }
 
-      return;
-    }
+        //Check that the type is what it is supposed to be
+        if (tof_info.type == ::NeXus::FLOAT32)
+          file.getSlab(m_event_time_of_flight, m_loadStart, m_loadSize);
+        else
+        {
+          alg->getLogger().warning() << "Entry " << entry_name << "'s event_time_offset field is not FLOAT32! It will be skipped.\n";
+          m_loadError = true;
+        }
 
-    //---------------------------------------------------------------------------------------------------
-    /** Open and load the times-of-flight data
-      */
-    void loadTof(::NeXus::File & file)
-    {
-      // Allocate the array
-      float* temp = new float[m_loadSize[0]];
-      delete [] m_event_time_of_flight;
-      m_event_time_of_flight = temp;
-
-      // Get the list of event_time_of_flight's
-      if (!m_oldNexusFileNames)
-        file.openData("event_time_offset");
-      else
-        file.openData("event_time_of_flight");
+        if (!m_loadError)
+        {
+          std::string units;
+          file.getAttr("units", units);
+          if (units != "microsecond")
+          {
+            alg->getLogger().warning() << "Entry " << entry_name << "'s event_time_offset field's units are not microsecond. It will be skipped.\n";
+            m_loadError = true;
+          }
+          file.closeData();
+        } //no error
 
-      // Check that the required space is there in the file.
-      ::NeXus::Info tof_info = file.getInfo();
-      int64_t tof_dim0 = recalculateDataSize(tof_info.dims[0]);
-      if (tof_dim0 < m_loadSize[0]+m_loadStart[0])
-      {
-        alg->getLogger().warning() << "Entry " << entry_name << "'s event_time_offset field is too small to load the desired data.\n";
-        m_loadError = true;
+        return;
       }
 
-      //Check that the type is what it is supposed to be
-      if (tof_info.type == ::NeXus::FLOAT32)
-        file.getSlab(m_event_time_of_flight, m_loadStart, m_loadSize);
-      else
+      //----------------------------------------------------------------------------------------------
+      /** Load weight of weigthed events
+      */
+      void loadEventWeights(::NeXus::File &file)
       {
-        alg->getLogger().warning() << "Entry " << entry_name << "'s event_time_offset field is not FLOAT32! It will be skipped.\n";
-        m_loadError = true;
-      }
+        try
+        {
+          // First, get info about the event_weight field in this bank
+          file.openData("event_weight");
+        }
+        catch (::NeXus::Exception&)
+        {
+          // Field not found error is most likely.
+          m_have_weight = false;
+          return;
+        }
+        // OK, we've got them
+        m_have_weight = true;
 
-      if (!m_loadError)
-      {
-        std::string units;
-        file.getAttr("units", units);
-        if (units != "microsecond")
+        // Allocate the array
+        float* temp = new float[m_loadSize[0]];
+        delete [] m_event_weight;
+        m_event_weight = temp;
+
+        ::NeXus::Info weight_info = file.getInfo();
+        int64_t weight_dim0 = recalculateDataSize(weight_info.dims[0]);
+        if (weight_dim0 < m_loadSize[0]+m_loadStart[0])
         {
-          alg->getLogger().warning() << "Entry " << entry_name << "'s event_time_offset field's units are not microsecond. It will be skipped.\n";
+          alg->getLogger().warning() << "Entry " << entry_name << "'s event_weight field is too small to load the desired data.\n";
           m_loadError = true;
         }
-        file.closeData();
-      } //no error
 
-      return;
-    }
+        // Check that the type is what it is supposed to be
+        if (weight_info.type == ::NeXus::FLOAT32)
+          file.getSlab(m_event_weight, m_loadStart, m_loadSize);
+        else
+        {
+          alg->getLogger().warning() << "Entry " << entry_name << "'s event_weight field is not FLOAT32! It will be skipped.\n";
+          m_loadError = true;
+        }
+
+        if (!m_loadError)
+        {
+          file.closeData();
+        }
 
-    //----------------------------------------------------------------------------------------------
-    /** Load weight of weigthed events
-      */
-    void loadEventWeights(::NeXus::File &file)
-    {
-      try
-      {
-        // First, get info about the event_weight field in this bank
-        file.openData("event_weight");
-      }
-      catch (::NeXus::Exception&)
-      {
-        // Field not found error is most likely.
-        m_have_weight = false;
         return;
       }
-      // OK, we've got them
-      m_have_weight = true;
-
-      // Allocate the array
-      float* temp = new float[m_loadSize[0]];
-      delete [] m_event_weight;
-      m_event_weight = temp;
 
-      ::NeXus::Info weight_info = file.getInfo();
-      int64_t weight_dim0 = recalculateDataSize(weight_info.dims[0]);
-      if (weight_dim0 < m_loadSize[0]+m_loadStart[0])
+      //---------------------------------------------------------------------------------------------------
+      void run()
       {
-        alg->getLogger().warning() << "Entry " << entry_name << "'s event_weight field is too small to load the desired data.\n";
-        m_loadError = true;
-      }
+        //The vectors we will be filling
+        std::vector<uint64_t> * event_index_ptr = new std::vector<uint64_t>();
+        std::vector<uint64_t> & event_index = *event_index_ptr;
 
-      // Check that the type is what it is supposed to be
-      if (weight_info.type == ::NeXus::FLOAT32)
-        file.getSlab(m_event_weight, m_loadStart, m_loadSize);
-      else
-      {
-        alg->getLogger().warning() << "Entry " << entry_name << "'s event_weight field is not FLOAT32! It will be skipped.\n";
-        m_loadError = true;
-      }
+        // These give the limits in each file as to which events we actually load (when filtering by time).
+        m_loadStart.resize(1, 0);
+        m_loadSize.resize(1, 0);
 
-      if (!m_loadError)
-      {
-        file.closeData();
-      }
+        // Data arrays
+        m_event_id = NULL;
+        m_event_time_of_flight = NULL;
+        m_event_weight = NULL;
 
-      return;
-    }
-
-    //---------------------------------------------------------------------------------------------------
-    void run()
-    {
-      //The vectors we will be filling
-      std::vector<uint64_t> * event_index_ptr = new std::vector<uint64_t>();
-      std::vector<uint64_t> & event_index = *event_index_ptr;
-
-      // These give the limits in each file as to which events we actually load (when filtering by time).
-      m_loadStart.resize(1, 0);
-      m_loadSize.resize(1, 0);
-
-      // Data arrays
-      m_event_id = NULL;
-      m_event_time_of_flight = NULL;
-      m_event_weight = NULL;
-
-      m_loadError = false;
-      m_have_weight = alg->m_haveWeights;
-
-      prog->report(entry_name + ": load from disk");
-
-      // Open the file
-      ::NeXus::File file(alg->m_filename);
-      try
-      {
-        // Navigate into the file
-        file.openGroup(alg->m_top_entry_name, "NXentry");
-        //Open the bankN_event group
-        file.openGroup(entry_name, entry_type);
+        m_loadError = false;
+        m_have_weight = alg->m_haveWeights;
 
-        // Load the event_index field.
-        this->loadEventIndex(file, event_index);
+        prog->report(entry_name + ": load from disk");
 
-        if (!m_loadError)
+        // Open the file
+        ::NeXus::File file(alg->m_filename);
+        try
         {
-          // Load and validate the pulse times
-          this->loadPulseTimes(file);
+          // Navigate into the file
+          file.openGroup(alg->m_top_entry_name, "NXentry");
+          //Open the bankN_event group
+          file.openGroup(entry_name, entry_type);
 
-          // The event_index should be the same length as the pulse times from DAS logs.
-          if (event_index.size() != thisBankPulseTimes->numPulses)
-            alg->getLogger().warning() << "Bank " << entry_name << " has a mismatch between the number of event_index entries and the number of pulse times in event_time_zero.\n";
+          // Load the event_index field.
+          this->loadEventIndex(file, event_index);
 
-          // Open and validate event_id field.
-          size_t start_event = 0;
-          size_t stop_event = 0;
-          this->prepareEventId(file, start_event, stop_event, event_index);
+          if (!m_loadError)
+          {
+            // Load and validate the pulse times
+            this->loadPulseTimes(file);
 
-          // These are the arguments to getSlab()
-          m_loadStart[0] = static_cast<int>(start_event);
-          m_loadSize[0] = static_cast<int>(stop_event - start_event);
+            // The event_index should be the same length as the pulse times from DAS logs.
+            if (event_index.size() != thisBankPulseTimes->numPulses)
+              alg->getLogger().warning() << "Bank " << entry_name << " has a mismatch between the number of event_index entries and the number of pulse times in event_time_zero.\n";
 
-          if ((m_loadSize[0] > 0) && (m_loadStart[0]>=0) )
-          {
-            // Load pixel IDs
-            this->loadEventId(file);
-            if (alg->getCancel()) m_loadError = true; //To allow cancelling the algorithm
+            // Open and validate event_id field.
+            size_t start_event = 0;
+            size_t stop_event = 0;
+            this->prepareEventId(file, start_event, stop_event, event_index);
 
-            // And TOF.
-            if (!m_loadError)
+            // These are the arguments to getSlab()
+            m_loadStart[0] = static_cast<int>(start_event);
+            m_loadSize[0] = static_cast<int>(stop_event - start_event);
+
+            if ((m_loadSize[0] > 0) && (m_loadStart[0]>=0) )
             {
-              this->loadTof(file);
-              if (m_have_weight)
+              // Load pixel IDs
+              this->loadEventId(file);
+              if (alg->getCancel()) m_loadError = true; //To allow cancelling the algorithm
+
+              // And TOF.
+              if (!m_loadError)
               {
-                this->loadEventWeights(file);
+                this->loadTof(file);
+                if (m_have_weight)
+                {
+                  this->loadEventWeights(file);
+                }
               }
+            } // Size is at least 1
+            else
+            {
+              // Found a size that was 0 or less; stop processing
+              m_loadError=true;
             }
-          } // Size is at least 1
-          else
-          {
-            // Found a size that was 0 or less; stop processing
-            m_loadError=true;
-          }
 
-        } //no error
+          } //no error
 
-      } // try block
-      catch (std::exception & e)
-      {
-        alg->getLogger().error() << "Error while loading bank " << entry_name << ":" << std::endl;
-        alg->getLogger().error() << e.what() << std::endl;
-        m_loadError = true;
-      }
-      catch (...)
-      {
-        alg->getLogger().error() << "Unspecified error while loading bank " << entry_name << std::endl;
-        m_loadError = true;
-      }
+        } // try block
+        catch (std::exception & e)
+        {
+          alg->getLogger().error() << "Error while loading bank " << entry_name << ":" << std::endl;
+          alg->getLogger().error() << e.what() << std::endl;
+          m_loadError = true;
+        }
+        catch (...)
+        {
+          alg->getLogger().error() << "Unspecified error while loading bank " << entry_name << std::endl;
+          m_loadError = true;
+        }
 
-      //Close up the file even if errors occured.
-      file.closeGroup();
-      file.close();
+        //Close up the file even if errors occured.
+        file.closeGroup();
+        file.close();
 
-      //Abort if anything failed
-      if (m_loadError)
-      {
-        prog->reportIncrement(4, entry_name + ": skipping");
-        delete [] m_event_id;
-        delete [] m_event_time_of_flight;
-        if (m_have_weight)
+        //Abort if anything failed
+        if (m_loadError)
         {
-          delete [] m_event_weight;
+          prog->reportIncrement(4, entry_name + ": skipping");
+          delete [] m_event_id;
+          delete [] m_event_time_of_flight;
+          if (m_have_weight)
+          {
+            delete [] m_event_weight;
+          }
+          delete event_index_ptr;
+          return;
         }
-        delete event_index_ptr;
-        return;
-      }
 
-      // No error? Launch a new task to process that data.
-      size_t numEvents = m_loadSize[0];
-      size_t startAt = m_loadStart[0];
+        // No error? Launch a new task to process that data.
+        size_t numEvents = m_loadSize[0];
+        size_t startAt = m_loadStart[0];
 
-      // convert things to shared_arrays
-      boost::shared_array<uint32_t> event_id_shrd(m_event_id);
-      boost::shared_array<float> event_time_of_flight_shrd(m_event_time_of_flight);
-      boost::shared_array<float> event_weight_shrd(m_event_weight);
-      boost::shared_ptr<std::vector<uint64_t> > event_index_shrd(event_index_ptr);
+        // convert things to shared_arrays
+        boost::shared_array<uint32_t> event_id_shrd(m_event_id);
+        boost::shared_array<float> event_time_of_flight_shrd(m_event_time_of_flight);
+        boost::shared_array<float> event_weight_shrd(m_event_weight);
+        boost::shared_ptr<std::vector<uint64_t> > event_index_shrd(event_index_ptr);
 
-      // schedule the job to generate the event lists
-      auto mid_id = m_max_id;
-      if (alg->splitProcessing)
-        mid_id = (m_max_id + m_min_id) / 2;
+        // schedule the job to generate the event lists
+        auto mid_id = m_max_id;
+        if (alg->splitProcessing)
+          mid_id = (m_max_id + m_min_id) / 2;
 
-      ProcessBankData * newTask1 = new ProcessBankData(alg, entry_name, prog,scheduler,
+        ProcessBankData * newTask1 = new ProcessBankData(alg, entry_name, prog,scheduler,
           event_id_shrd, event_time_of_flight_shrd, numEvents, startAt, event_index_shrd,
           thisBankPulseTimes, m_have_weight, event_weight_shrd,
           m_min_id, mid_id);
-      scheduler->push(newTask1);
-      if (alg->splitProcessing)
+        scheduler->push(newTask1);
+        if (alg->splitProcessing)
+        {
+          ProcessBankData * newTask2 = new ProcessBankData(alg, entry_name, prog,scheduler,
+            event_id_shrd, event_time_of_flight_shrd, numEvents, startAt, event_index_shrd,
+            thisBankPulseTimes, m_have_weight, event_weight_shrd,
+            (mid_id+1), m_max_id);
+          scheduler->push(newTask2);
+        }
+      }
+
+      //---------------------------------------------------------------------------------------------------
+      /**
+      * Interpret the value describing the number of events. If the number is positive return it unchanged.
+      * If the value is negative (can happen at ISIS) add 2^32 to it.
+      * @param size :: The size of events value.
+      */
+      int64_t recalculateDataSize(const int64_t& size)
       {
-        ProcessBankData * newTask2 = new ProcessBankData(alg, entry_name, prog,scheduler,
-                                             event_id_shrd, event_time_of_flight_shrd, numEvents, startAt, event_index_shrd,
-                                             thisBankPulseTimes, m_have_weight, event_weight_shrd,
-                                             (mid_id+1), m_max_id);
-        scheduler->push(newTask2);
+        if (size < 0)
+        {
+          const int64_t shift = int64_t(1) << 32;
+          return shift + size;
+        }
+        return size;
       }
-    }
 
-    //---------------------------------------------------------------------------------------------------
-    /**
-    * Interpret the value describing the number of events. If the number is positive return it unchanged.
-    * If the value is negative (can happen at ISIS) add 2^32 to it.
-    * @param size :: The size of events value.
+    private:
+      /// Algorithm being run
+      LoadEventNexus * alg;
+      /// NXS path to bank
+      std::string entry_name;
+      /// NXS type
+      std::string entry_type;
+      /// Vector where (index = pixel ID+pixelID_to_wi_offset), value = workspace index)
+      const std::vector<size_t> & pixelID_to_wi_vector;
+      /// Offset in the pixelID_to_wi_vector to use.
+      detid_t pixelID_to_wi_offset;
+      /// Progress reporting
+      Progress * prog;
+      /// ThreadScheduler running this task
+      ThreadScheduler * scheduler;
+      /// Object with the pulse times for this bank
+      boost::shared_ptr<BankPulseTimes> thisBankPulseTimes;
+      /// Did we get an error in loading
+      bool m_loadError;
+      /// Old names in the file?
+      bool m_oldNexusFileNames;
+      /// Index to load start at in the file
+      std::vector<int> m_loadStart;
+      /// How much to load in the file
+      std::vector<int> m_loadSize;
+      /// Event pixel ID data
+      uint32_t * m_event_id;
+      /// Minimum pixel ID in this data
+      uint32_t m_min_id;
+      /// Maximum pixel ID in this data
+      uint32_t m_max_id;
+      /// TOF data
+      float * m_event_time_of_flight;
+      /// Flag for simulated data
+      bool m_have_weight;
+      /// Event weights
+      float * m_event_weight;
+    }; // END-DEF-CLASS LoadBankFromDiskTask
+
+
+    //===============================================================================================
+    // LoadEventNexus
+    //===============================================================================================
+
+    //----------------------------------------------------------------------------------------------
+    /** Empty default constructor
     */
-    int64_t recalculateDataSize(const int64_t& size)
+    LoadEventNexus::LoadEventNexus() : IFileLoader<Kernel::NexusDescriptor>(),
+      discarded_events(0), event_id_is_spec(false)
     {
-      if (size < 0)
-      {
-        const int64_t shift = int64_t(1) << 32;
-        return shift + size;
-      }
-      return size;
     }
 
-  private:
-    /// Algorithm being run
-    LoadEventNexus * alg;
-    /// NXS path to bank
-    std::string entry_name;
-    /// NXS type
-    std::string entry_type;
-    /// Vector where (index = pixel ID+pixelID_to_wi_offset), value = workspace index)
-    const std::vector<size_t> & pixelID_to_wi_vector;
-    /// Offset in the pixelID_to_wi_vector to use.
-    detid_t pixelID_to_wi_offset;
-    /// Progress reporting
-    Progress * prog;
-    /// ThreadScheduler running this task
-    ThreadScheduler * scheduler;
-    /// Object with the pulse times for this bank
-    boost::shared_ptr<BankPulseTimes> thisBankPulseTimes;
-    /// Did we get an error in loading
-    bool m_loadError;
-    /// Old names in the file?
-    bool m_oldNexusFileNames;
-    /// Index to load start at in the file
-    std::vector<int> m_loadStart;
-    /// How much to load in the file
-    std::vector<int> m_loadSize;
-    /// Event pixel ID data
-    uint32_t * m_event_id;
-    /// Minimum pixel ID in this data
-    uint32_t m_min_id;
-    /// Maximum pixel ID in this data
-    uint32_t m_max_id;
-    /// TOF data
-    float * m_event_time_of_flight;
-    /// Flag for simulated data
-    bool m_have_weight;
-    /// Event weights
-    float * m_event_weight;
-  }; // END-DEF-CLASS LoadBankFromDiskTask
-
-
-  //===============================================================================================
-  // LoadEventNexus
-  //===============================================================================================
-
-  //----------------------------------------------------------------------------------------------
-  /** Empty default constructor
-    */
-  LoadEventNexus::LoadEventNexus() : IFileLoader<Kernel::NexusDescriptor>(),
-    discarded_events(0), event_id_is_spec(false)
-  {
-  }
+    //----------------------------------------------------------------------------------------------
+    /** Destructor */
+    LoadEventNexus::~LoadEventNexus()
+    {
+    }
 
-  //----------------------------------------------------------------------------------------------
-  /** Destructor */
-  LoadEventNexus::~LoadEventNexus()
-  {
-  }
-
-  //----------------------------------------------------------------------------------------------
-  /**
-   * Return the confidence with with this algorithm can load the file
-   * @param descriptor A descriptor for the file
-   * @returns An integer specifying the confidence level. 0 indicates it will not be used
-   */
-  int LoadEventNexus::confidence(Kernel::NexusDescriptor & descriptor) const
-  {
-    int confidence(0);
-    if(descriptor.classTypeExists("NXevent_data"))
+    //----------------------------------------------------------------------------------------------
+    /**
+    * Return the confidence with with this algorithm can load the file
+    * @param descriptor A descriptor for the file
+    * @returns An integer specifying the confidence level. 0 indicates it will not be used
+    */
+    int LoadEventNexus::confidence(Kernel::NexusDescriptor & descriptor) const
     {
-      if(descriptor.pathOfTypeExists("/entry", "NXentry") || descriptor.pathOfTypeExists("/raw_data_1", "NXentry"))
+      int confidence(0);
+      if(descriptor.classTypeExists("NXevent_data"))
       {
-        confidence = 80;
+        if(descriptor.pathOfTypeExists("/entry", "NXentry") || descriptor.pathOfTypeExists("/raw_data_1", "NXentry"))
+        {
+          confidence = 80;
+        }
       }
+      return confidence;
     }
-    return confidence;
-  }
 
-  //----------------------------------------------------------------------------------------------
-  /** Initialisation method.
-    */
-  void LoadEventNexus::init()
-  {
-    std::vector<std::string> exts;
-    exts.push_back("_event.nxs");
-    exts.push_back(".nxs.h5");
-    exts.push_back(".nxs");
-    this->declareProperty(new FileProperty("Filename", "", FileProperty::Load, exts),
-                          "The name of the Event NeXus file to read, including its full or relative path. "
-                          "The file name is typically of the form INST_####_event.nxs (N.B. case sensitive if running on Linux)." );
-
-    this->declareProperty(
-          new WorkspaceProperty<IEventWorkspace>("OutputWorkspace", "", Direction::Output),
-          "The name of the output EventWorkspace in which to load the EventNexus file." );
-
-    declareProperty(
-          new PropertyWithValue<double>("FilterByTofMin", EMPTY_DBL(), Direction::Input),
-          "Optional: To exclude events that do not fall within a range of times-of-flight. "\
-          "This is the minimum accepted value in microseconds. Keep blank to load all events." );
-
-    declareProperty(
-          new PropertyWithValue<double>("FilterByTofMax", EMPTY_DBL(), Direction::Input),
-          "Optional: To exclude events that do not fall within a range of times-of-flight. "\
-          "This is the maximum accepted value in microseconds. Keep blank to load all events." );
-
-    declareProperty(
-          new PropertyWithValue<double>("FilterByTimeStart", EMPTY_DBL(), Direction::Input),
-          "Optional: To only include events after the provided start time, in seconds (relative to the start of the run).");
-
-    declareProperty(
-          new PropertyWithValue<double>("FilterByTimeStop", EMPTY_DBL(), Direction::Input),
-          "Optional: To only include events before the provided stop time, in seconds (relative to the start of the run).");
-
-    std::string grp1 = "Filter Events";
-    setPropertyGroup("FilterByTofMin", grp1);
-    setPropertyGroup("FilterByTofMax", grp1);
-    setPropertyGroup("FilterByTimeStart", grp1);
-    setPropertyGroup("FilterByTimeStop", grp1);
-
-    declareProperty(
-          new PropertyWithValue<string>("NXentryName", "", Direction::Input),
-    "Optional: Name of the NXentry to load if it's not the default.");
-
-    declareProperty(
-          new ArrayProperty<string>("BankName", Direction::Input),
-          "Optional: To only include events from one bank. Any bank whose name does not match the given string will have no events.");
-
-    declareProperty(
-          new PropertyWithValue<bool>("SingleBankPixelsOnly", true, Direction::Input),
-          "Optional: Only applies if you specified a single bank to load with BankName. "
-          "Only pixels in the specified bank will be created if true; all of the instrument's pixels will be created otherwise.");
-    setPropertySettings("SingleBankPixelsOnly", new VisibleWhenProperty("BankName", IS_NOT_DEFAULT) );
-
-    std::string grp2 = "Loading a Single Bank";
-    setPropertyGroup("BankName", grp2);
-    setPropertyGroup("SingleBankPixelsOnly", grp2);
-
-    declareProperty(
-          new PropertyWithValue<bool>("Precount", true, Direction::Input),
-          "Pre-count the number of events in each pixel before allocating memory (optional, default False). "
-          "This can significantly reduce memory use and memory fragmentation; it may also speed up loading.");
-
-    declareProperty(
-          new PropertyWithValue<double>("CompressTolerance", -1.0, Direction::Input),
-          "Run CompressEvents while loading (optional, leave blank or negative to not do). "
-          "This specified the tolerance to use (in microseconds) when compressing.");
-
-    auto mustBePositive = boost::make_shared<BoundedValidator<int> >();
-    mustBePositive->setLower(1);
-    declareProperty("ChunkNumber", EMPTY_INT(), mustBePositive,
-                    "If loading the file by sections ('chunks'), this is the section number of this execution of the algorithm.");
-    declareProperty("TotalChunks", EMPTY_INT(), mustBePositive,
-                    "If loading the file by sections ('chunks'), this is the total number of sections.");
-    // TotalChunks is only meaningful if ChunkNumber is set
-    // Would be nice to be able to restrict ChunkNumber to be <= TotalChunks at validation
-    setPropertySettings("TotalChunks", new VisibleWhenProperty("ChunkNumber", IS_NOT_DEFAULT));
-
-    std::string grp3 = "Reduce Memory Use";
-    setPropertyGroup("Precount", grp3);
-    setPropertyGroup("CompressTolerance", grp3);
-    setPropertyGroup("ChunkNumber", grp3);
-    setPropertyGroup("TotalChunks", grp3);
-
-    declareProperty(
-          new PropertyWithValue<bool>("LoadMonitors", false, Direction::Input),
-          "Load the monitors from the file (optional, default False).");
-
-    declareProperty(new PropertyWithValue<bool>("MonitorsAsEvents", false, Direction::Input),
-                    "If present, load the monitors as events. '''WARNING:''' WILL SIGNIFICANTLY INCREASE MEMORY USAGE (optional, default False). ");
-
-    declareProperty(
-          new PropertyWithValue<double>("FilterMonByTofMin", EMPTY_DBL(), Direction::Input),
-          "Optional: To exclude events from monitors that do not fall within a range of times-of-flight. "\
-          "This is the minimum accepted value in microseconds." );
-
-    declareProperty(
-          new PropertyWithValue<double>("FilterMonByTofMax", EMPTY_DBL(), Direction::Input),
-          "Optional: To exclude events from monitors that do not fall within a range of times-of-flight. "\
-          "This is the maximum accepted value in microseconds." );
-
-    declareProperty(
-          new PropertyWithValue<double>("FilterMonByTimeStart", EMPTY_DBL(), Direction::Input),
-          "Optional: To only include events from monitors after the provided start time, in seconds (relative to the start of the run).");
-
-    declareProperty(
-          new PropertyWithValue<double>("FilterMonByTimeStop", EMPTY_DBL(), Direction::Input),
-          "Optional: To only include events from monitors before the provided stop time, in seconds (relative to the start of the run).");
-
-    setPropertySettings("MonitorsAsEvents", new VisibleWhenProperty("LoadMonitors", IS_EQUAL_TO, "1") );
-    IPropertySettings *asEventsIsOn = new VisibleWhenProperty("MonitorsAsEvents", IS_EQUAL_TO, "1");
-    setPropertySettings("FilterMonByTofMin", asEventsIsOn);
-    setPropertySettings("FilterMonByTofMax", asEventsIsOn->clone());
-    setPropertySettings("FilterMonByTimeStart", asEventsIsOn->clone());
-    setPropertySettings("FilterMonByTimeStop", asEventsIsOn->clone());
-
-    std::string grp4 = "Monitors";
-    setPropertyGroup("LoadMonitors", grp4);
-    setPropertyGroup("MonitorsAsEvents", grp4);
-    setPropertyGroup("FilterMonByTofMin", grp4);
-    setPropertyGroup("FilterMonByTofMax", grp4);
-    setPropertyGroup("FilterMonByTimeStart", grp4);
-    setPropertyGroup("FilterMonByTimeStop", grp4);
-
-    declareProperty(
-          new PropertyWithValue<bool>("MetaDataOnly", false, Direction::Input),
-          "If true, only the meta data and sample logs will be loaded.");
-
-    declareProperty(
-          new PropertyWithValue<bool>("LoadLogs", true, Direction::Input),
-          "Load the Sample/DAS logs from the file (default True).");
-  }
-
-  //----------------------------------------------------------------------------------------------
-  /** set the name of the top level NXentry m_top_entry_name
+    //----------------------------------------------------------------------------------------------
+    /** Initialisation method.
     */
-  void LoadEventNexus::setTopEntryName()
-  {
-    std::string nxentryProperty = getProperty("NXentryName");
-    if (nxentryProperty.size()>0)
+    void LoadEventNexus::init()
     {
-      m_top_entry_name = nxentryProperty;
-      return;
+      std::vector<std::string> exts;
+      exts.push_back("_event.nxs");
+      exts.push_back(".nxs.h5");
+      exts.push_back(".nxs");
+      this->declareProperty(new FileProperty("Filename", "", FileProperty::Load, exts),
+        "The name of the Event NeXus file to read, including its full or relative path. "
+        "The file name is typically of the form INST_####_event.nxs (N.B. case sensitive if running on Linux)." );
+
+      this->declareProperty(
+        new WorkspaceProperty<IEventWorkspace>("OutputWorkspace", "", Direction::Output),
+        "The name of the output EventWorkspace in which to load the EventNexus file." );
+
+      declareProperty(
+        new PropertyWithValue<double>("FilterByTofMin", EMPTY_DBL(), Direction::Input),
+        "Optional: To exclude events that do not fall within a range of times-of-flight. "\
+        "This is the minimum accepted value in microseconds. Keep blank to load all events." );
+
+      declareProperty(
+        new PropertyWithValue<double>("FilterByTofMax", EMPTY_DBL(), Direction::Input),
+        "Optional: To exclude events that do not fall within a range of times-of-flight. "\
+        "This is the maximum accepted value in microseconds. Keep blank to load all events." );
+
+      declareProperty(
+        new PropertyWithValue<double>("FilterByTimeStart", EMPTY_DBL(), Direction::Input),
+        "Optional: To only include events after the provided start time, in seconds (relative to the start of the run).");
+
+      declareProperty(
+        new PropertyWithValue<double>("FilterByTimeStop", EMPTY_DBL(), Direction::Input),
+        "Optional: To only include events before the provided stop time, in seconds (relative to the start of the run).");
+
+      std::string grp1 = "Filter Events";
+      setPropertyGroup("FilterByTofMin", grp1);
+      setPropertyGroup("FilterByTofMax", grp1);
+      setPropertyGroup("FilterByTimeStart", grp1);
+      setPropertyGroup("FilterByTimeStop", grp1);
+
+      declareProperty(
+        new PropertyWithValue<string>("NXentryName", "", Direction::Input),
+        "Optional: Name of the NXentry to load if it's not the default.");
+
+      declareProperty(
+        new ArrayProperty<string>("BankName", Direction::Input),
+        "Optional: To only include events from one bank. Any bank whose name does not match the given string will have no events.");
+
+      declareProperty(
+        new PropertyWithValue<bool>("SingleBankPixelsOnly", true, Direction::Input),
+        "Optional: Only applies if you specified a single bank to load with BankName. "
+        "Only pixels in the specified bank will be created if true; all of the instrument's pixels will be created otherwise.");
+      setPropertySettings("SingleBankPixelsOnly", new VisibleWhenProperty("BankName", IS_NOT_DEFAULT) );
+
+      std::string grp2 = "Loading a Single Bank";
+      setPropertyGroup("BankName", grp2);
+      setPropertyGroup("SingleBankPixelsOnly", grp2);
+
+      declareProperty(
+        new PropertyWithValue<bool>("Precount", true, Direction::Input),
+        "Pre-count the number of events in each pixel before allocating memory (optional, default False). "
+        "This can significantly reduce memory use and memory fragmentation; it may also speed up loading.");
+
+      declareProperty(
+        new PropertyWithValue<double>("CompressTolerance", -1.0, Direction::Input),
+        "Run CompressEvents while loading (optional, leave blank or negative to not do). "
+        "This specified the tolerance to use (in microseconds) when compressing.");
+
+      auto mustBePositive = boost::make_shared<BoundedValidator<int> >();
+      mustBePositive->setLower(1);
+      declareProperty("ChunkNumber", EMPTY_INT(), mustBePositive,
+        "If loading the file by sections ('chunks'), this is the section number of this execution of the algorithm.");
+      declareProperty("TotalChunks", EMPTY_INT(), mustBePositive,
+        "If loading the file by sections ('chunks'), this is the total number of sections.");
+      // TotalChunks is only meaningful if ChunkNumber is set
+      // Would be nice to be able to restrict ChunkNumber to be <= TotalChunks at validation
+      setPropertySettings("TotalChunks", new VisibleWhenProperty("ChunkNumber", IS_NOT_DEFAULT));
+
+      std::string grp3 = "Reduce Memory Use";
+      setPropertyGroup("Precount", grp3);
+      setPropertyGroup("CompressTolerance", grp3);
+      setPropertyGroup("ChunkNumber", grp3);
+      setPropertyGroup("TotalChunks", grp3);
+
+      declareProperty(
+        new PropertyWithValue<bool>("LoadMonitors", false, Direction::Input),
+        "Load the monitors from the file (optional, default False).");
+
+      declareProperty(new PropertyWithValue<bool>("MonitorsAsEvents", false, Direction::Input),
+        "If present, load the monitors as events. '''WARNING:''' WILL SIGNIFICANTLY INCREASE MEMORY USAGE (optional, default False). ");
+
+      declareProperty(
+        new PropertyWithValue<double>("FilterMonByTofMin", EMPTY_DBL(), Direction::Input),
+        "Optional: To exclude events from monitors that do not fall within a range of times-of-flight. "\
+        "This is the minimum accepted value in microseconds." );
+
+      declareProperty(
+        new PropertyWithValue<double>("FilterMonByTofMax", EMPTY_DBL(), Direction::Input),
+        "Optional: To exclude events from monitors that do not fall within a range of times-of-flight. "\
+        "This is the maximum accepted value in microseconds." );
+
+      declareProperty(
+        new PropertyWithValue<double>("FilterMonByTimeStart", EMPTY_DBL(), Direction::Input),
+        "Optional: To only include events from monitors after the provided start time, in seconds (relative to the start of the run).");
+
+      declareProperty(
+        new PropertyWithValue<double>("FilterMonByTimeStop", EMPTY_DBL(), Direction::Input),
+        "Optional: To only include events from monitors before the provided stop time, in seconds (relative to the start of the run).");
+
+      setPropertySettings("MonitorsAsEvents", new VisibleWhenProperty("LoadMonitors", IS_EQUAL_TO, "1") );
+      IPropertySettings *asEventsIsOn = new VisibleWhenProperty("MonitorsAsEvents", IS_EQUAL_TO, "1");
+      setPropertySettings("FilterMonByTofMin", asEventsIsOn);
+      setPropertySettings("FilterMonByTofMax", asEventsIsOn->clone());
+      setPropertySettings("FilterMonByTimeStart", asEventsIsOn->clone());
+      setPropertySettings("FilterMonByTimeStop", asEventsIsOn->clone());
+
+      std::string grp4 = "Monitors";
+      setPropertyGroup("LoadMonitors", grp4);
+      setPropertyGroup("MonitorsAsEvents", grp4);
+      setPropertyGroup("FilterMonByTofMin", grp4);
+      setPropertyGroup("FilterMonByTofMax", grp4);
+      setPropertyGroup("FilterMonByTimeStart", grp4);
+      setPropertyGroup("FilterMonByTimeStop", grp4);
+
+			declareProperty("SpectrumMin",(int32_t)EMPTY_INT(), mustBePositive, 
+			"The number of the first spectrum to read.");
+		declareProperty("SpectrumMax",(int32_t)EMPTY_INT(), mustBePositive, 
+			"The number of the last spectrum to read.");
+		declareProperty(new ArrayProperty<int32_t>("SpectrumList"),	
+			"A comma-separated list of individual spectra to read.");
+
+		declareProperty(
+        new PropertyWithValue<bool>("MetaDataOnly", false, Direction::Input),
+        "If true, only the meta data and sample logs will be loaded.");
+
+      declareProperty(
+        new PropertyWithValue<bool>("LoadLogs", true, Direction::Input),
+        "Load the Sample/DAS logs from the file (default True).");
     }
-    typedef std::map<std::string,std::string> string_map_t;
-    try
+
+    //----------------------------------------------------------------------------------------------
+    /** set the name of the top level NXentry m_top_entry_name
+    */
+    void LoadEventNexus::setTopEntryName()
     {
-      string_map_t::const_iterator it;
-      ::NeXus::File file = ::NeXus::File(m_filename);
-      string_map_t entries = file.getEntries();
+      std::string nxentryProperty = getProperty("NXentryName");
+      if (nxentryProperty.size()>0)
+      {
+        m_top_entry_name = nxentryProperty;
+        return;
+      }
+      typedef std::map<std::string,std::string> string_map_t;
+      try
+      {
+        string_map_t::const_iterator it;
+        ::NeXus::File file = ::NeXus::File(m_filename);
+        string_map_t entries = file.getEntries();
 
-      // Choose the first entry as the default
-      m_top_entry_name = entries.begin()->first;
+        // Choose the first entry as the default
+        m_top_entry_name = entries.begin()->first;
 
-      for (it = entries.begin(); it != entries.end(); ++it)
-      {
-        if ( ((it->first == "entry") || (it->first == "raw_data_1")) && (it->second == "NXentry") )
+        for (it = entries.begin(); it != entries.end(); ++it)
         {
-          m_top_entry_name = it->first;
-          break;
+          if ( ((it->first == "entry") || (it->first == "raw_data_1")) && (it->second == "NXentry") )
+          {
+            m_top_entry_name = it->first;
+            break;
+          }
         }
       }
+      catch(const std::exception&)
+      {
+        g_log.error() << "Unable to determine name of top level NXentry - assuming \"entry\"." << std::endl;
+        m_top_entry_name = "entry";
+      }
     }
-    catch(const std::exception&)
-    {
-      g_log.error() << "Unable to determine name of top level NXentry - assuming \"entry\"." << std::endl;
-      m_top_entry_name = "entry";
-    }
-  }
 
-  //------------------------------------------------------------------------------------------------
-  /** Executes the algorithm. Reading in the file and creating and populating
-   *  the output workspace
-   */
-  void LoadEventNexus::exec()
-  {
-  // Retrieve the filename from the properties
-  m_filename = getPropertyValue("Filename");
+    //------------------------------------------------------------------------------------------------
+    /** Executes the algorithm. Reading in the file and creating and populating
+    *  the output workspace
+    */
+    void LoadEventNexus::exec()
+    {
+      // Retrieve the filename from the properties
+      m_filename = getPropertyValue("Filename");
 
-  precount = getProperty("Precount");
-  compressTolerance = getProperty("CompressTolerance");
+      precount = getProperty("Precount");
+      compressTolerance = getProperty("CompressTolerance");
 
-  loadlogs = getProperty("LoadLogs");
+      loadlogs = getProperty("LoadLogs");
 
-  // Check to see if the monitors need to be loaded later
-  bool load_monitors = this->getProperty("LoadMonitors");
-  setTopEntryName();
+      // Check to see if the monitors need to be loaded later
+      bool load_monitors = this->getProperty("LoadMonitors");
+      setTopEntryName();
 
-  //Initialize progress reporting.
-  int reports = 3;
-  if (load_monitors)
-    reports++;
-  Progress prog(this,0.0,0.3,  reports);
-  
-  // Load the detector events
-  WS = createEmptyEventWorkspace(); // Algorithm currently relies on an object-level workspace ptr
-  loadEvents(&prog, false); // Do not load monitor blocks
+      //Initialize progress reporting.
+      int reports = 3;
+      if (load_monitors)
+        reports++;
+      Progress prog(this,0.0,0.3,  reports);
 
-  if ( discarded_events > 0 )
-  {
-    g_log.information() << discarded_events
-                        << " events were encountered coming from pixels which are not in the Instrument Definition File."
-                           "These events were discarded.\n";
-  }
-
-  // If the run was paused at any point, filter out those events (SNS only, I think)
-  filterDuringPause(WS);
-
-  //add filename
-  WS->mutableRun().addProperty("Filename",m_filename);
-  //Save output
-  this->setProperty<IEventWorkspace_sptr>("OutputWorkspace", WS);
-  // Load the monitors
-  if (load_monitors)
-  {
-    prog.report("Loading monitors");
-    const bool eventMonitors = getProperty("MonitorsAsEvents");
-    if( eventMonitors && this->hasEventMonitors() )
-    {
-      // Note the reuse of the WS member variable below. Means I need to grab a copy of its current value.
-      auto dataWS = WS;
+      // Load the detector events
       WS = createEmptyEventWorkspace(); // Algorithm currently relies on an object-level workspace ptr
-      //add filename
-      WS->mutableRun().addProperty("Filename",m_filename);
-      // Perform the load
-      loadEvents(&prog, true);
-      std::string mon_wsname = this->getProperty("OutputWorkspace");
-      mon_wsname.append("_monitors");
-      this->declareProperty(new WorkspaceProperty<IEventWorkspace>
-                            ("MonitorWorkspace", mon_wsname, Direction::Output), "Monitors from the Event NeXus file");
-      this->setProperty<IEventWorkspace_sptr>("MonitorWorkspace", WS);
-      // Set the internal monitor workspace pointer as well
-      dataWS->setMonitorWorkspace(WS);
+      loadEvents(&prog, false); // Do not load monitor blocks
+
+      if ( discarded_events > 0 )
+      {
+        g_log.information() << discarded_events
+          << " events were encountered coming from pixels which are not in the Instrument Definition File."
+          "These events were discarded.\n";
+      }
+
       // If the run was paused at any point, filter out those events (SNS only, I think)
       filterDuringPause(WS);
-    }
-    else
-    {
-      this->runLoadMonitors();
-    }
-  }
 
-  // Some memory feels like it sticks around (on Linux). Free it.
-  MemoryManager::Instance().releaseFreeMemory();
+      //add filename
+      WS->mutableRun().addProperty("Filename",m_filename);
+      //Save output
+      this->setProperty<IEventWorkspace_sptr>("OutputWorkspace", WS);
+      // Load the monitors
+      if (load_monitors)
+      {
+        prog.report("Loading monitors");
+        const bool eventMonitors = getProperty("MonitorsAsEvents");
+        if( eventMonitors && this->hasEventMonitors() )
+        {
+          // Note the reuse of the WS member variable below. Means I need to grab a copy of its current value.
+          auto dataWS = WS;
+          WS = createEmptyEventWorkspace(); // Algorithm currently relies on an object-level workspace ptr
+          //add filename
+          WS->mutableRun().addProperty("Filename",m_filename);
+          // Perform the load
+          loadEvents(&prog, true);
+          std::string mon_wsname = this->getProperty("OutputWorkspace");
+          mon_wsname.append("_monitors");
+          this->declareProperty(new WorkspaceProperty<IEventWorkspace>
+            ("MonitorWorkspace", mon_wsname, Direction::Output), "Monitors from the Event NeXus file");
+          this->setProperty<IEventWorkspace_sptr>("MonitorWorkspace", WS);
+          // Set the internal monitor workspace pointer as well
+          dataWS->setMonitorWorkspace(WS);
+          // If the run was paused at any point, filter out those events (SNS only, I think)
+          filterDuringPause(WS);
+        }
+        else
+        {
+          this->runLoadMonitors();
+        }
+      }
 
-  return;
-}
+      // Some memory feels like it sticks around (on Linux). Free it.
+      MemoryManager::Instance().releaseFreeMemory();
 
+      return;
+    }
 
 
-//-----------------------------------------------------------------------------
-/** Generate a look-up table where the index = the pixel ID of an event
- * and the value = a pointer to the EventList in the workspace
- * @param vectors :: the array to create the map on
- */
-template <class T>
-void LoadEventNexus::makeMapToEventLists(std::vector<T> & vectors)
-{
-  if( this->event_id_is_spec )
-  {
-    // Find max spectrum no
-    Axis *ax1 = WS->getAxis(1);
-    specid_t maxSpecNo = -std::numeric_limits<specid_t>::max(); // So that any number will be greater than this
-    for (size_t i=0; i < ax1->length(); i++)
-    {
-      specid_t spec = ax1->spectraNo(i);
-      if (spec > maxSpecNo) maxSpecNo = spec;
-    }
 
-    // These are used by the bank loader to figure out where to put the events
-    // The index of eventVectors is a spectrum number so it is simply resized to the maximum
-    // possible spectrum number
-    eventid_max = maxSpecNo;
-    vectors.resize(maxSpecNo+1, NULL);
-    for(size_t i = 0; i < WS->getNumberHistograms(); ++i)
+    //-----------------------------------------------------------------------------
+    /** Generate a look-up table where the index = the pixel ID of an event
+    * and the value = a pointer to the EventList in the workspace
+    * @param vectors :: the array to create the map on
+    */
+    template <class T>
+    void LoadEventNexus::makeMapToEventLists(std::vector<T> & vectors)
     {
-      const ISpectrum * spec = WS->getSpectrum(i);
-      if(spec)
+      if( this->event_id_is_spec )
       {
-        getEventsFrom(WS->getEventList(i), vectors[spec->getSpectrumNo()]);
+        // Find max spectrum no
+        Axis *ax1 = WS->getAxis(1);
+        specid_t maxSpecNo = -std::numeric_limits<specid_t>::max(); // So that any number will be greater than this
+        for (size_t i=0; i < ax1->length(); i++)
+        {
+          specid_t spec = ax1->spectraNo(i);
+          if (spec > maxSpecNo) maxSpecNo = spec;
+        }
+
+        // These are used by the bank loader to figure out where to put the events
+        // The index of eventVectors is a spectrum number so it is simply resized to the maximum
+        // possible spectrum number
+        eventid_max = maxSpecNo;
+        vectors.resize(maxSpecNo+1, NULL);
+        for(size_t i = 0; i < WS->getNumberHistograms(); ++i)
+        {
+          const ISpectrum * spec = WS->getSpectrum(i);
+          if(spec)
+          {
+            getEventsFrom(WS->getEventList(i), vectors[spec->getSpectrumNo()]);
+          }
+        }
       }
-    }
-  }
-  else
-  {
-    // To avoid going out of range in the vector, this is the MAX index that can go into it
-    eventid_max = static_cast<int32_t>(pixelID_to_wi_vector.size()) + pixelID_to_wi_offset;
-    
-    // Make an array where index = pixel ID
-    // Set the value to NULL by default
-    vectors.resize(eventid_max+1, NULL);
-
-    for (size_t j=size_t(pixelID_to_wi_offset); j<pixelID_to_wi_vector.size(); j++)
-    {
-      size_t wi = pixelID_to_wi_vector[j];
-      // Save a POINTER to the vector
-      if ( wi < WS->getNumberHistograms() )
+      else
       {
-        getEventsFrom(WS->getEventList(wi), vectors[j-pixelID_to_wi_offset]);
-      }
-    }
-  }
-}
+        // To avoid going out of range in the vector, this is the MAX index that can go into it
+        eventid_max = static_cast<int32_t>(pixelID_to_wi_vector.size()) + pixelID_to_wi_offset;
 
-/**
- * Get the number of events in the currently opened group.
- *
- * @param file The handle to the nexus file opened to the group to look at.
- * @param hasTotalCounts Whether to try looking at the total_counts field. This
- * variable will be changed if the field is not there.
- * @param oldNeXusFileNames Whether to try using old names. This variable will
- * be changed if it is determined that old names are being used.
- *
- * @return The number of events.
- */
-std::size_t numEvents(::NeXus::File &file, bool &hasTotalCounts, bool &oldNeXusFileNames)
-{
-  // try getting the value of total_counts
-  if (hasTotalCounts)
-  {
-    try
-    {
-      uint64_t numEvents;
-      file.readData("total_counts", numEvents);
-      return numEvents;
-    }
-    catch (::NeXus::Exception& )
-    {
-      hasTotalCounts=false; // carry on with the field not existing
-    }
-  }
+        // Make an array where index = pixel ID
+        // Set the value to NULL by default
+        vectors.resize(eventid_max+1, NULL);
 
-  // just get the length of the event pixel ids
-  try
-  {
-    if (oldNeXusFileNames)
-      file.openData("event_pixel_id");
-    else
-      file.openData("event_id");
-  }
-  catch (::NeXus::Exception& )
-  {
-    // Older files (before Nov 5, 2010) used this field.
-    try
-    {
-      file.openData("event_pixel_id");
-      oldNeXusFileNames = true;
-    }
-    catch(::NeXus::Exception&)
-    {
-      // Some groups have neither indicating there are not events here
-      return 0;
+        for (size_t j=size_t(pixelID_to_wi_offset); j<pixelID_to_wi_vector.size(); j++)
+        {
+          size_t wi = pixelID_to_wi_vector[j];
+          // Save a POINTER to the vector
+          if ( wi < WS->getNumberHistograms() )
+          {
+            getEventsFrom(WS->getEventList(wi), vectors[j-pixelID_to_wi_offset]);
+          }
+        }
+      }
     }
-  }
-
-  size_t numEvents = static_cast<std::size_t>(file.getInfo().dims[0]);
-  file.closeData();
-  return numEvents;
-}
-
-//-----------------------------------------------------------------------------
-/**
- * Load events from the file
- * @param prog :: A pointer to the progress reporting object
- * @param monitors :: If true the events from the monitors are loaded and not the main banks
- */
-void LoadEventNexus::loadEvents(API::Progress * const prog, const bool monitors)
-{
-  bool metaDataOnly = getProperty("MetaDataOnly");
-
-  // Get the time filters
-  setTimeFilters(monitors);
-
-  // The run_start will be loaded from the pulse times.
-  DateAndTime run_start(0,0);
-  // Initialize the counter of bad TOFs
-  bad_tofs = 0;
 
-  if (loadlogs)
-  {
-    prog->doReport("Loading DAS logs");
-    m_allBanksPulseTimes = runLoadNexusLogs(m_filename, WS, *this, true);
-    run_start = WS->getFirstPulseTime();
-  }
-  else
-  {
-    g_log.information() << "Skipping the loading of sample logs!\n"
-                        << "Reading the start time directly from /" << m_top_entry_name
-                        << "/start_time\n";
-    // start_time is read and set
-    ::NeXus::File nxfile(m_filename);
-    nxfile.openGroup(m_top_entry_name, "NXentry");
-    std::string tmp;
-    nxfile.readData("start_time", tmp);
-    run_start = DateAndTime(tmp);
-    WS->mutableRun().addProperty("run_start", run_start.toISO8601String(), true );
-  }
-
-  // Make sure you have a non-NULL m_allBanksPulseTimes
-  if (m_allBanksPulseTimes == NULL)
-  {
-    std::vector<DateAndTime> temp;
-    // m_allBanksPulseTimes = new BankPulseTimes(temp);
-    m_allBanksPulseTimes = boost::make_shared<BankPulseTimes>(temp);
-  }
-
-
-  //Load the instrument
-  prog->report("Loading instrument");
-  instrument_loaded_correctly = loadInstrument(m_filename, WS, m_top_entry_name, this);
-
-  if (!this->instrument_loaded_correctly)
-      throw std::runtime_error("Instrument was not initialized correctly! Loading cannot continue.");
-
-
-  // top level file information
-  ::NeXus::File file(m_filename);
-
-  //Start with the base entry
-  file.openGroup(m_top_entry_name, "NXentry");
-
-  //Now we want to go through all the bankN_event entries
-  vector<string> bankNames;
-  vector<std::size_t> bankNumEvents;
-  size_t total_events = 0;
-  map<string, string> entries = file.getEntries();
-  map<string,string>::const_iterator it = entries.begin();
-  std::string classType = monitors ? "NXmonitor" : "NXevent_data";
-  ::NeXus::Info info;
-  bool oldNeXusFileNames(false);
-  bool hasTotalCounts(true);
-  m_haveWeights = false;
-  for (; it != entries.end(); ++it)
-  {
-    std::string entry_name(it->first);
-    std::string entry_class(it->second);
-    if ( entry_class == classType )
+    /**
+    * Get the number of events in the currently opened group.
+    *
+    * @param file The handle to the nexus file opened to the group to look at.
+    * @param hasTotalCounts Whether to try looking at the total_counts field. This
+    * variable will be changed if the field is not there.
+    * @param oldNeXusFileNames Whether to try using old names. This variable will
+    * be changed if it is determined that old names are being used.
+    *
+    * @return The number of events.
+    */
+    std::size_t numEvents(::NeXus::File &file, bool &hasTotalCounts, bool &oldNeXusFileNames)
     {
-      // open the group
-      file.openGroup(entry_name, classType);
-
-      // get the number of events
-      std::size_t num = numEvents(file, hasTotalCounts, oldNeXusFileNames);
-      bankNames.push_back( entry_name );
-      bankNumEvents.push_back(num);
-      total_events += num;
+      // try getting the value of total_counts
+      if (hasTotalCounts)
+      {
+        try
+        {
+          uint64_t numEvents;
+          file.readData("total_counts", numEvents);
+          return numEvents;
+        }
+        catch (::NeXus::Exception& )
+        {
+          hasTotalCounts=false; // carry on with the field not existing
+        }
+      }
 
-      // Look for weights in simulated file
+      // just get the length of the event pixel ids
       try
       {
-        file.openData("event_weight");
-        m_haveWeights = true;
-        file.closeData();
+        if (oldNeXusFileNames)
+          file.openData("event_pixel_id");
+        else
+          file.openData("event_id");
       }
-      catch (::NeXus::Exception &)
+      catch (::NeXus::Exception& )
       {
-        // Swallow exception since flag is already false;
+        // Older files (before Nov 5, 2010) used this field.
+        try
+        {
+          file.openData("event_pixel_id");
+          oldNeXusFileNames = true;
+        }
+        catch(::NeXus::Exception&)
+        {
+          // Some groups have neither indicating there are not events here
+          return 0;
+        }
       }
 
-      file.closeGroup();
+      size_t numEvents = static_cast<std::size_t>(file.getInfo().dims[0]);
+      file.closeData();
+      return numEvents;
     }
-  }
-  
-  loadSampleDataISIScompatibility(file, WS); 
-
-  //Close up the file
-  file.closeGroup();
-  file.close();
 
-  // Delete the output workspace name if it existed
-  std::string outName = getPropertyValue("OutputWorkspace");
-  if (AnalysisDataService::Instance().doesExist(outName))
-    AnalysisDataService::Instance().remove( outName );
-
-  // set more properties on the workspace
-  try
-  {
-    // this is a static method that is why it is passing the file path
-    loadEntryMetadata(m_filename, WS, m_top_entry_name);
-  }
-  catch (std::runtime_error & e)
-  {
-    // Missing metadata is not a fatal error. Log and go on with your life
-    g_log.error() << "Error loading metadata: " << e.what() << std::endl;
-  }
-
-  // --------------------------- Time filtering ------------------------------------
-  double filter_time_start_sec, filter_time_stop_sec;
-  filter_time_start_sec = getProperty("FilterByTimeStart");
-  filter_time_stop_sec = getProperty("FilterByTimeStop");
-  chunk = getProperty("ChunkNumber");
-  totalChunks = getProperty("TotalChunks");
-
-  //Default to ALL pulse times
-  bool is_time_filtered = false;
-  filter_time_start = Kernel::DateAndTime::minimum();
-  filter_time_stop = Kernel::DateAndTime::maximum();
-
-  if (m_allBanksPulseTimes->numPulses > 0)
-  {
-    //If not specified, use the limits of doubles. Otherwise, convert from seconds to absolute PulseTime
-    if (filter_time_start_sec != EMPTY_DBL())
+    //-----------------------------------------------------------------------------
+    /**
+    * Load events from the file
+    * @param prog :: A pointer to the progress reporting object
+    * @param monitors :: If true the events from the monitors are loaded and not the main banks
+    */
+    void LoadEventNexus::loadEvents(API::Progress * const prog, const bool monitors)
     {
-      filter_time_start = run_start + filter_time_start_sec;
-      is_time_filtered = true;
-    }
+      bool metaDataOnly = getProperty("MetaDataOnly");
 
-    if (filter_time_stop_sec != EMPTY_DBL())
-    {
-      filter_time_stop = run_start + filter_time_stop_sec;
-      is_time_filtered = true;
-    }
+      // Get the time filters
+      setTimeFilters(monitors);
 
-    //Silly values?
-    if (filter_time_stop < filter_time_start)
-    {
-      std::string msg = "Your ";
-      if(monitors) msg += "monitor ";
-      msg += "filter for time's Stop value is smaller than the Start value.";
-      throw std::invalid_argument(msg);
-    }
-  }
+      // The run_start will be loaded from the pulse times.
+      DateAndTime run_start(0,0);
+      // Initialize the counter of bad TOFs
+      bad_tofs = 0;
 
-  if (is_time_filtered)
-  {
-    //Now filter out the run, using the DateAndTime type.
-    WS->mutableRun().filterByTime(filter_time_start, filter_time_stop);
-  }
-
-  if(metaDataOnly) {
-    //Now, create a default X-vector for histogramming, with just 2 bins.
-    Kernel::cow_ptr<MantidVec> axis;
-    MantidVec& xRef = axis.access();
-    xRef.resize(2);
-    xRef[0] = static_cast<double>(std::numeric_limits<uint32_t>::max()) * 0.1 - 1; //Just to make sure the bins hold it all
-    xRef[1] = 1;
-    //Set the binning axis using this.
-    WS->setAllX(axis);
-    return;
-  }
-
-  // --------- Loading only one bank ? ----------------------------------
-  std::vector<std::string> someBanks = getProperty("BankName");
-  bool SingleBankPixelsOnly = getProperty("SingleBankPixelsOnly");
-  if ((!someBanks.empty()) && (!monitors))
-  {
-    // check that all of the requested banks are in the file
-    for (auto someBank = someBanks.begin(); someBank != someBanks.end(); ++someBank)
-    {
-      bool foundIt = false;
-      for (auto bankName = bankNames.begin(); bankName != bankNames.end(); ++bankName)
+      if (loadlogs)
       {
-        if ((*bankName) == (*someBank)+"_events")
-        {
-          foundIt = true;
-          break;
-        }
+        prog->doReport("Loading DAS logs");
+        m_allBanksPulseTimes = runLoadNexusLogs(m_filename, WS, *this, true);
+        run_start = WS->getFirstPulseTime();
       }
-      if (!foundIt)
+      else
       {
-        throw std::invalid_argument("No entry named '" + (*someBank) + "' was found in the .NXS file.\n");
+        g_log.information() << "Skipping the loading of sample logs!\n"
+          << "Reading the start time directly from /" << m_top_entry_name
+          << "/start_time\n";
+        // start_time is read and set
+        ::NeXus::File nxfile(m_filename);
+        nxfile.openGroup(m_top_entry_name, "NXentry");
+        std::string tmp;
+        nxfile.readData("start_time", tmp);
+        run_start = DateAndTime(tmp);
+        WS->mutableRun().addProperty("run_start", run_start.toISO8601String(), true );
       }
-    }
 
-    // change the number of banks to load
-    bankNames.clear();
-    for (auto someBank = someBanks.begin(); someBank != someBanks.end(); ++someBank)
-      bankNames.push_back((*someBank) + "_events");
+      // Make sure you have a non-NULL m_allBanksPulseTimes
+      if (m_allBanksPulseTimes == NULL)
+      {
+        std::vector<DateAndTime> temp;
+        // m_allBanksPulseTimes = new BankPulseTimes(temp);
+        m_allBanksPulseTimes = boost::make_shared<BankPulseTimes>(temp);
+      }
 
-    // how many events are in a bank
-    bankNumEvents.clear();
-    bankNumEvents.assign(someBanks.size(), 1); // TODO this equally weights the banks
 
-    if( !SingleBankPixelsOnly ) someBanks.clear(); // Marker to load all pixels
-  }
-  else
-  {
-    someBanks.clear();
-  }
+      //Load the instrument
+      prog->report("Loading instrument");
+      instrument_loaded_correctly = loadInstrument(m_filename, WS, m_top_entry_name, this);
 
-  prog->report("Initializing all pixels");
-  // Remove used banks if parameter is set
-  if (WS->getInstrument()->hasParameter("remove-unused-banks"))
-  {
-	std::vector<double> instrumentUnused = WS->getInstrument()->getNumberParameter("remove-unused-banks", true);
-	if (!instrumentUnused.empty())
-	{
-	  const int unused = static_cast<int>(instrumentUnused.front());
-	  if(unused == 1) deleteBanks(WS, bankNames);
-    }
-  }
-  //----------------- Pad Empty Pixels -------------------------------
-  // Create the required spectra mapping so that the workspace knows what to pad to
-  createSpectraMapping(m_filename, monitors, someBanks);
-
-  //This map will be used to find the workspace index
-  if( this->event_id_is_spec )
-    WS->getSpectrumToWorkspaceIndexVector(pixelID_to_wi_vector, pixelID_to_wi_offset);
-  else
-    WS->getDetectorIDToWorkspaceIndexVector(pixelID_to_wi_vector, pixelID_to_wi_offset, true);
-
-  // Cache a map for speed.
-  if (!m_haveWeights)
-  {
-    this->makeMapToEventLists<EventVector_pt>(eventVectors);
-  }
-  else
-  {
-    // Convert to weighted events
-    for (size_t i=0; i < WS->getNumberHistograms(); i++)
-    {
-      WS->getEventList(i).switchTo(API::WEIGHTED);
-    }
-    this->makeMapToEventLists<WeightedEventVector_pt>(weightedEventVectors);
-  }
+      if (!this->instrument_loaded_correctly)
+        throw std::runtime_error("Instrument was not initialized correctly! Loading cannot continue.");
 
-  // Set all (empty) event lists as sorted by pulse time. That way, calling SortEvents will not try to sort these empty lists.
-  for (size_t i=0; i < WS->getNumberHistograms(); i++)
-    WS->getEventList(i).setSortOrder(DataObjects::PULSETIME_SORT);
 
-  //Count the limits to time of flight
-  shortest_tof = static_cast<double>(std::numeric_limits<uint32_t>::max()) * 0.1;
-  longest_tof = 0.;
+      // top level file information
+      ::NeXus::File file(m_filename);
 
-  // Make the thread pool
-  ThreadScheduler * scheduler = new ThreadSchedulerMutexes();
-  ThreadPool pool(scheduler);
-  auto diskIOMutex = boost::make_shared<Mutex>();
-  size_t bank0 = 0;
-  size_t bankn = bankNames.size();
+      //Start with the base entry
+      file.openGroup(m_top_entry_name, "NXentry");
 
-  if (chunk != EMPTY_INT()) // We are loading part - work out the bank number range
-  {
-    eventsPerChunk = total_events / totalChunks;
-    // Sort banks by size
-    size_t tmp;
-    string stmp;
-    for (size_t i = 0; i < bankn; i++)
-       for (size_t j = 0; j < bankn - 1; j++)
-          if (bankNumEvents[j] < bankNumEvents[j + 1])
-          {
-             tmp = bankNumEvents[j];
-             bankNumEvents[j] = bankNumEvents[j + 1];
-             bankNumEvents[j + 1] = tmp;
-             stmp = bankNames[j];
-             bankNames[j] = bankNames[j + 1];
-             bankNames[j + 1] = stmp;
-          }
-    int bigBanks = 0;
-    for (size_t i = 0; i < bankn; i++) if (bankNumEvents[i] > eventsPerChunk)bigBanks++;
-    // Each chunk is part of bank or multiple whole banks
-    // 0.5 for last chunk of a bank with multiple chunks
-    // 0.1 for multiple whole banks not completely filled
-    eventsPerChunk += static_cast<size_t>((static_cast<double>(bigBanks) / static_cast<double>(totalChunks) * 
-                                          0.5 + 0.05) * static_cast<double>(eventsPerChunk));
-    double partialChunk = 0.;
-    firstChunkForBank = 1;
-    for (int chunki = 1; chunki <=chunk; chunki++)
-    {
-      if (partialChunk > 1.)
-      {
-        partialChunk = 0.;
-        firstChunkForBank = chunki;
-        bank0 = bankn;
-      }
-      if (bankNumEvents[bank0] > 1)
+      //Now we want to go through all the bankN_event entries
+      vector<string> bankNames;
+      vector<std::size_t> bankNumEvents;
+      size_t total_events = 0;
+      map<string, string> entries = file.getEntries();
+      map<string,string>::const_iterator it = entries.begin();
+      std::string classType = monitors ? "NXmonitor" : "NXevent_data";
+      ::NeXus::Info info;
+      bool oldNeXusFileNames(false);
+      bool hasTotalCounts(true);
+      m_haveWeights = false;
+      for (; it != entries.end(); ++it)
       {
-        partialChunk += static_cast<double>(eventsPerChunk)/static_cast<double>(bankNumEvents[bank0]);
-      }
-      if (chunki < totalChunks) bankn = bank0 + 1;
-      else bankn = bankNames.size();
-      if (chunki == firstChunkForBank && partialChunk > 1.0) bankn += static_cast<size_t>(partialChunk) - 1;
-      if (bankn > bankNames.size()) bankn = bankNames.size();
-    }
-    for (size_t i=bank0; i < bankn; i++)
-    {
-      size_t start_event = (chunk - firstChunkForBank) * eventsPerChunk;
-      size_t stop_event = bankNumEvents[i];
-      // Don't change stop_event for the final chunk
-      if ( start_event + eventsPerChunk < stop_event ) stop_event = start_event + eventsPerChunk;
-      bankNumEvents[i] = stop_event - start_event;
-    }
-  }
-
-  // split banks up if the number of cores is more than twice the number of banks
-  splitProcessing = bool(bankNames.size() * 2 < ThreadPool::getNumPhysicalCores());
+        std::string entry_name(it->first);
+        std::string entry_class(it->second);
+        if ( entry_class == classType )
+        {
+          // open the group
+          file.openGroup(entry_name, classType);
 
-  // set up progress bar for the rest of the (multi-threaded) process
-  size_t numProg = bankNames.size() * (1 + 3); // 1 = disktask, 3 = proc task
-  if (splitProcessing) numProg += bankNames.size() * 3; // 3 = second proc task
-  Progress * prog2 = new Progress(this,0.3,1.0, numProg);
+          // get the number of events
+          std::size_t num = numEvents(file, hasTotalCounts, oldNeXusFileNames);
+          bankNames.push_back( entry_name );
+          bankNumEvents.push_back(num);
+          total_events += num;
 
-  for (size_t i=bank0; i < bankn; i++)
-  {
-    // We make tasks for loading
-    if (bankNumEvents[i] > 0)
-      pool.schedule( new LoadBankFromDiskTask(this, bankNames[i], classType, bankNumEvents[i], oldNeXusFileNames,
-                                              prog2, diskIOMutex, scheduler) );
-  }
-  // Start and end all threads
-  pool.joinAll();
-  diskIOMutex.reset();
-  delete prog2;
-
-
-  //Info reporting
-  const std::size_t eventsLoaded = WS->getNumberEvents();
-  g_log.information() << "Read " << eventsLoaded << " events"
-      << ". Shortest TOF: " << shortest_tof << " microsec; longest TOF: "
-      << longest_tof << " microsec." << std::endl;
-
-  if (shortest_tof < 0)
-    g_log.warning() << "The shortest TOF was negative! At least 1 event has an invalid time-of-flight." << std::endl;
-  if (bad_tofs > 0)
-    g_log.warning() << "Found " << bad_tofs << " events with TOF > 2e8. This may indicate errors in the raw TOF data." << std::endl;
-
-  //Now, create a default X-vector for histogramming, with just 2 bins.
-  Kernel::cow_ptr<MantidVec> axis;
-  MantidVec& xRef = axis.access();
-  xRef.resize(2,0.0);
-  if ( eventsLoaded > 0)
-  {
-    xRef[0] = shortest_tof - 1; //Just to make sure the bins hold it all
-    xRef[1] = longest_tof + 1;
-  }
-  //Set the binning axis using this.
-  WS->setAllX(axis);
-
-  // if there is time_of_flight load it
-  loadTimeOfFlight(m_filename, WS, m_top_entry_name,classType);
-}
+          // Look for weights in simulated file
+          try
+          {
+            file.openData("event_weight");
+            m_haveWeights = true;
+            file.closeData();
+          }
+          catch (::NeXus::Exception &)
+          {
+            // Swallow exception since flag is already false;
+          }
 
-//-----------------------------------------------------------------------------
-/**
- * Create a blank event workspace
- * @returns A shared pointer to a new empty EventWorkspace object
- */
-EventWorkspace_sptr LoadEventNexus::createEmptyEventWorkspace()
-{
-  // Create the output workspace
-  EventWorkspace_sptr eventWS(new EventWorkspace());
-  //Make sure to initialize.
-  //   We can use dummy numbers for arguments, for event workspace it doesn't matter
-  eventWS->initialize(1,1,1);
+          file.closeGroup();
+        }
+      }
 
-  // Set the units
-  eventWS->getAxis(0)->unit() = UnitFactory::Instance().create("TOF");
-  eventWS->setYUnit("Counts");
+      loadSampleDataISIScompatibility(file, WS); 
 
-  return eventWS;
-}
+      //Close up the file
+      file.closeGroup();
+      file.close();
 
+      // Delete the output workspace name if it existed
+      std::string outName = getPropertyValue("OutputWorkspace");
+      if (AnalysisDataService::Instance().doesExist(outName))
+        AnalysisDataService::Instance().remove( outName );
 
-//-----------------------------------------------------------------------------
-/** Load the run number and other meta data from the given bank */
-void LoadEventNexus::loadEntryMetadata(const std::string &nexusfilename, Mantid::API::MatrixWorkspace_sptr WS,
-    const std::string &entry_name)
-{
-  // Open the file
-  ::NeXus::File file(nexusfilename);
-  file.openGroup(entry_name, "NXentry");
-
-  // get the title
-  file.openData("title");
-  if (file.getInfo().type == ::NeXus::CHAR) {
-    string title = file.getStrData();
-    if (!title.empty())
-      WS->setTitle(title);
-  }
-  file.closeData();
-
-  // get the notes
-  try {
-    file.openData("notes");
-    if (file.getInfo().type == ::NeXus::CHAR) {
-      string notes = file.getStrData();
-      if (!notes.empty())
-        WS->mutableRun().addProperty("file_notes", notes);
-    }
-    file.closeData();
-  } catch (::NeXus::Exception &) {
-    // let it drop on floor
-  }
-
-  // Get the run number
-  file.openData("run_number");
-  string run("");
-  if (file.getInfo().type == ::NeXus::CHAR) {
-    run = file.getStrData();
-  }else if (file.isDataInt()){
-    // inside ISIS the run_number type is int32
-    vector<int> value; 
-    file.getData(value);
-    if (value.size()  > 0)
-      run = boost::lexical_cast<std::string>(value[0]);
-  }
-  if (!run.empty()) {
-    WS->mutableRun().addProperty("run_number", run);
-  }
-  file.closeData();
-
-  // get the duration
-  file.openData("duration");
-  std::vector<double> duration;
-  file.getDataCoerce(duration);
-  if (duration.size() == 1)
-  {
-    // get the units
-    std::vector<AttrInfo> infos = file.getAttrInfos();
-    std::string units("");
-    for (std::vector<AttrInfo>::const_iterator it = infos.begin(); it != infos.end(); ++it)
-    {
-      if (it->name.compare("units") == 0)
+      // set more properties on the workspace
+      try
       {
-        units = file.getStrAttr(*it);
-        break;
+        // this is a static method that is why it is passing the file path
+        loadEntryMetadata(m_filename, WS, m_top_entry_name);
+      }
+      catch (std::runtime_error & e)
+      {
+        // Missing metadata is not a fatal error. Log and go on with your life
+        g_log.error() << "Error loading metadata: " << e.what() << std::endl;
       }
-    }
-
-    // set the property
-    WS->mutableRun().addProperty("duration", duration[0], units);
-  }
-  file.closeData();
 
-  // close the file
-  file.close();
-}
+      // --------------------------- Time filtering ------------------------------------
+      double filter_time_start_sec, filter_time_stop_sec;
+      filter_time_start_sec = getProperty("FilterByTimeStart");
+      filter_time_stop_sec = getProperty("FilterByTimeStop");
+      chunk = getProperty("ChunkNumber");
+      totalChunks = getProperty("TotalChunks");
 
+      //Default to ALL pulse times
+      bool is_time_filtered = false;
+      filter_time_start = Kernel::DateAndTime::minimum();
+      filter_time_stop = Kernel::DateAndTime::maximum();
 
-//-----------------------------------------------------------------------------
-/** Load the instrument from the nexus file or if not found from the IDF file
- *  specified by the info in the Nexus file
- *
- *  @param nexusfilename :: The Nexus file name
- *  @param localWorkspace :: MatrixWorkspace in which to put the instrument geometry
- *  @param top_entry_name :: entry name at the top of the Nexus file
- *  @param alg :: Handle of the algorithm 
- *  @return true if successful
- */
-bool LoadEventNexus::loadInstrument(const std::string & nexusfilename, MatrixWorkspace_sptr localWorkspace,
-                                    const std::string & top_entry_name, Algorithm * alg)
-{
-   bool foundInstrument = runLoadIDFFromNexus( nexusfilename, localWorkspace, top_entry_name, alg);
-   if (!foundInstrument) foundInstrument = runLoadInstrument( nexusfilename, localWorkspace, top_entry_name, alg );
-   return foundInstrument;
-}
+      if (m_allBanksPulseTimes->numPulses > 0)
+      {
+        //If not specified, use the limits of doubles. Otherwise, convert from seconds to absolute PulseTime
+        if (filter_time_start_sec != EMPTY_DBL())
+        {
+          filter_time_start = run_start + filter_time_start_sec;
+          is_time_filtered = true;
+        }
 
-//-----------------------------------------------------------------------------
-/** Load the instrument from the nexus file
- *
- *  @param nexusfilename :: The name of the nexus file being loaded
- *  @param localWorkspace :: MatrixWorkspace in which to put the instrument geometry
- *  @param top_entry_name :: entry name at the top of the Nexus file
- *  @param alg :: Handle of the algorithm
- *  @return true if successful
- */
-bool LoadEventNexus::runLoadIDFFromNexus(const std::string & nexusfilename, API::MatrixWorkspace_sptr localWorkspace,
-                                         const std::string & top_entry_name, Algorithm * alg)
-{
-  // Test if IDF exists in file, move on quickly if not
-  try {
-    ::NeXus::File nxsfile(nexusfilename);
-    nxsfile.openPath(top_entry_name+"/instrument/instrument_xml");
-  } catch (::NeXus::Exception&) {
-    alg->getLogger().information("No instrument definition found in "+nexusfilename+" at "+top_entry_name+"/instrument");
-    return false;
-  }
-
-  IAlgorithm_sptr loadInst= alg->createChildAlgorithm("LoadIDFFromNexus");
-
-  // Now execute the Child Algorithm. Catch and log any error, but don't stop.
-  try
-  {
-    loadInst->setPropertyValue("Filename", nexusfilename);
-    loadInst->setProperty<MatrixWorkspace_sptr> ("Workspace", localWorkspace);
-    loadInst->setPropertyValue("InstrumentParentPath",top_entry_name);
-    loadInst->execute();
-  }
-  catch( std::invalid_argument&)
-  {
-    alg->getLogger().error("Invalid argument to LoadIDFFromNexus Child Algorithm ");
-  }
-  catch (std::runtime_error&)
-  {
-    alg->getLogger().debug("No instrument definition found in "+nexusfilename+" at "+top_entry_name+"/instrument");
-  }
+        if (filter_time_stop_sec != EMPTY_DBL())
+        {
+          filter_time_stop = run_start + filter_time_stop_sec;
+          is_time_filtered = true;
+        }
 
-  if ( !loadInst->isExecuted() ) alg->getLogger().information("No IDF loaded from Nexus file.");   
-  return loadInst->isExecuted();
-}
+        //Silly values?
+        if (filter_time_stop < filter_time_start)
+        {
+          std::string msg = "Your ";
+          if(monitors) msg += "monitor ";
+          msg += "filter for time's Stop value is smaller than the Start value.";
+          throw std::invalid_argument(msg);
+        }
+      }
 
-//-----------------------------------------------------------------------------
-/** Load the instrument defination file specified by info in the NXS file.
- *
- *  @param nexusfilename :: Used to pick the instrument.
- *  @param localWorkspace :: MatrixWorkspace in which to put the instrument geometry
- *  @param top_entry_name :: entry name at the top of the NXS file
- *  @param alg :: Handle of the algorithm 
- *  @return true if successful
- */
-bool LoadEventNexus::runLoadInstrument(const std::string &nexusfilename, MatrixWorkspace_sptr localWorkspace,
-    const std::string & top_entry_name, Algorithm * alg)
-{
-  string instrument = "";
-
-  // Get the instrument name
-  ::NeXus::File nxfile(nexusfilename);
-  //Start with the base entry
-  nxfile.openGroup(top_entry_name, "NXentry");
-  // Open the instrument
-  nxfile.openGroup("instrument", "NXinstrument");
-  try
-  {
-  nxfile.openData("name");
-  instrument = nxfile.getStrData();
-  alg->getLogger().debug() << "Instrument name read from NeXus file is " << instrument << std::endl;
-  }
-  catch ( ::NeXus::Exception &)
-  {
-    // Get the instrument name from the file instead
-    size_t n = nexusfilename.rfind('/');
-    if (n != std::string::npos)
-    {
-      std::string temp = nexusfilename.substr(n+1, nexusfilename.size()-n-1);
-      n = temp.find('_');
-      if (n != std::string::npos && n > 0)
+      if (is_time_filtered)
       {
-        instrument = temp.substr(0, n);
+        //Now filter out the run, using the DateAndTime type.
+        WS->mutableRun().filterByTime(filter_time_start, filter_time_stop);
       }
+
+      if(metaDataOnly) {
+        //Now, create a default X-vector for histogramming, with just 2 bins.
+        Kernel::cow_ptr<MantidVec> axis;
+        MantidVec& xRef = axis.access();
+        xRef.resize(2);
+        xRef[0] = static_cast<double>(std::numeric_limits<uint32_t>::max()) * 0.1 - 1; //Just to make sure the bins hold it all
+        xRef[1] = 1;
+        //Set the binning axis using this.
+        WS->setAllX(axis);
+        return;
+      }
+
+      // --------- Loading only one bank ? ----------------------------------
+      std::vector<std::string> someBanks = getProperty("BankName");
+      bool SingleBankPixelsOnly = getProperty("SingleBankPixelsOnly");
+      if ((!someBanks.empty()) && (!monitors))
+      {
+        // check that all of the requested banks are in the file
+        for (auto someBank = someBanks.begin(); someBank != someBanks.end(); ++someBank)
+        {
+          bool foundIt = false;
+          for (auto bankName = bankNames.begin(); bankName != bankNames.end(); ++bankName)
+          {
+            if ((*bankName) == (*someBank)+"_events")
+            {
+              foundIt = true;
+              break;
+            }
+          }
+          if (!foundIt)
+          {
+            throw std::invalid_argument("No entry named '" + (*someBank) + "' was found in the .NXS file.\n");
+          }
+        }
+
+        // change the number of banks to load
+        bankNames.clear();
+        for (auto someBank = someBanks.begin(); someBank != someBanks.end(); ++someBank)
+          bankNames.push_back((*someBank) + "_events");
+
+        // how many events are in a bank
+        bankNumEvents.clear();
+        bankNumEvents.assign(someBanks.size(), 1); // TODO this equally weights the banks
+
+        if( !SingleBankPixelsOnly ) someBanks.clear(); // Marker to load all pixels
+      }
+      else
+      {
+        someBanks.clear();
+      }
+
+      prog->report("Initializing all pixels");
+      // Remove used banks if parameter is set
+      if (WS->getInstrument()->hasParameter("remove-unused-banks"))
+      {
+        std::vector<double> instrumentUnused = WS->getInstrument()->getNumberParameter("remove-unused-banks", true);
+        if (!instrumentUnused.empty())
+        {
+          const int unused = static_cast<int>(instrumentUnused.front());
+          if(unused == 1) deleteBanks(WS, bankNames);
+        }
+      }
+      //----------------- Pad Empty Pixels -------------------------------
+      // Create the required spectra mapping so that the workspace knows what to pad to
+      createSpectraMapping(m_filename, monitors, someBanks);
+
+      //This map will be used to find the workspace index
+      if( this->event_id_is_spec )
+        WS->getSpectrumToWorkspaceIndexVector(pixelID_to_wi_vector, pixelID_to_wi_offset);
+      else
+        WS->getDetectorIDToWorkspaceIndexVector(pixelID_to_wi_vector, pixelID_to_wi_offset, true);
+
+      // Cache a map for speed.
+      if (!m_haveWeights)
+      {
+        this->makeMapToEventLists<EventVector_pt>(eventVectors);
+      }
+      else
+      {
+        // Convert to weighted events
+        for (size_t i=0; i < WS->getNumberHistograms(); i++)
+        {
+          WS->getEventList(i).switchTo(API::WEIGHTED);
+        }
+        this->makeMapToEventLists<WeightedEventVector_pt>(weightedEventVectors);
+      }
+
+      // Set all (empty) event lists as sorted by pulse time. That way, calling SortEvents will not try to sort these empty lists.
+      for (size_t i=0; i < WS->getNumberHistograms(); i++)
+        WS->getEventList(i).setSortOrder(DataObjects::PULSETIME_SORT);
+
+      //Count the limits to time of flight
+      shortest_tof = static_cast<double>(std::numeric_limits<uint32_t>::max()) * 0.1;
+      longest_tof = 0.;
+
+      // Make the thread pool
+      ThreadScheduler * scheduler = new ThreadSchedulerMutexes();
+      ThreadPool pool(scheduler);
+      auto diskIOMutex = boost::make_shared<Mutex>();
+      size_t bank0 = 0;
+      size_t bankn = bankNames.size();
+
+      if (chunk != EMPTY_INT()) // We are loading part - work out the bank number range
+      {
+        eventsPerChunk = total_events / totalChunks;
+        // Sort banks by size
+        size_t tmp;
+        string stmp;
+        for (size_t i = 0; i < bankn; i++)
+          for (size_t j = 0; j < bankn - 1; j++)
+            if (bankNumEvents[j] < bankNumEvents[j + 1])
+            {
+              tmp = bankNumEvents[j];
+              bankNumEvents[j] = bankNumEvents[j + 1];
+              bankNumEvents[j + 1] = tmp;
+              stmp = bankNames[j];
+              bankNames[j] = bankNames[j + 1];
+              bankNames[j + 1] = stmp;
+            }
+            int bigBanks = 0;
+            for (size_t i = 0; i < bankn; i++) if (bankNumEvents[i] > eventsPerChunk)bigBanks++;
+            // Each chunk is part of bank or multiple whole banks
+            // 0.5 for last chunk of a bank with multiple chunks
+            // 0.1 for multiple whole banks not completely filled
+            eventsPerChunk += static_cast<size_t>((static_cast<double>(bigBanks) / static_cast<double>(totalChunks) * 
+              0.5 + 0.05) * static_cast<double>(eventsPerChunk));
+            double partialChunk = 0.;
+            firstChunkForBank = 1;
+            for (int chunki = 1; chunki <=chunk; chunki++)
+            {
+              if (partialChunk > 1.)
+              {
+                partialChunk = 0.;
+                firstChunkForBank = chunki;
+                bank0 = bankn;
+              }
+              if (bankNumEvents[bank0] > 1)
+              {
+                partialChunk += static_cast<double>(eventsPerChunk)/static_cast<double>(bankNumEvents[bank0]);
+              }
+              if (chunki < totalChunks) bankn = bank0 + 1;
+              else bankn = bankNames.size();
+              if (chunki == firstChunkForBank && partialChunk > 1.0) bankn += static_cast<size_t>(partialChunk) - 1;
+              if (bankn > bankNames.size()) bankn = bankNames.size();
+            }
+            for (size_t i=bank0; i < bankn; i++)
+            {
+              size_t start_event = (chunk - firstChunkForBank) * eventsPerChunk;
+              size_t stop_event = bankNumEvents[i];
+              // Don't change stop_event for the final chunk
+              if ( start_event + eventsPerChunk < stop_event ) stop_event = start_event + eventsPerChunk;
+              bankNumEvents[i] = stop_event - start_event;
+            }
+      }
+
+      // split banks up if the number of cores is more than twice the number of banks
+      splitProcessing = bool(bankNames.size() * 2 < ThreadPool::getNumPhysicalCores());
+
+      // set up progress bar for the rest of the (multi-threaded) process
+      size_t numProg = bankNames.size() * (1 + 3); // 1 = disktask, 3 = proc task
+      if (splitProcessing) numProg += bankNames.size() * 3; // 3 = second proc task
+      Progress * prog2 = new Progress(this,0.3,1.0, numProg);
+
+      for (size_t i=bank0; i < bankn; i++)
+      {
+        // We make tasks for loading
+        if (bankNumEvents[i] > 0)
+          pool.schedule( new LoadBankFromDiskTask(this, bankNames[i], classType, bankNumEvents[i], oldNeXusFileNames,
+          prog2, diskIOMutex, scheduler) );
+      }
+      // Start and end all threads
+      pool.joinAll();
+      diskIOMutex.reset();
+      delete prog2;
+
+
+      //Info reporting
+      const std::size_t eventsLoaded = WS->getNumberEvents();
+      g_log.information() << "Read " << eventsLoaded << " events"
+        << ". Shortest TOF: " << shortest_tof << " microsec; longest TOF: "
+        << longest_tof << " microsec." << std::endl;
+
+      if (shortest_tof < 0)
+        g_log.warning() << "The shortest TOF was negative! At least 1 event has an invalid time-of-flight." << std::endl;
+      if (bad_tofs > 0)
+        g_log.warning() << "Found " << bad_tofs << " events with TOF > 2e8. This may indicate errors in the raw TOF data." << std::endl;
+
+      //Now, create a default X-vector for histogramming, with just 2 bins.
+      Kernel::cow_ptr<MantidVec> axis;
+      MantidVec& xRef = axis.access();
+      xRef.resize(2,0.0);
+      if ( eventsLoaded > 0)
+      {
+        xRef[0] = shortest_tof - 1; //Just to make sure the bins hold it all
+        xRef[1] = longest_tof + 1;
+      }
+      //Set the binning axis using this.
+      WS->setAllX(axis);
+
+      // if there is time_of_flight load it
+      loadTimeOfFlight(m_filename, WS, m_top_entry_name,classType);
     }
-  }
-  if (instrument.compare("POWGEN3") == 0) // hack for powgen b/c of bad long name
-          instrument = "POWGEN";
-  if (instrument.compare("NOM") == 0) // hack for nomad
-          instrument = "NOMAD";
 
-  if (instrument.empty())
-    throw std::runtime_error("Could not find the instrument name in the NXS file or using the filename. Cannot load instrument!");
+    //-----------------------------------------------------------------------------
+    /**
+    * Create a blank event workspace
+    * @returns A shared pointer to a new empty EventWorkspace object
+    */
+    EventWorkspace_sptr LoadEventNexus::createEmptyEventWorkspace()
+    {
+      // Create the output workspace
+      EventWorkspace_sptr eventWS(new EventWorkspace());
+      //Make sure to initialize.
+      //   We can use dummy numbers for arguments, for event workspace it doesn't matter
+      eventWS->initialize(1,1,1);
 
-  // Now let's close the file as we don't need it anymore to load the instrument.
-  nxfile.close();
+      // Set the units
+      eventWS->getAxis(0)->unit() = UnitFactory::Instance().create("TOF");
+      eventWS->setYUnit("Counts");
 
-  // do the actual work
-  IAlgorithm_sptr loadInst= alg->createChildAlgorithm("LoadInstrument");
+      return eventWS;
+    }
 
-  // Now execute the Child Algorithm. Catch and log any error, but don't stop.
-  bool executionSuccessful(true);
-  try
-  {
-    loadInst->setPropertyValue("InstrumentName", instrument);
-    loadInst->setProperty<MatrixWorkspace_sptr> ("Workspace", localWorkspace);
-    loadInst->setProperty("RewriteSpectraMap", false);
-    loadInst->execute();
-
-    // Populate the instrument parameters in this workspace - this works around a bug
-    localWorkspace->populateInstrumentParameters();
-  } catch (std::invalid_argument& e)
-  {
-    alg->getLogger().information() << "Invalid argument to LoadInstrument Child Algorithm : " << e.what() << std::endl;
-    executionSuccessful = false;
-  } catch (std::runtime_error& e)
-  {
-    alg->getLogger().information("Unable to successfully run LoadInstrument Child Algorithm");
-    alg->getLogger().information(e.what());
-    executionSuccessful = false;
-  }
 
-  // If loading instrument definition file fails
-  if (!executionSuccessful)
-  {
-    alg->getLogger().error() << "Error loading Instrument definition file\n";
-    return false;
-  }
-
-  // Ticket #2049: Cleanup all loadinstrument members to a single instance
-  // If requested update the instrument to positions in the data file
-  const Geometry::ParameterMap & pmap = localWorkspace->instrumentParameters();
-  if( !pmap.contains(localWorkspace->getInstrument()->getComponentID(),"det-pos-source") ) 
-    return executionSuccessful;
-
-  boost::shared_ptr<Geometry::Parameter> updateDets = pmap.get(localWorkspace->getInstrument()->getComponentID(),"det-pos-source");
-  std::string value = updateDets->value<std::string>();
-  if(value.substr(0,8)  == "datafile" )
-  {
-    IAlgorithm_sptr updateInst = alg->createChildAlgorithm("UpdateInstrumentFromFile");
-    updateInst->setProperty<MatrixWorkspace_sptr>("Workspace", localWorkspace);
-    updateInst->setPropertyValue("Filename", nexusfilename);
-    if(value  == "datafile-ignore-phi" )
+    //-----------------------------------------------------------------------------
+    /** Load the run number and other meta data from the given bank */
+    void LoadEventNexus::loadEntryMetadata(const std::string &nexusfilename, Mantid::API::MatrixWorkspace_sptr WS,
+      const std::string &entry_name)
     {
-      updateInst->setProperty("IgnorePhi", true);
-      alg->getLogger().information("Detector positions in IDF updated with positions in the data file except for the phi values");
+      // Open the file
+      ::NeXus::File file(nexusfilename);
+      file.openGroup(entry_name, "NXentry");
+
+      // get the title
+      file.openData("title");
+      if (file.getInfo().type == ::NeXus::CHAR) {
+        string title = file.getStrData();
+        if (!title.empty())
+          WS->setTitle(title);
+      }
+      file.closeData();
+
+      // get the notes
+      try {
+        file.openData("notes");
+        if (file.getInfo().type == ::NeXus::CHAR) {
+          string notes = file.getStrData();
+          if (!notes.empty())
+            WS->mutableRun().addProperty("file_notes", notes);
+        }
+        file.closeData();
+      } catch (::NeXus::Exception &) {
+        // let it drop on floor
+      }
+
+      // Get the run number
+      file.openData("run_number");
+      string run("");
+      if (file.getInfo().type == ::NeXus::CHAR) {
+        run = file.getStrData();
+      }else if (file.isDataInt()){
+        // inside ISIS the run_number type is int32
+        vector<int> value; 
+        file.getData(value);
+        if (value.size()  > 0)
+          run = boost::lexical_cast<std::string>(value[0]);
+      }
+      if (!run.empty()) {
+        WS->mutableRun().addProperty("run_number", run);
+      }
+      file.closeData();
+
+      // get the experiment identifier
+      try {
+        file.openData("experiment_identifier");
+        string expId("");
+        if (file.getInfo().type == ::NeXus::CHAR)
+        {
+          expId = file.getStrData();
+        }
+        if (!expId.empty()) {
+          WS->mutableRun().addProperty("experiment_identifier", expId);
+        }
+        file.closeData();
+      } catch (::NeXus::Exception &) {
+        // let it drop on floor
+      }
+
+      // get the sample name
+      try {
+        file.openGroup("sample", "NXsample");
+        file.openData("name");
+        string name("");
+        if (file.getInfo().type == ::NeXus::CHAR)
+        {
+          name = file.getStrData();
+        }
+        if (!name.empty()) {
+          WS->mutableSample().setName(name);
+        }
+        file.closeData();
+        file.closeGroup();
+      } catch (::NeXus::Exception &) {
+        // let it drop on floor
+      }
+
+      // get the duration
+      file.openData("duration");
+      std::vector<double> duration;
+      file.getDataCoerce(duration);
+      if (duration.size() == 1)
+      {
+        // get the units
+        std::vector<AttrInfo> infos = file.getAttrInfos();
+        std::string units("");
+        for (std::vector<AttrInfo>::const_iterator it = infos.begin(); it != infos.end(); ++it)
+        {
+          if (it->name.compare("units") == 0)
+          {
+            units = file.getStrAttr(*it);
+            break;
+          }
+        }
+
+        // set the property
+        WS->mutableRun().addProperty("duration", duration[0], units);
+      }
+      file.closeData();
+
+      // close the file
+      file.close();
     }
-    else 
+
+
+    //-----------------------------------------------------------------------------
+    /** Load the instrument from the nexus file or if not found from the IDF file
+    *  specified by the info in the Nexus file
+    *
+    *  @param nexusfilename :: The Nexus file name
+    *  @param localWorkspace :: MatrixWorkspace in which to put the instrument geometry
+    *  @param top_entry_name :: entry name at the top of the Nexus file
+    *  @param alg :: Handle of the algorithm 
+    *  @return true if successful
+    */
+    bool LoadEventNexus::loadInstrument(const std::string & nexusfilename, MatrixWorkspace_sptr localWorkspace,
+      const std::string & top_entry_name, Algorithm * alg)
     {
-      alg->getLogger().information("Detector positions in IDF updated with positions in the data file");
+      bool foundInstrument = runLoadIDFFromNexus( nexusfilename, localWorkspace, top_entry_name, alg);
+      if (!foundInstrument) foundInstrument = runLoadInstrument( nexusfilename, localWorkspace, top_entry_name, alg );
+      return foundInstrument;
     }
-    // We want this to throw if it fails to warn the user that the information is not correct.
-    updateInst->execute();
-  }
 
-  return executionSuccessful;
-}
+    //-----------------------------------------------------------------------------
+    /** Load the instrument from the nexus file
+    *
+    *  @param nexusfilename :: The name of the nexus file being loaded
+    *  @param localWorkspace :: MatrixWorkspace in which to put the instrument geometry
+    *  @param top_entry_name :: entry name at the top of the Nexus file
+    *  @param alg :: Handle of the algorithm
+    *  @return true if successful
+    */
+    bool LoadEventNexus::runLoadIDFFromNexus(const std::string & nexusfilename, API::MatrixWorkspace_sptr localWorkspace,
+      const std::string & top_entry_name, Algorithm * alg)
+    {
+      // Test if IDF exists in file, move on quickly if not
+      try {
+        ::NeXus::File nxsfile(nexusfilename);
+        nxsfile.openPath(top_entry_name+"/instrument/instrument_xml");
+      } catch (::NeXus::Exception&) {
+        alg->getLogger().information("No instrument definition found in "+nexusfilename+" at "+top_entry_name+"/instrument");
+        return false;
+      }
 
+      IAlgorithm_sptr loadInst= alg->createChildAlgorithm("LoadIDFFromNexus");
 
-//-----------------------------------------------------------------------------
-/**
- * Create the required spectra mapping. If the file contains an isis_vms_compat block then
- * the mapping is read from there, otherwise a 1:1 map with the instrument is created (along
- * with the associated spectra axis)
- * @param workspace :: The workspace to contain the spectra mapping
- * @param bankNames :: Bank names that are in Nexus file
- */
-void LoadEventNexus::deleteBanks(API::MatrixWorkspace_sptr workspace, std::vector<std::string> bankNames)
-{
-    Instrument_sptr inst = boost::const_pointer_cast<Instrument>(workspace->getInstrument()->baseInstrument());
-    //Build a list of Rectangular Detectors
-    std::vector<boost::shared_ptr<RectangularDetector> > detList;
-    for (int i=0; i < inst->nelements(); i++)
+      // Now execute the Child Algorithm. Catch and log any error, but don't stop.
+      try
+      {
+        loadInst->setPropertyValue("Filename", nexusfilename);
+        loadInst->setProperty<MatrixWorkspace_sptr> ("Workspace", localWorkspace);
+        loadInst->setPropertyValue("InstrumentParentPath",top_entry_name);
+        loadInst->execute();
+      }
+      catch( std::invalid_argument&)
+      {
+        alg->getLogger().error("Invalid argument to LoadIDFFromNexus Child Algorithm ");
+      }
+      catch (std::runtime_error&)
+      {
+        alg->getLogger().debug("No instrument definition found in "+nexusfilename+" at "+top_entry_name+"/instrument");
+      }
+
+      if ( !loadInst->isExecuted() ) alg->getLogger().information("No IDF loaded from Nexus file.");   
+      return loadInst->isExecuted();
+    }
+    /** method used to return instrument name for some old ISIS files where it is not written properly within the instrument 
+    * @param hFile :: A reference to the NeXus file opened at the root entry
+    */
+    std::string LoadEventNexus::readInstrumentFromISIS_VMSCompat(::NeXus::File &hFile)
     {
-      boost::shared_ptr<RectangularDetector> det;
-      boost::shared_ptr<ICompAssembly> assem;
-      boost::shared_ptr<ICompAssembly> assem2;
+      std::string instrumentName("");
+      try
+      {
+        hFile.openGroup("isis_vms_compat","IXvms");
+      }
+      catch(std::runtime_error &)
+      {
+        return instrumentName;
+      }
+      try
+      {
+        hFile.openData("NAME");
+      }
+      catch(std::runtime_error &)
+      {
+        hFile.closeGroup();
+        return instrumentName;
+      }
 
-      det = boost::dynamic_pointer_cast<RectangularDetector>( (*inst)[i] );
-      if (det)
+      instrumentName = hFile.getStrData();
+      hFile.closeData();
+      hFile.closeGroup();
+
+      return instrumentName;
+    }
+
+
+    //-----------------------------------------------------------------------------
+    /** Load the instrument definition file specified by info in the NXS file.
+    *
+    *  @param nexusfilename :: Used to pick the instrument.
+    *  @param localWorkspace :: MatrixWorkspace in which to put the instrument geometry
+    *  @param top_entry_name :: entry name at the top of the NXS file
+    *  @param alg :: Handle of the algorithm 
+    *  @return true if successful
+    */
+    bool LoadEventNexus::runLoadInstrument(const std::string &nexusfilename, MatrixWorkspace_sptr localWorkspace,
+      const std::string & top_entry_name, Algorithm * alg)
+    {
+      string instrument = "";
+
+      // Get the instrument name
+      ::NeXus::File nxfile(nexusfilename);
+      //Start with the base entry
+      nxfile.openGroup(top_entry_name, "NXentry");
+      // Open the instrument
+      nxfile.openGroup("instrument", "NXinstrument");
+      try
       {
-        detList.push_back(det);
+        nxfile.openData("name");
+        instrument = nxfile.getStrData();
+        alg->getLogger().debug() << "Instrument name read from NeXus file is " << instrument << std::endl;
       }
-      else
+      catch ( ::NeXus::Exception &)
       {
-        //Also, look in the first sub-level for RectangularDetectors (e.g. PG3).
-        // We are not doing a full recursive search since that will be very long for lots of pixels.
-        assem = boost::dynamic_pointer_cast<ICompAssembly>( (*inst)[i] );
-        if (assem)
+        // Try to fall back to isis compatibility options
+        nxfile.closeGroup();
+        instrument  = readInstrumentFromISIS_VMSCompat(nxfile);
+        if (instrument.empty())
         {
-          for (int j=0; j < assem->nelements(); j++)
+          // Get the instrument name from the file instead
+          size_t n = nexusfilename.rfind('/');
+          if (n != std::string::npos)
           {
-            det = boost::dynamic_pointer_cast<RectangularDetector>( (*assem)[j] );
-            if (det)
+            std::string temp = nexusfilename.substr(n+1, nexusfilename.size()-n-1);
+            n = temp.find('_');
+            if (n != std::string::npos && n > 0)
             {
-              detList.push_back(det);
-
+              instrument = temp.substr(0, n);
             }
-            else
+          }
+        }
+      }
+      if (instrument.compare("POWGEN3") == 0) // hack for powgen b/c of bad long name
+        instrument = "POWGEN";
+      if (instrument.compare("NOM") == 0) // hack for nomad
+        instrument = "NOMAD";
+
+      if (instrument.empty())
+        throw std::runtime_error("Could not find the instrument name in the NXS file or using the filename. Cannot load instrument!");
+
+      // Now let's close the file as we don't need it anymore to load the instrument.
+      nxfile.close();
+
+      // do the actual work
+      IAlgorithm_sptr loadInst= alg->createChildAlgorithm("LoadInstrument");
+
+      // Now execute the Child Algorithm. Catch and log any error, but don't stop.
+      bool executionSuccessful(true);
+      try
+      {
+        loadInst->setPropertyValue("InstrumentName", instrument);
+        loadInst->setProperty<MatrixWorkspace_sptr> ("Workspace", localWorkspace);
+        loadInst->setProperty("RewriteSpectraMap", false);
+        loadInst->execute();
+
+        // Populate the instrument parameters in this workspace - this works around a bug
+        localWorkspace->populateInstrumentParameters();
+      } catch (std::invalid_argument& e)
+      {
+        alg->getLogger().information() << "Invalid argument to LoadInstrument Child Algorithm : " << e.what() << std::endl;
+        executionSuccessful = false;
+      } catch (std::runtime_error& e)
+      {
+        alg->getLogger().information("Unable to successfully run LoadInstrument Child Algorithm");
+        alg->getLogger().information(e.what());
+        executionSuccessful = false;
+      }
+
+      // If loading instrument definition file fails
+      if (!executionSuccessful)
+      {
+        alg->getLogger().error() << "Error loading Instrument definition file\n";
+        return false;
+      }
+
+      // Ticket #2049: Cleanup all loadinstrument members to a single instance
+      // If requested update the instrument to positions in the data file
+      const Geometry::ParameterMap & pmap = localWorkspace->instrumentParameters();
+      if( !pmap.contains(localWorkspace->getInstrument()->getComponentID(),"det-pos-source") ) 
+        return executionSuccessful;
+
+      boost::shared_ptr<Geometry::Parameter> updateDets = pmap.get(localWorkspace->getInstrument()->getComponentID(),"det-pos-source");
+      std::string value = updateDets->value<std::string>();
+      if(value.substr(0,8)  == "datafile" )
+      {
+        IAlgorithm_sptr updateInst = alg->createChildAlgorithm("UpdateInstrumentFromFile");
+        updateInst->setProperty<MatrixWorkspace_sptr>("Workspace", localWorkspace);
+        updateInst->setPropertyValue("Filename", nexusfilename);
+        if(value  == "datafile-ignore-phi" )
+        {
+          updateInst->setProperty("IgnorePhi", true);
+          alg->getLogger().information("Detector positions in IDF updated with positions in the data file except for the phi values");
+        }
+        else 
+        {
+          alg->getLogger().information("Detector positions in IDF updated with positions in the data file");
+        }
+        // We want this to throw if it fails to warn the user that the information is not correct.
+        updateInst->execute();
+      }
+
+      return executionSuccessful;
+    }
+
+
+    //-----------------------------------------------------------------------------
+    /**
+    * Create the required spectra mapping. If the file contains an isis_vms_compat block then
+    * the mapping is read from there, otherwise a 1:1 map with the instrument is created (along
+    * with the associated spectra axis)
+    * @param workspace :: The workspace to contain the spectra mapping
+    * @param bankNames :: Bank names that are in Nexus file
+    */
+    void LoadEventNexus::deleteBanks(API::MatrixWorkspace_sptr workspace, std::vector<std::string> bankNames)
+    {
+      Instrument_sptr inst = boost::const_pointer_cast<Instrument>(workspace->getInstrument()->baseInstrument());
+      //Build a list of Rectangular Detectors
+      std::vector<boost::shared_ptr<RectangularDetector> > detList;
+      for (int i=0; i < inst->nelements(); i++)
+      {
+        boost::shared_ptr<RectangularDetector> det;
+        boost::shared_ptr<ICompAssembly> assem;
+        boost::shared_ptr<ICompAssembly> assem2;
+
+        det = boost::dynamic_pointer_cast<RectangularDetector>( (*inst)[i] );
+        if (det)
+        {
+          detList.push_back(det);
+        }
+        else
+        {
+          //Also, look in the first sub-level for RectangularDetectors (e.g. PG3).
+          // We are not doing a full recursive search since that will be very long for lots of pixels.
+          assem = boost::dynamic_pointer_cast<ICompAssembly>( (*inst)[i] );
+          if (assem)
+          {
+            for (int j=0; j < assem->nelements(); j++)
             {
-              //Also, look in the second sub-level for RectangularDetectors (e.g. PG3).
-              // We are not doing a full recursive search since that will be very long for lots of pixels.
-              assem2 = boost::dynamic_pointer_cast<ICompAssembly>( (*assem)[j] );
-              if (assem2)
+              det = boost::dynamic_pointer_cast<RectangularDetector>( (*assem)[j] );
+              if (det)
+              {
+                detList.push_back(det);
+
+              }
+              else
               {
-                for (int k=0; k < assem2->nelements(); k++)
+                //Also, look in the second sub-level for RectangularDetectors (e.g. PG3).
+                // We are not doing a full recursive search since that will be very long for lots of pixels.
+                assem2 = boost::dynamic_pointer_cast<ICompAssembly>( (*assem)[j] );
+                if (assem2)
                 {
-                  det = boost::dynamic_pointer_cast<RectangularDetector>( (*assem2)[k] );
-                  if (det)
+                  for (int k=0; k < assem2->nelements(); k++)
                   {
-                    detList.push_back(det);
+                    det = boost::dynamic_pointer_cast<RectangularDetector>( (*assem2)[k] );
+                    if (det)
+                    {
+                      detList.push_back(det);
+                    }
                   }
                 }
               }
@@ -2047,650 +2132,751 @@ void LoadEventNexus::deleteBanks(API::MatrixWorkspace_sptr workspace, std::vecto
           }
         }
       }
-    }
-    if (detList.size() == 0) return;
-    for (int i = 0; i<static_cast<int>(detList.size()); i++)
-    {
+      if (detList.size() == 0) return;
+      for (int i = 0; i<static_cast<int>(detList.size()); i++)
+      {
         bool keep = false;
         boost::shared_ptr<RectangularDetector> det = detList[i];
         std::string det_name = det->getName();
         for (int j = 0; j<static_cast<int>(bankNames.size()); j++)
         {
-            size_t pos = bankNames[j].find("_events");
-            if(det_name.compare(bankNames[j].substr(0,pos)) == 0) keep = true;
-            if(keep) break;
+          size_t pos = bankNames[j].find("_events");
+          if(det_name.compare(bankNames[j].substr(0,pos)) == 0) keep = true;
+          if(keep) break;
         }
         if (!keep)
         {
-            boost::shared_ptr<const IComponent> parent = inst->getComponentByName(det_name);
-            std::vector<Geometry::IComponent_const_sptr> children;
-            boost::shared_ptr<const Geometry::ICompAssembly> asmb = boost::dynamic_pointer_cast<const Geometry::ICompAssembly>(parent);
-            asmb->getChildren(children, false);
-            for (int col = 0; col<static_cast<int>(children.size()); col++)
-            {
-                boost::shared_ptr<const Geometry::ICompAssembly> asmb2 = boost::dynamic_pointer_cast<const Geometry::ICompAssembly>(children[col]);
-                std::vector<Geometry::IComponent_const_sptr> grandchildren;
-                asmb2->getChildren(grandchildren,false);
+          boost::shared_ptr<const IComponent> parent = inst->getComponentByName(det_name);
+          std::vector<Geometry::IComponent_const_sptr> children;
+          boost::shared_ptr<const Geometry::ICompAssembly> asmb = boost::dynamic_pointer_cast<const Geometry::ICompAssembly>(parent);
+          asmb->getChildren(children, false);
+          for (int col = 0; col<static_cast<int>(children.size()); col++)
+          {
+            boost::shared_ptr<const Geometry::ICompAssembly> asmb2 = boost::dynamic_pointer_cast<const Geometry::ICompAssembly>(children[col]);
+            std::vector<Geometry::IComponent_const_sptr> grandchildren;
+            asmb2->getChildren(grandchildren,false);
 
-                for (int row = 0; row<static_cast<int>(grandchildren.size()); row++)
-                {
-                    Detector* d = dynamic_cast<Detector*>(const_cast<IComponent*>(grandchildren[row].get()));
-                    inst->removeDetector(d);
-                }
+            for (int row = 0; row<static_cast<int>(grandchildren.size()); row++)
+            {
+              Detector* d = dynamic_cast<Detector*>(const_cast<IComponent*>(grandchildren[row].get()));
+              inst->removeDetector(d);
             }
-            IComponent* comp = dynamic_cast<IComponent*>(detList[i].get());
-            inst->remove(comp);
+          }
+          IComponent* comp = dynamic_cast<IComponent*>(detList[i].get());
+          inst->remove(comp);
         }
-    }
+      }
       return;
-}
-//-----------------------------------------------------------------------------
-/**
- * Create the required spectra mapping. If the file contains an isis_vms_compat block then
- * the mapping is read from there, otherwise a 1:1 map with the instrument is created (along
- * with the associated spectra axis)
- * @param nxsfile :: The name of a nexus file to load the mapping from
- * @param monitorsOnly :: Load only the monitors is true
- * @param bankNames :: An optional bank name for loading specified banks
- */
-void LoadEventNexus::createSpectraMapping(const std::string &nxsfile,
-    const bool monitorsOnly, const std::vector<std::string> &bankNames)
-{
-  bool spectramap = false;
-  // set up the
-  if( !monitorsOnly && !bankNames.empty() )
-  {
-    std::vector<IDetector_const_sptr> allDets;
-
-    for (auto name = bankNames.begin(); name != bankNames.end(); ++name)
-    {
-      // Only build the map for the single bank
-      std::vector<IDetector_const_sptr> dets;
-      WS->getInstrument()->getDetectorsInBank(dets, (*name));
-      if (dets.empty())
-        throw std::runtime_error("Could not find the bank named '" + (*name) +
-                                 "' as a component assembly in the instrument tree; or it did not contain any detectors."
-                                 " Try unchecking SingleBankPixelsOnly.");
-      allDets.insert(allDets.end(), dets.begin(), dets.end());
     }
-    if (!allDets.empty())
+    //-----------------------------------------------------------------------------
+    /**
+    * Create the required spectra mapping. If the file contains an isis_vms_compat block then
+    * the mapping is read from there, otherwise a 1:1 map with the instrument is created (along
+    * with the associated spectra axis)
+    * @param nxsfile :: The name of a nexus file to load the mapping from
+    * @param monitorsOnly :: Load only the monitors is true
+    * @param bankNames :: An optional bank name for loading specified banks
+    */
+    void LoadEventNexus::createSpectraMapping(const std::string &nxsfile,
+      const bool monitorsOnly, const std::vector<std::string> &bankNames)
     {
-      WS->resizeTo(allDets.size());
-      // Make an event list for each.
-      for(size_t wi=0; wi < allDets.size(); wi++)
+      bool spectramap = false;
+	m_specMin = getProperty("SpectrumMin");
+	m_specMax = getProperty("SpectrumMax");
+	m_specList = getProperty("SpectrumList");
+
+      // set up the
+      if( !monitorsOnly && !bankNames.empty() )
       {
-        const detid_t detID = allDets[wi]->getID();
-        WS->getSpectrum(wi)->setDetectorID(detID);
-      }
-      spectramap = true;
-      g_log.debug() << "Populated spectra map for select banks\n";
-    }
+        std::vector<IDetector_const_sptr> allDets;
 
-  }
-  else
-  {
-    spectramap = loadSpectraMapping(nxsfile, monitorsOnly, m_top_entry_name);
-    // Did we load one? If so then the event ID is the spectrum number and not det ID
-    if( spectramap ) this->event_id_is_spec = true;
-  }
+        for (auto name = bankNames.begin(); name != bankNames.end(); ++name)
+        {
+          // Only build the map for the single bank
+          std::vector<IDetector_const_sptr> dets;
+          WS->getInstrument()->getDetectorsInBank(dets, (*name));
+          if (dets.empty())
+            throw std::runtime_error("Could not find the bank named '" + (*name) +
+            "' as a component assembly in the instrument tree; or it did not contain any detectors."
+            " Try unchecking SingleBankPixelsOnly.");
+          allDets.insert(allDets.end(), dets.begin(), dets.end());
+        }
+        if (!allDets.empty())
+        {
+          WS->resizeTo(allDets.size());
+          // Make an event list for each.
+          for(size_t wi=0; wi < allDets.size(); wi++)
+          {
+            const detid_t detID = allDets[wi]->getID();
+            WS->getSpectrum(wi)->setDetectorID(detID);
+          }
+          spectramap = true;
+          g_log.debug() << "Populated spectra map for select banks\n";
+        }
 
-  if( !spectramap )
-  {
-    g_log.debug() << "No custom spectra mapping found, continuing with default 1:1 mapping of spectrum:detectorID\n";
-    // The default 1:1 will suffice but exclude the monitors as they are always in a separate workspace
-    WS->padSpectra();
-    g_log.debug() << "Populated 1:1 spectra map for the whole instrument \n";
-  }
-}
+      }
+      else
+      {
+        spectramap = loadSpectraMapping(nxsfile, monitorsOnly, m_top_entry_name);
+        // Did we load one? If so then the event ID is the spectrum number and not det ID
+        if( spectramap ) this->event_id_is_spec = true;
+      }
 
-//-----------------------------------------------------------------------------
-/**
- * Returns whether the file contains monitors with events in them
- * @returns True if the file contains monitors with event data, false otherwise
- */
-bool LoadEventNexus::hasEventMonitors()
-{
-  bool result(false);
-  // Determine whether to load histograms or events
-  try
-  {
-    ::NeXus::File file(m_filename);
-    file.openPath(m_top_entry_name);
-    //Start with the base entry
-    typedef std::map<std::string,std::string> string_map_t; 
-    //Now we want to go through and find the monitors
-    string_map_t entries = file.getEntries();
-    for( string_map_t::const_iterator it = entries.begin(); it != entries.end(); ++it)
-    {
-      if( it->second == "NXmonitor" )
+      if( !spectramap )
       {
-        file.openGroup(it->first, it->second);
-        break;
+        g_log.debug() << "No custom spectra mapping found, continuing with default 1:1 mapping of spectrum:detectorID\n";
+		auto specList= WS->getInstrument()->getDetectorIDs(true);
+		createSpectraList(*std::min_element(specList.begin(),specList.end()),*std::max_element(specList.begin(),specList.end()));
+        // The default 1:1 will suffice but exclude the monitors as they are always in a separate workspace
+		WS->padSpectra(m_specList);
+        g_log.debug() << "Populated 1:1 spectra map for the whole instrument \n";
       }
     }
-    file.openData("event_id");
-    result = true;
-    file.close();
-  }
-  catch(::NeXus::Exception &)
-  {
-    result = false;
-  }
-  return result;
-}
 
-//-----------------------------------------------------------------------------
-/**
- * Load the Monitors from the NeXus file into a workspace. The original
- * workspace name is used and appended with _monitors.
- */
-void LoadEventNexus::runLoadMonitors()
-{
-  std::string mon_wsname = this->getProperty("OutputWorkspace");
-  mon_wsname.append("_monitors");
-
-  IAlgorithm_sptr loadMonitors = this->createChildAlgorithm("LoadNexusMonitors");
-  try
-  {
-    g_log.information("Loading monitors from NeXus file...");
-    loadMonitors->setPropertyValue("Filename", m_filename);
-    g_log.information() << "New workspace name for monitors: " << mon_wsname << std::endl;
-    loadMonitors->setPropertyValue("OutputWorkspace", mon_wsname);
-    loadMonitors->execute();
-    MatrixWorkspace_sptr mons = loadMonitors->getProperty("OutputWorkspace");
-    this->declareProperty(new WorkspaceProperty<>("MonitorWorkspace",
-        mon_wsname, Direction::Output), "Monitors from the Event NeXus file");
-    this->setProperty("MonitorWorkspace", mons);
-    // Set the internal monitor workspace pointer as well
-    WS->setMonitorWorkspace(mons);
-
-    filterDuringPause(mons);
-  }
-  catch (...)
-  {
-    g_log.error("Error while loading the monitors from the file. File may contain no monitors.");
-  }
-}
-
-//
-/**
- * Load a spectra mapping from the given file. This currently checks for the existence of
- * an isis_vms_compat block in the file, if it exists it pulls out the spectra mapping listed there
- * @param filename :: A filename
- * @param monitorsOnly :: If true then only the monitor spectra are loaded
- * @param entry_name :: name of the NXentry to open.
- * @returns True if the mapping was loaded or false if the block does not exist
- */
-bool LoadEventNexus::loadSpectraMapping(const std::string& filename, const bool monitorsOnly, const std::string& entry_name )
-{
-  ::NeXus::File file(filename);
-  try
-  {
-    g_log.debug() << "Attempting to load custom spectra mapping from '" << entry_name << "/isis_vms_compat'.\n";
-    file.openPath(entry_name + "/isis_vms_compat");
-  }
-  catch(::NeXus::Exception&)
-  {
-    return false; // Doesn't exist
-  }
-
-  // The ISIS spectrum mapping is defined by 2 arrays in isis_vms_compat block:
-  //   UDET - An array of detector IDs
-  //   SPEC - An array of spectrum numbers
-  // There sizes must match. Hardware allows more than one detector ID to be mapped to a single spectrum
-  // and this is encoded in the SPEC/UDET arrays by repeating the spectrum number in the array
-  // for each mapped detector, e.g.
-  //
-  // 1 1001
-  // 1 1002
-  // 2 2001
-  // 3 3001
-  //
-  // defines 3 spectra, where the first spectrum contains 2 detectors
-
-  // UDET
-  file.openData("UDET");
-  std::vector<int32_t> udet;
-  file.getData(udet);
-  file.closeData();
-  // SPEC
-  file.openData("SPEC");
-  std::vector<int32_t> spec;
-  file.getData(spec);
-  file.closeData();
-  // Close 
-  file.closeGroup();
-  file.close();
-
-  // The spec array will contain a spectrum number for each udet but the spectrum number
-  // may be the same for more that one detector
-  const size_t ndets(udet.size());
-  if( ndets != spec.size() )
-  {
-    std::ostringstream os;
-    os << "UDET/SPEC list size mismatch. UDET=" << udet.size() << ", SPEC=" << spec.size() << "\n";
-    throw std::runtime_error(os.str());
-  }
-  // Monitor filtering/selection
-  const std::vector<detid_t> monitors = WS->getInstrument()->getMonitors();
-  const size_t nmons(monitors.size());
-  if( monitorsOnly )
-  {
-    g_log.debug() << "Loading only monitor spectra from " << filename << "\n";
-    // Find the det_ids in the udet array. 
-    WS->resizeTo(nmons);
-    for( size_t i = 0; i < nmons; ++i )
+    //-----------------------------------------------------------------------------
+    /**
+    * Returns whether the file contains monitors with events in them
+    * @returns True if the file contains monitors with event data, false otherwise
+    */
+    bool LoadEventNexus::hasEventMonitors()
     {
-      // Find the index in the udet array
-      const detid_t & id = monitors[i];
-      std::vector<int32_t>::const_iterator it = std::find(udet.begin(), udet.end(), id);
-      if( it != udet.end() )
+      bool result(false);
+      // Determine whether to load histograms or events
+      try
+      {
+        ::NeXus::File file(m_filename);
+        file.openPath(m_top_entry_name);
+        //Start with the base entry
+        typedef std::map<std::string,std::string> string_map_t; 
+        //Now we want to go through and find the monitors
+        string_map_t entries = file.getEntries();
+        for( string_map_t::const_iterator it = entries.begin(); it != entries.end(); ++it)
+        {
+          if( it->second == "NXmonitor" )
+          {
+            file.openGroup(it->first, it->second);
+            break;
+          }
+        }
+        file.openData("event_id");
+        result = true;
+        file.close();
+      }
+      catch(::NeXus::Exception &)
       {
-        auto spectrum = WS->getSpectrum(i);
-        const specid_t & specNo = spec[it - udet.begin()];
-        spectrum->setSpectrumNo(specNo);
-        spectrum->setDetectorID(id);
+        result = false;
       }
+      return result;
     }
-  }
-  else
-  {
-    g_log.debug() << "Loading only detector spectra from " << filename << "\n";
-    SpectrumDetectorMapping mapping(spec,udet, monitors);
-    WS->resizeTo(mapping.getMapping().size());
-    // Make sure spectrum numbers are correct
-    auto uniqueSpectra = mapping.getSpectrumNumbers();
-    auto itend = uniqueSpectra.end();
-    size_t counter = 0;
-    for(auto it = uniqueSpectra.begin(); it != itend; ++it)
-    {
-      WS->getSpectrum(counter)->setSpectrumNo(*it);
-      ++counter;
-    }
-    // Fill detectors based on this mapping
-    WS->updateSpectraUsing(mapping);
-  }
-  return true;
-}
-
-/**
- * Set the filters on TOF.
- * @param monitors :: If true check the monitor properties else use the standard ones
- */
-void LoadEventNexus::setTimeFilters(const bool monitors)
-{
-  //Get the limits to the filter
-  std::string prefix("Filter");
-  if(monitors) prefix += "Mon";
-
-  filter_tof_min = getProperty(prefix + "ByTofMin");
-  filter_tof_max = getProperty(prefix + "ByTofMax");
-  if ( (filter_tof_min == EMPTY_DBL()) &&  (filter_tof_max == EMPTY_DBL()))
-  {
-    //Nothing specified. Include everything
-    filter_tof_min = -1e20;
-    filter_tof_max = +1e20;
-  }
-  else if ( (filter_tof_min != EMPTY_DBL()) &&  (filter_tof_max != EMPTY_DBL()))
-  {
-    //Both specified. Keep these values
-  }
-  else
-  {
-    std::string msg("You must specify both min & max or neither TOF filters");
-    if(monitors) msg =  " for the monitors.";
-    throw std::invalid_argument(msg);
-  }
-
-}
 
-//-----------------------------------------------------------------------------
-//               ISIS event corrections
-//-----------------------------------------------------------------------------
-/**
- * Check if time_of_flight can be found in the file and load it 
- * @param nexusfilename :: The name of the ISIS nexus event file.
- * @param WS :: The event workspace which events will be modified.
- * @param entry_name :: An NXentry tag in the file
- * @param classType :: The type of the events: either detector or monitor
- */
-void LoadEventNexus::loadTimeOfFlight(const std::string &nexusfilename, DataObjects::EventWorkspace_sptr WS,
-  const std::string &entry_name, const std::string &classType)
-{
-  bool done = false;
-  // Open the file
-  ::NeXus::File file(nexusfilename);
-  file.openGroup(entry_name, "NXentry");
-  
-  typedef std::map<std::string,std::string> string_map_t; 
-  string_map_t entries = file.getEntries();
-
-  if (entries.find("detector_1_events") == entries.end())
-  {// not an ISIS file
-    return;
-  }
-
-  // try if monitors have their own bins
-  if (classType == "NXmonitor")
-  {
-    std::vector<std::string> bankNames;
-    for (string_map_t::const_iterator it = entries.begin(); it != entries.end(); ++it)
+    //-----------------------------------------------------------------------------
+    /**
+    * Load the Monitors from the NeXus file into a workspace. The original
+    * workspace name is used and appended with _monitors.
+    */
+    void LoadEventNexus::runLoadMonitors()
     {
-      std::string entry_name(it->first);
-      std::string entry_class(it->second);
-      if ( entry_class == classType )
+      std::string mon_wsname = this->getProperty("OutputWorkspace");
+      mon_wsname.append("_monitors");
+
+      IAlgorithm_sptr loadMonitors = this->createChildAlgorithm("LoadNexusMonitors");
+      try
       {
-        bankNames.push_back( entry_name );
+        g_log.information("Loading monitors from NeXus file...");
+        loadMonitors->setPropertyValue("Filename", m_filename);
+        g_log.information() << "New workspace name for monitors: " << mon_wsname << std::endl;
+        loadMonitors->setPropertyValue("OutputWorkspace", mon_wsname);
+        loadMonitors->execute();
+        MatrixWorkspace_sptr mons = loadMonitors->getProperty("OutputWorkspace");
+        this->declareProperty(new WorkspaceProperty<>("MonitorWorkspace",
+          mon_wsname, Direction::Output), "Monitors from the Event NeXus file");
+        this->setProperty("MonitorWorkspace", mons);
+        // Set the internal monitor workspace pointer as well
+        WS->setMonitorWorkspace(mons);
+
+        filterDuringPause(mons);
+      }
+      catch (...)
+      {
+        g_log.error("Error while loading the monitors from the file. File may contain no monitors.");
       }
     }
-    for(size_t i = 0; i < bankNames.size(); ++i)
+
+    //
+    /**
+    * Load a spectra mapping from the given file. This currently checks for the existence of
+    * an isis_vms_compat block in the file, if it exists it pulls out the spectra mapping listed there
+    * @param filename :: A filename
+    * @param monitorsOnly :: If true then only the monitor spectra are loaded
+    * @param entry_name :: name of the NXentry to open.
+    * @returns True if the mapping was loaded or false if the block does not exist
+    */
+    bool LoadEventNexus::loadSpectraMapping(const std::string& filename, const bool monitorsOnly, const std::string& entry_name )
     {
-      const std::string& mon = bankNames[i];
-      file.openGroup(mon,classType);
-      entries = file.getEntries();
-      string_map_t::const_iterator bins = entries.find("event_time_bins");
-      if (bins == entries.end())
-      {
-        //bins = entries.find("time_of_flight"); // I think time_of_flight doesn't work here
-        //if (bins == entries.end())
-        //{
-          done = false;
-          file.closeGroup();
-          break; // done == false => use bins from the detectors
-        //}
+      ::NeXus::File file(filename);
+      try
+      {
+        g_log.debug() << "Attempting to load custom spectra mapping from '" << entry_name << "/isis_vms_compat'.\n";
+        file.openPath(entry_name + "/isis_vms_compat");
+      }
+      catch(::NeXus::Exception&)
+      {
+        return false; // Doesn't exist
       }
-      done = true;
-      loadTimeOfFlightData(file,WS,bins->first,i,i+1);
+
+      // The ISIS spectrum mapping is defined by 2 arrays in isis_vms_compat block:
+      //   UDET - An array of detector IDs
+      //   SPEC - An array of spectrum numbers
+      // There sizes must match. Hardware allows more than one detector ID to be mapped to a single spectrum
+      // and this is encoded in the SPEC/UDET arrays by repeating the spectrum number in the array
+      // for each mapped detector, e.g.
+      //
+      // 1 1001
+      // 1 1002
+      // 2 2001
+      // 3 3001
+      //
+      // defines 3 spectra, where the first spectrum contains 2 detectors
+
+      // UDET
+      file.openData("UDET");
+      std::vector<int32_t> udet;
+      file.getData(udet);
+      file.closeData();
+      // SPEC
+      file.openData("SPEC");
+      std::vector<int32_t> spec;
+      file.getData(spec);
+      file.closeData();
+      // Close 
       file.closeGroup();
-    }
-  }
+      file.close();
 
-  if (!done)
-  {
-    // first check detector_1_events
-    file.openGroup("detector_1_events", "NXevent_data");
-    entries = file.getEntries();
-    for(string_map_t::const_iterator it = entries.begin();it != entries.end(); ++it)
+      // The spec array will contain a spectrum number for each udet but the spectrum number
+      // may be the same for more that one detector
+      const size_t ndets(udet.size());
+      if( ndets != spec.size() )
+      {
+        std::ostringstream os;
+        os << "UDET/SPEC list size mismatch. UDET=" << udet.size() << ", SPEC=" << spec.size() << "\n";
+        throw std::runtime_error(os.str());
+      }
+      // Monitor filtering/selection
+      const std::vector<detid_t> monitors = WS->getInstrument()->getMonitors();
+      const size_t nmons(monitors.size());
+      if( monitorsOnly )
+      {
+        g_log.debug() << "Loading only monitor spectra from " << filename << "\n";
+        // Find the det_ids in the udet array. 
+        WS->resizeTo(nmons);
+        for( size_t i = 0; i < nmons; ++i )
+        {
+          // Find the index in the udet array
+          const detid_t & id = monitors[i];
+          std::vector<int32_t>::const_iterator it = std::find(udet.begin(), udet.end(), id);
+          if( it != udet.end() )
+          {
+            auto spectrum = WS->getSpectrum(i);
+            const specid_t & specNo = spec[it - udet.begin()];
+            spectrum->setSpectrumNo(specNo);
+            spectrum->setDetectorID(id);
+          }
+        }
+      }
+      else
+      {
+				g_log.debug() << "Loading only detector spectra from " << filename << "\n";
+
+				// If optional spectra are provided, if so, m_specList is initialized. spec is used if necessary
+				createSpectraList(*std::min_element(spec.begin(),spec.end()), *std::max_element(spec.begin(),spec.end()));
+
+				if ( !m_specList.empty() ) {
+					int i=0;
+					std::vector<int32_t> spec_temp, udet_temp;
+					for(auto it=spec.begin(); it!=spec.end(); it++)
+					{
+						if ( find(m_specList.begin(),m_specList.end(),*it)!= m_specList.end() ) // spec element *it is not in spec_list
+						{
+							spec_temp.push_back( *it );
+							udet_temp.push_back( udet.at(i) );
+						}
+						i++;
+					}
+					spec=spec_temp;
+					udet=udet_temp;
+				}
+
+				SpectrumDetectorMapping mapping(spec,udet, monitors);
+				WS->resizeTo(mapping.getMapping().size());
+				// Make sure spectrum numbers are correct
+				auto uniqueSpectra = mapping.getSpectrumNumbers();
+				auto itend = uniqueSpectra.end();
+				size_t counter = 0;
+				for(auto it = uniqueSpectra.begin(); it != itend; ++it)
+				{
+					WS->getSpectrum(counter)->setSpectrumNo(*it);
+					++counter;
+				}
+				// Fill detectors based on this mapping
+				WS->updateSpectraUsing(mapping);
+			}
+			return true;
+		}
+
+    /**
+    * Set the filters on TOF.
+    * @param monitors :: If true check the monitor properties else use the standard ones
+    */
+    void LoadEventNexus::setTimeFilters(const bool monitors)
     {
-      if (it->first == "time_of_flight" || it->first == "event_time_bins")
+      //Get the limits to the filter
+      std::string prefix("Filter");
+      if(monitors) prefix += "Mon";
+
+      filter_tof_min = getProperty(prefix + "ByTofMin");
+      filter_tof_max = getProperty(prefix + "ByTofMax");
+      if ( (filter_tof_min == EMPTY_DBL()) &&  (filter_tof_max == EMPTY_DBL()))
+      {
+        //Nothing specified. Include everything
+        filter_tof_min = -1e20;
+        filter_tof_max = +1e20;
+      }
+      else if ( (filter_tof_min != EMPTY_DBL()) &&  (filter_tof_max != EMPTY_DBL()))
+      {
+        //Both specified. Keep these values
+      }
+      else
       {
-        loadTimeOfFlightData(file,WS,it->first);
-        done = true;
+        std::string msg("You must specify both min & max or neither TOF filters");
+        if(monitors) msg =  " for the monitors.";
+        throw std::invalid_argument(msg);
       }
+
     }
-    file.closeGroup(); // detector_1_events
 
-    if (!done) // if time_of_flight was not found try instrument/dae/time_channels_#
+    //-----------------------------------------------------------------------------
+    //               ISIS event corrections
+    //-----------------------------------------------------------------------------
+    /**
+    * Check if time_of_flight can be found in the file and load it 
+    * @param nexusfilename :: The name of the ISIS nexus event file.
+    * @param WS :: The event workspace which events will be modified.
+    * @param entry_name :: An NXentry tag in the file
+    * @param classType :: The type of the events: either detector or monitor
+    */
+    void LoadEventNexus::loadTimeOfFlight(const std::string &nexusfilename, DataObjects::EventWorkspace_sptr WS,
+      const std::string &entry_name, const std::string &classType)
     {
-      file.openGroup("instrument","NXinstrument");
-      file.openGroup("dae","IXdae");
-      entries = file.getEntries();
-      size_t time_channels_number = 0;
-      for(string_map_t::const_iterator it = entries.begin();it != entries.end(); ++it)
+      bool done = false;
+      // Open the file
+      ::NeXus::File file(nexusfilename);
+      file.openGroup(entry_name, "NXentry");
+
+      typedef std::map<std::string,std::string> string_map_t; 
+      string_map_t entries = file.getEntries();
+
+      if (entries.find("detector_1_events") == entries.end())
+      {// not an ISIS file
+        return;
+      }
+
+      // try if monitors have their own bins
+      if (classType == "NXmonitor")
       {
-        // check if there are groups with names "time_channels_#" and select the one with the highest number
-        if (it->first.size() > 14 && it->first.substr(0,14) == "time_channels_")
+        std::vector<std::string> bankNames;
+        for (string_map_t::const_iterator it = entries.begin(); it != entries.end(); ++it)
         {
-          size_t n = boost::lexical_cast<size_t>(it->first.substr(14));
-          if (n > time_channels_number) 
+          std::string entry_name(it->first);
+          std::string entry_class(it->second);
+          if ( entry_class == classType )
           {
-            time_channels_number = n;
+            bankNames.push_back( entry_name );
           }
         }
+        for(size_t i = 0; i < bankNames.size(); ++i)
+        {
+          const std::string& mon = bankNames[i];
+          file.openGroup(mon,classType);
+          entries = file.getEntries();
+          string_map_t::const_iterator bins = entries.find("event_time_bins");
+          if (bins == entries.end())
+          {
+            //bins = entries.find("time_of_flight"); // I think time_of_flight doesn't work here
+            //if (bins == entries.end())
+            //{
+            done = false;
+            file.closeGroup();
+            break; // done == false => use bins from the detectors
+            //}
+          }
+          done = true;
+          loadTimeOfFlightData(file,WS,bins->first,i,i+1);
+          file.closeGroup();
+        }
       }
-      if (time_channels_number > 0) // the numbers start with 1
+
+      if (!done)
       {
-        file.openGroup("time_channels_" + boost::lexical_cast<std::string>(time_channels_number),"IXtime_channels");
+        // first check detector_1_events
+        file.openGroup("detector_1_events", "NXevent_data");
         entries = file.getEntries();
         for(string_map_t::const_iterator it = entries.begin();it != entries.end(); ++it)
         {
           if (it->first == "time_of_flight" || it->first == "event_time_bins")
           {
             loadTimeOfFlightData(file,WS,it->first);
+            done = true;
           }
         }
-        file.closeGroup();
-      }
-      file.closeGroup(); // dae
-      file.closeGroup(); // instrument
-    }
-  }
+        file.closeGroup(); // detector_1_events
 
-  file.close();
-}
+        if (!done) // if time_of_flight was not found try instrument/dae/time_channels_#
+        {
+          file.openGroup("instrument","NXinstrument");
+          file.openGroup("dae","IXdae");
+          entries = file.getEntries();
+          size_t time_channels_number = 0;
+          for(string_map_t::const_iterator it = entries.begin();it != entries.end(); ++it)
+          {
+            // check if there are groups with names "time_channels_#" and select the one with the highest number
+            if (it->first.size() > 14 && it->first.substr(0,14) == "time_channels_")
+            {
+              size_t n = boost::lexical_cast<size_t>(it->first.substr(14));
+              if (n > time_channels_number) 
+              {
+                time_channels_number = n;
+              }
+            }
+          }
+          if (time_channels_number > 0) // the numbers start with 1
+          {
+            file.openGroup("time_channels_" + boost::lexical_cast<std::string>(time_channels_number),"IXtime_channels");
+            entries = file.getEntries();
+            for(string_map_t::const_iterator it = entries.begin();it != entries.end(); ++it)
+            {
+              if (it->first == "time_of_flight" || it->first == "event_time_bins")
+              {
+                loadTimeOfFlightData(file,WS,it->first);
+              }
+            }
+            file.closeGroup();
+          }
+          file.closeGroup(); // dae
+          file.closeGroup(); // instrument
+        }
+      }
 
-//-----------------------------------------------------------------------------
-/** 
- * Load the time of flight data. file must have open the group containing "time_of_flight" data set.
- * @param file :: The nexus file to read from.
- * @param WS :: The event workspace to write to.
- * @param binsName :: bins name
- * @param start_wi :: First workspace index to process
- * @param end_wi :: Last workspace index to process
- */
-void LoadEventNexus::loadTimeOfFlightData(::NeXus::File& file, DataObjects::EventWorkspace_sptr WS,
-  const std::string& binsName,size_t start_wi, size_t end_wi)
-{
-  // first check if the data is already randomized
-  std::map<std::string, std::string> entries;
-  file.getEntries(entries);
-  std::map<std::string, std::string>::const_iterator shift = entries.find("event_time_offset_shift");
-  if (shift != entries.end())
-  {
-    std::string random;
-    file.readData("event_time_offset_shift",random);
-    if (random == "random")
-    {
-      return;
+      file.close();
     }
-  }
-
-  // if the data is not randomized randomize it uniformly within each bin
-  file.openData(binsName);
-  // time of flights of events
-  std::vector<float> tof;
-  file.getData(tof);
-  // todo: try to find if tof can be reduced to just 3 numbers: start, end and dt
-  if (end_wi <= start_wi)
-  {
-    end_wi = WS->getNumberHistograms();
-  }
-
-  // random number generator
-  boost::mt19937 rand_gen;
 
-  // loop over spectra
-  for(size_t wi = start_wi; wi < end_wi; ++wi)
-  {
-    EventList& event_list = WS->getEventList(wi);
-    // sort the events
-    event_list.sortTof();
-    std::vector<TofEvent>& events = event_list.getEvents();
-    if (events.empty()) continue;
-    size_t n = tof.size();
-    // iterate over the events and time bins
-    std::vector<TofEvent>::iterator ev = events.begin();
-    std::vector<TofEvent>::iterator ev_end = events.end();
-    for(size_t i = 1; i < n; ++i)
+    //-----------------------------------------------------------------------------
+    /** 
+    * Load the time of flight data. file must have open the group containing "time_of_flight" data set.
+    * @param file :: The nexus file to read from.
+    * @param WS :: The event workspace to write to.
+    * @param binsName :: bins name
+    * @param start_wi :: First workspace index to process
+    * @param end_wi :: Last workspace index to process
+    */
+    void LoadEventNexus::loadTimeOfFlightData(::NeXus::File& file, DataObjects::EventWorkspace_sptr WS,
+      const std::string& binsName,size_t start_wi, size_t end_wi)
     {
-      double right = double(tof[i]);
-      // find the right boundary for the current event
-      if(ev != ev_end && right < ev->tof() )
-      {
-        continue;
-      }
-      // count events which have the same right boundary
-      size_t m = 0;
-      while(ev != ev_end && ev->tof() < right)
+      // first check if the data is already randomized
+      std::map<std::string, std::string> entries;
+      file.getEntries(entries);
+      std::map<std::string, std::string>::const_iterator shift = entries.find("event_time_offset_shift");
+      if (shift != entries.end())
       {
-        ++ev;
-        ++m;  // count events in the i-th bin
-      }
-      
-      if (m > 0)
-      {// m events in this bin
-        double left = double(tof[i-1]);
-        // spread the events uniformly inside the bin
-        boost::uniform_real<> distribution(left,right);
-        std::vector<double> random_numbers(m);
-        for(std::vector<double>::iterator it = random_numbers.begin(); it != random_numbers.end(); ++it)
-        {
-          *it = distribution(rand_gen);
-        }
-        std::sort(random_numbers.begin(),random_numbers.end());
-        std::vector<double>::iterator it = random_numbers.begin();
-        for(std::vector<TofEvent>::iterator ev1 = ev - m; ev1 != ev; ++ev1,++it)
+        std::string random;
+        file.readData("event_time_offset_shift",random);
+        if (random == "random")
         {
-          ev1->m_tof = *it;
+          return;
         }
       }
-      
-    } // for i
 
-    event_list.sortTof();
-  } // for wi
-  file.closeData();
-}
+      // if the data is not randomized randomize it uniformly within each bin
+      file.openData(binsName);
+      // time of flights of events
+      std::vector<float> tof;
+      file.getData(tof);
+      // todo: try to find if tof can be reduced to just 3 numbers: start, end and dt
+      if (end_wi <= start_wi)
+      {
+        end_wi = WS->getNumberHistograms();
+      }
 
-/** Load information of the sample. It is valid only for ISIS it get the information from 
- *  the group isis_vms_compat. 
- * 
- *   If it does not find this group, it assumes that there is nothing to do. 
- *   But, if the information is there, but not in the way it was expected, it will log the occurrence. 
- * 
- * @note: It does essentially the same thing of the method: LoadISISNexus2::loadSampleData
- * 
- * @param file : handle to the nexus file
- * @param WS : pointer to the workspace
- */
-void LoadEventNexus::loadSampleDataISIScompatibility(::NeXus::File& file, Mantid::API::MatrixWorkspace_sptr WS){
-  try
-  {
-    file.openGroup("isis_vms_compat", "IXvms");
-  }
-  catch( ::NeXus::Exception & )
-  {
-    // No problem, it just means that this entry does not exist
-    return;
-  }
+      // random number generator
+      boost::mt19937 rand_gen;
 
-  // read the data
-  try
-  {
-    std::vector<int32_t> spb; 
-    std::vector<float> rspb;
-    file.readData("SPB", spb);
-    file.readData("RSPB",rspb);
-    
-    WS->mutableSample().setGeometryFlag(spb[2]); // the flag is in the third value
-    WS->mutableSample().setThickness(rspb[3]); 
-    WS->mutableSample().setHeight(rspb[4]); 
-    WS->mutableSample().setWidth(rspb[5]); 
-  }
-  catch ( ::NeXus::Exception & ex)
-  {
-    // it means that the data was not as expected, report the problem
-    std::stringstream s;
-    s << "Wrong definition found in isis_vms_compat :> " << ex.what(); 
-    file.closeGroup();
-    throw std::runtime_error(s.str());
-  }
-
-  file.closeGroup();
-}
+      // loop over spectra
+      for(size_t wi = start_wi; wi < end_wi; ++wi)
+      {
+        EventList& event_list = WS->getEventList(wi);
+        // sort the events
+        event_list.sortTof();
+        std::vector<TofEvent>& events = event_list.getEvents();
+        if (events.empty()) continue;
+        size_t n = tof.size();
+        // iterate over the events and time bins
+        std::vector<TofEvent>::iterator ev = events.begin();
+        std::vector<TofEvent>::iterator ev_end = events.end();
+        for(size_t i = 1; i < n; ++i)
+        {
+          double right = double(tof[i]);
+          // find the right boundary for the current event
+          if(ev != ev_end && right < ev->tof() )
+          {
+            continue;
+          }
+          // count events which have the same right boundary
+          size_t m = 0;
+          while(ev != ev_end && ev->tof() < right)
+          {
+            ++ev;
+            ++m;  // count events in the i-th bin
+          }
 
-void LoadEventNexus::filterDuringPause(API::MatrixWorkspace_sptr workspace)
-{
-  try {
-    if ( ( ! ConfigService::Instance().hasProperty("loadeventnexus.keeppausedevents") ) && ( WS->run().getLogData("pause")->size() > 1 ) )
-    {
-      g_log.notice("Filtering out events when the run was marked as paused. "
-          "Set the loadeventnexus.keeppausedevents configuration property to override this.");
-
-      auto filter = createChildAlgorithm("FilterByLogValue");
-      filter->setProperty("InputWorkspace", workspace);
-      filter->setProperty("OutputWorkspace", workspace);
-      filter->setProperty("LogName", "pause");
-      // The log value is set to 1 when the run is paused, 0 otherwise.
-      filter->setProperty("MinimumValue", 0.0);
-      filter->setProperty("MaximumValue", 0.0);
-      filter->setProperty("LogBoundary", "Left");
-      filter->execute();
-    }
-  } catch ( Exception::NotFoundError& ) {
-    // No "pause" log, just carry on
-  }
-}
+          if (m > 0)
+          {// m events in this bin
+            double left = double(tof[i-1]);
+            // spread the events uniformly inside the bin
+            boost::uniform_real<> distribution(left,right);
+            std::vector<double> random_numbers(m);
+            for(std::vector<double>::iterator it = random_numbers.begin(); it != random_numbers.end(); ++it)
+            {
+              *it = distribution(rand_gen);
+            }
+            std::sort(random_numbers.begin(),random_numbers.end());
+            std::vector<double>::iterator it = random_numbers.begin();
+            for(std::vector<TofEvent>::iterator ev1 = ev - m; ev1 != ev; ++ev1,++it)
+            {
+              ev1->m_tof = *it;
+            }
+          }
 
+        } // for i
 
-/** Load the instrument from the nexus file
-  *
-  * @param nexusfilename :: The name of the nexus file being loaded
-  * @param localWorkspace :: MatrixWorkspace in which to put the instrument geometry
-  * @param alg :: Handle of the algorithm
-  * @param returnpulsetimes :: flag to return shared pointer for BankPulseTimes, otherwise NULL.
-  * @return true if successful
-  */
-boost::shared_ptr<BankPulseTimes> LoadEventNexus::runLoadNexusLogs(const std::string &nexusfilename,
-                                                                   API::MatrixWorkspace_sptr localWorkspace,
-                                                                   API::Algorithm &alg, bool returnpulsetimes)
-{
-  // --------------------- Load DAS Logs -----------------
-  //The pulse times will be empty if not specified in the DAS logs.
-  // BankPulseTimes * out = NULL;
-  boost::shared_ptr<BankPulseTimes> out;
-  API::IAlgorithm_sptr loadLogs = alg.createChildAlgorithm("LoadNexusLogs");
-
-  // Now execute the Child Algorithm. Catch and log any error, but don't stop.
-  try
-  {
-    alg.getLogger().information() << "Loading logs from NeXus file..." << "\n";
-    loadLogs->setPropertyValue("Filename", nexusfilename);
-    loadLogs->setProperty<API::MatrixWorkspace_sptr> ("Workspace", localWorkspace);
-    loadLogs->execute();
+        event_list.sortTof();
+      } // for wi
+      file.closeData();
+    }
 
-    //If successful, we can try to load the pulse times
-    Kernel::TimeSeriesProperty<double> * log = dynamic_cast<Kernel::TimeSeriesProperty<double> *>(
-          localWorkspace->mutableRun().getProperty("proton_charge") );
-    const std::vector<Kernel::DateAndTime> temp = log->timesAsVector();
-    // if (returnpulsetimes) out = new BankPulseTimes(temp);
-    if (returnpulsetimes)
-      out = boost::make_shared<BankPulseTimes>(temp);
+    /** Load information of the sample. It is valid only for ISIS it get the information from 
+    *  the group isis_vms_compat. 
+    * 
+    *   If it does not find this group, it assumes that there is nothing to do. 
+    *   But, if the information is there, but not in the way it was expected, it will log the occurrence. 
+    * 
+    * @note: It does essentially the same thing of the method: LoadISISNexus2::loadSampleData
+    * 
+    * @param file : handle to the nexus file
+    * @param WS : pointer to the workspace
+    */
+    void LoadEventNexus::loadSampleDataISIScompatibility(::NeXus::File& file, Mantid::API::MatrixWorkspace_sptr WS){
+      try
+      {
+        file.openGroup("isis_vms_compat", "IXvms");
+      }
+      catch( ::NeXus::Exception & )
+      {
+        // No problem, it just means that this entry does not exist
+        return;
+      }
 
-    // Use the first pulse as the run_start time.
-    if (!temp.empty())
-    {
-      if (temp[0] < Kernel::DateAndTime("1991-01-01T00:00:00"))
-        alg.getLogger().warning() << "Found entries in the proton_charge sample log with invalid pulse time!\n";
+      // read the data
+      try
+      {
+        std::vector<int32_t> spb; 
+        std::vector<float> rspb;
+        file.readData("SPB", spb);
+        file.readData("RSPB",rspb);
+
+        WS->mutableSample().setGeometryFlag(spb[2]); // the flag is in the third value
+        WS->mutableSample().setThickness(rspb[3]); 
+        WS->mutableSample().setHeight(rspb[4]); 
+        WS->mutableSample().setWidth(rspb[5]); 
+      }
+      catch ( ::NeXus::Exception & ex)
+      {
+        // it means that the data was not as expected, report the problem
+        std::stringstream s;
+        s << "Wrong definition found in isis_vms_compat :> " << ex.what(); 
+        file.closeGroup();
+        throw std::runtime_error(s.str());
+      }
 
-      Kernel::DateAndTime run_start = localWorkspace->getFirstPulseTime();
-      // add the start of the run as a ISO8601 date/time string. The start = first non-zero time.
-      // (this is used in LoadInstrument to find the right instrument file to use).
-      localWorkspace->mutableRun().addProperty("run_start", run_start.toISO8601String(), true );
-    }
-    else
-    {
-      alg.getLogger().warning() << "Empty proton_charge sample log. You will not be able to filter by time.\n";
+      file.closeGroup();
     }
-    /// Attempt to make a gonoimeter from the logs
-    try
+
+    void LoadEventNexus::filterDuringPause(API::MatrixWorkspace_sptr workspace)
     {
-      Geometry::Goniometer gm;
-      gm.makeUniversalGoniometer();
-      localWorkspace->mutableRun().setGoniometer(gm, true);
+      try {
+        if ( ( ! ConfigService::Instance().hasProperty("loadeventnexus.keeppausedevents") ) && ( WS->run().getLogData("pause")->size() > 1 ) )
+        {
+          g_log.notice("Filtering out events when the run was marked as paused. "
+            "Set the loadeventnexus.keeppausedevents configuration property to override this.");
+
+          auto filter = createChildAlgorithm("FilterByLogValue");
+          filter->setProperty("InputWorkspace", workspace);
+          filter->setProperty("OutputWorkspace", workspace);
+          filter->setProperty("LogName", "pause");
+          // The log value is set to 1 when the run is paused, 0 otherwise.
+          filter->setProperty("MinimumValue", 0.0);
+          filter->setProperty("MaximumValue", 0.0);
+          filter->setProperty("LogBoundary", "Left");
+          filter->execute();
+        }
+      } catch ( Exception::NotFoundError& ) {
+        // No "pause" log, just carry on
+      }
     }
-    catch(std::runtime_error &)
+
+
+    /** Load the instrument from the nexus file
+    *
+    * @param nexusfilename :: The name of the nexus file being loaded
+    * @param localWorkspace :: MatrixWorkspace in which to put the instrument geometry
+    * @param alg :: Handle of the algorithm
+    * @param returnpulsetimes :: flag to return shared pointer for BankPulseTimes, otherwise NULL.
+    * @return true if successful
+    */
+    boost::shared_ptr<BankPulseTimes> LoadEventNexus::runLoadNexusLogs(const std::string &nexusfilename,
+      API::MatrixWorkspace_sptr localWorkspace,
+      API::Algorithm &alg, bool returnpulsetimes)
     {
+      // --------------------- Load DAS Logs -----------------
+      //The pulse times will be empty if not specified in the DAS logs.
+      // BankPulseTimes * out = NULL;
+      boost::shared_ptr<BankPulseTimes> out;
+      API::IAlgorithm_sptr loadLogs = alg.createChildAlgorithm("LoadNexusLogs");
+
+      // Now execute the Child Algorithm. Catch and log any error, but don't stop.
+      try
+      {
+        alg.getLogger().information() << "Loading logs from NeXus file..." << "\n";
+        loadLogs->setPropertyValue("Filename", nexusfilename);
+        loadLogs->setProperty<API::MatrixWorkspace_sptr> ("Workspace", localWorkspace);
+        loadLogs->execute();
+
+        //If successful, we can try to load the pulse times
+        Kernel::TimeSeriesProperty<double> * log = dynamic_cast<Kernel::TimeSeriesProperty<double> *>(
+          localWorkspace->mutableRun().getProperty("proton_charge") );
+        const std::vector<Kernel::DateAndTime> temp = log->timesAsVector();
+        // if (returnpulsetimes) out = new BankPulseTimes(temp);
+        if (returnpulsetimes)
+          out = boost::make_shared<BankPulseTimes>(temp);
+
+        // Use the first pulse as the run_start time.
+        if (!temp.empty())
+        {
+          if (temp[0] < Kernel::DateAndTime("1991-01-01T00:00:00"))
+            alg.getLogger().warning() << "Found entries in the proton_charge sample log with invalid pulse time!\n";
+
+          Kernel::DateAndTime run_start = localWorkspace->getFirstPulseTime();
+          // add the start of the run as a ISO8601 date/time string. The start = first non-zero time.
+          // (this is used in LoadInstrument to find the right instrument file to use).
+          localWorkspace->mutableRun().addProperty("run_start", run_start.toISO8601String(), true );
+        }
+        else
+        {
+          alg.getLogger().warning() << "Empty proton_charge sample log. You will not be able to filter by time.\n";
+        }
+        /// Attempt to make a gonoimeter from the logs
+        try
+        {
+          Geometry::Goniometer gm;
+          gm.makeUniversalGoniometer();
+          localWorkspace->mutableRun().setGoniometer(gm, true);
+        }
+        catch(std::runtime_error &)
+        {
+        }
+      }
+      catch (...)
+      {
+        alg.getLogger().error() << "Error while loading Logs from SNS Nexus. Some sample logs may be missing." << "\n";
+        return out;
+      }
+      return out;
     }
-  }
-  catch (...)
-  {
-    alg.getLogger().error() << "Error while loading Logs from SNS Nexus. Some sample logs may be missing." << "\n";
-    return out;
-  }
-  return out;
-}
 
+/**
+* Check the validity of the optional spectrum range/list provided and identify if partial data should be loaded.
+*
+* @param min :: The minimum spectrum number read from file
+* @param max :: The maximum spectrum number read from file
+*/
+
+void LoadEventNexus::createSpectraList(int32_t min, int32_t max){
+
+	// check if range [SpectrumMin, SpectrumMax] was supplied
+	if( m_specMin != EMPTY_INT() || m_specMax != EMPTY_INT() )
+	{
+		if ( m_specMax == EMPTY_INT() )
+		{
+			m_specMax = max;
+		}
+		if ( m_specMin == EMPTY_INT() )
+		{
+			m_specMin = min;
+		}
+
+		if ( m_specMax > max )
+		{
+			throw std::invalid_argument("Inconsistent range property: SpectrumMax is larger than maximum spectrum found in file.");
+		}
+
+		// Sanity checks for min/max
+		if ( m_specMin > m_specMax ) 
+		{
+			throw std::invalid_argument("Inconsistent range property: SpectrumMin is larger than SpectrumMax.");
+		}
+
+		// Populate spec_list
+		for (int32_t i=m_specMin; i<=m_specMax; i++)
+			m_specList.push_back(i);
+	}
+	else{
+		// Check if SpectrumList was supplied
+
+		if ( !m_specList.empty() )
+		{
+			// Check no negative/zero numbers have been passed
+			std::vector<int32_t>::iterator itr = std::find_if(m_specList.begin(), m_specList.end(), std::bind2nd(std::less<int32_t>(), 1));
+			if( itr != m_specList.end() )
+			{
+				throw std::invalid_argument("Negative/Zero SpectraList property encountered.");
+			}
+			
+			// Check range and set m_specMax to maximum value in m_specList
+			if ( (m_specMax=*std::max_element(m_specList.begin(),m_specList.end())) > *std::max_element(m_specList.begin(),m_specList.end()) )
+			{
+				throw std::invalid_argument("Inconsistent range property: SpectrumMax is larger than number of spectra.");
+			}
+
+			// Set m_specMin to minimum value in m_specList
+			m_specMin=*std::min_element(m_specList.begin(),m_specList.end());
+		}
+
+	}
+
+	if ( !m_specList.empty() ) {
+
+		 // Check that spectra supplied by user do not correspond to monitors
+		auto nmonitors = WS->getInstrument()->getMonitors().size();
+
+		for( size_t i = 0; i < nmonitors; ++i )
+		{
+			if ( std::find(m_specList.begin(),m_specList.end(),i+1)!= m_specList.end() )
+			{
+				throw std::invalid_argument("Inconsistent range property: some of the selected spectra correspond to monitors.");
+			}
+		}
+
+	}
+
+}
 
-} // namespace DataHandling
+  } // namespace DataHandling
 } // namespace Mantid
diff --git a/Code/Mantid/Framework/DataHandling/src/LoadFITS.cpp b/Code/Mantid/Framework/DataHandling/src/LoadFITS.cpp
index 5b200bba28a6851f532420d2a199d66232d574f7..156624e622246bb78393a92b6ecf15a10102ab9a 100644
--- a/Code/Mantid/Framework/DataHandling/src/LoadFITS.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/LoadFITS.cpp
@@ -5,6 +5,7 @@
 #include "MantidKernel/UnitFactory.h"
 #include <boost/algorithm/string.hpp>
 #include <Poco/BinaryReader.h>
+#include <fstream>
 
 using namespace Mantid::DataHandling;
 using namespace Mantid::API;
@@ -13,380 +14,463 @@ using namespace std;
 using namespace boost;
 using Poco::BinaryReader;
 
+namespace 
+{    
+  /**
+  * Used with find_if to check a string isn't a fits file (by checking extension)
+  * @param s string to check for extension
+  * @returns bool Value indicating if the string ends with .fits or not
+  */
+  bool IsNotFits(std::string s)
+  {
+    std::string tmp = s;
+    to_lower(tmp);
+    return !ends_with(tmp,".fits");
+  }
+}
 
 namespace Mantid
 {
 namespace DataHandling
 {
-	// Register the algorithm into the AlgorithmFactory
-	DECLARE_FILELOADER_ALGORITHM(LoadFITS);
-
-	/**
-	* Return the confidence with with this algorithm can load the file
-	* @param descriptor A descriptor for the file
-	* @returns An integer specifying the confidence level. 0 indicates it will not be used
-	*/
-	int LoadFITS::confidence(Kernel::FileDescriptor & descriptor) const
-	{
-		// Should really improve this to check the file header (of first file at least) to make sure it contains the fields wanted
-		return (descriptor.extension() == ".fits" || descriptor.extension() == ".fit") ? 80 : 0; 
-	}
-	
-	/**
-	* Initialise the algorithm. Declare properties which can be set before execution (input) or 
-	* read from after the execution (output).
-	*/
-	void LoadFITS::init()
-	{
-		// Specify file extensions which can be associated with a FITS file.
-		std::vector<std::string> exts;
-
-		// Declare the Filename algorithm property. Mandatory. Sets the path to the file to load.
-		exts.clear();
-		exts.push_back(".fits");
-		exts.push_back(".fit");
-		
-		declareProperty(new MultipleFileProperty("Filename", exts), "The input filename of the stored data");
-		declareProperty(new PropertyWithValue<size_t>("FileChunkSize", 100, Direction::Input), "Number of files to read into memory at a time - use lower values for machines with low memory");
-		
-		declareProperty(new API::WorkspaceProperty<API::MatrixWorkspace>("OutputWorkspace", "", Kernel::Direction::Output));    
-	}
-
-	/**
-	* Execute the algorithm.
-	*/
-	void LoadFITS::exec()
-	{	 
-		// Create FITS file information for each file selected
-		std::vector<std::string> paths;
-		string fName = getPropertyValue("Filename");
-		boost::split(paths, fName, boost::is_any_of(","));
-		m_binChunkSize = getProperty("FileChunkSize");
-
-		// Shrink chunk size to match number of files if it's over the amount (less memory allocated later)
-		if(m_binChunkSize > paths.size()) m_binChunkSize = static_cast<int>(paths.size());
-
-		m_allHeaderInfo.resize(paths.size());
-
-		// Check each header is valid for this loader, - standard (no extension to FITS), and has two axis
-		bool headerValid = true;
-
-		for(size_t i=0; i<paths.size();++i)
-		{
-			m_allHeaderInfo[i].extension = "";
-			m_allHeaderInfo[i].filePath = paths[i];
-			// Get various pieces of information from the file header which are used to create the workspace
-			if(parseHeader(m_allHeaderInfo[i]))
-			{
-				// Get and convert specific standard header values which will help when parsing the data
-				// BITPIX, NAXIS, NAXISi (where i = 1..NAXIS, e.g. NAXIS2 for two axis), TOF, TIMEBIN, N_COUNTS, N_TRIGS
-				try
-				{
-					m_allHeaderInfo[i].bitsPerPixel = lexical_cast<int>(m_allHeaderInfo[i].headerKeys["BITPIX"]);
-					m_allHeaderInfo[i].numberOfAxis = lexical_cast<int>(m_allHeaderInfo[i].headerKeys["NAXIS"]);
-			
-					for(int j=0; j<m_allHeaderInfo[i].numberOfAxis; ++j)
-					{
-						string keyName = "NAXIS" + lexical_cast<string>(j+1);
-						m_allHeaderInfo[i].axisPixelLengths.push_back(lexical_cast<int>(m_allHeaderInfo[i].headerKeys[keyName]));
-					}
-
-					m_allHeaderInfo[i].tof = lexical_cast<double>(m_allHeaderInfo[i].headerKeys["TOF"]);
-					m_allHeaderInfo[i].timeBin = lexical_cast<double>(m_allHeaderInfo[i].headerKeys["TIMEBIN"]);
-					m_allHeaderInfo[i].countsInImage = lexical_cast<long int>(m_allHeaderInfo[i].headerKeys["N_COUNTS"]);
-					m_allHeaderInfo[i].numberOfTriggers = lexical_cast<long int>(m_allHeaderInfo[i].headerKeys["N_TRIGS"]);
-					m_allHeaderInfo[i].extension = m_allHeaderInfo[i].headerKeys["XTENSION"]; // Various extensions are available to the FITS format, and must be parsed differently if this is present. Loader doesn't support this.
-
-				}
-				catch(std::exception &)
-				{
-					//todo write error and fail this load with invalid data in file.
-					g_log.error("Unable to locate one or more valid BITPIX, NAXIS, TOF, TIMEBIN, N_COUNTS or N_TRIGS values in the FITS file header.");
-					throw std::runtime_error("Unable to locate one or more valid BITPIX, NAXIS, TOF, TIMEBIN, N_COUNTS or N_TRIGS values in the FITS file header.");
-				}
-
-				if(m_allHeaderInfo[i].extension != "") headerValid = false;
-				if(m_allHeaderInfo[i].numberOfAxis != 2) headerValid = false;
-
-				// Test current item has same axis values as first item.
-				if(m_allHeaderInfo[0].axisPixelLengths[0] != m_allHeaderInfo[i].axisPixelLengths[0]) headerValid = false;
-				if(m_allHeaderInfo[0].axisPixelLengths[1] != m_allHeaderInfo[i].axisPixelLengths[1]) headerValid = false;
-			}
-			else
-			{
-				// Unable to parse the header, throw.
-				g_log.error("Unable to open the FITS file.");
-				throw std::runtime_error("Unable to open the FITS file.");
-			}
-
-		}
-
-		// Check that the files use bit depths of either 8, 16 or 32
-		if(m_allHeaderInfo[0].bitsPerPixel != 8 && m_allHeaderInfo[0].bitsPerPixel != 16 && m_allHeaderInfo[0].bitsPerPixel != 32) 
-		{
-			 g_log.error("FITS Loader only supports 8, 16 or 32 bits per pixel.");
-			 throw std::runtime_error("FITS loader only supports 8, 16 or 32 bits per pixel.");
-		}
-
-		// Check the format is correct and create the Workspace  
-		if(headerValid)
-		{
-			// No extension is set, therefore it's the standard format which we can parse.
-			
-			// Delete the output workspace name if it existed
-			std::string outName = getPropertyValue("OutputWorkspace");
-			if (AnalysisDataService::Instance().doesExist(outName))   AnalysisDataService::Instance().remove(outName);
-						
-			MatrixWorkspace_sptr ws;
-			
-			ws = initAndPopulateHistogramWorkspace();    
-
-			// Assign it to the output workspace property
-			setProperty("OutputWorkspace",ws);
-		}
-		else
-		{
-			// Invalid files, record error
-			 g_log.error("Loader currently doesn't support FITS files with non-standard extensions, greater than two axis of data, or has detected that all the files are not similar.");
-			 throw std::runtime_error("Loader currently doesn't support FITS files with non-standard extensions, greater than two axis of data, or has detected that all the files are not similar.");
-		}    
-	}
-
-	/**
-	* Read a single files header and populate an object with the information
-	* @param headerInfo A FITSInfo file object to parse header information into
-	* @returns A bool specifying succes of the operation
-	*/
-	bool LoadFITS::parseHeader(FITSInfo &headerInfo)
-	{		
-		bool ranSuccessfully = true;
-		try
-		{
-			ifstream istr(headerInfo.filePath.c_str(), ios::binary);
-			Poco::BinaryReader reader(istr);
-	
-			// Iterate 80 bytes at a time until header is parsed | 2880 bytes is the fixed header length of FITS
-			// 2880/80 = 36 iterations required
-			for(int i=0; i < 36; ++i)
-			{   
-				// Keep vect of each header item, including comments, and also keep a map of individual keys.
-				string part;
-				reader.readRaw(80,part);  
-				headerInfo.headerItems.push_back(part);
-		
-				// Add key/values - these are separated by the = symbol. 
-				// If it doesn't have an = it's a comment to ignore. All keys should be unique
-				auto eqPos = part.find('=');
-				if(eqPos > 0)
-				{        
-					string key = part.substr(0, eqPos);
-					string value = part.substr(eqPos+1);
-				
-					// Comments are added after the value separated by a / symbol. Remove.
-					auto slashPos = value.find('/');
-					if(slashPos > 0) value = value.substr(0, slashPos);
+  // Register the algorithm into the AlgorithmFactory
+  DECLARE_FILELOADER_ALGORITHM(LoadFITS);
+
+  /**
+  * Return the confidence with with this algorithm can load the file
+  * @param descriptor A descriptor for the file
+  * @returns An integer specifying the confidence level. 0 indicates it will not be used
+  */
+  int LoadFITS::confidence(Kernel::FileDescriptor & descriptor) const
+  {
+    // Should really improve this to check the file header (of first file at least) to make sure it contains the fields wanted
+    return (descriptor.extension() == ".fits" || descriptor.extension() == ".fit") ? 80 : 0; 
+  }
+  
+  /**
+  * Initialise the algorithm. Declare properties which can be set before execution (input) or 
+  * read from after the execution (output).
+  */
+  void LoadFITS::init()
+  {
+    // Specify file extensions which can be associated with a FITS file.
+    std::vector<std::string> exts;
+
+    // Declare the Filename algorithm property. Mandatory. Sets the path to the file to load.
+    exts.clear();
+    exts.push_back(".fits");
+    exts.push_back(".fit");
+    
+    declareProperty(new MultipleFileProperty("Filename", exts), "The input filename of the stored data");
+    declareProperty(new PropertyWithValue<size_t>("FileChunkSize", 100, Direction::Input), "Number of files to read into memory at a time - use lower values for machines with low memory");
+    
+    declareProperty(new API::WorkspaceProperty<API::MatrixWorkspace>("OutputWorkspace", "", Kernel::Direction::Output));    
+  }
+
+  /**
+  * Execute the algorithm.
+  */
+  void LoadFITS::exec()
+  {	 
+    // Create FITS file information for each file selected
+    std::vector<std::string> paths;
+    string fName = getPropertyValue("Filename");
+    boost::split(paths, fName, boost::is_any_of(","));
+    m_binChunkSize = getProperty("FileChunkSize");
+    
+    // If paths contains a non fits file, assume (for now) that it contains information about the rotations
+    std::string rotFilePath = "";
+    std::vector<std::string>::iterator it = std::find_if(paths.begin(),paths.end(),IsNotFits);
+    if(it != paths.end())
+    {
+      rotFilePath = *it;
+      paths.erase(it);
+    }
+    
+    // Shrink chunk size to match number of files if it's over the amount (less memory allocated later)
+    if(m_binChunkSize > paths.size()) m_binChunkSize = static_cast<int>(paths.size());
+
+    m_allHeaderInfo.resize(paths.size());
+
+    // Check each header is valid for this loader, - standard (no extension to FITS), and has two axis
+    bool headerValid = true;
+
+    for(size_t i=0; i<paths.size();++i)
+    {
+      m_allHeaderInfo[i].extension = "";
+      m_allHeaderInfo[i].filePath = paths[i];
+      // Get various pieces of information from the file header which are used to create the workspace
+      if(parseHeader(m_allHeaderInfo[i]))
+      {
+        // Get and convert specific standard header values which will help when parsing the data
+        // BITPIX, NAXIS, NAXISi (where i = 1..NAXIS, e.g. NAXIS2 for two axis), TOF, TIMEBIN, N_COUNTS, N_TRIGS
+        try
+        {
+          string tmpBitPix = m_allHeaderInfo[i].headerKeys["BITPIX"];
+          if(boost::contains(tmpBitPix, "-")) 
+            boost::erase_all(tmpBitPix,"-");
+          m_allHeaderInfo[i].bitsPerPixel = lexical_cast<int>(tmpBitPix);
+          m_allHeaderInfo[i].numberOfAxis = lexical_cast<int>(m_allHeaderInfo[i].headerKeys["NAXIS"]);
+      
+          for(int j=0; j<m_allHeaderInfo[i].numberOfAxis; ++j)
+          {
+            string keyName = "NAXIS" + lexical_cast<string>(j+1);
+            m_allHeaderInfo[i].axisPixelLengths.push_back(lexical_cast<int>(m_allHeaderInfo[i].headerKeys[keyName]));
+          }
+
+          //m_allHeaderInfo[i].tof = lexical_cast<double>(m_allHeaderInfo[i].headerKeys["TOF"]);
+          //m_allHeaderInfo[i].timeBin = lexical_cast<double>(m_allHeaderInfo[i].headerKeys["TIMEBIN"]);
+          //m_allHeaderInfo[i].countsInImage = lexical_cast<long int>(m_allHeaderInfo[i].headerKeys["N_COUNTS"]);
+          //m_allHeaderInfo[i].numberOfTriggers = lexical_cast<long int>(m_allHeaderInfo[i].headerKeys["N_TRIGS"]);
+          m_allHeaderInfo[i].extension = m_allHeaderInfo[i].headerKeys["XTENSION"]; // Various extensions are available to the FITS format, and must be parsed differently if this is present. Loader doesn't support this.
+
+        }
+        catch(std::exception &)
+        {
+          //todo write error and fail this load with invalid data in file.
+          throw std::runtime_error("Unable to locate one or more valid BITPIX, NAXIS, TOF, TIMEBIN, N_COUNTS or N_TRIGS values in the FITS file header.");
+        }
+
+        if(m_allHeaderInfo[i].extension != "") headerValid = false;
+        if(m_allHeaderInfo[i].numberOfAxis != 2) headerValid = false;
+
+        // Test current item has same axis values as first item.
+        if(m_allHeaderInfo[0].axisPixelLengths[0] != m_allHeaderInfo[i].axisPixelLengths[0]) headerValid = false;
+        if(m_allHeaderInfo[0].axisPixelLengths[1] != m_allHeaderInfo[i].axisPixelLengths[1]) headerValid = false;
+      }
+      else
+      {
+        // Unable to parse the header, throw.
+        throw std::runtime_error("Unable to open the FITS file.");
+      }
+
+    }
+
+    // Check that the files use bit depths of either 8, 16 or 32
+    if(m_allHeaderInfo[0].bitsPerPixel != 8 && m_allHeaderInfo[0].bitsPerPixel != 16 && m_allHeaderInfo[0].bitsPerPixel != 32) 
+    {
+       throw std::runtime_error("FITS loader only supports 8, 16 or 32 bits per pixel.");
+    }
+
+    // Check the format is correct and create the Workspace  
+    if(headerValid)
+    {
+      // No extension is set, therefore it's the standard format which we can parse.
+      
+      // Delete the output workspace name if it existed
+      std::string outName = getPropertyValue("OutputWorkspace");
+      if (AnalysisDataService::Instance().doesExist(outName))   AnalysisDataService::Instance().remove(outName);
+            
+      MatrixWorkspace_sptr ws;
+      
+      ws = initAndPopulateHistogramWorkspace();    
+
+      // Set info in WS log to hold rotational information
+      if(rotFilePath != "")
+      {
+        string csvRotations = ReadRotations(rotFilePath, paths.size());
+        Run &theRun = ws->mutableRun();
+        theRun.addLogData(new PropertyWithValue<std::string>("Rotations", csvRotations));  
+      }
+
+      // Assign it to the output workspace property
+      setProperty("OutputWorkspace",ws);
+    }
+    else
+    {
+      // Invalid files, record error
+       throw std::runtime_error("Loader currently doesn't support FITS files with non-standard extensions, greater than two axis of data, or has detected that all the files are not similar.");
+    }    
+  }
+
+  /**
+  * Read a single files header and populate an object with the information
+  * @param headerInfo A FITSInfo file object to parse header information into
+  * @returns A bool specifying succes of the operation
+  */
+  bool LoadFITS::parseHeader(FITSInfo &headerInfo)
+  {		
+    bool ranSuccessfully = true;
+    try
+    {
+      ifstream istr(headerInfo.filePath.c_str(), ios::binary);
+      Poco::BinaryReader reader(istr);
+  
+      // Iterate 80 bytes at a time until header is parsed | 2880 bytes is the fixed header length of FITS
+      // 2880/80 = 36 iterations required
+      for(int i=0; i < 36; ++i)
+      {   
+        // Keep vect of each header item, including comments, and also keep a map of individual keys.
+        string part;
+        reader.readRaw(80,part);  
+        headerInfo.headerItems.push_back(part);
+    
+        // Add key/values - these are separated by the = symbol. 
+        // If it doesn't have an = it's a comment to ignore. All keys should be unique
+        auto eqPos = part.find('=');
+        if(eqPos > 0)
+        {        
+          string key = part.substr(0, eqPos);
+          string value = part.substr(eqPos+1);
+        
+          // Comments are added after the value separated by a / symbol. Remove.
+          auto slashPos = value.find('/');
+          if(slashPos > 0) value = value.substr(0, slashPos);
  
-					boost::trim(key);
-					boost::trim(value);
-					headerInfo.headerKeys[key] = value;
-				}    
-			}
-
-			istr.close();
-		}
-		catch(...)
-		{
-			// Unable to read the file
-			ranSuccessfully = false;
-		}
-
-		return ranSuccessfully;
-	}
-
-	/**
-	* Create histogram workspace
-	* @returns Created workspace
-	*/
-	MatrixWorkspace_sptr LoadFITS::initAndPopulateHistogramWorkspace()
-	{		
-		MantidVecPtr x;
-		x.access().resize(m_allHeaderInfo.size() + 1);
-
-		// Init time bins
-		double binCount = 0;
-		for(size_t i=0;i<m_allHeaderInfo.size() + 1; ++i)
-		{
-			x.access()[i] = binCount;
-			if(i != m_allHeaderInfo.size()) binCount += m_allHeaderInfo[i].timeBin;
-		}
-
-		size_t spectraCount = 0;
-		if(m_allHeaderInfo[0].numberOfAxis > 0) spectraCount += m_allHeaderInfo[0].axisPixelLengths[0];
-
-		// Presumably 2 axis, but futureproofing.
-		for(int i=1;i<m_allHeaderInfo[0].numberOfAxis;++i)
-		{
-			spectraCount *= m_allHeaderInfo[0].axisPixelLengths[i];
-		}
-
-		MatrixWorkspace_sptr retVal(new DataObjects::Workspace2D);
-		retVal->initialize(spectraCount, m_allHeaderInfo.size()+1, m_allHeaderInfo.size());
-				
-		IAlgorithm_sptr loadInst = createChildAlgorithm("LoadInstrument");
+          boost::trim(key);
+          boost::trim(value);
+          headerInfo.headerKeys[key] = value;
+        }    
+      }
+
+      istr.close();
+    }
+    catch(...)
+    {
+      // Unable to read the file
+      ranSuccessfully = false;
+    }
+
+    return ranSuccessfully;
+  }
+
+  /**
+  * Create histogram workspace
+  * @returns Created workspace
+  */
+  MatrixWorkspace_sptr LoadFITS::initAndPopulateHistogramWorkspace()
+  {		
+    MantidVecPtr x;
+    x.access().resize(m_allHeaderInfo.size() + 1);
+
+    // Init time bins
+    double binCount = 0;
+    for(size_t i=0;i<m_allHeaderInfo.size() + 1; ++i)
+    {
+      x.access()[i] = binCount;
+      if(i != m_allHeaderInfo.size()) binCount += 1;//m_allHeaderInfo[i].timeBin;
+    }
+    
+    size_t spectraCount = 0;
+    if(m_allHeaderInfo[0].numberOfAxis > 0) spectraCount += m_allHeaderInfo[0].axisPixelLengths[0];
+
+    // Presumably 2 axis, but futureproofing.
+    for(int i=1;i<m_allHeaderInfo[0].numberOfAxis;++i)
+    {
+      spectraCount *= m_allHeaderInfo[0].axisPixelLengths[i];
+    }
+
+    MatrixWorkspace_sptr retVal(new DataObjects::Workspace2D);
+    retVal->initialize(spectraCount, m_allHeaderInfo.size()+1, m_allHeaderInfo.size());
+        
+    IAlgorithm_sptr loadInst = createChildAlgorithm("LoadInstrument");
  
-		try 
-		{
-			std::string directoryName = Kernel::ConfigService::Instance().getInstrumentDirectory();
-			directoryName = directoryName + "/IMAT_Definition.xml";
-			
-			loadInst->setPropertyValue("Filename", directoryName);
-			loadInst->setProperty<MatrixWorkspace_sptr>("Workspace", retVal);
-			loadInst->execute();
-		} 
-		catch (std::exception & ex) 
-		{
-			g_log.information("Cannot load the instrument definition. " + string(ex.what()) );
-		}
-
-		int bitsPerPixel = m_allHeaderInfo[0].bitsPerPixel; // assumes all files have the same, which they should. 
-		vector<vector<double> > yVals(spectraCount, std::vector<double>(m_binChunkSize));
-		vector<vector<double> > eVals(spectraCount, std::vector<double>(m_binChunkSize));
-		
-		// allocate memory to contain the data section of the file:
-		void * bufferAny = NULL;        
-		bufferAny = malloc ((bitsPerPixel/8)*spectraCount);
-
-		if (bufferAny == NULL) 
-		{
-			throw std::runtime_error("FITS loader couldn't allocate enough memory to run. Try a smaller chunk size.");	
-		}
-
-		size_t steps = static_cast<size_t>(ceil(m_allHeaderInfo.size()/m_binChunkSize));
-		Progress prog(this,0.0,1.0,steps);
-		
-		// Load a chunk of files at a time into workspace
-		try
-		{
-			for(size_t i=0; i<m_allHeaderInfo.size(); i+=m_binChunkSize)
-			{
-				loadChunkOfBinsFromFile(retVal, yVals, eVals, bufferAny, x, spectraCount, bitsPerPixel, i);
-				prog.report(name());
-			}
-		}
-		catch(...)
-		{
-			// Exceptions should be handled internally, but catch here to free any memory. Belt and braces.
-			free(bufferAny);
-			g_log.error("FITS Loader unable to correctly parse files.");
-			throw std::runtime_error("FITS loader unable to correctly parse files.");
-		}
-
-		// Memory no longer needed
-		free (bufferAny);  
-		
-		retVal->mutableRun().addProperty("Filename", m_allHeaderInfo[0].filePath);
-
-		// Set the Unit of the X Axis
-		try
-		{
-			retVal->getAxis(0)->unit() = UnitFactory::Instance().create("TOF");
-		}
-		catch ( Exception::NotFoundError & )
-		{
-			retVal->getAxis(0)->unit() = UnitFactory::Instance().create("Label");
-			Unit_sptr unit = retVal->getAxis(0)->unit();
-			boost::shared_ptr<Units::Label> label = boost::dynamic_pointer_cast<Units::Label>(unit);
-			label->setLabel("TOF", "TOF");
-		}
-
-		retVal->setYUnit("Counts");
-		retVal->setTitle("Test Workspace");
-
-		return retVal;
-	}
-
-	/**
-	* Loads data from a selection of the FITS files into the workspace
-	* @param workspace The workspace to insert data into
-	* @param yVals Reference to a pre-allocated vector to hold data values for the workspace
-	* @param eVals Reference to a pre-allocated vector to hold error values for the workspace
-	* @param bufferAny Pointer to an allocated memory region which will hold a files worth of data
-	* @param x Vector holding the X bin values
-	* @param spectraCount Number of data points in each file
-	* @param bitsPerPixel Number of bits used to represent one data point 
-	* @param binChunkStartIndex Index for the first file to be processed in this chunk 
-	*/
-	void LoadFITS::loadChunkOfBinsFromFile(MatrixWorkspace_sptr &workspace, vector<vector<double> > &yVals, vector<vector<double> > &eVals, void *&bufferAny, MantidVecPtr &x, size_t spectraCount, int bitsPerPixel, size_t binChunkStartIndex)
-	{
-		size_t binsThisChunk = m_binChunkSize;
-		if((binChunkStartIndex + m_binChunkSize) > m_allHeaderInfo.size())
-		{
-			// No need to do extra processing if number of bins to process is lower than m_binChunkSize
-			// Also used to prevent out of bounds error where a greater number of elements have been reserved.
-			binsThisChunk = static_cast<size_t>(m_allHeaderInfo.size() - binChunkStartIndex);
-		}       
-
-		uint8_t *buffer8 = NULL;
-		uint16_t *buffer16 = NULL;
-		uint32_t *buffer32 = NULL;
-		
-		// create pointer of correct data type to void pointer of the buffer:
-		buffer8 = static_cast<uint8_t*>(bufferAny);
-		buffer16 = static_cast<uint16_t*>(bufferAny);
-		buffer32 = static_cast<uint32_t*>(bufferAny);
-		
-		for(size_t i=binChunkStartIndex; i < binChunkStartIndex+binsThisChunk ; ++i)
-		{      
-			// Read Data
-			bool fileErr = false;
-			FILE * currFile = fopen ( m_allHeaderInfo[i].filePath.c_str(), "rb" );
-			if (currFile==NULL) fileErr = true;    
-
-			size_t result = 0;
-			if(!fileErr)
-			{
-				fseek (currFile , FIXED_HEADER_SIZE , SEEK_CUR);
-				result = fread(bufferAny, bitsPerPixel/8, spectraCount, currFile);
-			}
-
-			if (result != spectraCount) fileErr = true;			
-
-			if(fileErr)
-			{
-				throw std::runtime_error("Error reading file; possibly invalid data.");	
-			}
-
-			for(size_t j=0; j<spectraCount;++j)
-			{
-				double val = 0;
-				if(bitsPerPixel == 8) val = static_cast<double>(buffer8[j]);
-				if(bitsPerPixel == 16) val = static_cast<double>(buffer16[j]);
-				if(bitsPerPixel == 32) val = static_cast<double>(buffer32[j]);
-
-				yVals[j][i-binChunkStartIndex] = val;
-				eVals[j][i-binChunkStartIndex] = sqrt(val);
-			}				
-			
-			// Clear memory associated with the file load
-			fclose (currFile);
-		}
-
-		// Now load chunk into workspace 
-		PARALLEL_FOR1(workspace)
-		for (int64_t wi = 0; wi < static_cast<int64_t>(spectraCount); ++wi)
-		{
-			workspace->setX(wi, x);
-			MantidVec *currY = &workspace->dataY(wi);
-			MantidVec *currE = &workspace->dataE(wi);
-			
-			std::copy(yVals[wi].begin(), yVals[wi].end()-(m_binChunkSize-binsThisChunk), currY->begin()+binChunkStartIndex );
-			std::copy(eVals[wi].begin(), eVals[wi].end()-(m_binChunkSize-binsThisChunk), currE->begin()+binChunkStartIndex );
-
-			// I expect this will be wanted once IDF is in a more useful state.
-			//workspace->getSpectrum(wi)->setDetectorID(detid_t(wi));
-			//workspace->getSpectrum(wi)->setSpectrumNo(specid_t(wi+1));
-		}           
-	}		
+    try 
+    {
+      std::string directoryName = Kernel::ConfigService::Instance().getInstrumentDirectory();
+      directoryName = directoryName + "/IMAT_Definition.xml";
+      
+      loadInst->setPropertyValue("Filename", directoryName);
+      loadInst->setProperty<MatrixWorkspace_sptr>("Workspace", retVal);
+      loadInst->execute();
+    } 
+    catch (std::exception & ex) 
+    {
+      g_log.information("Cannot load the instrument definition. " + string(ex.what()) );
+    }
+
+    int bitsPerPixel = m_allHeaderInfo[0].bitsPerPixel; // assumes all files have the same, which they should. 
+    vector<vector<double> > yVals(spectraCount, std::vector<double>(m_binChunkSize));
+    vector<vector<double> > eVals(spectraCount, std::vector<double>(m_binChunkSize));
+    
+    // allocate memory to contain the data section of the file:
+    void * bufferAny = NULL;        
+    bufferAny = malloc ((bitsPerPixel/8)*spectraCount);
+
+    if (bufferAny == NULL) 
+    {
+      throw std::runtime_error("FITS loader couldn't allocate enough memory to run. Try a smaller chunk size.");	
+    }
+
+    size_t steps = static_cast<size_t>(ceil(m_allHeaderInfo.size()/m_binChunkSize));
+    Progress prog(this,0.0,1.0,steps);
+    
+    // Load a chunk of files at a time into workspace
+    try
+    {
+      for(size_t i=0; i<m_allHeaderInfo.size(); i+=m_binChunkSize)
+      {
+        loadChunkOfBinsFromFile(retVal, yVals, eVals, bufferAny, x, spectraCount, bitsPerPixel, i);
+        prog.report(name());
+      }
+    }
+    catch(...)
+    {
+      // Exceptions should be handled internally, but catch here to free any memory. Belt and braces.
+      free(bufferAny);
+      throw std::runtime_error("FITS loader unable to correctly parse files.");
+    }
+
+    // Memory no longer needed
+    free (bufferAny);  
+    
+    retVal->mutableRun().addProperty("Filename", m_allHeaderInfo[0].filePath);
+
+    // Set the Unit of the X Axis
+    try
+    {
+      retVal->getAxis(0)->unit() = UnitFactory::Instance().create("TOF");
+    }
+    catch ( Exception::NotFoundError & )
+    {
+      retVal->getAxis(0)->unit() = UnitFactory::Instance().create("Label");
+      Unit_sptr unit = retVal->getAxis(0)->unit();
+      boost::shared_ptr<Units::Label> label = boost::dynamic_pointer_cast<Units::Label>(unit);
+      label->setLabel("TOF", "TOF");
+    }
+
+    retVal->setYUnit("Counts");
+    retVal->setTitle("Test Workspace");
+
+    return retVal;
+  }
+
+  /**
+  * Loads data from a selection of the FITS files into the workspace
+  * @param workspace The workspace to insert data into
+  * @param yVals Reference to a pre-allocated vector to hold data values for the workspace
+  * @param eVals Reference to a pre-allocated vector to hold error values for the workspace
+  * @param bufferAny Pointer to an allocated memory region which will hold a files worth of data
+  * @param x Vector holding the X bin values
+  * @param spectraCount Number of data points in each file
+  * @param bitsPerPixel Number of bits used to represent one data point 
+  * @param binChunkStartIndex Index for the first file to be processed in this chunk 
+  */
+  void LoadFITS::loadChunkOfBinsFromFile(MatrixWorkspace_sptr &workspace, vector<vector<double> > &yVals, vector<vector<double> > &eVals, void *&bufferAny, MantidVecPtr &x, size_t spectraCount, int bitsPerPixel, size_t binChunkStartIndex)
+  {
+    size_t binsThisChunk = m_binChunkSize;
+    if((binChunkStartIndex + m_binChunkSize) > m_allHeaderInfo.size())
+    {
+      // No need to do extra processing if number of bins to process is lower than m_binChunkSize
+      // Also used to prevent out of bounds error where a greater number of elements have been reserved.
+      binsThisChunk = static_cast<size_t>(m_allHeaderInfo.size() - binChunkStartIndex);
+    }       
+
+    uint8_t *buffer8 = NULL;
+    uint16_t *buffer16 = NULL;
+    uint32_t *buffer32 = NULL;
+    
+    // create pointer of correct data type to void pointer of the buffer:
+    buffer8 = static_cast<uint8_t*>(bufferAny);
+    buffer16 = static_cast<uint16_t*>(bufferAny);
+    buffer32 = static_cast<uint32_t*>(bufferAny);
+    
+    for(size_t i=binChunkStartIndex; i < binChunkStartIndex+binsThisChunk ; ++i)
+    {      
+      // Read Data
+      bool fileErr = false;
+      FILE * currFile = fopen ( m_allHeaderInfo[i].filePath.c_str(), "rb" );
+      if (currFile==NULL) fileErr = true;    
+
+      size_t result = 0;
+      if(!fileErr)
+      {
+        fseek (currFile , FIXED_HEADER_SIZE , SEEK_CUR);
+        result = fread(bufferAny, bitsPerPixel/8, spectraCount, currFile);
+      }
+
+      if (result != spectraCount) fileErr = true;			
+
+      if(fileErr)
+      {
+        throw std::runtime_error("Error reading file; possibly invalid data.");	
+      }
+
+      for(size_t j=0; j<spectraCount;++j)
+      {
+        double val = 0;
+        if(bitsPerPixel == 8) val = static_cast<double>(buffer8[j]);
+        if(bitsPerPixel == 16) val = static_cast<double>(buffer16[j]);
+        if(bitsPerPixel == 32) val = static_cast<double>(buffer32[j]);
+
+        yVals[j][i-binChunkStartIndex] = val;
+        eVals[j][i-binChunkStartIndex] = sqrt(val);
+      }				
+      
+      // Clear memory associated with the file load
+      fclose (currFile);
+    }
+
+    // Now load chunk into workspace 
+    PARALLEL_FOR1(workspace)
+    for (int64_t wi = 0; wi < static_cast<int64_t>(spectraCount); ++wi)
+    {
+      workspace->setX(wi, x);
+      MantidVec *currY = &workspace->dataY(wi);
+      MantidVec *currE = &workspace->dataE(wi);
+      
+      std::copy(yVals[wi].begin(), yVals[wi].end()-(m_binChunkSize-binsThisChunk), currY->begin()+binChunkStartIndex );
+      std::copy(eVals[wi].begin(), eVals[wi].end()-(m_binChunkSize-binsThisChunk), currE->begin()+binChunkStartIndex );
+
+      // I expect this will be wanted once IDF is in a more useful state.
+      //workspace->getSpectrum(wi)->setDetectorID(detid_t(wi));
+      //workspace->getSpectrum(wi)->setSpectrumNo(specid_t(wi+1));
+    }           
+  }		
+
+  /**
+  * Reads a file containing rotation values for each image into a comma separated string
+  * @param rotFilePath The path to a file containing rotation values
+  * @param fileCount number of images which should have corresponding rotation values in the file
+  *
+  * @returns string A comma separated string of doubles
+  */
+  std::string LoadFITS::ReadRotations(std::string rotFilePath, size_t fileCount)
+  {
+    ifstream fStream(rotFilePath.c_str());
+    std::string csvRotations = "";
+
+    try
+    {
+      // Ensure valid file
+      if(fStream.good())
+      {
+        // Get lines, split words, verify and add to map.
+        string line;
+        vector<string> lineSplit;
+        size_t ind = -1;
+        while(getline(fStream, line))
+        {
+          ind++;
+          boost::split(lineSplit,line, boost::is_any_of("\t"));
+
+          if(ind==0 || lineSplit[0] == "")
+            continue; // Skip first iteration or where rotation value is empty
+         
+          if(ind!=1) // append a comma to separate values if not the first index
+            csvRotations += ",";
+
+          csvRotations += lineSplit[1];          
+        }
+
+        // Check the number of rotations in file matches number of files
+        if(ind != fileCount)
+          throw std::runtime_error("File error, throw higher up.");
+
+        fStream.close(); 
+      }
+      else
+      {
+        throw std::runtime_error("File error, throw higher up.");  
+      }
+    }
+    catch(...)
+    {
+      throw std::runtime_error("Invalid file path or file format: Expected a file with a line separated list of rotations with the same number of entries as other files.");
+    }
+
+    return csvRotations;
+  }
+
 }
 }
-
diff --git a/Code/Mantid/Framework/DataHandling/src/LoadGSS.cpp b/Code/Mantid/Framework/DataHandling/src/LoadGSS.cpp
index 9333163d053cc851ef0fa8bb5d1f587534d9424c..9e8b44f5853cfb8d03e1392389f5692ebdbbd1b9 100644
--- a/Code/Mantid/Framework/DataHandling/src/LoadGSS.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/LoadGSS.cpp
@@ -344,9 +344,6 @@ namespace DataHandling
         {
           // RALF
           xValue = (2 * xValue) - xPrev;
-          yValue = yValue / (xPrev * bc4);
-          eValue = eValue / (xPrev * bc4);
-
         }
         else if (filetype == 's')
         {
@@ -364,13 +361,14 @@ namespace DataHandling
           }
 
           xValue = (2 * xValue) - xPrev;
-          if (multiplybybinwidth)
-          {
-            yValue = yValue / (xValue - xPrev);
-            eValue = eValue / (xValue - xPrev);
-          }
         }
 
+				if (multiplybybinwidth)
+				{
+					yValue = yValue / (xValue - xPrev);
+					eValue = eValue / (xValue - xPrev);
+				}
+
         // store read in data (x, y, e) to vector
         vecX.push_back(xValue);
         vecY.push_back(yValue);
diff --git a/Code/Mantid/Framework/DataHandling/src/LoadHelper.cpp b/Code/Mantid/Framework/DataHandling/src/LoadHelper.cpp
index 181cc4dec1aea68f9008e184d4339dafe446797a..e447fa14b561495529d3501698435e5a5c7ac159 100644
--- a/Code/Mantid/Framework/DataHandling/src/LoadHelper.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/LoadHelper.cpp
@@ -84,7 +84,7 @@ namespace Mantid
     }
     /**
      * Calculate Neutron Energy from wavelength: \f$ E = h^2 / 2m\lambda ^2 \f$
-     *  @param wavelength :: wavelength in \f$ \AA \f$
+     *  @param wavelength :: wavelength in \f$ \mbox{\AA} \f$
      *  @return tof in seconds
      */
     double LoadHelper::calculateEnergy(double wavelength)
diff --git a/Code/Mantid/Framework/DataHandling/src/LoadIDFFromNexus.cpp b/Code/Mantid/Framework/DataHandling/src/LoadIDFFromNexus.cpp
index ee1b57f9584cec42af8ea90662e26e4effa5d65c..358d49004f54d394b4b2ad6f453e909138b2fbb1 100644
--- a/Code/Mantid/Framework/DataHandling/src/LoadIDFFromNexus.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/LoadIDFFromNexus.cpp
@@ -79,19 +79,25 @@ void LoadIDFFromNexus::exec()
   if ( parameterString.empty() )
   {
     // Create the 'fallback' parameter file name to look for
-    const std::string directory = ConfigService::Instance().getString("parameterDefinition.directory");
+    std::vector<std::string> directoryNames = ConfigService::Instance().getInstrumentDirectories();
     const std::string instrumentName = localWorkspace->getInstrument()->getName();
-    const std::string paramFile = directory + instrumentName + "_Parameters.xml";
-
-    try {
-      // load and also populate instrument parameters from this 'fallback' parameter file 
-      Algorithm_sptr loadParamAlg = createChildAlgorithm("LoadParameterFile");
-      loadParamAlg->setProperty("Filename", paramFile);
-      loadParamAlg->setProperty("Workspace", localWorkspace);
-      loadParamAlg->execute();
-      g_log.notice() << "Instrument parameter file: " << paramFile << " has been loaded" << std::endl;
-    } catch ( std::runtime_error& ) {
-      g_log.debug() << "Instrument parameter file: " << paramFile << " not found or un-parsable. ";
+    for ( auto instDirs_itr = directoryNames.begin(); instDirs_itr != directoryNames.end(); ++instDirs_itr)
+    {
+      //This will iterate around the directories from user ->etc ->install, and find the first beat file
+      std::string directoryName = *instDirs_itr;
+      const std::string paramFile = directoryName + instrumentName + "_Parameters.xml";
+
+      try {
+        // load and also populate instrument parameters from this 'fallback' parameter file 
+        Algorithm_sptr loadParamAlg = createChildAlgorithm("LoadParameterFile");
+        loadParamAlg->setProperty("Filename", paramFile);
+        loadParamAlg->setProperty("Workspace", localWorkspace);
+        loadParamAlg->execute();
+        g_log.notice() << "Instrument parameter file: " << paramFile << " has been loaded" << std::endl;
+        break; //stop at the first one
+      } catch ( std::runtime_error& ) {
+        g_log.debug() << "Instrument parameter file: " << paramFile << " not found or un-parsable. ";
+      }
     }
   }
   else
diff --git a/Code/Mantid/Framework/DataHandling/src/LoadILLReflectometry.cpp b/Code/Mantid/Framework/DataHandling/src/LoadILLReflectometry.cpp
index 5c9bdea5f20542ce531e5f23f3b040a91700baee..edd73e513929232442591c4d9e3293925656b9c0 100644
--- a/Code/Mantid/Framework/DataHandling/src/LoadILLReflectometry.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/LoadILLReflectometry.cpp
@@ -9,6 +9,7 @@
 #include "MantidGeometry/Instrument/ComponentHelper.h"
 
 #include <boost/algorithm/string.hpp>
+#include <algorithm>
 
 #include <nexus/napi.h>
 #include <iostream>
@@ -25,9 +26,6 @@ namespace Mantid
 // Register the algorithm into the AlgorithmFactory
     DECLARE_NEXUS_FILELOADER_ALGORITHM(LoadILLReflectometry);
 
-// PI again !
-    const double PI = 3.14159265358979323846264338327950288419716939937510582;
-
 //----------------------------------------------------------------------------------------------
     /** Constructor
      */
@@ -106,6 +104,30 @@ namespace Mantid
           "The name to use for the output workspace");
     }
 
+//----------------------------------------------------------------------------------------------
+  /**
+     * Run the Child Algorithm LoadInstrument.
+     */
+    void LoadILLReflectometry::runLoadInstrument()
+    {
+
+      IAlgorithm_sptr loadInst = createChildAlgorithm("LoadInstrument");
+
+      // Now execute the Child Algorithm. Catch and log any error, but don't stop.
+      try
+      {
+
+        loadInst->setPropertyValue("InstrumentName", m_instrumentName);
+        loadInst->setProperty<MatrixWorkspace_sptr>("Workspace", m_localWorkspace);
+        loadInst->execute();
+
+      } catch (std::runtime_error& e)
+      {
+        g_log.information() << "Unable to successfully run LoadInstrument Child Algorithm : "
+                            << e.what() << std::endl;
+      }
+    }
+
 //----------------------------------------------------------------------------------------------
     /** Execute the algorithm.
      */
@@ -132,7 +154,7 @@ namespace Mantid
       g_log.debug("Building properties...");
       loadNexusEntriesIntoProperties(filenameData);
 
-//	g_log.debug("Loading data...");
+      g_log.debug("Loading data...");
       loadDataIntoTheWorkSpace(firstEntry, monitorsData);
 
       // load the instrument from the IDF if it exists
@@ -143,18 +165,14 @@ namespace Mantid
 
       // Get distance and tilt angle stored in nexus file
       // Mantid way
-      //	auto angleProp = dynamic_cast<PropertyWithValue<double>*>(m_localWorkspace->run().getProperty("dan.value"));
+      ////	auto angleProp = dynamic_cast<PropertyWithValue<double>*>(m_localWorkspace->run().getProperty("dan.value"));
       // Nexus way
       double angle = firstEntry.getFloat("instrument/dan/value");	// detector angle in degrees
       double distance = firstEntry.getFloat("instrument/det/value");	// detector distance in millimeter
-      distance /= 1000;	// convert to meter
-      placeDetector(distance, angle);
 
-      // 2) Center, (must be done after move)
-      int par1_101 = firstEntry.getInt("instrument/PSD/ny");
-      g_log.debug("Note: using PSD/ny instead of PSD/nx. Should be corrected in next D17 nexus file.");
-      double xCenter = 0.1325 / par1_101;	// As in lamp, but in meter
-      centerDetector(xCenter);
+      distance /= 1000.0;	// convert to meter
+      g_log.debug() << "Moving detector at angle " << angle << " and distance " << distance << std::endl;
+      placeDetector(distance, angle);
 
       // Set the channel width property
       auto channel_width = dynamic_cast<PropertyWithValue<double>*>(m_localWorkspace->run().getProperty(
@@ -306,15 +324,28 @@ namespace Mantid
           "monitor1.time_of_flight_2"));
       double tof_delay = *tof_delay_prop; /* PAR1[96] */
 
+
       double POFF = entry.getFloat("instrument/VirtualChopper/poff"); /* par1[54] */
-      double mean_chop_2_phase = entry.getFloat("instrument/VirtualChopper/chopper2_phase_average"); /* PAR2[114] */
+      double open_offset=entry.getFloat("instrument/VirtualChopper/open_offset"); /* par1[56] */
+      double mean_chop_1_phase=0.0;
+      double mean_chop_2_phase=0.0;
+      // [30/09/14] Test on availability of VirtualChopper data
+      double chop1_speed = entry.getFloat("instrument/VirtualChopper/chopper1_speed_average"); /* PAR2[109] */
+      if (chop1_speed != 0.0) {
+        // Virtual Chopper entries are valid
 
-      //double mean_chop_1_phase = entry.getFloat("instrument/VirtualChopper/chopper1_phase_average"); /* PAR2[110] */
-      // this entry seems to be wrong for now, we use the old one instead [YR 5/06/2014]
-      double mean_chop_1_phase = entry.getFloat("instrument/Chopper1/phase");
+        //double mean_chop_1_phase = entry.getFloat("instrument/VirtualChopper/chopper1_phase_average"); /* PAR2[110] */
+        // this entry seems to be wrong for now, we use the old one instead [YR 5/06/2014]
+        mean_chop_1_phase = entry.getFloat("instrument/Chopper1/phase");
+        mean_chop_2_phase = entry.getFloat("instrument/VirtualChopper/chopper2_phase_average"); /* PAR2[114] */
 
-      double open_offset = entry.getFloat("instrument/VirtualChopper/open_offset"); /* par1[56] */
-      double chop1_speed = entry.getFloat("instrument/VirtualChopper/chopper1_speed_average"); /* PAR2[109] */
+      } else {
+        // Use Chopper values instead
+        chop1_speed = entry.getFloat("instrument/Chopper1/rotation_speed"); /* PAR2[109] */
+
+        mean_chop_1_phase = entry.getFloat("instrument/Chopper1/phase");
+        mean_chop_2_phase = entry.getFloat("instrument/Chopper2/phase");
+      }
 
       g_log.debug() << "m_numberOfChannels: " << m_numberOfChannels << std::endl;
       g_log.debug() << "m_channelWidth: " << m_channelWidth << std::endl;
@@ -325,28 +356,31 @@ namespace Mantid
       g_log.debug() << "mean_chop_1_phase: " << mean_chop_1_phase << std::endl;
       g_log.debug() << "chop1_speed: " << chop1_speed << std::endl;
 
+      double t_TOF2 = 0.0;
+      if (chop1_speed == 0.0)
+      {
+        g_log.debug() << "Warning: chop1_speed is null." << std::endl;
+        // stay with t_TOF2 to O.0
+      }
+      else
+      {
       // Thanks to Miguel Gonzales/ILL for this TOF formula
-      double t_TOF2 = -1.e6 * 60.0 * (POFF - 45.0 + mean_chop_2_phase - mean_chop_1_phase + open_offset)
+        t_TOF2 = -1.e6 * 60.0 * (POFF - 45.0 + mean_chop_2_phase - mean_chop_1_phase + open_offset)
           / (2.0 * 360 * chop1_speed);
 
+      }
       g_log.debug() << "t_TOF2: " << t_TOF2 << std::endl;
 
       // 2) Compute tof values
       for (size_t timechannelnumber = 0; timechannelnumber <= m_numberOfChannels; ++timechannelnumber)
       {
-
         double t_TOF1 = (static_cast<int>(timechannelnumber) + 0.5) * m_channelWidth + tof_delay;
-
-        //g_log.debug() << "t_TOF1: " << t_TOF1 << std::endl;
-
         m_localWorkspace->dataX(0)[timechannelnumber] = t_TOF1 + t_TOF2;
-
       }
 
       // Load monitors
       for (size_t im = 0; im < nb_monitors; im++)
       {
-
         if (im > 0)
         {
           m_localWorkspace->dataX(im) = m_localWorkspace->readX(0);
@@ -359,8 +393,6 @@ namespace Mantid
         progress.report();
       }
 
-      // TODO
-      // copy data if m_numberOfTubes = 1 or m_numberOfPixelsPerTube = 1
 
       // Then Tubes
       for (size_t i = 0; i < m_numberOfTubes; ++i)
@@ -371,7 +403,7 @@ namespace Mantid
           // just copy the time binning axis to every spectra
           m_localWorkspace->dataX(spec + nb_monitors) = m_localWorkspace->readX(0);
 
-          // Assign Y
+          //// Assign Y
           int* data_p = &data(static_cast<int>(i), static_cast<int>(j), 0);
           m_localWorkspace->dataY(spec + nb_monitors).assign(data_p, data_p + m_numberOfChannels);
 
@@ -387,6 +419,10 @@ namespace Mantid
 
     }  // LoadILLIndirect::loadDataIntoTheWorkSpace
 
+
+    /**
+     * Use the LoadHelper utility to load most of the nexus entries into workspace log properties
+     */
     void LoadILLReflectometry::loadNexusEntriesIntoProperties(std::string nexusfilename)
     {
 
@@ -408,28 +444,10 @@ namespace Mantid
       stat = NXclose(&nxfileID);
     }
 
+  
     /**
-     * Run the Child Algorithm LoadInstrument.
+     * Utility to center detector.
      */
-    void LoadILLReflectometry::runLoadInstrument()
-    {
-
-      IAlgorithm_sptr loadInst = createChildAlgorithm("LoadInstrument");
-
-      // Now execute the Child Algorithm. Catch and log any error, but don't stop.
-      try
-      {
-
-        loadInst->setPropertyValue("InstrumentName", m_instrumentName);
-        loadInst->setProperty<MatrixWorkspace_sptr>("Workspace", m_localWorkspace);
-        loadInst->execute();
-
-      } catch (...)
-      {
-        g_log.information("Cannot load the instrument definition.");
-      }
-    }
-
     void LoadILLReflectometry::centerDetector(double xCenter)
     {
 
@@ -441,18 +459,19 @@ namespace Mantid
 
     }
 
+    /**
+     * Utility to place detector in space, according to data file
+     */
     void LoadILLReflectometry::placeDetector(double distance /* meter */, double angle /* degree */)
     {
-
+      const double deg2rad = M_PI/180.0;
       std::string componentName("uniq_detector");
       V3D pos = m_loader.getComponentPosition(m_localWorkspace, componentName);
+//      double r, theta, phi;
+//      pos.getSpherical(r, theta, phi);
 
-      double r, theta, phi;
-      pos.getSpherical(r, theta, phi);
-
-      V3D newpos;
-      newpos.spherical(distance, angle, phi);
-
+      double angle_rad = angle*deg2rad;
+      V3D newpos(distance*sin(angle_rad), pos.Y(), distance*cos(angle_rad));
       m_loader.moveComponent(m_localWorkspace, componentName, newpos);
 
       // Apply a local rotation to stay perpendicular to the beam
diff --git a/Code/Mantid/Framework/DataHandling/src/LoadISISNexus2.cpp b/Code/Mantid/Framework/DataHandling/src/LoadISISNexus2.cpp
index 401cca9753e1609649a93579e377848807b2ab18..8e8fe0ca6bc48bc00ca7c979a0ad3c5669524fb7 100644
--- a/Code/Mantid/Framework/DataHandling/src/LoadISISNexus2.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/LoadISISNexus2.cpp
@@ -3,10 +3,12 @@
 //----------------------------------------------------------------------
 #include "MantidDataHandling/LoadISISNexus2.h"
 #include "MantidDataHandling/LoadEventNexus.h"
+#include "MantidDataHandling/LoadRawHelper.h"
 
 #include "MantidKernel/ArrayProperty.h"
 #include "MantidKernel/BoundedValidator.h"
 #include "MantidKernel/ConfigService.h"
+#include "MantidKernel/ListValidator.h"
 #include "MantidKernel/LogParser.h"
 #include "MantidKernel/LogFilter.h"
 #include "MantidKernel/TimeSeriesProperty.h"
@@ -27,6 +29,7 @@
 
 #include <boost/lexical_cast.hpp>
 #include <cmath>
+#include <climits>
 #include <vector>
 #include <sstream>
 #include <cctype>
@@ -46,9 +49,9 @@ namespace Mantid
 
     /// Empty default constructor
     LoadISISNexus2::LoadISISNexus2() : 
-      m_filename(), m_instrument_name(), m_samplename(), m_numberOfSpectra(0), m_numberOfSpectraInFile(0), 
-      m_numberOfPeriods(0), m_numberOfPeriodsInFile(0), m_numberOfChannels(0), m_numberOfChannelsInFile(0),
-      m_have_detector(false),m_range_supplied(true), m_spec_min(0), m_spec_max(EMPTY_INT()),
+      m_filename(), m_instrument_name(), m_samplename(),
+      m_detBlockInfo(),m_monBlockInfo(),m_loadBlockInfo(),
+      m_have_detector(false),
       m_load_selected_spectra(false),m_specInd2specNum_map(),m_spec2det_map(),
       m_entrynumber(0), m_tof_data(), m_proton_charge(0.),
       m_spec(), m_monitors(), m_logCreator(), m_progress()
@@ -82,6 +85,26 @@ namespace Mantid
       declareProperty(new ArrayProperty<int64_t>("SpectrumList"));
       declareProperty("EntryNumber", (int64_t)0, mustBePositive,
         "The particular entry number to read (default: Load all workspaces and creates a workspace group)");
+
+      std::vector<std::string> monitorOptions;
+      monitorOptions.push_back("Include");
+      monitorOptions.push_back("Exclude");
+      monitorOptions.push_back("Separate");
+      std::map<std::string,std::string> monitorOptionsAliases;
+      monitorOptionsAliases["1"] = "Separate";
+      monitorOptionsAliases["0"] = "Exclude";
+      declareProperty("LoadMonitors","Include", boost::make_shared<Kernel::StringListValidator>(monitorOptions,monitorOptionsAliases),
+        "Option to control the loading of monitors.\n"
+        "Allowed options are Include,Exclude, Separate.\n"
+        "Include:The default is Include option would load monitors with the workspace if monitors spectra are within the range of loaded detectors.\n"
+        "If the time binning for the monitors is different from the\n"
+        "binning of the detectors this option is equivalent to the Separate option\n"
+        "Exclude:Exclude option excludes monitors from the output workspace.\n"
+        "Separate:Separate option loads monitors into a separate workspace called: OutputWorkspace_monitors.\n"
+        "Defined aliases:\n"
+        "1:  Equivalent to Separate.\n"
+        "0:  Equivalent to Exclude.\n");
+
     }
 
     /** Executes the algorithm. Reading in the file and creating and populating
@@ -92,12 +115,19 @@ namespace Mantid
     */
     void LoadISISNexus2::exec()
     {
+
+      //**********************************************************************
+      // process load monitor options request
+      bool bincludeMonitors,bseparateMonitors, bexcludeMonitors;
+      LoadRawHelper::ProcessLoadMonitorOptions(bincludeMonitors,bseparateMonitors, bexcludeMonitors,this);
+
+      //**********************************************************************
       m_filename = getPropertyValue("Filename");
       // Create the root Nexus class
       NXRoot root(m_filename);
 
       // "Open" the same file but with the C++ interface
-      m_cppFile = new ::NeXus::File(root.m_fileID);
+      m_cppFile.reset( new ::NeXus::File(root.m_fileID));
 
       // Open the raw data group 'raw_data_1'
       NXEntry entry = root.openEntry("raw_data_1");
@@ -130,8 +160,10 @@ namespace Mantid
       NXInt spec = entry.openNXInt("isis_vms_compat/SPEC");
       spec.load();
 
-      //Pull out the monitor blocks, if any exist
       size_t nmons(0);
+
+
+      //Pull out the monitor blocks, if any exist
       for(std::vector<NXClassInfo>::const_iterator it = entry.groups().begin(); 
         it != entry.groups().end(); ++it) 
       {
@@ -139,50 +171,41 @@ namespace Mantid
         {
           NXInt index = entry.openNXInt(std::string(it->nxname) + "/spectrum_index");
           index.load();
-          m_monitors[*index()] = it->nxname;
+          int64_t ind = *index();
+          m_monitors[ind ] = it->nxname;
+
           ++nmons;
         }
       }
 
-      if( ndets == 0 && nmons == 0 )
-      {
-        g_log.error() << "Invalid NeXus structure, cannot find detector or monitor blocks.";
-        throw std::runtime_error("Inconsistent NeXus file structure.");
-      }
 
-      if( ndets == 0 )
-      {
-
-        //Grab the number of channels
-        NXInt chans = entry.openNXInt(m_monitors.begin()->second + "/data");
-        m_numberOfPeriodsInFile = m_numberOfPeriods = chans.dim0();
-        m_numberOfSpectraInFile = m_numberOfSpectra = nmons;
-        m_numberOfChannelsInFile = m_numberOfChannels = chans.dim2();
-      }
-      else 
+      if( ndets == 0 && nmons == 0 )
       {
-        NXData nxData = entry.openNXData("detector_1");
-        NXInt data = nxData.openIntData();
-        m_numberOfPeriodsInFile = m_numberOfPeriods = data.dim0();
-        m_numberOfSpectraInFile = m_numberOfSpectra = nsp1[0];
-        m_numberOfChannelsInFile = m_numberOfChannels = data.dim2();
-
-        if( nmons > 0 && m_numberOfSpectra == static_cast<size_t>(data.dim1()) )
+        if (bexcludeMonitors)
         {
-          m_monitors.clear();
+          g_log.warning() << "Nothing to do. No detectors found and no monitor loading requested";
+          return;
+        }
+        else
+        {
+          g_log.error() << "Invalid NeXus structure, cannot find detector or monitor blocks.";
+          throw std::runtime_error("Inconsistent NeXus file structure.");
         }
       }
-      const size_t x_length = m_numberOfChannels + 1;
+      std::map<int64_t,std::string>  ExcluedMonitorsSpectra;
+      bseparateMonitors=findSpectraDetRangeInFile(entry,m_spec,ndets,nsp1[0],m_monitors,bexcludeMonitors,bseparateMonitors,ExcluedMonitorsSpectra);
+
+      size_t x_length = m_loadBlockInfo.numberOfChannels + 1;
 
-      // Check input is consistent with the file, throwing if not
-      checkOptionalProperties();
+      // Check input is consistent with the file, throwing if not, exclude spectra selected at findSpectraDetRangeInFile;
+      checkOptionalProperties(ExcluedMonitorsSpectra);
       // Fill up m_spectraBlocks
-      size_t total_specs = prepareSpectraBlocks();
+      size_t total_specs = prepareSpectraBlocks(m_monitors,m_specInd2specNum_map,m_loadBlockInfo);
 
-      m_progress = boost::shared_ptr<API::Progress>(new Progress(this, 0.0, 1.0, total_specs * m_numberOfPeriods));
+      m_progress = boost::shared_ptr<API::Progress>(new Progress(this, 0.0, 1.0, total_specs * m_detBlockInfo.numberOfPeriods));
 
       DataObjects::Workspace2D_sptr local_workspace = boost::dynamic_pointer_cast<DataObjects::Workspace2D>
-        (WorkspaceFactory::Instance().create("Workspace2D", total_specs, x_length, m_numberOfChannels));
+        (WorkspaceFactory::Instance().create("Workspace2D", total_specs, x_length, m_loadBlockInfo.numberOfChannels));
       // Set the units on the workspace to TOF & Counts
       local_workspace->getAxis(0)->unit() = UnitFactory::Instance().create("TOF");
       local_workspace->setYUnit("Counts");
@@ -211,7 +234,7 @@ namespace Mantid
 
       // Load logs and sample information
       m_cppFile->openPath(entry.path());      
-      local_workspace->loadSampleAndLogInfoNexus(m_cppFile);
+      local_workspace->loadSampleAndLogInfoNexus(m_cppFile.get());
 
       // Load logs and sample information further information... See maintenance ticket #8697 
       loadSampleData(local_workspace, entry);
@@ -236,7 +259,7 @@ namespace Mantid
 
       createPeriodLogs(firstentry, local_workspace);
 
-      if( m_numberOfPeriods > 1 && m_entrynumber == 0 )
+      if( m_detBlockInfo.numberOfPeriods > 1 && m_entrynumber == 0 )
       {
 
         WorkspaceGroup_sptr wksp_group(new WorkspaceGroup);
@@ -246,7 +269,7 @@ namespace Mantid
         const std::string base_name = getPropertyValue("OutputWorkspace") + "_";
         const std::string prop_name = "OutputWorkspace_";
 
-        for( int p = 1; p <= m_numberOfPeriods; ++p )
+        for( int p = 1; p <= m_detBlockInfo.numberOfPeriods; ++p )
         {
           std::ostringstream os;
           os << p;
@@ -265,17 +288,66 @@ namespace Mantid
           setProperty(prop_name + os.str(), boost::static_pointer_cast<Workspace>(local_workspace));
         }
         // The group is the root property value
-        setProperty("OutputWorkspace", boost::dynamic_pointer_cast<Workspace>(wksp_group));
+        if(!bseparateMonitors)
+          setProperty("OutputWorkspace", boost::dynamic_pointer_cast<Workspace>(wksp_group));
       }
       else
+      {
+        if(!bseparateMonitors)
+          setProperty("OutputWorkspace", boost::dynamic_pointer_cast<Workspace>(local_workspace));
+      }
+
+      //***************************************************************************************************
+      // Workspace or group of workspaces without monitors is loaded. Now we are loading monitors separately.
+      if(bseparateMonitors)
       {
         setProperty("OutputWorkspace", boost::dynamic_pointer_cast<Workspace>(local_workspace));
+        if(m_detBlockInfo.numberOfPeriods>1)
+        {
+          g_log.error()<<" Separate monitor workspace loading have not been implemented for multiperiod workspaces. Performed separate monitors loading\n";
+        }
+        else
+        {
+          std::string wsName = getProperty("OutputWorkspace");
+          if(m_monBlockInfo.numberOfSpectra==0)
+          {
+            g_log.information()<<" no monitors to load for workspace: "<<wsName<<std::endl; 
+          }
+          else
+          {
+            x_length = m_monBlockInfo.numberOfChannels+1;
+            DataObjects::Workspace2D_sptr monitor_workspace = boost::dynamic_pointer_cast<DataObjects::Workspace2D>
+              (WorkspaceFactory::Instance().create(local_workspace, m_monBlockInfo.numberOfSpectra,x_length,m_monBlockInfo.numberOfChannels));
+            local_workspace->setMonitorWorkspace(monitor_workspace);
+
+            m_spectraBlocks.clear();
+            m_specInd2specNum_map.clear();
+            std::vector<int64_t> dummyS1;
+            // at the moment here we clear this map to enable possibility to load monitors from the spectra block (wiring table bug). 
+            // if monitor's spectra present in the detectors block due to this bug should be read from monitors, this map should be dealt with properly.
+            ExcluedMonitorsSpectra.clear();
+            buildSpectraInd2SpectraNumMap(true,m_monBlockInfo.spectraID_min,m_monBlockInfo.spectraID_max,dummyS1,ExcluedMonitorsSpectra);
+            // lo
+            prepareSpectraBlocks(m_monitors,m_specInd2specNum_map,m_monBlockInfo);
+
+
+            int64_t firstentry = (m_entrynumber > 0) ? m_entrynumber : 1;
+            loadPeriodData(firstentry, entry, monitor_workspace);
+
+
+            std::string monitorwsName = wsName + "_monitors";
+            declareProperty(new WorkspaceProperty<Workspace> ("MonitorWorkspace", monitorwsName,Direction::Output));
+            setProperty("MonitorWorkspace", boost::static_pointer_cast<Workspace>(monitor_workspace));
+          }
+        }
+
       }
 
       // Clear off the member variable containers
       m_tof_data.reset();
       m_spec.reset();
       m_monitors.clear();
+      m_specInd2specNum_map.clear();
     }
 
     // Function object for remove_if STL algorithm
@@ -297,36 +369,6 @@ namespace Mantid
       };
 
     }
-    /**
-    build the list of spectra to load and include into spectra-detectors map
-    @param spec_list -- list of spectra to load 
-    **/
-    void  LoadISISNexus2::buildSpectraInd2SpectraNumMap(const std::vector<int64_t>  &spec_list)
-    {
-
-      int64_t ic(0);
-
-      if(spec_list.size()>0)
-      {
-        auto start_point = spec_list.begin();
-        for(auto it =start_point  ;it!=spec_list.end();it++)
-        {
-          ic = it-start_point;
-          m_specInd2specNum_map.insert(std::pair<int64_t,specid_t>(ic,static_cast<specid_t>(*it)));
-        }
-      }
-      else
-      {
-        if(m_range_supplied)
-        {
-          ic = m_specInd2specNum_map.size();
-          for(int64_t i=m_spec_min;i<m_spec_max+1;i++)
-            m_specInd2specNum_map.insert(std::pair<int64_t,specid_t>(i-m_spec_min+ic,static_cast<specid_t>(i)));
-
-        }
-      }
-    }
-
 
     /**
     Check for a set of synthetic logs associated with multi-period log data. Raise warnings where necessary.
@@ -350,50 +392,71 @@ namespace Mantid
 
     /**
     * Check the validity of the optional properties of the algorithm and identify if partial data should be loaded.
+    * @param SpectraExcluded :: set of spectra ID-s to exclude from spectra list to load
     */
-    void LoadISISNexus2::checkOptionalProperties()
+    void LoadISISNexus2::checkOptionalProperties(const std::map<int64_t,std::string> &SpectraExcluded)
     {
       // optional properties specify that only some spectra have to be loaded
-      m_load_selected_spectra = false;
-      m_spec_min = getProperty("SpectrumMin");
-      m_spec_max = getProperty("SpectrumMax");
+      bool range_supplied(false);
 
-      if( m_spec_min == 0 && m_spec_max == EMPTY_INT() )
+      if (!SpectraExcluded.empty())
       {
-        m_range_supplied = false;
+        range_supplied = true;
+        m_load_selected_spectra = true;
       }
 
-      if( m_spec_min == 0 )
-        m_spec_min = 1;
+      int64_t spec_min(0);
+      int64_t spec_max(EMPTY_INT());
+      // 
+      spec_min = getProperty("SpectrumMin");
+      spec_max = getProperty("SpectrumMax");
+
+
+      // default spectra ID-s would not work if spectraID_min!=1
+      if(m_loadBlockInfo.spectraID_min!=1)
+      {
+        range_supplied = true;
+        m_load_selected_spectra = true;
+      }
+
+
+      if( spec_min == 0 )
+        spec_min = m_loadBlockInfo.spectraID_min; 
       else
+      { 
+        range_supplied = true;
         m_load_selected_spectra = true;
+      }
 
 
-      if( m_spec_max == EMPTY_INT() )
-        m_spec_max = m_numberOfSpectra;
+      if( spec_max == EMPTY_INT() )
+        spec_max = m_loadBlockInfo.spectraID_max;
       else
+      { 
+        range_supplied = true;
         m_load_selected_spectra = true;
+      }
 
       // Sanity check for min/max
-      if( m_spec_min > m_spec_max )
+      if( spec_min > spec_max )
       {
         throw std::invalid_argument("Inconsistent range properties. SpectrumMin is larger than SpectrumMax.");
       }
 
-      if( static_cast<size_t>(m_spec_max) > m_numberOfSpectra )
+      if( spec_max > m_loadBlockInfo.spectraID_max)
       {
-        std::string err="Inconsistent range property. SpectrumMax is larger than number of spectra: "+boost::lexical_cast<std::string>(m_numberOfSpectra ); 
+        std::string err="Inconsistent range property. SpectrumMax is larger than number of spectra: "+boost::lexical_cast<std::string>(m_loadBlockInfo.spectraID_max ); 
         throw std::invalid_argument(err);
       }
 
       // Check the entry number
       m_entrynumber = getProperty("EntryNumber");
-      if( static_cast<int>(m_entrynumber) > m_numberOfPeriods || m_entrynumber < 0 )
+      if( static_cast<int>(m_entrynumber) > m_loadBlockInfo.numberOfPeriods || m_entrynumber < 0 )
       {
-        std::string err="Invalid entry number entered. File contains "+boost::lexical_cast<std::string>(m_numberOfPeriods )+ " period. ";
+        std::string err="Invalid entry number entered. File contains "+boost::lexical_cast<std::string>(m_loadBlockInfo.numberOfPeriods)+ " period. ";
         throw std::invalid_argument(err);
       }
-      if( m_numberOfPeriods == 1 )
+      if(m_loadBlockInfo.numberOfPeriods== 1 )
       {
         m_entrynumber = 1;
       }
@@ -407,44 +470,101 @@ namespace Mantid
         // Sort the list so that we can check it's range
         std::sort(spec_list.begin(), spec_list.end());
 
-        if( spec_list.back() > static_cast<int64_t>(m_numberOfSpectra) )
+        if( spec_list.back() > m_loadBlockInfo.spectraID_max )
         {
-          std::string err="A spectra number in the spectra list exceeds total number of "+boost::lexical_cast<std::string>(m_numberOfSpectra )+ " spectra ";
+          std::string err="A spectra number in the spectra list exceeds maximal spectra ID:  "+boost::lexical_cast<std::string>(m_loadBlockInfo.spectraID_max )+ " in the file ";
           throw std::invalid_argument(err);
         }
-
-        //Check no negative numbers have been passed
-        std::vector<int64_t>::iterator itr =
-          std::find_if(spec_list.begin(), spec_list.end(), std::bind2nd(std::less<int>(), 0));
-        if( itr != spec_list.end() )
+        if( spec_list.front() < m_loadBlockInfo.spectraID_min )
         {
-          throw std::invalid_argument("Negative SpectraList property encountered.");
+          std::string err="A spectra number in the spectra list smaller then minimal spectra ID:  "+boost::lexical_cast<std::string>(m_loadBlockInfo.spectraID_min )+ " in the file";
+          throw std::invalid_argument(err);
         }
-        range_check in_range(m_spec_min, m_spec_max);
-        if( m_range_supplied )
+
+
+        range_check in_range(spec_min, spec_max);
+        if(range_supplied )
         {
           spec_list.erase(remove_if(spec_list.begin(), spec_list.end(), in_range), spec_list.end());
           // combine spectra numbers from ranges and the list
           if (spec_list.size()>0)
           {
-            for(int64_t i=m_spec_min;i<m_spec_max+1;i++)
-              spec_list.push_back(static_cast<specid_t>(i));
+            for(int64_t i=spec_min;i<spec_max+1;i++)
+            {
+              specid_t spec_num = static_cast<specid_t>(i);
+              // remove excluded spectra now rather then inserting it here and removing later
+              if (SpectraExcluded.find(spec_num)==SpectraExcluded.end() )
+                spec_list.push_back(spec_num);
+            }
             // Sort the list so that lower spectra indexes correspond to smaller spectra ID-s
             std::sort(spec_list.begin(), spec_list.end());
-
+            // supplied range converted into the list, so no more supplied range
+            range_supplied =false;
           }
         }
+
       }
-      else
+      // 
+      if (m_load_selected_spectra)
       {
-        m_range_supplied = true;
+        buildSpectraInd2SpectraNumMap(range_supplied,spec_min,spec_max,spec_list,SpectraExcluded);
       }
-      if (m_load_selected_spectra)
+      else // may be just range supplied and the range have to start from 1 to use defaults in spectra num to spectra ID map!
       {
-        buildSpectraInd2SpectraNumMap(spec_list);
+        m_loadBlockInfo.spectraID_max=spec_max;
+        m_loadBlockInfo.numberOfSpectra = m_loadBlockInfo.spectraID_max-m_loadBlockInfo.spectraID_min+1;
       }
 
     }
+    /**
+    build the list of spectra to load and include into spectra-detectors map
+    @param range_supplied  -- if true specifies that the range of values provided below have to be processed rather then spectra list
+    @param range_min       -- min value for spectra-ID to load
+    @param range_max       -- max value for spectra-ID to load
+    @param spec_list       -- list of spectra numbers to load 
+    @param SpectraExcluded -- set of the spectra ID-s to exclude from loading
+    **/
+    void  LoadISISNexus2::buildSpectraInd2SpectraNumMap(bool range_supplied,int64_t range_min,int64_t range_max,
+      const std::vector<int64_t>  &spec_list,const std::map<int64_t,std::string> &SpectraExcluded)
+    {
+
+      int64_t ic(0);
+
+      if(spec_list.size()>0)
+      {
+        ic = 0;
+        auto start_point = spec_list.begin();
+        for(auto it =start_point  ;it!=spec_list.end();it++)
+        {
+
+          specid_t spec_num = static_cast<specid_t>(*it);
+          if (SpectraExcluded.find(spec_num)==SpectraExcluded.end() )
+          {
+            m_specInd2specNum_map.insert(std::pair<int64_t,specid_t>(ic,spec_num));
+            ic++;
+          }
+        }
+      }
+      else
+      {
+        if(range_supplied)
+        {
+          ic = 0;
+          for(int64_t i=range_min;i<range_max+1;i++)
+          {
+            specid_t spec_num = static_cast<specid_t>(i);
+            if (SpectraExcluded.find(spec_num)==SpectraExcluded.end() )
+            {
+              m_specInd2specNum_map.insert(std::pair<int64_t,specid_t>(ic,spec_num));
+              ic++;
+            }
+          }
+
+        }
+      }
+    }
+
+
 
     namespace
     {
@@ -465,66 +585,84 @@ namespace Mantid
     * in a separate block.
     * @return :: Number of spectra to load.
     */
-    size_t LoadISISNexus2::prepareSpectraBlocks()
+    size_t LoadISISNexus2::prepareSpectraBlocks(std::map<int64_t,std::string > &monitors,  const std::map<int64_t,specid_t> &specInd2specNum_map,const DataBlock &LoadBlock)
     {
       std::vector<int64_t> includedMonitors;
       // fill in the data block descriptor vector
-      if ( ! m_specInd2specNum_map.empty() )
+      if ( ! specInd2specNum_map.empty() )
       {
-        auto itSpec= m_specInd2specNum_map.begin();
+        auto itSpec= specInd2specNum_map.begin();
         int64_t hist = itSpec->second;
-        SpectraBlock block(hist,hist,false);
+        SpectraBlock block(hist,hist,false,"");
         itSpec++;
-        for(; itSpec != m_specInd2specNum_map.end(); ++itSpec)
+        for(; itSpec != specInd2specNum_map.end(); ++itSpec)
         {
           // try to put all consecutive numbers in same block
-          bool isMonitor = m_monitors.find( hist ) != m_monitors.end();
+
+          auto it_mon  = monitors.find( hist );
+          bool isMonitor =  it_mon  != monitors.end();
           if ( isMonitor || itSpec->second!= hist + 1 )
           {
+
+            if ( isMonitor )
+            {
+              includedMonitors.push_back( hist );
+              block.monName = it_mon->second;
+            }
+
             block.last = hist;
             block.isMonitor =  isMonitor;
             m_spectraBlocks.push_back( block );
-            if ( isMonitor ) includedMonitors.push_back( hist );
-            block = SpectraBlock(itSpec ->second,itSpec ->second,false);
+
+            block = SpectraBlock(itSpec ->second,itSpec ->second,false,"");
           }
           hist = itSpec ->second;
         }
+
         // push the last block
-        hist = m_specInd2specNum_map.rbegin()->second;
+        hist = specInd2specNum_map.rbegin()->second;
         block.last = hist;
-        if ( m_monitors.find( hist ) != m_monitors.end() )
+
+        auto it_mon = monitors.find( hist );
+        if (it_mon  != monitors.end() )
         {
           includedMonitors.push_back( hist );
           block.isMonitor =  true;
+          block.monName  = it_mon->second;
         }
         m_spectraBlocks.push_back( block );
 
-        return m_specInd2specNum_map.size();
+        return specInd2specNum_map.size();
       }
 
+      // here we are only if ranges are not supplied
+      //
       // put in the spectra range, possibly breaking it into parts by monitors
-      int64_t first = m_spec_min;
-      for(int64_t hist = first; hist < m_spec_max; ++hist)
+      int64_t first = LoadBlock.spectraID_min;
+      for(int64_t hist = first; hist < LoadBlock.spectraID_max; ++hist)
       {
-        if ( m_monitors.find( hist ) != m_monitors.end() )
+        auto it_mon = monitors.find( hist );
+        if ( it_mon != monitors.end() )
         {
           if ( hist != first )
           {
-            m_spectraBlocks.push_back( SpectraBlock( first, hist - 1, false ) );
+            m_spectraBlocks.push_back( SpectraBlock(first,hist - 1,false,"") );
           }
-          m_spectraBlocks.push_back( SpectraBlock( hist, hist, true) );
+          m_spectraBlocks.push_back( SpectraBlock( hist, hist, true,it_mon->second) );
           includedMonitors.push_back( hist );
           first = hist + 1;
         }
       }
-      if ( first == m_spec_max && m_monitors.find( first ) != m_monitors.end() )
+      int64_t spec_max  = LoadBlock.spectraID_max;
+      auto it_mon = monitors.find( first);
+      if ( first == spec_max  && it_mon != monitors.end() )
       {
-        m_spectraBlocks.push_back( SpectraBlock( first, m_spec_max, true ) );
-        includedMonitors.push_back( m_spec_max );
+        m_spectraBlocks.push_back( SpectraBlock( first, spec_max, true, it_mon->second ) );
+        includedMonitors.push_back( spec_max );
       }
       else
       {
-        m_spectraBlocks.push_back( SpectraBlock( first, m_spec_max, false ) );
+        m_spectraBlocks.push_back( SpectraBlock(first,spec_max,false,"") );
       }
 
       // sort and check for overlapping
@@ -533,22 +671,18 @@ namespace Mantid
         std::sort( m_spectraBlocks.begin(), m_spectraBlocks.end(), compareSpectraBlocks );
       }
 
-      // remove monitors that weren't requested
-      if ( m_monitors.size() != includedMonitors.size() )
+      // remove monitors that have been used
+      if ( monitors.size() != includedMonitors.size() )
       {
-        if ( includedMonitors.empty() )
+        if ( !includedMonitors.empty() )
         {
-          m_monitors.clear();
-        }
-        else
-        {
-          for(auto it = m_monitors.begin(); it != m_monitors.end(); )
+          for(auto it = monitors.begin(); it != monitors.end(); )
           {
-            if ( std::find( includedMonitors.begin(), includedMonitors.end(), it->first ) == includedMonitors.end() )
+            if ( std::find( includedMonitors.begin(), includedMonitors.end(), it->first ) != includedMonitors.end() )
             {
               auto it1 = it;
               ++it;
-              m_monitors.erase( it1 );
+              monitors.erase( it1 );
             }
             else
             {
@@ -572,7 +706,7 @@ namespace Mantid
     * @param entry :: The opened root entry node for accessing the monitor and data nodes
     * @param local_workspace :: The workspace to place the data in
     */
-    void LoadISISNexus2::loadPeriodData(int64_t period, NXEntry & entry, DataObjects::Workspace2D_sptr local_workspace)
+    void LoadISISNexus2::loadPeriodData(int64_t period, NXEntry & entry, DataObjects::Workspace2D_sptr &local_workspace)
     {
       int64_t hist_index = 0;
       int64_t period_index(period - 1);
@@ -582,14 +716,12 @@ namespace Mantid
       {
         if ( block->isMonitor )
         {
-          auto it = m_monitors.find( block->first );
-          assert( it != m_monitors.end() );
-          NXData monitor = entry.openNXData(it->second);
+          NXData monitor = entry.openNXData(block->monName);
           NXInt mondata = monitor.openIntData();
           m_progress->report("Loading monitor");
           mondata.load(1,static_cast<int>(period-1)); // TODO this is just wrong
           MantidVec& Y = local_workspace->dataY(hist_index);
-          Y.assign(mondata(),mondata() + m_numberOfChannels);
+          Y.assign(mondata(),mondata() + m_monBlockInfo.numberOfChannels);
           MantidVec& E = local_workspace->dataE(hist_index);
           std::transform(Y.begin(), Y.end(), E.begin(), dblSqrt);
 
@@ -658,7 +790,7 @@ namespace Mantid
     * @param period :: period number
     * @param local_workspace :: workspace to add period log data to.
     */
-    void LoadISISNexus2::createPeriodLogs(int64_t period, DataObjects::Workspace2D_sptr local_workspace)
+    void LoadISISNexus2::createPeriodLogs(int64_t period, DataObjects::Workspace2D_sptr &local_workspace)
     {
       m_logCreator->addPeriodLogs(static_cast<int>(period), local_workspace->mutableRun());
     }
@@ -676,18 +808,19 @@ namespace Mantid
     */
     void LoadISISNexus2::loadBlock(NXDataSetTyped<int> & data, int64_t blocksize, int64_t period, int64_t start,
       int64_t &hist, int64_t& spec_num,
-      DataObjects::Workspace2D_sptr local_workspace)
+      DataObjects::Workspace2D_sptr &local_workspace)
     {
       data.load(static_cast<int>(blocksize), static_cast<int>(period), static_cast<int>(start)); // TODO this is just wrong
       int *data_start = data();
-      int *data_end = data_start + m_numberOfChannels;
+      int *data_end = data_start + m_loadBlockInfo.numberOfChannels;
       int64_t final(hist + blocksize);
       while( hist < final )
       {
         m_progress->report("Loading data");
         MantidVec& Y = local_workspace->dataY(hist);
         Y.assign(data_start, data_end);
-        data_start += m_numberOfChannels; data_end += m_numberOfChannels;
+        data_start += m_detBlockInfo.numberOfChannels;
+        data_end   += m_detBlockInfo.numberOfChannels;
         MantidVec& E = local_workspace->dataE(hist);
         std::transform(Y.begin(), Y.end(), E.begin(), dblSqrt);
         // Populate the workspace. Loop starts from 1, hence i-1
@@ -709,7 +842,7 @@ namespace Mantid
     }
 
     /// Run the Child Algorithm LoadInstrument (or LoadInstrumentFromNexus)
-    void LoadISISNexus2::runLoadInstrument(DataObjects::Workspace2D_sptr localWorkspace)
+    void LoadISISNexus2::runLoadInstrument(DataObjects::Workspace2D_sptr &localWorkspace)
     {
 
       IAlgorithm_sptr loadInst = createChildAlgorithm("LoadInstrument");
@@ -768,7 +901,7 @@ namespace Mantid
     *   @param local_workspace :: The workspace to load the run information in to
     *   @param entry :: The Nexus entry
     */
-    void LoadISISNexus2::loadRunDetails(DataObjects::Workspace2D_sptr local_workspace, NXEntry & entry)
+    void LoadISISNexus2::loadRunDetails(DataObjects::Workspace2D_sptr &local_workspace, NXEntry & entry)
     {
       API::Run & runDetails = local_workspace->mutableRun();
       // Charge is stored as a float
@@ -811,9 +944,9 @@ namespace Mantid
       runDetails.addProperty("run_header", std::string(header, header + 86));
 
       // Data details on run not the workspace
-      runDetails.addProperty("nspectra", static_cast<int>(m_numberOfSpectraInFile));
-      runDetails.addProperty("nchannels", static_cast<int>(m_numberOfChannelsInFile));
-      runDetails.addProperty("nperiods", static_cast<int>(m_numberOfPeriodsInFile));
+      runDetails.addProperty("nspectra", static_cast<int>(m_loadBlockInfo.numberOfSpectra));
+      runDetails.addProperty("nchannels", static_cast<int>(m_loadBlockInfo.numberOfChannels));
+      runDetails.addProperty("nperiods", static_cast<int>(m_loadBlockInfo.numberOfPeriods));
 
       // RPB struct info
       NXInt rpb_int = vms_compat.openNXInt("IRPB");
@@ -884,7 +1017,7 @@ namespace Mantid
     *   @param local_workspace :: The workspace to load the logs to.
     *   @param entry :: The Nexus entry
     */
-    void LoadISISNexus2::loadSampleData(DataObjects::Workspace2D_sptr local_workspace, NXEntry & entry)
+    void LoadISISNexus2::loadSampleData(DataObjects::Workspace2D_sptr &local_workspace, NXEntry & entry)
     {
       /// Sample geometry
       NXInt spb = entry.openNXInt("isis_vms_compat/SPB");
@@ -910,7 +1043,7 @@ namespace Mantid
     *   @param ws :: The workspace to load the logs to.
     *   @param entry :: Nexus entry
     */
-    void LoadISISNexus2::loadLogs(DataObjects::Workspace2D_sptr ws, NXEntry & entry)
+    void LoadISISNexus2::loadLogs(DataObjects::Workspace2D_sptr &ws, NXEntry & entry)
     {
       IAlgorithm_sptr alg = createChildAlgorithm("LoadNexusLogs", 0.0, 0.5);
       alg->setPropertyValue("Filename", this->getProperty("Filename"));
@@ -945,7 +1078,7 @@ namespace Mantid
       ws->populateInstrumentParameters();
 
       // Make log creator object and add the run status log
-      m_logCreator.reset(new ISISRunLogs(ws->run(), m_numberOfPeriods));
+      m_logCreator.reset(new ISISRunLogs(ws->run(), m_detBlockInfo.numberOfPeriods));
       m_logCreator->addStatusLog(ws->mutableRun());
     }
 
@@ -953,6 +1086,140 @@ namespace Mantid
     {
       return sqrt(in);
     }
+    /**Method takes input parameters which describe  monitor loading and analyze them against spectra/monitor block information in the file. 
+    * The result is the option if monitors can  be loaded together with spectra or mast be treated separately 
+    * and additional information on how to treat monitor spectra.
+    *
+    *@param entry                :: entry to the NeXus file, opened at root folder
+    *@param spectrum_index       :: array of spectra indexes of the data present in the file
+    *@param ndets                :: size of the spectrum index array
+    *@param n_vms_compat_spectra :: number of data entries containing common time bins (e.g. all spectra, or all spectra and monitors or some spectra (this is not fully supported)
+    *@param monitors             :: map connecting monitor spectra ID against monitor group name in the file. 
+    *@param excludeMonitors      :: input property indicating if it is requested to exclude monitors from the target workspace
+    *@param separateMonitors     :: input property indicating if it is requested to load monitors separately (and exclude them from target data workspace this way)
+    *
+    *@param OvelapMonitors       :: output property containing the list of monitors ID for monitors, which are also included with spectra. 
+    *@return excludeMonitors     :: indicator if monitors should or mast be excluded from the main data workspace if they can not be loaded with the data
+    *                               (contain different number of time channels)
+    *
+    */
+    bool LoadISISNexus2::findSpectraDetRangeInFile(NXEntry &entry,boost::shared_array<int>  &spectrum_index,int64_t ndets,int64_t n_vms_compat_spectra,
+      std::map<int64_t,std::string> &monitors,bool excludeMonitors,bool separateMonitors,std::map<int64_t,std::string> &OvelapMonitors)
+    {
+      OvelapMonitors.clear();
+      size_t nmons = monitors.size();
+
+      if (nmons>0)
+      {
+        NXInt chans = entry.openNXInt(m_monitors.begin()->second + "/data");
+
+        m_monBlockInfo    = DataBlock(chans);
+        m_monBlockInfo.numberOfSpectra = nmons; // each monitor is in separate group so number of spectra is equal to number of groups.
+
+        // identify monitor ID range.
+        for(auto it = monitors.begin(); it!=monitors.end(); it++)
+        {
+          int64_t mon_id = static_cast<int64_t>(it->first);
+          if(m_monBlockInfo.spectraID_min>mon_id )m_monBlockInfo.spectraID_min=mon_id;
+          if(m_monBlockInfo.spectraID_max<mon_id )m_monBlockInfo.spectraID_max=mon_id;
+        }
+        if(m_monBlockInfo.spectraID_max-m_monBlockInfo.spectraID_min+1!=static_cast<int64_t>(nmons))
+        {
+          g_log.warning()<<" non-consequent monitor ID-s in the monitor block. Unexpected situation for the loader\n";
+        }
+        // at this stage we assume that the only going to load monitors
+        m_loadBlockInfo =  m_monBlockInfo;
+
+      }
+
+      if( ndets == 0 )
+      {
+        separateMonitors = false; // only monitors in the main workspace. No detectors. Will be loaded in the main workspace
+        return separateMonitors;
+      }
+
+      // detectors are present in the file
+      NXData nxData = entry.openNXData("detector_1");
+      NXInt data = nxData.openIntData();
+
+      m_detBlockInfo    = DataBlock(data);
+      // We assume again that this spectrum list ID increase monotonically
+      m_detBlockInfo.spectraID_min = spectrum_index[0];
+      m_detBlockInfo.spectraID_max = spectrum_index[ndets-1];
+      if(m_detBlockInfo.spectraID_max-m_detBlockInfo.spectraID_min+1!=static_cast<int64_t>(m_detBlockInfo.numberOfSpectra))
+      {
+        g_log.warning()<<" non-consequent spectra ID-s in the detectors block. Unexpected situation for the loader\n";
+      }
+
+
+      m_loadBlockInfo   = m_detBlockInfo;  
+
+
+      // now we are analyzing what is actually going or can be loaded
+
+      bool removeMonitors = excludeMonitors || separateMonitors;
+      if (((m_detBlockInfo.numberOfPeriods!=m_monBlockInfo.numberOfPeriods) || (m_detBlockInfo.numberOfChannels!=m_monBlockInfo.numberOfChannels)) && nmons>0)
+      {
+        // detectors and monitors have different characteristics. Can be loaded only to separate workspaces.
+        if(!removeMonitors)
+        {
+          g_log.warning()<<" Performing separate loading as can not load spectra and monitors in the single workspace:\n" ;
+          g_log.warning()<<" Monitors data contain :"<<m_monBlockInfo.numberOfChannels<<" time channels and: "<<m_monBlockInfo.numberOfPeriods<<" period(s)\n";
+          g_log.warning()<<" Spectra  data contain :"<<m_detBlockInfo.numberOfChannels<<" time channels and: "<<m_detBlockInfo.numberOfPeriods<<" period(s)\n";
+        }
+        separateMonitors = true;
+        removeMonitors  = true;
+      }
+
+      int64_t spectraID_min  = std::min(m_monBlockInfo.spectraID_min,m_detBlockInfo.spectraID_min);
+      int64_t spectraID_max  = std::max(m_monBlockInfo.spectraID_max,m_detBlockInfo.spectraID_max);
+      size_t  totNumOfSpectra= m_monBlockInfo.numberOfSpectra+m_detBlockInfo.numberOfSpectra;
+      if(!removeMonitors)
+      {
+        m_loadBlockInfo.numberOfSpectra =totNumOfSpectra;
+        m_loadBlockInfo.spectraID_min = spectraID_min;
+        m_loadBlockInfo.spectraID_max = spectraID_max;
+      }
+      if (separateMonitors)
+        m_loadBlockInfo = m_detBlockInfo;
+
+
+      // verify integrity of the monitor and detector information
+
+      if((totNumOfSpectra ==static_cast<size_t>( n_vms_compat_spectra )) && (spectraID_max-spectraID_min+1 ==static_cast<int64_t>(n_vms_compat_spectra)))
+      {
+        // all information written in the file is correct, there are no spurious spectra and detectors & monitors form continuous block on HDD
+        return separateMonitors;
+      }
+
+
+      // something is wrong and we need to analyze spectra map.  Currently we can identify and manage the case when all monitor's spectra are written together with detectors
+      //make settings for this situation
+      m_detBlockInfo.numberOfSpectra -= m_monBlockInfo.numberOfSpectra; 
+      m_loadBlockInfo.numberOfSpectra-=  m_monBlockInfo.numberOfSpectra;
+
+      std::map<int64_t,std::string> remaining_monitors;
+      if(removeMonitors)
+      {
+        for(auto it = monitors.begin(); it!=monitors.end(); it++)
+        {
+          if(it->first>=m_detBlockInfo.spectraID_min && it->first <=m_detBlockInfo.spectraID_max)
+          {   //monitors ID-s are included with spectra ID-s -- let's try not to load it twice. 
+            OvelapMonitors.insert(*it);
+          }
+          else
+          {
+            remaining_monitors.insert(*it);
+          }
+        }
+      }
+      monitors.swap(remaining_monitors);
+
+
+      return separateMonitors;
+
+    }
+
 
   } // namespace DataHandling
 } // namespace Mantid
diff --git a/Code/Mantid/Framework/DataHandling/src/LoadInstrument.cpp b/Code/Mantid/Framework/DataHandling/src/LoadInstrument.cpp
index 465e04a7598b2032f0b7534bd3a327f72503ac7e..45661ecd0d7d862719c6baea545402440da26bdd 100644
--- a/Code/Mantid/Framework/DataHandling/src/LoadInstrument.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/LoadInstrument.cpp
@@ -202,14 +202,17 @@ namespace Mantid
       {
         // Not found, so search the other places were it may occur
         Kernel::ConfigServiceImpl & configService = Kernel::ConfigService::Instance();
-        std::string directoryName = configService.getString("parameterDefinition.directory");
-        if (directoryName.empty())
+        std::vector<std::string> directoryNames = configService.getInstrumentDirectories();
+
+        for ( auto instDirs_itr = directoryNames.begin(); instDirs_itr != directoryNames.end(); ++instDirs_itr)
         {
-          // This is the assumed deployment directory for parameter files, where we need to be 
-          // relative to the directory of the executable, not the current working directory.
-          directoryName = Poco::Path(configService.getPropertiesDir()).resolve("../instrument").toString();
+          //This will iterate around the directories from user ->etc ->install, and find the first beat file
+          std::string directoryName = *instDirs_itr;
+          fullPathParamIDF = getFullPathParamIDF( directoryName );
+          //stop when you find the first one
+          if (!fullPathParamIDF.empty())
+            break;
         }
-        fullPathParamIDF = getFullPathParamIDF( directoryName );
       }
 
       if(!fullPathParamIDF.empty()) {
diff --git a/Code/Mantid/Framework/DataHandling/src/LoadNXSPE.cpp b/Code/Mantid/Framework/DataHandling/src/LoadNXSPE.cpp
index c8605ec72e57c706dbb2a583751fd62c307c4be9..8b2ed399d04e1b441ca9fc4fd5178b23b0e8f897 100644
--- a/Code/Mantid/Framework/DataHandling/src/LoadNXSPE.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/LoadNXSPE.cpp
@@ -2,11 +2,13 @@
 #include "MantidKernel/UnitFactory.h"
 #include "MantidAPI/FileProperty.h"
 #include "MantidAPI/RegisterFileLoader.h"
+#include "MantidAPI/SpectraAxis.h"
 
 #include <nexus/NeXusFile.hpp>
 #include <nexus/NeXusException.hpp>
 #include "MantidNexus/NexusClasses.h"
 
+
 #include "MantidGeometry/Instrument.h"
 #include "MantidGeometry/Instrument/Detector.h"
 #include "MantidGeometry/Surfaces/Plane.h"
@@ -16,234 +18,261 @@
 #include <sstream>
 #include <string>
 #include <vector>
+#include <boost/regex.hpp>
 
 namespace Mantid
 {
-namespace DataHandling
-{
-
-  DECLARE_NEXUS_FILELOADER_ALGORITHM(LoadNXSPE);
-
-  using namespace Mantid::Kernel;
-  using namespace Mantid::API;
+  namespace DataHandling
+  {
 
+    DECLARE_NEXUS_FILELOADER_ALGORITHM(LoadNXSPE);
 
-  //----------------------------------------------------------------------------------------------
-  /** Constructor
-   */
-  LoadNXSPE::LoadNXSPE()
-  {
-  }
+    using namespace Mantid::Kernel;
+    using namespace Mantid::API;
 
-  //----------------------------------------------------------------------------------------------
-  /** Destructor
-   */
-  LoadNXSPE::~LoadNXSPE()
-  {
-  }
+    //----------------------------------------------------------------------------------------------
+    /** Constructor
+     */
+    LoadNXSPE::LoadNXSPE()
+    {
+    }
 
+    //----------------------------------------------------------------------------------------------
+    /** Destructor
+     */
+    LoadNXSPE::~LoadNXSPE()
+    {
+    }
 
-  //----------------------------------------------------------------------------------------------
+    //----------------------------------------------------------------------------------------------
 
-  /**
-   * Return the confidence with with this algorithm can load the file
-   * @param descriptor A descriptor for the file
-   * @returns An integer specifying the confidence level. 0 indicates it will not be used
-   */
-  int LoadNXSPE::confidence(Kernel::NexusDescriptor & descriptor) const
-  {
-    int confidence(0);
-    typedef std::map<std::string,std::string> string_map_t;
-    try
+    /**
+     * Calculate the confidence in the string value. This is used for file identification.
+     * @param value
+     * @return confidence 0 - 100%
+     */
+    int LoadNXSPE::identiferConfidence(const std::string& value)
     {
-      ::NeXus::File file = ::NeXus::File(descriptor.filename());
-      string_map_t entries = file.getEntries();
-      for(string_map_t::const_iterator it = entries.begin(); it != entries.end(); ++it)
+      int confidence = 0;
+      if (value.compare("NXSPE") == 0)
       {
-        if (it->second == "NXentry")
+        confidence = 99;
+      }
+      else
+      {
+        boost::regex re("^NXSP", boost::regex::icase);
+        if (boost::regex_match(value, re))
         {
-          file.openGroup(it->first, it->second);
-          file.openData("definition");
-          if (file.getStrData().compare("NXSPE")==0) confidence =99;
+          confidence = 95;
         }
       }
+      return confidence;
     }
-    catch(::NeXus::Exception&)
-    {
-    }
-    return confidence;
-  }
 
-  //----------------------------------------------------------------------------------------------
-  /** Initialize the algorithm's properties.
-   */
-  void LoadNXSPE::init()
-  {
-    std::vector<std::string> exts;
-    exts.push_back(".nxspe");
-    exts.push_back("");
-    declareProperty(new FileProperty("Filename", "", FileProperty::Load, exts),
-                                       "An NXSPE file");
-    declareProperty(new WorkspaceProperty<>("OutputWorkspace",
-                                       "",Direction::Output), "The name of the workspace that will be created.");
-  }
-
-  //----------------------------------------------------------------------------------------------
-  /** Execute the algorithm.
-   */
-  void LoadNXSPE::exec()
-  {
-    std::string filename = getProperty("Filename");
-    //quicly check if it's really nxspe
-    try
+    /**
+     * Return the confidence with with this algorithm can load the file
+     * @param descriptor A descriptor for the file
+     * @returns An integer specifying the confidence level. 0 indicates it will not be used
+     */
+    int LoadNXSPE::confidence(Kernel::NexusDescriptor & descriptor) const
     {
-      ::NeXus::File file(filename);
-      std::string mainEntry=(*(file.getEntries().begin())).first;
-      file.openGroup(mainEntry, "NXentry");
-      file.openData("definition");
-      if (file.getStrData().compare("NXSPE")) throw std::invalid_argument("Not NXSPE");
-      file.close();
+      int confidence(0);
+      typedef std::map<std::string, std::string> string_map_t;
+      try
+      {
+        ::NeXus::File file = ::NeXus::File(descriptor.filename());
+        string_map_t entries = file.getEntries();
+        for (string_map_t::const_iterator it = entries.begin(); it != entries.end(); ++it)
+        {
+          if (it->second == "NXentry")
+          {
+            file.openGroup(it->first, it->second);
+            file.openData("definition");
+            const std::string value = file.getStrData();
+            confidence = identiferConfidence(value);
+          }
+        }
+      } catch (::NeXus::Exception&)
+      {
+      }
+      return confidence;
     }
-    catch(...)
+
+    //----------------------------------------------------------------------------------------------
+    /** Initialize the algorithm's properties.
+     */
+    void LoadNXSPE::init()
     {
-      throw std::invalid_argument("Not NeXus or notNXSPE");
+      std::vector<std::string> exts;
+      exts.push_back(".nxspe");
+      exts.push_back("");
+      declareProperty(new FileProperty("Filename", "", FileProperty::Load, exts), "An NXSPE file");
+      declareProperty(new WorkspaceProperty<>("OutputWorkspace", "", Direction::Output),
+          "The name of the workspace that will be created.");
     }
 
-    //Load the data
-    ::NeXus::File file(filename);
+    //----------------------------------------------------------------------------------------------
+    /** Execute the algorithm.
+     */
+    void LoadNXSPE::exec()
+    {
+      std::string filename = getProperty("Filename");
+      //quicly check if it's really nxspe
+      try
+      {
+        ::NeXus::File file(filename);
+        std::string mainEntry = (*(file.getEntries().begin())).first;
+        file.openGroup(mainEntry, "NXentry");
+        file.openData("definition");
+        if (identiferConfidence(file.getStrData()) < 1)
+        {
+          throw std::invalid_argument("Not NXSPE");
+        }
+        file.close();
+      }
+      catch (...)
+      {
+        throw std::invalid_argument("Not NeXus or not NXSPE");
+      }
 
-    std::string mainEntry=(*(file.getEntries().begin())).first;
-    file.openGroup(mainEntry, "NXentry");
+      //Load the data
+      ::NeXus::File file(filename);
 
-    file.openGroup("NXSPE_info", "NXcollection");
-    std::map<std::string,std::string> entries=file.getEntries();
-    std::vector<double> temporary;
-    double fixed_energy,psi=0.;
+      std::string mainEntry = (*(file.getEntries().begin())).first;
+      file.openGroup(mainEntry, "NXentry");
 
-    if (!entries.count("fixed_energy"))
-    {
-      throw std::invalid_argument("fixed_energy field was not found");
-    }
-    file.openData("fixed_energy");
-    file.getData(temporary);
-    fixed_energy=temporary.at(0);
-    file.closeData();
+      file.openGroup("NXSPE_info", "NXcollection");
+      std::map<std::string, std::string> entries = file.getEntries();
+      std::vector<double> temporary;
+      double fixed_energy, psi = 0.;
 
-    if (entries.count("psi"))
-    {
-      file.openData("psi");
+      if (!entries.count("fixed_energy"))
+      {
+        throw std::invalid_argument("fixed_energy field was not found");
+      }
+      file.openData("fixed_energy");
       file.getData(temporary);
-      psi=temporary.at(0);
+      fixed_energy = temporary.at(0);
       file.closeData();
-    }
 
-    int kikfscaling=0;
-    if (entries.count("ki_over_kf_scaling"))
-    {
-      file.openData("ki_over_kf_scaling");
-      std::vector<int> temporaryint;
-      file.getData(temporaryint);
-      kikfscaling=temporaryint.at(0);
-      file.closeData();
-    }
+      if (entries.count("psi"))
+      {
+        file.openData("psi");
+        file.getData(temporary);
+        psi = temporary.at(0);
+        file.closeData();
+      }
 
-    file.closeGroup();//NXSPE_Info
+      int kikfscaling = 0;
+      if (entries.count("ki_over_kf_scaling"))
+      {
+        file.openData("ki_over_kf_scaling");
+        std::vector<int> temporaryint;
+        file.getData(temporaryint);
+        kikfscaling = temporaryint.at(0);
+        file.closeData();
+      }
 
+      file.closeGroup(); //NXSPE_Info
 
-    file.openGroup("data", "NXdata");
-    entries=file.getEntries();
+      file.openGroup("data", "NXdata");
+      entries = file.getEntries();
 
-    if (!entries.count("data"))
-    {
-      throw std::invalid_argument("data field was not found");
-    }
-    file.openData("data");
-    ::NeXus::Info info = file.getInfo();
-    std::size_t numSpectra=static_cast<std::size_t>(info.dims.at(0));
-    std::size_t numBins=static_cast<std::size_t>(info.dims.at(1));
-    std::vector<double> data;
-    file.getData(data);
-    file.closeData();
-
-    if (!entries.count("error"))
-    {
-      throw std::invalid_argument("error field was not found");
-    }
-    file.openData("error");
-    std::vector<double> error;
-    file.getData(error);
-    file.closeData();
+      if (!entries.count("data"))
+      {
+        throw std::invalid_argument("data field was not found");
+      }
+      file.openData("data");
+      ::NeXus::Info info = file.getInfo();
+      std::size_t numSpectra = static_cast<std::size_t>(info.dims.at(0));
+      std::size_t numBins = static_cast<std::size_t>(info.dims.at(1));
+      std::vector<double> data;
+      file.getData(data);
+      file.closeData();
 
-    if (!entries.count("energy"))
-    {
-      throw std::invalid_argument("energy field was not found");
-    }
-    file.openData("energy");
-    std::vector<double> energies;
-    file.getData(energies);
-    file.closeData();
+      if (!entries.count("error"))
+      {
+        throw std::invalid_argument("error field was not found");
+      }
+      file.openData("error");
+      std::vector<double> error;
+      file.getData(error);
+      file.closeData();
 
-    if (!entries.count("azimuthal"))
-    {
-      throw std::invalid_argument("azimuthal field was not found");
-    }
-    file.openData("azimuthal");
-    std::vector<double> azimuthal;
-    file.getData(azimuthal);
-    file.closeData();
+      if (!entries.count("energy"))
+      {
+        throw std::invalid_argument("energy field was not found");
+      }
+      file.openData("energy");
+      std::vector<double> energies;
+      file.getData(energies);
+      file.closeData();
 
-    if (!entries.count("azimuthal_width"))
-    {
-      throw std::invalid_argument("azimuthal_width field was not found");
-    }
-    file.openData("azimuthal_width");
-    std::vector<double> azimuthal_width;
-    file.getData(azimuthal_width);
-    file.closeData();
+      if (!entries.count("azimuthal"))
+      {
+        throw std::invalid_argument("azimuthal field was not found");
+      }
+      file.openData("azimuthal");
+      std::vector<double> azimuthal;
+      file.getData(azimuthal);
+      file.closeData();
 
-    if (!entries.count("polar"))
-    {
-      throw std::invalid_argument("polar field was not found");
-    }
-    file.openData("polar");
-    std::vector<double> polar;
-    file.getData(polar);
-    file.closeData();
+      if (!entries.count("azimuthal_width"))
+      {
+        throw std::invalid_argument("azimuthal_width field was not found");
+      }
+      file.openData("azimuthal_width");
+      std::vector<double> azimuthal_width;
+      file.getData(azimuthal_width);
+      file.closeData();
 
-    if (!entries.count("polar_width"))
-    {
-      throw std::invalid_argument("polar_width field was not found");
-    }
-    file.openData("polar_width");
-    std::vector<double> polar_width;
-    file.getData(polar_width);
-    file.closeData();
-
-    //distance might not have been saved in all NXSPE files
-    std::vector<double> distance;
-    if (entries.count("distance"))
-    {
-      file.openData("distance");
-      file.getData(distance);
+      if (!entries.count("polar"))
+      {
+        throw std::invalid_argument("polar field was not found");
+      }
+      file.openData("polar");
+      std::vector<double> polar;
+      file.getData(polar);
       file.closeData();
-    }
 
-    file.closeGroup();//data group
-    file.closeGroup();//Main entry
-    file.close();
+      if (!entries.count("polar_width"))
+      {
+        throw std::invalid_argument("polar_width field was not found");
+      }
+      file.openData("polar_width");
+      std::vector<double> polar_width;
+      file.getData(polar_width);
+      file.closeData();
 
-    //check if dimensions of the vectors are correct
-    if ((error.size()!=data.size())||(azimuthal.size()!=numSpectra)||(azimuthal_width.size()!=numSpectra)||
-        (polar.size()!=numSpectra)||(polar_width.size()!=numSpectra)||((energies.size()!=numBins)&&(energies.size()!=numBins+1)))
-    {
-      throw std::invalid_argument("incompatible sizes of fields in the NXSPE file");
-    }
+      //distance might not have been saved in all NXSPE files
+      std::vector<double> distance;
+      if (entries.count("distance"))
+      {
+        file.openData("distance");
+        file.getData(distance);
+        file.closeData();
+      }
+
+      file.closeGroup(); //data group
+      file.closeGroup(); //Main entry
+      file.close();
+
+      //check if dimensions of the vectors are correct
+      if ((error.size() != data.size()) || (azimuthal.size() != numSpectra)
+          || (azimuthal_width.size() != numSpectra) || (polar.size() != numSpectra)
+          || (polar_width.size() != numSpectra)
+          || ((energies.size() != numBins) && (energies.size() != numBins + 1)))
+      {
+        throw std::invalid_argument("incompatible sizes of fields in the NXSPE file");
+      }
 
     MatrixWorkspace_sptr outputWS = boost::dynamic_pointer_cast<MatrixWorkspace>
         (WorkspaceFactory::Instance().create("Workspace2D",numSpectra,energies.size(),numBins));
     // Need to get hold of the parameter map
     Geometry::ParameterMap& pmap = outputWS->instrumentParameters();
     outputWS->getAxis(0)->unit() = UnitFactory::Instance().create("DeltaE");
+    outputWS->setYUnit("SpectraNumber");
+
     std::vector<double>::iterator itdata=data.begin(),iterror=error.begin(),itdataend,iterrorend;
     API::Progress prog = API::Progress(this, 0.0, 0.9, numSpectra);
     for (std::size_t i=0; i<numSpectra; ++i)
@@ -267,120 +296,119 @@ namespace DataHandling
       prog.report();
     }
 
-    //add logs
-    outputWS->mutableRun().addLogData(new PropertyWithValue<double>("Ei", fixed_energy));
-    outputWS->mutableRun().addLogData(new PropertyWithValue<double>("psi", psi));
-    outputWS->mutableRun().addLogData(new PropertyWithValue<std::string>("ki_over_kf_scaling", kikfscaling==1?"true":"false"));
-
-    //Set Goniometer
-    Geometry::Goniometer gm;
-    gm.pushAxis("psi",0,1,0,psi);
-    outputWS->mutableRun().setGoniometer(gm, true);
-
-    //generate instrument
-    Geometry::Instrument_sptr instrument(new Geometry::Instrument("NXSPE"));
-    outputWS->setInstrument(instrument);
-
-    Geometry::ObjComponent *source = new Geometry::ObjComponent("source");
-    source->setPos(0.0,0.0,-10.0);
-    instrument->add(source);
-    instrument->markAsSource(source);
-    Geometry::ObjComponent *sample = new Geometry::ObjComponent("sample");
-    instrument->add(sample);
-    instrument->markAsSamplePos(sample);
-    
-    Geometry::Object_const_sptr cuboid(createCuboid(0.1,0.1,0.1));//FIXME: memory hog on rendering. Also, make each detector separate size
-    for (std::size_t i=0;i<numSpectra;++i)
-    {
-      double r=1.0;
-      if (!distance.empty())
+      //add logs
+      outputWS->mutableRun().addLogData(new PropertyWithValue<double>("Ei", fixed_energy));
+      outputWS->mutableRun().addLogData(new PropertyWithValue<double>("psi", psi));
+      outputWS->mutableRun().addLogData(
+          new PropertyWithValue<std::string>("ki_over_kf_scaling", kikfscaling == 1 ? "true" : "false"));
+
+      //Set Goniometer
+      Geometry::Goniometer gm;
+      gm.pushAxis("psi", 0, 1, 0, psi);
+      outputWS->mutableRun().setGoniometer(gm, true);
+
+      //generate instrument
+      Geometry::Instrument_sptr instrument(new Geometry::Instrument("NXSPE"));
+      outputWS->setInstrument(instrument);
+
+      Geometry::ObjComponent *source = new Geometry::ObjComponent("source");
+      source->setPos(0.0, 0.0, -10.0);
+      instrument->add(source);
+      instrument->markAsSource(source);
+      Geometry::ObjComponent *sample = new Geometry::ObjComponent("sample");
+      instrument->add(sample);
+      instrument->markAsSamplePos(sample);
+
+      Geometry::Object_const_sptr cuboid(createCuboid(0.1, 0.1, 0.1)); //FIXME: memory hog on rendering. Also, make each detector separate size
+      for (std::size_t i = 0; i < numSpectra; ++i)
       {
-        r=distance.at(i);
-      }
+        double r = 1.0;
+        if (!distance.empty())
+        {
+          r = distance.at(i);
+        }
 
-      Kernel::V3D pos;
-      pos.spherical(r,polar.at(i),azimuthal.at(i));
+        Kernel::V3D pos;
+        pos.spherical(r, polar.at(i), azimuthal.at(i));
 
-      Geometry::Detector *det = new Geometry::Detector("pixel",static_cast<int>(i+1),sample);
-      det->setPos(pos);
-      det->setShape(cuboid);
-      instrument->add(det);
-      instrument->markAsDetector(det);
-    }
+        Geometry::Detector *det = new Geometry::Detector("pixel", static_cast<int>(i + 1), sample);
+        det->setPos(pos);
+        det->setShape(cuboid);
+        instrument->add(det);
+        instrument->markAsDetector(det);
+      }
 
-    setProperty("OutputWorkspace", outputWS);
-  }
+      setProperty("OutputWorkspace", outputWS);
+    }
 
+    Geometry::Object_sptr LoadNXSPE::createCuboid(double dx, double dy, double dz)
+    {
 
-  Geometry::Object_sptr LoadNXSPE:: createCuboid(double dx,double dy, double dz)
-  {
+      dx = 0.5 * std::fabs(dx);
+      dy = 0.5 * std::fabs(dy);
+      dz = 0.5 * std::fabs(dz);
+      /*
+       std::stringstream planeName;
+
+       planeName.str("px ");planeName<<-dx;
+       std::string C1=planeName.str();
+       planeName.str("px ");planeName<<dx;
+       std::string C2=planeName.str();
+       planeName.str("px ");planeName<<-dy;
+       std::string C3=planeName.str();
+       planeName.str("px ");planeName<<dy;
+       std::string C4=planeName.str();
+       planeName.str("px ");planeName<<-dz;
+       std::string C5=planeName.str();
+       planeName.str("px ");planeName<<dz;
+       std::string C6=planeName.str();
+
+       // Create surfaces
+       std::map<int,Geometry::Surface*> CubeSurMap;
+       CubeSurMap[1]=new Geometry::Plane();
+       CubeSurMap[2]=new Geometry::Plane();
+       CubeSurMap[3]=new Geometry::Plane();
+       CubeSurMap[4]=new Geometry::Plane();
+       CubeSurMap[5]=new Geometry::Plane();
+       CubeSurMap[6]=new Geometry::Plane();
+
+       CubeSurMap[1]->setSurface(C1);
+       CubeSurMap[2]->setSurface(C2);
+       CubeSurMap[3]->setSurface(C3);
+       CubeSurMap[4]->setSurface(C4);
+       CubeSurMap[5]->setSurface(C5);
+       CubeSurMap[6]->setSurface(C6);
+       CubeSurMap[1]->setName(1);
+       CubeSurMap[2]->setName(2);
+       CubeSurMap[3]->setName(3);
+       CubeSurMap[4]->setName(4);
+       CubeSurMap[5]->setName(5);
+       CubeSurMap[6]->setName(6);
+
+       // Cube (id 68)
+       // using surface ids:  1-6
+       std::string ObjCube="1 -2 3 -4 5 -6";
+
+       Geometry::Object_sptr retVal = Geometry::Object_sptr(new Geometry::Object);
+       retVal->setObject(68,ObjCube);
+       retVal->populate(CubeSurMap);
+       */
+      std::string S41 = "so 0.01";         // Sphere at origin radius 0.01
+
+      // First create some surfaces
+      std::map<int, Geometry::Surface*> SphSurMap;
+      SphSurMap[41] = new Geometry::Sphere();
+      SphSurMap[41]->setSurface(S41);
+      SphSurMap[41]->setName(41);
+
+      // A sphere
+      std::string ObjSphere = "-41";
+      Geometry::Object_sptr retVal = Geometry::Object_sptr(new Geometry::Object);
+      retVal->setObject(41, ObjSphere);
+      retVal->populate(SphSurMap);
+
+      return retVal;
+    }
 
-    dx=0.5*std::fabs(dx);
-    dy=0.5*std::fabs(dy);
-    dz=0.5*std::fabs(dz);
-    /*
-    std::stringstream planeName;
-
-    planeName.str("px ");planeName<<-dx;
-    std::string C1=planeName.str();
-    planeName.str("px ");planeName<<dx;
-    std::string C2=planeName.str();
-    planeName.str("px ");planeName<<-dy;
-    std::string C3=planeName.str();
-    planeName.str("px ");planeName<<dy;
-    std::string C4=planeName.str();
-    planeName.str("px ");planeName<<-dz;
-    std::string C5=planeName.str();
-    planeName.str("px ");planeName<<dz;
-    std::string C6=planeName.str();
-
-    // Create surfaces
-    std::map<int,Geometry::Surface*> CubeSurMap;
-    CubeSurMap[1]=new Geometry::Plane();
-    CubeSurMap[2]=new Geometry::Plane();
-    CubeSurMap[3]=new Geometry::Plane();
-    CubeSurMap[4]=new Geometry::Plane();
-    CubeSurMap[5]=new Geometry::Plane();
-    CubeSurMap[6]=new Geometry::Plane();
-
-    CubeSurMap[1]->setSurface(C1);
-    CubeSurMap[2]->setSurface(C2);
-    CubeSurMap[3]->setSurface(C3);
-    CubeSurMap[4]->setSurface(C4);
-    CubeSurMap[5]->setSurface(C5);
-    CubeSurMap[6]->setSurface(C6);
-    CubeSurMap[1]->setName(1);
-    CubeSurMap[2]->setName(2);
-    CubeSurMap[3]->setName(3);
-    CubeSurMap[4]->setName(4);
-    CubeSurMap[5]->setName(5);
-    CubeSurMap[6]->setName(6);
-
-    // Cube (id 68)
-    // using surface ids:  1-6
-    std::string ObjCube="1 -2 3 -4 5 -6";
-
-    Geometry::Object_sptr retVal = Geometry::Object_sptr(new Geometry::Object);
-    retVal->setObject(68,ObjCube);
-    retVal->populate(CubeSurMap);
-*/
-    std::string S41="so 0.01";         // Sphere at origin radius 0.01
-
-    // First create some surfaces
-    std::map<int,Geometry::Surface*> SphSurMap;
-    SphSurMap[41]=new Geometry::Sphere();
-    SphSurMap[41]->setSurface(S41);
-    SphSurMap[41]->setName(41);
-
-    // A sphere
-    std::string ObjSphere="-41" ;
-    Geometry::Object_sptr retVal = Geometry::Object_sptr(new Geometry::Object);
-    retVal->setObject(41,ObjSphere);
-    retVal->populate(SphSurMap);
-
-    return retVal;
-  }
-
-
-} // namespace Mantid
+  } // namespace Mantid
 } // namespace DataHandling
diff --git a/Code/Mantid/Framework/DataHandling/src/LoadNexusMonitors.cpp b/Code/Mantid/Framework/DataHandling/src/LoadNexusMonitors.cpp
index 7418eaf89e6a55e0e3534a90987c693b0cde9f4f..f28f17a6e772c9c37e5e85de7a76d973e26ef645 100644
--- a/Code/Mantid/Framework/DataHandling/src/LoadNexusMonitors.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/LoadNexusMonitors.cpp
@@ -42,7 +42,7 @@ LoadNexusMonitors::~LoadNexusMonitors()
 {
 }
 
-/// Initialisation method.
+/// Initialization method.
 void LoadNexusMonitors::init()
 {
   declareProperty(new API::FileProperty("Filename", "", API::FileProperty::Load,
@@ -76,12 +76,12 @@ void LoadNexusMonitors::exec()
   string_map_t entries = file.getEntries();
   for (it = entries.begin(); it != entries.end(); ++it)
   {
-	if ( ((it->first == "entry") || (it->first == "raw_data_1")) && (it->second == "NXentry") )
-	{
-		file.openGroup(it->first, it->second);
+  if ( ((it->first == "entry") || (it->first == "raw_data_1")) && (it->second == "NXentry") )
+  {
+    file.openGroup(it->first, it->second);
         m_top_entry_name = it->first;
-		break;
-	}
+    break;
+  }
   }
   prog1.report();
 
@@ -353,14 +353,25 @@ void LoadNexusMonitors::exec()
   // Need to get the instrument name from the file
   std::string instrumentName;
   file.openGroup("instrument", "NXinstrument");
-  file.openData("name");
-  instrumentName = file.getStrData();
+  try
+  { 
+    file.openData("name");
+    instrumentName = file.getStrData();
+    // Now let's close the file as we don't need it anymore to load the instrument.
+    file.closeData();
+    file.closeGroup(); // Close the NXentry
+    file.close();
+
+  }
+  catch(std::runtime_error &) // no correct instrument definition (old ISIS file, fall back to isis_vms_compat)
+  {
+    file.closeGroup(); // Close the instrument NXentry
+    instrumentName =LoadEventNexus::readInstrumentFromISIS_VMSCompat(file);
+    file.close();
+  }
+
   g_log.debug() << "Instrument name read from NeXus file is " << instrumentName << std::endl;
 
-  // Now let's close the file as we don't need it anymore to load the instrument.
-  file.closeData();
-  file.closeGroup(); // Close the NXentry
-  file.close();
 
   this->WS->getAxis(0)->unit() = Kernel::UnitFactory::Instance().create("TOF");
   this->WS->setYUnit("Counts");
@@ -460,6 +471,7 @@ void LoadNexusMonitors::runLoadLogs(const std::string filename, API::MatrixWorks
 {
     // do the actual work
     API::IAlgorithm_sptr loadLogs = createChildAlgorithm("LoadNexusLogs");
+
     // Now execute the Child Algorithm. Catch and log any error, but don't stop.
     try
     {
diff --git a/Code/Mantid/Framework/DataHandling/src/LoadRaw3.cpp b/Code/Mantid/Framework/DataHandling/src/LoadRaw3.cpp
index 59989f2619808b9f852dada60a369d3179bd1e88..812d7336ba51a9cbd9ef4051ca57652a0d2e190a 100644
--- a/Code/Mantid/Framework/DataHandling/src/LoadRaw3.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/LoadRaw3.cpp
@@ -74,7 +74,7 @@ namespace Mantid
       "Allowed options are Include,Exclude, Separate.\n"
       "Include:The default is Include option which loads the monitors into the output workspace.\n"
       "Exclude:The Exclude option excludes monitors from the output workspace.\n"
-      "Separate:The Separate option loads monitors into a separate workspace called OutputWorkspace_Monitor.\n"
+      "Separate:The Separate option loads monitors into a separate workspace called OutputWorkspace_monitor.\n"
       "Defined aliases:\n"
       "1:  Equivalent to Separate.\n"
       "0:  Equivalent to Exclude.\n");
@@ -95,22 +95,9 @@ namespace Mantid
 
       bool bLoadlogFiles = getProperty("LoadLogFiles");
 
-      // process monitor option
-      std::string monitorOption = getProperty("LoadMonitors");
-      if (monitorOption =="1")
-        monitorOption = "Separate";
-      if (monitorOption=="0")
-         monitorOption = "Exclude";
-
-      bool bincludeMonitors = isIncludeMonitors(monitorOption);
-      bool bseparateMonitors = false;
-      bool bexcludeMonitors = false;
-      if (!bincludeMonitors)
-      {
-        bseparateMonitors = isSeparateMonitors(monitorOption);
-        bexcludeMonitors = isExcludeMonitors(monitorOption);
-      }
-      //
+      bool bincludeMonitors,bseparateMonitors, bexcludeMonitors;
+      LoadRawHelper::ProcessLoadMonitorOptions(bincludeMonitors,bseparateMonitors, bexcludeMonitors,this);
+
 
       std::string title;
       //read workspace title from raw file
@@ -172,7 +159,7 @@ namespace Mantid
 
       if (bincludeMonitors)
       {
-        setWorkspaceProperty("OutputWorkspace", title, ws_grp, localWorkspace,m_numberOfPeriods, false);
+        setWorkspaceProperty("OutputWorkspace", title, ws_grp, localWorkspace,m_numberOfPeriods, false,this);
       }
       else
       {
@@ -194,13 +181,13 @@ namespace Mantid
         if(normalwsSpecs > 0)
         {
           localWorkspace = createWorkspace(localWorkspace,normalwsSpecs,m_lengthIn,m_lengthIn-1);
-          setWorkspaceProperty("OutputWorkspace", title, ws_grp, localWorkspace,m_numberOfPeriods,false);
+          setWorkspaceProperty("OutputWorkspace", title, ws_grp, localWorkspace,m_numberOfPeriods,false,this);
         }
         //now create monitor workspace if separateMonitors selected
         if (bseparateMonitors)
         {
           createMonitorWorkspace(monitorWorkspace,localWorkspace,monitorws_grp,monitorwsSpecs,
-              normalwsSpecs,m_numberOfPeriods,m_lengthIn,title);
+              normalwsSpecs,m_numberOfPeriods,m_lengthIn,title,this);
         }
       }
 
@@ -298,18 +285,18 @@ namespace Mantid
             if(normalwsSpecs > 0)
             {
               // declare and set monitor workspace for each period
-              setWorkspaceProperty(monitorWorkspace, monitorws_grp, period, true);
+              setWorkspaceProperty(monitorWorkspace, monitorws_grp, period, true,this);
             }
             else
             {
               localWorkspace = monitorWorkspace;
             }
             // declare and set output workspace for each period
-            setWorkspaceProperty(localWorkspace, ws_grp, period, false);
+            setWorkspaceProperty(localWorkspace, ws_grp, period, false,this);
           }
           else
           {
-            setWorkspaceProperty(localWorkspace, ws_grp, period, false);
+            setWorkspaceProperty(localWorkspace, ws_grp, period, false,this);
           }
           // progress for workspace groups
           setProg ( static_cast<double>(period) / static_cast<double>(m_numberOfPeriods - 1) );
@@ -577,36 +564,6 @@ namespace Mantid
       }
 
     }
-    /** This method checks the value of LoadMonitors property and returns true or false
-     *  @return true if Exclude Monitors option is selected,otherwise false
-     */
-    bool LoadRaw3::isExcludeMonitors(const std::string &monitorOption)
-    {
-      bool bExclude;
-      monitorOption.compare("Exclude") ? (bExclude = false) : (bExclude = true);
-      return bExclude;
-    }
-
-    /**This method checks the value of LoadMonitors property and returns true or false
-     * @return true if Include Monitors option is selected,otherwise false
-     */
-    bool LoadRaw3::isIncludeMonitors(const std::string &monitorOption)
-    {
-      bool bExclude;
-      monitorOption.compare("Include") ? (bExclude = false) : (bExclude = true);
- 
-      return bExclude;
-    }
-
-    /** This method checks the value of LoadMonitors property and returns true or false
-     *  @return true if Separate Monitors option is selected,otherwise false
-     */
-    bool LoadRaw3::isSeparateMonitors(const std::string &monitorOption)
-    {
-      bool bSeparate;
-      monitorOption.compare("Separate") ? (bSeparate = false) : (bSeparate = true);
-      return bSeparate;
-    }
 
     /** This method checks given spectrum is a monitor
      *  @param monitorIndexes :: a vector holding the list of monitors
diff --git a/Code/Mantid/Framework/DataHandling/src/LoadRawBin0.cpp b/Code/Mantid/Framework/DataHandling/src/LoadRawBin0.cpp
index a1db683630ff2f1ae081e239f227572413dbd38d..5c5d402850c8e02f5ebdda305d5c235a764bf862 100644
--- a/Code/Mantid/Framework/DataHandling/src/LoadRawBin0.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/LoadRawBin0.cpp
@@ -65,31 +65,31 @@ void LoadRawBin0::init()
  */
 void LoadRawBin0::exec()
 {
-	// Retrieve the filename from the properties
-	m_filename = getPropertyValue("Filename");
+  // Retrieve the filename from the properties
+  m_filename = getPropertyValue("Filename");
 
-	bool bLoadlogFiles = getProperty("LoadLogFiles");
+  bool bLoadlogFiles = getProperty("LoadLogFiles");
 
-	//open the raw file
-	FILE* file=openRawFile(m_filename);
+  //open the raw file
+  FILE* file=openRawFile(m_filename);
 
-	// Need to check that the file is not a text file as the ISISRAW routines don't deal with these very well, i.e 
-	// reading continues until a bad_alloc is encountered.
-	if( isAscii(file) )
-	{
-		g_log.error() << "File \"" << m_filename << "\" is not a valid RAW file.\n";
-		throw std::invalid_argument("Incorrect file type encountered.");
-	}
-	std::string title;
-	readTitle(file,title);
+  // Need to check that the file is not a text file as the ISISRAW routines don't deal with these very well, i.e 
+  // reading continues until a bad_alloc is encountered.
+  if( isAscii(file) )
+  {
+    g_log.error() << "File \"" << m_filename << "\" is not a valid RAW file.\n";
+    throw std::invalid_argument("Incorrect file type encountered.");
+  }
+  std::string title;
+  readTitle(file,title);
 
-	readworkspaceParameters(m_numberOfSpectra,m_numberOfPeriods,m_lengthIn,m_noTimeRegimes);
+  readworkspaceParameters(m_numberOfSpectra,m_numberOfPeriods,m_lengthIn,m_noTimeRegimes);
 
-	///
-	setOptionalProperties();
+  ///
+  setOptionalProperties();
 
-	// to validate the optional parameters, if set
-	checkOptionalProperties();
+  // to validate the optional parameters, if set
+  checkOptionalProperties();
 
     // Calculate the size of a workspace, given its number of periods & spectra to read
      m_total_specs = calculateWorkspaceSize();
@@ -114,7 +114,7 @@ void LoadRawBin0::exec()
   setProtonCharge(run);
 
   WorkspaceGroup_sptr ws_grp = createGroupWorkspace();
-  setWorkspaceProperty("OutputWorkspace", title, ws_grp, localWorkspace,m_numberOfPeriods, false);
+  setWorkspaceProperty("OutputWorkspace", title, ws_grp, localWorkspace,m_numberOfPeriods, false,this);
     
   // Loop over the number of periods in the raw file, putting each period in a separate workspace
   for (int period = 0; period < m_numberOfPeriods; ++period)
@@ -147,14 +147,14 @@ void LoadRawBin0::exec()
       {
         progress(m_prog, "Reading raw file data...");
         //readData(file, histToRead);
-		  //read spectrum 
-		  if (!readData(file, histToRead))
-		  {
-			  throw std::runtime_error("Error reading raw file");
-		  }
-		  int64_t binStart=0;
-		  setWorkspaceData(localWorkspace, m_timeChannelsVec, wsIndex, i, m_noTimeRegimes,1,binStart);
-		  ++wsIndex;
+      //read spectrum 
+      if (!readData(file, histToRead))
+      {
+        throw std::runtime_error("Error reading raw file");
+      }
+      int64_t binStart=0;
+      setWorkspaceData(localWorkspace, m_timeChannelsVec, wsIndex, i, m_noTimeRegimes,1,binStart);
+      ++wsIndex;
 
       if (m_numberOfPeriods == 1)
       {
@@ -166,19 +166,19 @@ void LoadRawBin0::exec()
       }
 
     }
-	  else
-	  {
-		  skipData(file, histToRead);
-	  }
+    else
+    {
+      skipData(file, histToRead);
+    }
     
     }
-	
-	if(m_numberOfPeriods>1)
-	{
-		setWorkspaceProperty(localWorkspace, ws_grp, period, false);
-		// progress for workspace groups 
-		m_prog = static_cast<double>(period) / static_cast<double>(m_numberOfPeriods - 1);
-	}
+  
+  if(m_numberOfPeriods>1)
+  {
+    setWorkspaceProperty(localWorkspace, ws_grp, period, false,this);
+    // progress for workspace groups 
+    m_prog = static_cast<double>(period) / static_cast<double>(m_numberOfPeriods - 1);
+  }
   
   } // loop over periods
   // Clean up
diff --git a/Code/Mantid/Framework/DataHandling/src/LoadRawHelper.cpp b/Code/Mantid/Framework/DataHandling/src/LoadRawHelper.cpp
index 6b5a1c179df6d29384c8957d6ecd3eb34b8c8da4..fc8579dc9bd4949aca0b64d930aec20b72aec937 100644
--- a/Code/Mantid/Framework/DataHandling/src/LoadRawHelper.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/LoadRawHelper.cpp
@@ -170,7 +170,7 @@ namespace Mantid
       run.addLogData( new PropertyWithValue<std::string>("run_number", run_num) );
     }
     /**reads workspace dimensions,number of periods etc from raw data
-     * @param numberOfSpectra :: number of spectrums
+     * @param numberOfSpectra :: number of spectra
      * @param numberOfPeriods :: number of periods
      * @param lengthIn :: size of workspace vectors
      * @param noTimeRegimes :: number of time regime.
@@ -237,11 +237,11 @@ namespace Mantid
      *@param numberOfPeriods :: total number of periods from raw file
      *@param lengthIn :: size of workspace vectors
      *@param title :: title of the workspace
-
+     *@param pAlg   :: pointer to the algorithm, this method works with.
      */
     void LoadRawHelper::createMonitorWorkspace(DataObjects::Workspace2D_sptr& monws_sptr,DataObjects::Workspace2D_sptr& normalws_sptr,
         WorkspaceGroup_sptr& mongrp_sptr,const int64_t mwsSpecs,const int64_t nwsSpecs,
-        const int64_t numberOfPeriods,const int64_t lengthIn,const std::string title)
+        const int64_t numberOfPeriods,const int64_t lengthIn,const std::string title,API::Algorithm *const pAlg)
     {
       try
       { 
@@ -262,31 +262,31 @@ namespace Mantid
         }
         if(!monws_sptr) return ;
 
-        std::string wsName= getPropertyValue("OutputWorkspace");
+        std::string wsName= pAlg->getPropertyValue("OutputWorkspace");
         // if the normal output workspace size>0 then set the workspace as "MonitorWorkspace"
         // otherwise  set the workspace as "OutputWorkspace"
         if (nwsSpecs> 0)
         {               
           std::string monitorwsName = wsName + "_monitors";
-          declareProperty(new WorkspaceProperty<Workspace> ("MonitorWorkspace", monitorwsName,
+          pAlg->declareProperty(new WorkspaceProperty<Workspace> ("MonitorWorkspace", monitorwsName,
               Direction::Output));
-          setWorkspaceProperty("MonitorWorkspace", title, mongrp_sptr, monws_sptr,numberOfPeriods, true);
+          setWorkspaceProperty("MonitorWorkspace", title, mongrp_sptr, monws_sptr,numberOfPeriods, true,pAlg);
         }
         else
         { 
           //if only monitors range selected
-          //then set the monitor workspace as the outputworkspace
-          setWorkspaceProperty("OutputWorkspace", title, mongrp_sptr, monws_sptr,numberOfPeriods, false);
+          //then set the monitor workspace as the output workspace
+          setWorkspaceProperty("OutputWorkspace", title, mongrp_sptr, monws_sptr,numberOfPeriods, false,pAlg);
         }
 
       }
       catch(std::out_of_range& )
       {
-        g_log.debug()<<"Error in creating monitor workspace"<<std::endl;
+        pAlg->getLogger().debug()<<"Error in creating monitor workspace"<<std::endl;
       }
       catch(std::runtime_error& )
       {
-        g_log.debug()<<"Error in creating monitor workspace"<<std::endl;
+        pAlg->getLogger().debug()<<"Error in creating monitor workspace"<<std::endl;
       }
     }
 
@@ -305,16 +305,17 @@ namespace Mantid
      *  @param grpws_sptr :: shared pointer to  group workspace
      *  @param  period period number
      *  @param bmonitors :: boolean flag to name  the workspaces
+     *  @param pAlg      :: pointer to algorithm this method works with.
      */
     void LoadRawHelper::setWorkspaceProperty(DataObjects::Workspace2D_sptr ws_sptr, WorkspaceGroup_sptr grpws_sptr,
-        const int64_t period, bool bmonitors)
+        const int64_t period, bool bmonitors, API::Algorithm *const pAlg)
     {
       if(!ws_sptr) return;
       if(!grpws_sptr) return;
       std::string wsName;
       std::string outws;
       std::string outputWorkspace;
-      std::string localWSName = getProperty("OutputWorkspace");
+      std::string localWSName = pAlg->getProperty("OutputWorkspace");
       std::stringstream suffix;
       suffix << (period + 1);
       if (bmonitors)
@@ -328,8 +329,8 @@ namespace Mantid
         outputWorkspace = "OutputWorkspace";
       }
       outws = outputWorkspace + "_" + suffix.str();
-      declareProperty(new WorkspaceProperty<Workspace> (outws, wsName, Direction::Output));
-      setProperty(outws, boost::static_pointer_cast<Workspace>(ws_sptr));
+      pAlg->declareProperty(new WorkspaceProperty<Workspace> (outws, wsName, Direction::Output));
+      pAlg->setProperty(outws, boost::static_pointer_cast<Workspace>(ws_sptr));
       grpws_sptr->addWorkspace( ws_sptr );
     }
 
@@ -338,14 +339,15 @@ namespace Mantid
      *  @param title :: title of the workspace
      *  @param grpws_sptr ::  shared pointer to group workspace
      *  @param ws_sptr ::  shared pointer to workspace
-     *  @param numberOfPeriods :: numer periods in the raw file
+     *  @param numberOfPeriods :: number periods in the raw file
      *  @param  bMonitor to identify the workspace is an output workspace or monitor workspace
+     *  @param pAlg         :: pointer to algorithm this method works with.
      */
     void LoadRawHelper::setWorkspaceProperty(const std::string& propertyName, const std::string& title,
-        WorkspaceGroup_sptr grpws_sptr, DataObjects::Workspace2D_sptr ws_sptr,int64_t numberOfPeriods, bool bMonitor)
+        WorkspaceGroup_sptr grpws_sptr, DataObjects::Workspace2D_sptr ws_sptr,int64_t numberOfPeriods, bool bMonitor, API::Algorithm *const pAlg)
     {
       UNUSED_ARG(bMonitor);
-      Property *ws = getProperty("OutputWorkspace");
+      Property *ws = pAlg->getProperty("OutputWorkspace");
       if(!ws) return;
       if(!grpws_sptr) return;
       if(!ws_sptr)return;
@@ -353,18 +355,18 @@ namespace Mantid
       ws_sptr->getAxis(0)->unit() = UnitFactory::Instance().create("TOF");
       if (numberOfPeriods > 1)
       {
-        setProperty(propertyName, boost::dynamic_pointer_cast<Workspace>(grpws_sptr));
+        pAlg->setProperty(propertyName, boost::dynamic_pointer_cast<Workspace>(grpws_sptr));
       }
       else
       {
-        setProperty(propertyName, boost::dynamic_pointer_cast<Workspace>(ws_sptr));
+        pAlg->setProperty(propertyName, boost::dynamic_pointer_cast<Workspace>(ws_sptr));
       }
     }
 
     /** This method sets the raw file data to workspace vectors
      *  @param newWorkspace ::  shared pointer to the  workspace
      *  @param timeChannelsVec ::  vector holding the X data
-     *  @param  wsIndex  variable used for indexing the ouputworkspace
+     *  @param  wsIndex  variable used for indexing the output workspace
      *  @param  nspecNum  spectrum number
      *  @param noTimeRegimes ::   regime no.
      *  @param lengthIn :: length of the workspace
@@ -1289,5 +1291,62 @@ namespace Mantid
       return true;
     }
 
+    /** This method checks the value of LoadMonitors property and returns true or false
+     *  @return true if Exclude Monitors option is selected,otherwise false
+     */
+    bool LoadRawHelper::isExcludeMonitors(const std::string &monitorOption)
+    {
+      bool bExclude;
+      monitorOption.compare("Exclude") ? (bExclude = false) : (bExclude = true);
+      return bExclude;
+    }
+
+    /**This method checks the value of LoadMonitors property and returns true or false
+     * @return true if Include Monitors option is selected,otherwise false
+     */
+    bool LoadRawHelper::isIncludeMonitors(const std::string &monitorOption)
+    {
+      bool bExclude;
+      monitorOption.compare("Include") ? (bExclude = false) : (bExclude = true);
+ 
+      return bExclude;
+    }
+
+    /** This method checks the value of LoadMonitors property and returns true or false
+     *  @return true if Separate Monitors option is selected,otherwise false
+     */
+    bool LoadRawHelper::isSeparateMonitors(const std::string &monitorOption)
+    {
+      bool bSeparate;
+      monitorOption.compare("Separate") ? (bSeparate = false) : (bSeparate = true);
+      return bSeparate;
+    }
+    /**The method to interpret LoadMonitors property options and convert then into boolean values
+     * @param bincludeMonitors  :: if monitors requested to be included with workspace
+     * @param bseparateMonitors :: if monitors requested to be loaded separately from the workspace
+     * @param bexcludeMonitors  :: if monitors should not be loaded at all. 
+     * @param pAlgo             :: pointer to the algorithm, which has LoadMonitors property.
+     */ 
+    void LoadRawHelper::ProcessLoadMonitorOptions(bool &bincludeMonitors,bool &bseparateMonitors,bool &bexcludeMonitors,API::Algorithm *pAlgo)
+    {
+      // process monitor option
+      std::string monitorOption = pAlgo->getProperty("LoadMonitors");
+      if (monitorOption =="1")
+        monitorOption = "Separate";
+      if (monitorOption=="0")
+        monitorOption = "Exclude";
+
+      bincludeMonitors = LoadRawHelper::isIncludeMonitors(monitorOption);
+      bseparateMonitors = false;
+      bexcludeMonitors = false;
+      if (!bincludeMonitors)
+      {
+        bseparateMonitors = LoadRawHelper::isSeparateMonitors(monitorOption);
+        bexcludeMonitors = LoadRawHelper::isExcludeMonitors(monitorOption);
+      }
+      //
+
+    }
+
   } // namespace DataHandling
 } // namespace Mantid
diff --git a/Code/Mantid/Framework/DataHandling/src/LoadRawSpectrum0.cpp b/Code/Mantid/Framework/DataHandling/src/LoadRawSpectrum0.cpp
index 888e0d29496e676502618c4fabfa48843c46eeec..a79ee46b980e9205e29e3f5c4bf17f2bd3204531 100644
--- a/Code/Mantid/Framework/DataHandling/src/LoadRawSpectrum0.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/LoadRawSpectrum0.cpp
@@ -19,155 +19,155 @@
 
 namespace Mantid
 {
-	namespace DataHandling
-	{
-		// Register the algorithm into the algorithm factory
-		DECLARE_ALGORITHM(LoadRawSpectrum0)
-
-
-		using namespace Kernel;
-		using namespace API;
-
-		/// Constructor
-		LoadRawSpectrum0::LoadRawSpectrum0() :
-		 m_filename(), m_numberOfSpectra(0),
-			m_specTimeRegimes(), m_prog(0.0)
-		{
-		}
-
-		LoadRawSpectrum0::~LoadRawSpectrum0()
-		{
-		}
-
-		/// Initialisation method.
-		void LoadRawSpectrum0::init()
-		{
-							LoadRawHelper::init();
-			
-		}
-
-		/** Executes the algorithm. Reading in the file and creating and populating
-		*  the output workspace
-		*
-		*  @throw Exception::FileError If the RAW file cannot be found/opened
-		*  @throw std::invalid_argument If the optional properties are set to invalid values
-		*/
-		void LoadRawSpectrum0::exec()
-		{
-			// Retrieve the filename from the properties
-			m_filename = getPropertyValue("Filename");
-			
-			bool bLoadlogFiles = getProperty("LoadLogFiles");
-
-			//open the raw file
+  namespace DataHandling
+  {
+    // Register the algorithm into the algorithm factory
+    DECLARE_ALGORITHM(LoadRawSpectrum0)
+
+
+    using namespace Kernel;
+    using namespace API;
+
+    /// Constructor
+    LoadRawSpectrum0::LoadRawSpectrum0() :
+     m_filename(), m_numberOfSpectra(0),
+      m_specTimeRegimes(), m_prog(0.0)
+    {
+    }
+
+    LoadRawSpectrum0::~LoadRawSpectrum0()
+    {
+    }
+
+    /// Initialisation method.
+    void LoadRawSpectrum0::init()
+    {
+              LoadRawHelper::init();
+      
+    }
+
+    /** Executes the algorithm. Reading in the file and creating and populating
+    *  the output workspace
+    *
+    *  @throw Exception::FileError If the RAW file cannot be found/opened
+    *  @throw std::invalid_argument If the optional properties are set to invalid values
+    */
+    void LoadRawSpectrum0::exec()
+    {
+      // Retrieve the filename from the properties
+      m_filename = getPropertyValue("Filename");
+      
+      bool bLoadlogFiles = getProperty("LoadLogFiles");
+
+      //open the raw file
             FILE* file=openRawFile(m_filename);
 
-			// Need to check that the file is not a text file as the ISISRAW routines don't deal with these very well, i.e 
-			// reading continues until a bad_alloc is encountered.
-			if( isAscii(file) )
-			{
-				g_log.error() << "File \"" << m_filename << "\" is not a valid RAW file.\n";
-				throw std::invalid_argument("Incorrect file type encountered.");
-			}
+      // Need to check that the file is not a text file as the ISISRAW routines don't deal with these very well, i.e 
+      // reading continues until a bad_alloc is encountered.
+      if( isAscii(file) )
+      {
+        g_log.error() << "File \"" << m_filename << "\" is not a valid RAW file.\n";
+        throw std::invalid_argument("Incorrect file type encountered.");
+      }
 
-			std::string title;
-			readTitle(file,title);
+      std::string title;
+      readTitle(file,title);
   
       readworkspaceParameters(m_numberOfSpectra,m_numberOfPeriods,m_lengthIn,m_noTimeRegimes);
 
-			// Calculate the size of a workspace, given its number of periods & spectra to read
-			const int64_t total_specs = 1;
+      // Calculate the size of a workspace, given its number of periods & spectra to read
+      const int64_t total_specs = 1;
 
-			// Get the time channel array(s) and store in a vector inside a shared pointer
-			std::vector<boost::shared_ptr<MantidVec> > timeChannelsVec =
-				getTimeChannels(m_noTimeRegimes, m_lengthIn);
+      // Get the time channel array(s) and store in a vector inside a shared pointer
+      std::vector<boost::shared_ptr<MantidVec> > timeChannelsVec =
+        getTimeChannels(m_noTimeRegimes, m_lengthIn);
 
-			double histTotal = static_cast<double>(total_specs * m_numberOfPeriods);
-			int64_t histCurrent = -1;
+      double histTotal = static_cast<double>(total_specs * m_numberOfPeriods);
+      int64_t histCurrent = -1;
 
-			// Create the 2D workspace for the output
-			DataObjects::Workspace2D_sptr localWorkspace =createWorkspace(total_specs, m_lengthIn,m_lengthIn-1,title);
-					
-			Run& run = localWorkspace->mutableRun();
+      // Create the 2D workspace for the output
+      DataObjects::Workspace2D_sptr localWorkspace =createWorkspace(total_specs, m_lengthIn,m_lengthIn-1,title);
+          
+      Run& run = localWorkspace->mutableRun();
 
-			if(bLoadlogFiles)
-			{
-				runLoadLog(m_filename,localWorkspace, 0.0, 0.0);
+      if(bLoadlogFiles)
+      {
+        runLoadLog(m_filename,localWorkspace, 0.0, 0.0);
         const int period_number = 1;
         createPeriodLogs(period_number, localWorkspace);
-			}
-			// Set the total proton charge for this run
-			setProtonCharge(run);
-			
-			WorkspaceGroup_sptr wsgrp_sptr = createGroupWorkspace();
-			setWorkspaceProperty("OutputWorkspace", title, wsgrp_sptr, localWorkspace,m_numberOfPeriods, false);
-			
-			// Loop over the number of periods in the raw file, putting each period in a separate workspace
-			for (int period = 0; period < m_numberOfPeriods; ++period)
-			{
-				if (period > 0)
-				{
-					localWorkspace = boost::dynamic_pointer_cast<DataObjects::Workspace2D>(
-						WorkspaceFactory::Instance().create(localWorkspace));
-
-					if(bLoadlogFiles)
-					{
-						//remove previous period data
-						std::stringstream prevPeriod;
-						prevPeriod << "PERIOD " << (period);
-						Run& runObj = localWorkspace->mutableRun();
-						runObj.removeLogData(prevPeriod.str());
+      }
+      // Set the total proton charge for this run
+      setProtonCharge(run);
+      
+      WorkspaceGroup_sptr wsgrp_sptr = createGroupWorkspace();
+      setWorkspaceProperty("OutputWorkspace", title, wsgrp_sptr, localWorkspace,m_numberOfPeriods, false,this);
+      
+      // Loop over the number of periods in the raw file, putting each period in a separate workspace
+      for (int period = 0; period < m_numberOfPeriods; ++period)
+      {
+        if (period > 0)
+        {
+          localWorkspace = boost::dynamic_pointer_cast<DataObjects::Workspace2D>(
+            WorkspaceFactory::Instance().create(localWorkspace));
+
+          if(bLoadlogFiles)
+          {
+            //remove previous period data
+            std::stringstream prevPeriod;
+            prevPeriod << "PERIOD " << (period);
+            Run& runObj = localWorkspace->mutableRun();
+            runObj.removeLogData(prevPeriod.str());
             runObj.removeLogData("current_period");
-						//add current period data
+            //add current period data
             int period_number = static_cast<int>(period+1);
             createPeriodLogs(period_number, localWorkspace);
-					}
-					//skip all spectra except the first one in each period
-					for(int i=1;i<=m_numberOfSpectra;++i)
-					{
-						skipData(file, i+ (period-1)*(m_numberOfSpectra+1) );
-					}
-				}
-
-				int64_t wsIndex = 0;
-				// for each period read first spectrum
-				int64_t histToRead = period*(m_numberOfSpectra+1);
-
-				progress(m_prog, "Reading raw file data...");
-				//isisRaw->readData(file, histToRead);
-				//readData(file, histToRead);
-				//read spectrum 
-				if (!readData(file, histToRead))
-				{
-					throw std::runtime_error("Error reading raw file");
-				}
-
-				//set the workspace data
-			     setWorkspaceData(localWorkspace, timeChannelsVec, wsIndex, 0, m_noTimeRegimes,m_lengthIn,1);
-
-				if (m_numberOfPeriods == 1)
-				{
-					if (++histCurrent % 100 == 0)
-					{
-						m_prog = double(histCurrent) / histTotal;
-					}
-					interruption_point();
-				}
-				if(m_numberOfPeriods>1)
-				{
-					setWorkspaceProperty(localWorkspace, wsgrp_sptr, period, false);
-					// progress for workspace groups 
-					m_prog = static_cast<double>(period) / static_cast<double>(m_numberOfPeriods - 1);
-				}
-
-			} // loop over periods
-
-			// Clean up
-			reset();
-			fclose(file);
-
-		}
-		
-	
-	}
+          }
+          //skip all spectra except the first one in each period
+          for(int i=1;i<=m_numberOfSpectra;++i)
+          {
+            skipData(file, i+ (period-1)*(m_numberOfSpectra+1) );
+          }
+        }
+
+        int64_t wsIndex = 0;
+        // for each period read first spectrum
+        int64_t histToRead = period*(m_numberOfSpectra+1);
+
+        progress(m_prog, "Reading raw file data...");
+        //isisRaw->readData(file, histToRead);
+        //readData(file, histToRead);
+        //read spectrum 
+        if (!readData(file, histToRead))
+        {
+          throw std::runtime_error("Error reading raw file");
+        }
+
+        //set the workspace data
+           setWorkspaceData(localWorkspace, timeChannelsVec, wsIndex, 0, m_noTimeRegimes,m_lengthIn,1);
+
+        if (m_numberOfPeriods == 1)
+        {
+          if (++histCurrent % 100 == 0)
+          {
+            m_prog = double(histCurrent) / histTotal;
+          }
+          interruption_point();
+        }
+        if(m_numberOfPeriods>1)
+        {
+          setWorkspaceProperty(localWorkspace, wsgrp_sptr, period, false,this);
+          // progress for workspace groups 
+          m_prog = static_cast<double>(period) / static_cast<double>(m_numberOfPeriods - 1);
+        }
+
+      } // loop over periods
+
+      // Clean up
+      reset();
+      fclose(file);
+
+    }
+    
+  
+  }
 }
diff --git a/Code/Mantid/Framework/DataHandling/src/LoadReflTBL.cpp b/Code/Mantid/Framework/DataHandling/src/LoadReflTBL.cpp
index 9c79afc15a111db0603cd51ec2304330ccab97ec..025bdbd31917e5d56ef5c112409b32123e63f68f 100644
--- a/Code/Mantid/Framework/DataHandling/src/LoadReflTBL.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/LoadReflTBL.cpp
@@ -291,7 +291,7 @@ namespace Mantid
       auto colQmin = ws->addColumn("str","Qmin");
       auto colQmax = ws->addColumn("str","Qmax");
       auto colDqq = ws->addColumn("str","dq/q");
-      auto colScale = ws->addColumn("str","Scale");
+      auto colScale = ws->addColumn("double","Scale");
       auto colStitch = ws->addColumn("int","StitchGroup");
       auto colOptions = ws->addColumn("str","Options");
 
@@ -317,6 +317,11 @@ namespace Mantid
         }
         getCells(line, columns);
 
+        const std::string scaleStr = columns.at(16);
+        double scale = 1.0;
+        if(!scaleStr.empty())
+          Mantid::Kernel::Strings::convert<double>(columns.at(16), scale);
+
         //check if the first run in the row has any data associated with it
         // 0 = runs, 1 = theta, 2 = trans, 3 = qmin, 4 = qmax
         if (columns[0] != "" || columns[1] != "" || columns[2] != "" || columns[3] != "" || columns[4] != "")
@@ -327,7 +332,7 @@ namespace Mantid
             row << columns.at(i);
           }
           row << columns.at(15);
-          row << columns.at(16);
+          row << scale;
           row << stitchID;
         }
 
@@ -341,7 +346,7 @@ namespace Mantid
             row << columns.at(i);
           }
           row << columns.at(15);
-          row << columns.at(16);
+          row << scale;
           row << stitchID;
         }
 
@@ -352,7 +357,10 @@ namespace Mantid
           TableRow row = ws->appendRow();
           for (int i = 10; i < 17; ++i)
           {
-            row << columns.at(i);
+            if(i == 16)
+              row << scale;
+            else
+              row << columns.at(i);
           }
           row << stitchID;
         }
diff --git a/Code/Mantid/Framework/DataHandling/src/SaveNXTomo.cpp b/Code/Mantid/Framework/DataHandling/src/SaveNXTomo.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..70b590cd733497baeeae792fd7da2e0bca140799
--- /dev/null
+++ b/Code/Mantid/Framework/DataHandling/src/SaveNXTomo.cpp
@@ -0,0 +1,417 @@
+#include "MantidAPI/FileProperty.h"
+#include "MantidAPI/WorkspaceValidators.h"
+#include "MantidDataHandling/FindDetectorsPar.h"
+#include "MantidDataHandling/SaveNXTomo.h"
+#include "MantidGeometry/IComponent.h"
+#include "MantidKernel/MantidVersion.h"
+#include "MantidNexus/NexusClasses.h"
+
+namespace Mantid
+{
+  namespace DataHandling
+  {    
+    // Register the algorithm into the algorithm factory
+    DECLARE_ALGORITHM(SaveNXTomo)
+
+    using namespace Kernel;
+    using namespace API;
+    using Geometry::RectangularDetector;
+
+    const double SaveNXTomo::MASK_FLAG = std::numeric_limits<double>::quiet_NaN();
+    const double SaveNXTomo::MASK_ERROR = 0.0;
+    const std::string SaveNXTomo::NXTOMO_VER = "2.0";
+
+    SaveNXTomo::SaveNXTomo() :  API::Algorithm()
+    {
+      m_filename = "";
+      m_includeError = false;
+      m_numberOfRows = 32;
+    }
+
+    /**
+     * Initialise the algorithm
+     */
+    void SaveNXTomo::init()
+    {
+      auto wsValidator = boost::make_shared<CompositeValidator>() ;
+      //wsValidator->add(boost::make_shared<API::WorkspaceUnitValidator>("DeltaE"));
+      wsValidator->add<API::CommonBinsValidator>();
+      wsValidator->add<API::HistogramValidator>();
+
+      declareProperty(new WorkspaceProperty<MatrixWorkspace> ("InputWorkspace",  "", Direction::Input, wsValidator),
+        "The name of the workspace to save.");
+
+      declareProperty(new API::FileProperty("Filename", "", FileProperty::Save, std::vector<std::string>(1,".nxs")),
+        "The name of the NXTomo file to write, as a full or relative path");
+
+      declareProperty(new PropertyWithValue<size_t>("RowChunkSize", 32, Kernel::Direction::Input), 
+        "Please use an evenly divisible number smaller than the image height");
+
+      declareProperty(new PropertyWithValue<bool>("IncludeError", false, Kernel::Direction::Input),
+        "Write the error values to NXTomo file?");
+    }
+
+    /**
+     * Execute the algorithm
+     */
+    void SaveNXTomo::exec()
+    {
+      // Retrieve the input workspace
+      const MatrixWorkspace_const_sptr inputWS = getProperty("InputWorkspace");
+      
+      m_numberOfRows = getProperty("RowChunkSize");
+      m_includeError = getProperty("IncludeError");
+
+      const std::string workspaceID = inputWS->id();
+      
+      if ((workspaceID.find("Workspace2D") == std::string::npos) &&
+        (workspaceID.find("RebinnedOutput") == std::string::npos)) 
+          throw Exception::NotImplementedError("SaveNXTomo passed invalid workspaces. Must be Workspace2D");
+      
+      // Do the full check for common binning
+      if (!WorkspaceHelpers::commonBoundaries(inputWS))
+      {
+        g_log.error("The input workspace must have common bins");
+        throw std::invalid_argument("The input workspace must have common bins");
+      }
+
+      // Number of spectra
+      const size_t nHist = inputWS->getNumberHistograms();
+      // Number of energy bins
+      //this->m_nBins = inputWS->blocksize();
+
+      // Get a pointer to the sample
+      //Geometry::IComponent_const_sptr sample =
+      //    inputWS->getInstrument()->getSample();
+
+      // Retrieve the filename from the properties
+      this->m_filename = getPropertyValue("Filename");
+         
+      // Dimensions for axis in nxTomo file.
+      std::vector<int64_t> dims_array;
+      
+      // Populate the array
+      dims_array = getDimensionsFromDetector(getRectangularDetectors(inputWS->getInstrument()));
+
+      // Insert number of bins at front
+      dims_array.insert(dims_array.begin(), inputWS->blocksize()); // Number of bins      
+       
+      // Create the file.
+      ::NeXus::File nxFile(this->m_filename, NXACC_CREATE5);
+      
+      // Make the top level entry (and open it)
+      nxFile.makeGroup("entry1", "NXentry", true);
+
+      // Make a sub-group for the entry to work with DAWN software (and open it)
+      nxFile.makeGroup("tomo_entry", "NXsubentry", true);
+
+      // Title
+      nxFile.writeData("title", this->m_filename);
+      
+      // Start Time; Format ISO8601 | unused but part of NXtomo schema
+      //nxFile.writeData("start_time", );
+
+      // End Time; Format ISO8601 | unused but part of NXtomo schema
+      //nxFile.writeData("end_time", );
+
+      // Definition name and version
+      nxFile.writeData("definition", "NXtomo");
+      nxFile.openData("definition");
+      nxFile.putAttr("version", NXTOMO_VER);
+      nxFile.closeData();
+
+      // Originating program name and version
+      nxFile.writeData("program_name", "mantid");
+      nxFile.openData("program_name");
+      nxFile.putAttr("version", Mantid::Kernel::MantidVersion::version());
+      nxFile.closeData();            
+
+      // ******************************************
+      // NXinstrument
+      nxFile.makeGroup("instrument", "NXinstrument", true);
+      // Write the instrument name | could add short_name attribute to name
+      nxFile.writeData("name", inputWS->getInstrument()->getName());
+             
+      // detector group - diamond example file contains {data,distance,image_key,x_pixel_size,y_pixel_size} Only adding image_key for now, 0 filled.
+      nxFile.makeGroup("detector", "NXdetector", true);
+      std::vector<double> imageKeys(dims_array[0],0);
+      nxFile.writeData("image_key", imageKeys);
+      // Create link to image_key
+      nxFile.openData("image_key");
+      //NXlink imageKeyLink = nxFile.getDataID();      
+      nxFile.closeData();
+      nxFile.closeGroup();
+
+      // source group // from diamond file contains {current,energy,name,probe,type} - probe = [neutron | x-ray | electron]      
+      
+      nxFile.closeGroup(); // NXinstrument
+
+      // ******************************************
+      // NXsample
+      nxFile.makeGroup("sample", "NXsample", true);
+      // TODO: Write sample info
+      // name
+      
+      // Initialise rotations - if unknown, fill with equal steps from 0 to 180 over all frames.
+      std::vector<double> rotationAngles(dims_array[0]);
+      std::string rotValues = "";
+      std::vector<std::string> rotSplit;
+      
+      if(inputWS->run().hasProperty("Rotations"))
+      {
+        rotValues = inputWS->run().getLogData("Rotations")->value();
+        boost::split(rotSplit, rotValues, boost::is_any_of(","));
+      }      
+  
+      if(rotSplit.size() == static_cast<size_t>(dims_array[0]) )
+      {
+	      for(size_t i=0; i<rotSplit.size(); i++)
+	      {
+	        rotationAngles[i] = boost::lexical_cast<double>(rotSplit[i]);
+	      }
+      }
+      else
+      {
+	      // Make some fake values
+	      g_log.notice("Unable to find a correctly formatted rotation angle file with same entry count as input; creating fake values.");
+	      double step = static_cast<double>(180/dims_array[0]);
+		    rotationAngles[0] = step;
+		
+		    for(auto it = rotationAngles.begin()+1; it != rotationAngles.end(); ++it)
+		    {
+			    *it = (*(it-1)) + step;
+		    }
+      }
+
+		  nxFile.writeData("rotation_angle", rotationAngles);
+      
+      // Create a link object for rotation_angle to use later
+      nxFile.openData("rotation_angle");
+        NXlink rotationLink = nxFile.getDataID();
+      nxFile.closeData();
+      // x_translation
+      // y_translation
+      // z_translation
+      nxFile.closeGroup(); // NXsample
+      
+      // ******************************************
+      // Make the NXmonitor group - Holds base beam intensity for each image
+      // If information is not present, set as 1
+
+      std::vector<double> intensity(dims_array[0],1);   
+      nxFile.makeGroup("control", "NXmonitor", true);         
+        nxFile.writeData("data", intensity);
+      nxFile.closeGroup(); // NXmonitor          
+       
+      nxFile.makeGroup("data", "NXdata", true);
+                
+      nxFile.makeLink(rotationLink);
+
+      nxFile.makeData("data", ::NeXus::FLOAT64, dims_array, false);
+      if(m_includeError) 
+        nxFile.makeData("error", ::NeXus::FLOAT64, dims_array, false);
+
+      std::vector<int64_t> slabStart;
+      std::vector<int64_t> slabSize;
+
+      // What size slabs are we going to write      
+      slabSize.push_back(dims_array[0]);
+      slabSize.push_back((int64_t)dims_array[1]);
+      slabSize.push_back((int64_t)m_numberOfRows);
+        
+      // Init start to first row
+      slabStart.push_back(0);
+      slabStart.push_back(0);
+      slabStart.push_back(0);
+
+      // define the data and error vectors for masked detectors
+      std::vector<double> masked_data (dims_array[0], MASK_FLAG);
+      if(m_includeError)
+        std::vector<double> masked_error (dims_array[0], MASK_ERROR);  
+
+      // Create a progress reporting object
+      Progress progress(this,0,1,100);
+      const size_t progStep = static_cast<size_t>(ceil(static_cast<double>(nHist)/100.0));
+      Geometry::IDetector_const_sptr det;
+      
+      double *dataArr = new double[dims_array[0]*dims_array[2]*m_numberOfRows];
+      double *errorArr = NULL;
+      if(m_includeError)
+        errorArr = new double[dims_array[0]*dims_array[2]*m_numberOfRows];
+
+      int currY = 0;
+      size_t rowIndForSlab = 0; // as we're creating slabs of multiple rows, this says which y index we're at in current slab
+
+      // Loop over detectors
+      for (size_t i = 0; i < nHist; ++i)
+      {      
+        try
+        { 
+          // detector exist
+          //det = inputWS->getDetector(i);
+          // Check that we aren't writing a monitor
+          //if (!det->isMonitor())
+          //{
+            //Geometry::IDetector_const_sptr det = inputWS->getDetector(i);
+        
+          // Figure out where this pixel is supposed to be going and set the correct slab start.
+              
+          if(i!=0 && (i)%dims_array[1] == 0){ // When this iteration matches end of a row
+            currY += 1;
+          }
+          size_t currX = (i) - (currY*dims_array[1]);
+                  
+          const MantidVec & thisY = inputWS->readY(i);
+          // No masking - Set the data and error as is
+          for(int j=0; j<dims_array[0];++j)
+          {        
+            const size_t currInd = j*dims_array[2]*m_numberOfRows + currX*m_numberOfRows + rowIndForSlab;
+
+           // if(!det->isMasked())
+           // {              
+              dataArr[currInd] = thisY.at(j);
+              if(m_includeError)
+                errorArr[currInd] = inputWS->readE(i).at(j);
+            //}
+            //else
+            //{
+            //  dataArr[currInd] = masked_data[j];
+            //  if(m_includeError)
+            //    errorArr[currInd] = masked_error[j];
+            //}
+          }   
+        
+          // If end of the row has been reached, check for end of slab (or end of row count) and write data/error
+          if(((i+1)%dims_array[2]) == 0)
+          {
+            rowIndForSlab += 1;
+
+            // Check if we have collected all of the rows (prior to completing a slab) - if so, write the final section
+            // TODO::
+            
+
+            // if a slab has been collected. Put it into the file
+            if(rowIndForSlab >= m_numberOfRows)
+            {                       
+              slabStart[2] = currY-(rowIndForSlab-1);    
+            
+              // Write Data
+              nxFile.openData("data");                                  
+                nxFile.putSlab(dataArr, slabStart, slabSize);                
+              nxFile.closeData();
+              // Write Error
+              if(m_includeError)
+              {
+                nxFile.openData("error");                                
+                  nxFile.putSlab(errorArr, slabStart, slabSize);                
+                nxFile.closeData();
+              }
+              // Reset slab index count
+              rowIndForSlab = 0;
+            }
+          }      
+        }
+        catch(Exception::NotFoundError&)
+        {
+            /*Catch if no detector. Next line tests whether this happened - test placed
+            outside here because Mac Intel compiler doesn't like 'continue' in a catch
+            in an openmp block.*/
+        }
+        // If no detector found, skip onto the next spectrum
+        if ( !det ) continue;
+  
+        // Make regular progress reports and check for canceling the algorithm
+        if ( i % progStep == 0 )
+        {
+          progress.report();
+        }        
+      }
+      
+      // Create a link object for the data
+      nxFile.openData("data");
+        NXlink dataLink = nxFile.getDataID();
+      nxFile.closeData();       
+
+      nxFile.closeGroup(); // Close Data group
+
+      // Put a link to the data in instrument/detector
+      nxFile.openGroup("instrument","NXinstrument");
+        nxFile.openGroup("detector","NXdetector");
+          nxFile.makeLink(dataLink);
+        nxFile.closeGroup();
+      nxFile.closeGroup();    
+
+
+      nxFile.closeGroup(); // tomo_entry sub-group
+      nxFile.closeGroup(); // Top level NXentry          
+
+      // Clean up memory
+      delete [] dataArr;
+      delete [] errorArr;
+    }
+
+    /**
+    * Find all RectangularDetector objects in an instrument
+    * @param instrument instrument to search for detectors in
+    * @returns vector of all Rectangular Detectors
+    */
+    std::vector<boost::shared_ptr<const RectangularDetector>> SaveNXTomo::getRectangularDetectors(const Geometry::Instrument_const_sptr &instrument)
+    {
+      std::vector<boost::shared_ptr<const Mantid::Geometry::IComponent>> components;
+      instrument->getChildren(components,true);
+
+      std::vector<boost::shared_ptr<const RectangularDetector>> rectDetectors;
+    
+      for(auto it = components.begin(); it != components.end(); ++it)
+      {
+        // for all components, compare to RectangularDetector - if it is one, add it to detectors list. 
+        auto ptr = boost::dynamic_pointer_cast<const RectangularDetector>(*it);
+        if(ptr != NULL)
+        {
+          rectDetectors.push_back(ptr);
+        }
+      }
+      
+      return rectDetectors;
+    }
+
+    /**
+    * Populates the dimensions vector with number of files, x and y sizes from a specified rectangular detector
+    * @param rectDetectors List of rectangular detectors to get axis sizes from
+    * @param useDetectorIndex index of the detector to select from the list, default = 0
+    * @returns vector of both axis dimensions for specified detector
+    *
+    *  @throw runtime_error Thrown if there are no rectangular detectors
+    */
+    std::vector<int64_t> SaveNXTomo::getDimensionsFromDetector(const std::vector<boost::shared_ptr<const RectangularDetector>> &rectDetectors, size_t useDetectorIndex) 
+    {
+      // Add number of pixels in X and Y from instrument definition
+      // Throws if no rectangular detector is present.
+
+      std::vector<int64_t> dims;
+
+      if(rectDetectors.size() != 0)
+      {
+        // Assume the first rect detector is the desired one.
+        dims.push_back(rectDetectors[useDetectorIndex]->xpixels());
+        dims.push_back(rectDetectors[useDetectorIndex]->ypixels());
+      }
+      else
+      {
+        // Incorrect workspace : requires the x/y pixel count from the instrument definition
+        g_log.error("Unable to retrieve x and y pixel count from an instrument definition associated with this workspace.");
+        throw std::runtime_error("Unable to retrieve x and y pixel count from an instrument definition associated with this workspace.");      
+      }
+
+      return dims;
+    }
+
+    //void someRoutineToAddDataToExisting()
+    //{
+    //  //TODO:
+    //}
+
+  } // namespace DataHandling
+} // namespace Mantid
+
+
diff --git a/Code/Mantid/Framework/DataHandling/src/SavePDFGui.cpp b/Code/Mantid/Framework/DataHandling/src/SavePDFGui.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6d3b6480f1733153a0fe15be02eade4e64460e21
--- /dev/null
+++ b/Code/Mantid/Framework/DataHandling/src/SavePDFGui.cpp
@@ -0,0 +1,128 @@
+#include "MantidDataHandling/SavePDFGui.h"
+#include "MantidAPI/FileProperty.h"
+#include "MantidKernel/MantidVersion.h"
+#include <fstream>
+#include <iomanip>
+
+namespace Mantid
+{
+namespace DataHandling
+{
+
+  using Mantid::Kernel::Direction;
+  using Mantid::API::WorkspaceProperty;
+
+  // Register the algorithm into the AlgorithmFactory
+  DECLARE_ALGORITHM(SavePDFGui)
+
+
+
+  //----------------------------------------------------------------------------------------------
+  /** Constructor
+   */
+  SavePDFGui::SavePDFGui()
+  {
+  }
+
+  //----------------------------------------------------------------------------------------------
+  /** Destructor
+   */
+  SavePDFGui::~SavePDFGui()
+  {
+  }
+
+
+  //----------------------------------------------------------------------------------------------
+
+  ///Algorithm's name for identification. @see Algorithm::name
+  const std::string SavePDFGui::name() const
+  {
+    return "SavePDFGui";
+  }
+
+  /// Algorithm's version for identification. @see Algorithm::version
+  int SavePDFGui::version() const
+  {
+    return 1;
+  }
+
+  /// Algorithm's category for identification. @see Algorithm::category
+  const std::string SavePDFGui::category() const
+  {
+    return "DataHandling";
+  }
+
+  /// Algorithm's summary for use in the GUI and help. @see Algorithm::summary
+  const std::string SavePDFGui::summary() const
+  {
+    return "Save files readable by PDFGui";
+  }
+
+  //----------------------------------------------------------------------------------------------
+  /** Initialize the algorithm's properties.
+   */
+  void SavePDFGui::init()
+  {
+    declareProperty(new WorkspaceProperty<>("InputWorkspace","",Direction::Input), "An input workspace.");
+    declareProperty(new API::FileProperty("Filename", "", API::FileProperty::Save, ".gr"),
+                    "The filename to use for the saved data");
+  }
+
+  /// @copydoc Algorithm::validateInputs
+  std::map<std::string, std::string> SavePDFGui::validateInputs(){
+    std::map<std::string, std::string> result;
+
+    API::MatrixWorkspace_const_sptr inputWS = getProperty("InputWorkspace");
+    const int nHist = static_cast<int> (inputWS->getNumberHistograms());
+    if (nHist != 1)
+    {
+      result["InputWorkspace"] = "Workspace must contain only one spectrum";
+    }
+    else if (std::string(inputWS->getAxis(0)->unit()->label()) != "Angstrom")
+    {
+      result["InputWorkspace"] = "Expected x-units of Angstrom";
+    }
+
+    return result;
+  }
+
+  //----------------------------------------------------------------------------------------------
+  /** Execute the algorithm.
+   */
+  void SavePDFGui::exec()
+  {
+    API::MatrixWorkspace_const_sptr inputWS = getProperty("InputWorkspace");
+    const std::string filename = getProperty("Filename");
+
+    // --------- open the file
+    std::ofstream out;
+    out.open(filename.c_str(), std::ios_base::out);
+
+    // --------- write the header // TODO
+
+    // --------- write the label for the data
+    out << "##### start data\n";
+    //out << "#O0 rg_int sig_rg_int low_int sig_low_int rmax rhofit\n"; // TODO
+    out << "#S 1 - PDF from Mantid " << Kernel::MantidVersion::version() << "\n";
+    //out << "#P0  -22.03808    1.10131 2556.26392    0.03422    1.50  0.5985\n"; // TODO
+    out << "#L r G(r) dr dG(r)\n";
+
+    // --------- write the data
+    auto x = inputWS->readX(0);
+    auto dx = inputWS->readDx(0);
+    auto y = inputWS->readY(0);
+    auto dy = inputWS->readE(0);
+    const size_t length = x.size();
+    for (size_t i = 0; i < length; ++i)
+    {
+      out << "  " << x[i] << "  " << y[i] << "  " << dx[i] << "  " << dy[i] << "\n";
+    }
+
+    // --------- close the file
+    out.close();
+  }
+
+
+
+} // namespace DataHandling
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/DataHandling/src/SaveParameterFile.cpp b/Code/Mantid/Framework/DataHandling/src/SaveParameterFile.cpp
index 18194d953f984f1d20e38bbc8ffceae2da30487f..4a3cdd2d150f9d49ca520dcab891a65dba7c76cd 100644
--- a/Code/Mantid/Framework/DataHandling/src/SaveParameterFile.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/SaveParameterFile.cpp
@@ -105,10 +105,10 @@ namespace DataHandling
       const std::string  pType = (*paramsIt).second->type();
       const std::string pValue = (*paramsIt).second->asString();
 
-      if(pName == "x"          || pName == "y"          || pName == "z"          ||
-         pName == "r-position" || pName == "t-position" || pName == "p-position" ||
-         pName == "rotx"       || pName == "roty"       || pName == "rotz"        )
-      {
+			if(pName == "x"          || pName == "y"          || pName == "z"          ||
+				pName == "r-position" || pName == "t-position" || pName == "p-position" ||
+				pName == "rotx"       || pName == "roty"       || pName == "rotz"        )
+			{
         g_log.warning() << "The parameter name '" << pName << "' is reserved and has not been saved. "
                         << "Please contact the Mantid team for more information.";
         continue;
@@ -192,14 +192,16 @@ namespace DataHandling
     //document out of them.
     for(auto paramsIt = toSave.begin(); paramsIt != toSave.end(); ++paramsIt)
     {
-      //Component data
+
+			
+			//Component data
       const ComponentID cID = boost::get<0>(*paramsIt);
       const std::string cFullName = cID->getFullName();
       const IDetector* cDet = dynamic_cast<IDetector*>(cID);
       const detid_t cDetID = (cDet) ? cDet->getID() : 0;
       const std::string cDetIDStr = boost::lexical_cast<std::string>(cDetID);
 
-      //Parameter data
+			//Parameter data
       const std::string pName = boost::get<1>(*paramsIt);
       const std::string pType = boost::get<2>(*paramsIt);
       const std::string pValue = boost::get<3>(*paramsIt);
@@ -229,9 +231,8 @@ namespace DataHandling
         compMap[cID] = compElem;
       }
 
-      //Create the parameter and value elements
+      //Create the parameter element
       XML::AutoPtr<XML::Element> paramElem = xmlDoc->createElement("parameter");
-      XML::AutoPtr<XML::Element> valueElem = xmlDoc->createElement("value");
 
       //Set the attributes
       compElem->setAttribute("name", cFullName);
@@ -242,19 +243,43 @@ namespace DataHandling
         compElem->setAttribute("id", cDetIDStr);
       }
 
-      paramElem->setAttribute("name", pName);
-
-      //For strings, we specify their type.
-      if(pType == "string")
-      {
-        paramElem->setAttribute("type", "string");
-      }
 
-      valueElem->setAttribute("val", pValue);
+			if(pType == "fitting")
+			{
+				// We need some parameter information as function, formula, units, and result units
+				auto param = params->get(cID,pName,pType);
+				const Mantid::Geometry::FitParameter& fitParam = param->value<FitParameter>();
+
+				// For fitting parameters we specify their type
+				paramElem->setAttribute("name", std::string(fitParam.getFunction()+":"+fitParam.getName()));
+				paramElem->setAttribute("type", pType);
+
+				XML::AutoPtr<XML::Element> formulaElem = xmlDoc->createElement("formula");
+				formulaElem->setAttribute("eq", fitParam.getFormula());
+				formulaElem->setAttribute("unit", fitParam.getFormulaUnit());
+				formulaElem->setAttribute("result-unit", fitParam.getResultUnit());
+
+				//Insert the elements into the document
+				compElem->appendChild(paramElem);
+				paramElem->appendChild(formulaElem);
+			}
+			else
+			{
+				paramElem->setAttribute("name", pName);
+
+				//For strings, we specify their type.
+				if(pType == "string")
+				{
+					paramElem->setAttribute("type", "string");
+				}
+				XML::AutoPtr<XML::Element> valueElem = xmlDoc->createElement("value");
+				valueElem->setAttribute("val", pValue);
+
+				//Insert the elements into the document
+				compElem->appendChild(paramElem);
+				paramElem->appendChild(valueElem);
+			}
 
-      //Insert the elements into the document
-      compElem->appendChild(paramElem);
-      paramElem->appendChild(valueElem);
 
       progress((double)std::distance(toSave.begin(), paramsIt) / (double)progressSteps * 0.6 + 0.3, "Building XML graph");
     }
diff --git a/Code/Mantid/Framework/DataHandling/src/SaveReflTBL.cpp b/Code/Mantid/Framework/DataHandling/src/SaveReflTBL.cpp
index 5b623ef210e4749e43fe0f3b49950a4a49ca7d1d..5642859373ec2694005d2a5cc437cbd03a854024 100644
--- a/Code/Mantid/Framework/DataHandling/src/SaveReflTBL.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/SaveReflTBL.cpp
@@ -111,7 +111,8 @@ namespace Mantid
         //now add dq/q and scale from the first row in the group
         TableRow row = ws->getRow(rowNos[0]);
         writeVal(row.cell<std::string>(5),file);
-        writeVal(row.cell<std::string>(6),file, false, true);
+        std::string scaleStr = boost::lexical_cast<std::string>(row.cell<double>(6));
+        writeVal(scaleStr, file, false, true);
       }
 
       //now do the same for the ungrouped
@@ -130,7 +131,8 @@ namespace Mantid
         }
         //now add dq/q and scale
         writeVal(row.cell<std::string>(5),file);
-        writeVal(row.cell<std::string>(6),file, false, true);
+        std::string scaleStr = boost::lexical_cast<std::string>(row.cell<double>(6));
+        writeVal(scaleStr, file, false, true);
       }
       file.close();
     }
diff --git a/Code/Mantid/Framework/DataHandling/src/SetSampleMaterial.cpp b/Code/Mantid/Framework/DataHandling/src/SetSampleMaterial.cpp
index 31802eb33d182e4c63266e68ec134a4d8fe7f46e..6b3fd0ebc94a515e03954a98c163a8a81e469007 100644
--- a/Code/Mantid/Framework/DataHandling/src/SetSampleMaterial.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/SetSampleMaterial.cpp
@@ -244,8 +244,10 @@ namespace Mantid
         mat.reset(new Material(chemicalSymbol, neutron, rho));
       }
 
-      // set the material on workspace
-      expInfo->mutableSample().setMaterial(*mat);
+      // set the material but leave the geometry unchanged
+      auto shapeObject = expInfo->sample().getShape(); //copy 
+      shapeObject.setMaterial(*mat);
+      expInfo->mutableSample().setShape(shapeObject);
       g_log.notice() << "Sample number density ";
       if (isEmpty(mat->numberDensity()))
       {
diff --git a/Code/Mantid/Framework/DataHandling/test/LoadEventNexusTest.h b/Code/Mantid/Framework/DataHandling/test/LoadEventNexusTest.h
index 9739246443c0365af4a4c62245bc1240c173a946..18b9221ff970dccf31e47a6a556bb845c5ee6e4d 100644
--- a/Code/Mantid/Framework/DataHandling/test/LoadEventNexusTest.h
+++ b/Code/Mantid/Framework/DataHandling/test/LoadEventNexusTest.h
@@ -218,7 +218,35 @@ public:
     TSM_ASSERT("The min TOF in the workspace should be equal to or greater than the filtered cut-off", min >= filterStart);
   }
 
-  void test_Load_And_CompressEvents()
+  void test_partial_spectra_loading()
+  {
+    const std::string wsName = "test_partial_spectra_loading";
+		std::vector<int32_t> specList;
+		specList.push_back(13);
+		specList.push_back(16);
+		specList.push_back(21);
+		specList.push_back(28);
+
+    LoadEventNexus ld;
+    ld.initialize();
+    ld.setPropertyValue("OutputWorkspace", wsName);
+    ld.setPropertyValue("Filename","CNCS_7860_event.nxs");
+		ld.setProperty("SpectrumList", specList);
+    ld.setProperty<bool>("LoadLogs", false); // Time-saver
+
+    TS_ASSERT( ld.execute() );
+
+    auto outWs = AnalysisDataService::Instance().retrieveWS<EventWorkspace>(wsName); 
+
+    TSM_ASSERT("The number of spectra in the workspace should be equal to the spectra filtered", outWs->getNumberHistograms()==specList.size());
+    TSM_ASSERT("Some spectra were not found in the workspace", outWs->getSpectrum(0)->getSpectrumNo()==13);
+    TSM_ASSERT("Some spectra were not found in the workspace", outWs->getSpectrum(1)->getSpectrumNo()==16);
+    TSM_ASSERT("Some spectra were not found in the workspace", outWs->getSpectrum(2)->getSpectrumNo()==21);
+    TSM_ASSERT("Some spectra were not found in the workspace", outWs->getSpectrum(3)->getSpectrumNo()==28);
+
+  }
+
+	void test_Load_And_CompressEvents()
   {
     Mantid::API::FrameworkManager::Instance();
     LoadEventNexus ld;
diff --git a/Code/Mantid/Framework/DataHandling/test/LoadILLReflectometryTest.h b/Code/Mantid/Framework/DataHandling/test/LoadILLReflectometryTest.h
index e2211a2e4c0640c364e8329e27c26f7976fd6e02..7d5e1dec52db59a6faf1c0056e943c71bc796ac8 100644
--- a/Code/Mantid/Framework/DataHandling/test/LoadILLReflectometryTest.h
+++ b/Code/Mantid/Framework/DataHandling/test/LoadILLReflectometryTest.h
@@ -21,7 +21,8 @@ public:
 	}
 
 	LoadILLReflectometryTest() :
-			m_dataFile("ILLD17_111686.nxs") {
+			m_dataFile("ILLD17-161876-Ni.nxs")
+	{
 	}
 
 	void test_Init() {
@@ -60,14 +61,13 @@ public:
 		double channelWidth = getPropertyFromRun<double>(output, "channel_width");
 		TS_ASSERT_EQUALS(channelWidth, 57.0);
 
-
+    double analyserAngle = getPropertyFromRun<double>(output, "dan.value");
+    TS_ASSERT_EQUALS(analyserAngle, 3.1909999847412109);
 
 
 		if (!output)
 			return;
 
-		// TODO: Check the results
-
 		// Remove workspace from the data service.
 		AnalysisDataService::Instance().clear();
 	}
diff --git a/Code/Mantid/Framework/DataHandling/test/LoadISISNexusTest.h b/Code/Mantid/Framework/DataHandling/test/LoadISISNexusTest.h
index 7124eec12d54cc1da789b4235c2b31469f1c7084..9335317a294e01f4ed22140c9937f645d32f9967 100644
--- a/Code/Mantid/Framework/DataHandling/test/LoadISISNexusTest.h
+++ b/Code/Mantid/Framework/DataHandling/test/LoadISISNexusTest.h
@@ -67,6 +67,77 @@ private:
   }
 
 public:
+
+  void testExecMonSeparated()
+  {
+    Mantid::API::FrameworkManager::Instance();
+    LoadISISNexus2 ld;
+    ld.initialize();
+    ld.setPropertyValue("Filename","LOQ49886.nxs");
+    ld.setPropertyValue("OutputWorkspace","outWS");
+    ld.setPropertyValue("LoadMonitors","1"); // should read "Separate"
+    TS_ASSERT_THROWS_NOTHING(ld.execute());
+    TS_ASSERT(ld.isExecuted());
+
+
+    MatrixWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("outWS");
+    MatrixWorkspace_sptr mon_ws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("outWS_monitors");
+
+    TS_ASSERT_EQUALS(ws->blocksize(),5);
+    TS_ASSERT_EQUALS(ws->getNumberHistograms(),17790);
+
+    TS_ASSERT_EQUALS(mon_ws->blocksize(),5);
+    TS_ASSERT_EQUALS(mon_ws->getNumberHistograms(),2);
+
+    // Two monitors which form two first spectra are excluded by load separately
+
+    // spectrum with ID 5 is now spectrum N 3 as 2 monitors
+    TS_ASSERT_EQUALS(ws->readY(5-2)[1],1.);
+    TS_ASSERT_EQUALS(ws->getSpectrum(5-2)->getSpectrumNo(),6);
+    TS_ASSERT_EQUALS(*(ws->getSpectrum(5-2)->getDetectorIDs().begin()), 6);
+    // spectrum with ID 7 is now spectrum N 4
+    TS_ASSERT_EQUALS(ws->readY(6-2)[0],1.);
+    TS_ASSERT_EQUALS(ws->getSpectrum(6-2)->getSpectrumNo(),7);
+    TS_ASSERT_EQUALS(*(ws->getSpectrum(6-2)->getDetectorIDs().begin()), 7);
+    //
+    TS_ASSERT_EQUALS(ws->readY(8-2)[3],1.);
+
+    TS_ASSERT_EQUALS(mon_ws->readX(0)[0],5.);
+    TS_ASSERT_EQUALS(mon_ws->readX(0)[1],4005.);
+    TS_ASSERT_EQUALS(mon_ws->readX(0)[2],8005.);
+
+    // these spectra are not loaded as above so their values are different  (occasionally 0)
+    TS_ASSERT_EQUALS(mon_ws->readY(0)[1],0);
+    TS_ASSERT_EQUALS(mon_ws->readY(1)[0],0.);
+    TS_ASSERT_EQUALS(mon_ws->readY(0)[3],0.);
+
+
+  
+    const std::vector< Property* >& logs = mon_ws->run().getLogData();
+    TS_ASSERT_EQUALS(logs.size(), 62);
+
+    std::string header = mon_ws->run().getPropertyValueAsType<std::string>("run_header");
+    TS_ASSERT_EQUALS(86, header.size());
+    TS_ASSERT_EQUALS("LOQ 49886 Team LOQ             Quiet Count, ISIS Off, N 28-APR-2009  09:20:29     0.00", header);
+
+    TimeSeriesProperty<std::string>* slog = dynamic_cast<TimeSeriesProperty<std::string>*>(mon_ws->run().getLogData("icp_event"));
+    TS_ASSERT(slog);
+    std::string str = slog->value();
+    TS_ASSERT_EQUALS(str.size(),1023);
+    TS_ASSERT_EQUALS(str.substr(0,37),"2009-Apr-28 09:20:29  CHANGE_PERIOD 1");
+
+    slog = dynamic_cast<TimeSeriesProperty<std::string>*>(mon_ws->run().getLogData("icp_debug"));
+    TS_ASSERT(slog);
+    TS_ASSERT_EQUALS(slog->size(),50);
+
+    AnalysisDataService::Instance().remove("outWS");
+    AnalysisDataService::Instance().remove("outWS_monitors");
+  }
+
+
+
+
+
   void testExec()
   {
     Mantid::API::FrameworkManager::Instance();
@@ -451,6 +522,119 @@ public:
     TS_ASSERT_THROWS_NOTHING( v1.initialize() );
     TS_ASSERT_THROWS( v1.execute(), Exception::NotImplementedError)
   }
+  void testExecMonExcluded()
+  {
+    Mantid::API::FrameworkManager::Instance();
+    LoadISISNexus2 ld;
+    ld.initialize();
+    ld.setPropertyValue("Filename","LOQ49886.nxs");
+    ld.setPropertyValue("OutputWorkspace","outWS");
+    ld.setPropertyValue("LoadMonitors","0"); // should read "exclude"
+    TS_ASSERT_THROWS_NOTHING(ld.execute());
+    TS_ASSERT(ld.isExecuted());
+
+
+    MatrixWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("outWS");
+    TS_ASSERT_EQUALS(ws->blocksize(),5);
+    TS_ASSERT_EQUALS(ws->getNumberHistograms(),17790);
+
+    // Two monitors which form two first spectra are excluded by load separately
+
+    // spectrum with ID 5 is now spectrum N 3 as 2 monitors
+    TS_ASSERT_EQUALS(ws->readY(5-2)[1],1.);
+    TS_ASSERT_EQUALS(ws->getSpectrum(5-2)->getSpectrumNo(),6);
+    TS_ASSERT_EQUALS(*(ws->getSpectrum(5-2)->getDetectorIDs().begin()), 6);
+    // spectrum with ID 7 is now spectrum N 4
+    TS_ASSERT_EQUALS(ws->readY(6-2)[0],1.);
+    TS_ASSERT_EQUALS(ws->getSpectrum(6-2)->getSpectrumNo(),7);
+    TS_ASSERT_EQUALS(*(ws->getSpectrum(6-2)->getDetectorIDs().begin()), 7);
+    //
+    TS_ASSERT_EQUALS(ws->readY(8-2)[3],1.);
+
+    // spectrum with ID 9 is now spectrum N 6
+    TS_ASSERT_EQUALS(ws->getSpectrum(8-2)->getSpectrumNo(),9);
+    TS_ASSERT_EQUALS(*(ws->getSpectrum(8-2)->getDetectorIDs().begin()), 9);
+    // spectrum with ID 14 is now spectrum N 11
+    TS_ASSERT_EQUALS(ws->readY(13-2)[1],1.);
+    TS_ASSERT_EQUALS(ws->getSpectrum(13-2)->getSpectrumNo(),14);
+    TS_ASSERT_EQUALS(*(ws->getSpectrum(13-2)->getDetectorIDs().begin()), 14);
+    // spectrum with ID 18 is now spectrum N 15
+    TS_ASSERT_EQUALS(ws->readY(17-2)[1],2.);
+    TS_ASSERT_EQUALS(ws->getSpectrum(17-2)->getSpectrumNo(),18);
+    TS_ASSERT_EQUALS(*(ws->getSpectrum(17-2)->getDetectorIDs().begin()), 18);
+    // spectrum with ID 19 is now spectrum N 16
+    TS_ASSERT_EQUALS(ws->readY(18-2)[1],1.);
+    TS_ASSERT_EQUALS(ws->getSpectrum(18-2)->getSpectrumNo(),19);
+    TS_ASSERT_EQUALS(*(ws->getSpectrum(18-2)->getDetectorIDs().begin()), 19);
+
+
+    TS_ASSERT_EQUALS(ws->readY(33-2)[2],1.);
+    TS_ASSERT_EQUALS(ws->getSpectrum(33-2)->getSpectrumNo(),34);
+    TS_ASSERT_EQUALS(*(ws->getSpectrum(33-2)->getDetectorIDs().begin()), 34);
+    //
+    TS_ASSERT_EQUALS(ws->readY(34-2)[1],1.);
+    TS_ASSERT_EQUALS(ws->getSpectrum(34-2)->getSpectrumNo(),35);
+    TS_ASSERT_EQUALS(*(ws->getSpectrum(34-2)->getDetectorIDs().begin()), 35);
+
+    TS_ASSERT_EQUALS(ws->readY(37-2)[3],1.);
+    TS_ASSERT_EQUALS(ws->readY(37-2)[4],1.);
+    TS_ASSERT_EQUALS(ws->getSpectrum(37-2)->getSpectrumNo(),38);
+    TS_ASSERT_EQUALS(*(ws->getSpectrum(37-2)->getDetectorIDs().begin()), 38);
+
+
+    TS_ASSERT_EQUALS(ws->getSpectrum(1234-2)->getDetectorIDs().size(), 1);
+    TS_ASSERT_EQUALS(*(ws->getSpectrum(1234-2)->getDetectorIDs().begin()), 1235);
+
+    TS_ASSERT_EQUALS(ws->getSpectrum(1234-2)->getSpectrumNo(), 1235 );
+    TS_ASSERT(ws->getSpectrum(1234-2)->hasDetectorID(1235) );
+
+    const std::vector< Property* >& logs = ws->run().getLogData();
+    TS_ASSERT_EQUALS(logs.size(), 62);
+
+    std::string header = ws->run().getPropertyValueAsType<std::string>("run_header");
+    TS_ASSERT_EQUALS(86, header.size());
+    TS_ASSERT_EQUALS("LOQ 49886 Team LOQ             Quiet Count, ISIS Off, N 28-APR-2009  09:20:29     0.00", header);
+
+    TimeSeriesProperty<std::string>* slog = dynamic_cast<TimeSeriesProperty<std::string>*>(ws->run().getLogData("icp_event"));
+    TS_ASSERT(slog);
+    std::string str = slog->value();
+    TS_ASSERT_EQUALS(str.size(),1023);
+    TS_ASSERT_EQUALS(str.substr(0,37),"2009-Apr-28 09:20:29  CHANGE_PERIOD 1");
+
+    slog = dynamic_cast<TimeSeriesProperty<std::string>*>(ws->run().getLogData("icp_debug"));
+    TS_ASSERT(slog);
+    TS_ASSERT_EQUALS(slog->size(),50);
+
+    TimeSeriesProperty<int>* ilog = dynamic_cast<TimeSeriesProperty<int>*>(ws->run().getLogData("total_counts"));
+    TS_ASSERT(ilog);
+    TS_ASSERT_EQUALS(ilog->size(),172);
+
+    ilog = dynamic_cast<TimeSeriesProperty<int>*>(ws->run().getLogData("period"));
+    TS_ASSERT(ilog);
+    TS_ASSERT_EQUALS(ilog->size(),172);
+
+    TimeSeriesProperty<double> *dlog = dynamic_cast<TimeSeriesProperty<double>*>(ws->run().getLogData("proton_charge"));
+    TS_ASSERT(dlog);
+    TS_ASSERT_EQUALS(dlog->size(),172);
+
+
+    TimeSeriesProperty<bool>* blog = dynamic_cast<TimeSeriesProperty<bool>*>(ws->run().getLogData("period 1"));
+    TS_ASSERT(blog);
+    TS_ASSERT_EQUALS(blog->size(),1);
+
+    blog = dynamic_cast<TimeSeriesProperty<bool>*>(ws->run().getLogData("running"));
+    TS_ASSERT(blog);
+    TS_ASSERT_EQUALS(blog->size(),6);
+
+    TS_ASSERT_EQUALS(ws->sample().getName(),"PMMA_SAN25_1.5%_TRANS_150");
+
+    Property *l_property = ws->run().getLogData( "run_number" );
+    TS_ASSERT_EQUALS( l_property->value(), "49886" );
+    AnalysisDataService::Instance().remove("outWS");
+  }
+
+
+
 };
 
 //------------------------------------------------------------------------------
diff --git a/Code/Mantid/Framework/DataHandling/test/LoadNXSPETest.h b/Code/Mantid/Framework/DataHandling/test/LoadNXSPETest.h
index 01379b78eade4b1552f154ca03c9e2be172150d1..c08f14c79ae1b38b4a97ab39d7c9cca9fdba83cd 100644
--- a/Code/Mantid/Framework/DataHandling/test/LoadNXSPETest.h
+++ b/Code/Mantid/Framework/DataHandling/test/LoadNXSPETest.h
@@ -25,7 +25,7 @@ public:
     TS_ASSERT( alg.isInitialized() )
   }
   
-  void xtest_exec()
+  void test_exec()
   {
     // Name of the output workspace.
     std::string outWSName("LoadNXSPETest_OutputWS");
@@ -33,29 +33,31 @@ public:
     LoadNXSPE alg;
     TS_ASSERT_THROWS_NOTHING( alg.initialize() )
     TS_ASSERT( alg.isInitialized() )
-    TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("Filename", "/home/andrei/Mantid/Test/Data/CNCS_7850.nxspe") );
+    TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("Filename", "NXSPEData.nxspe") );
     TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("OutputWorkspace", outWSName) );
     TS_ASSERT_THROWS_NOTHING( alg.execute(); );
     TS_ASSERT( alg.isExecuted() );
 
-//    TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("Filename", "/home/andrei/Desktop/cncs.nxspe") );
-    TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("Filename", "/home/andrei/Desktop/reduction.py") );
-    TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("OutputWorkspace", outWSName) );
-    TS_ASSERT_THROWS_NOTHING( alg.execute(); );
-    TS_ASSERT( alg.isExecuted() );
     // Retrieve the workspace from data service.
     Workspace_sptr ws;
     TS_ASSERT_THROWS_NOTHING( ws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(outWSName) );
     TS_ASSERT(ws);
     if (!ws) return;
     
-    // TODO: Check the results
-    
-    // Remove workspace from the data service.
     AnalysisDataService::Instance().remove(outWSName);
 
   }
 
+  void test_identifier_confidence()
+  {
+    const int high_confidence = LoadNXSPE::identiferConfidence("NXSPE");
+    const int good_confidence = LoadNXSPE::identiferConfidence("NXSP");
+    const int no_confidence = LoadNXSPE::identiferConfidence("NXS");
+
+    TS_ASSERT(high_confidence > good_confidence);
+    TS_ASSERT(good_confidence > no_confidence);
+  }
+
 };
 
 
diff --git a/Code/Mantid/Framework/DataHandling/test/LoadNexusMonitorsTest.h b/Code/Mantid/Framework/DataHandling/test/LoadNexusMonitorsTest.h
index 35762dab4986e19900feaeb5ce9cb80f976aad48..4cfec9b4c6942a16d4e3e571f57ab5e9e3ffff53 100644
--- a/Code/Mantid/Framework/DataHandling/test/LoadNexusMonitorsTest.h
+++ b/Code/Mantid/Framework/DataHandling/test/LoadNexusMonitorsTest.h
@@ -95,6 +95,32 @@ public:
     TS_ASSERT( ld.isExecuted() );
   }
 
+  void testBrokenISISFile()
+  {
+    // Just need to make sure it runs.
+    Mantid::API::FrameworkManager::Instance();
+    LoadNexusMonitors ld;
+    std::string outws_name = "LOQ_49886_monitors";
+    ld.initialize();
+    ld.setPropertyValue("Filename", "LOQ49886.nxs");
+    ld.setPropertyValue("OutputWorkspace", outws_name);
+    TS_ASSERT_THROWS_NOTHING( ld.execute() );
+    TS_ASSERT( ld.isExecuted() );
+
+    MatrixWorkspace_sptr WS = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(outws_name);
+    //Valid WS and it is an MatrixWorkspace
+    TS_ASSERT( WS );
+    //Correct number of monitors found
+    TS_ASSERT_EQUALS( WS->getNumberHistograms(), 2 );
+    //Monitors data is correct
+    TS_ASSERT_EQUALS( WS->readY(0)[0], 0 );
+    TS_ASSERT_EQUALS( WS->readY(1)[0], 0 );
+
+    TS_ASSERT_EQUALS( WS->readX(0)[0], 5.0 );
+    TS_ASSERT_EQUALS( WS->readX(1)[5],19995.0 );
+
+  }
+
   void test_10_monitors()
   {
     Poco::Path path(ConfigService::Instance().getTempDir().c_str());
diff --git a/Code/Mantid/Framework/DataHandling/test/LoadReflTBLTest.h b/Code/Mantid/Framework/DataHandling/test/LoadReflTBLTest.h
index 46012aaeec3375a69d026866295a4625fd74b578..48d189156ed6ce149f3a44efbbb7ed13ba7d654c 100644
--- a/Code/Mantid/Framework/DataHandling/test/LoadReflTBLTest.h
+++ b/Code/Mantid/Framework/DataHandling/test/LoadReflTBLTest.h
@@ -65,7 +65,7 @@ public:
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(3)),0.01,0.001);
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(4)),0.06,0.001);
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(5)),0.04,0.001);
-    TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(6)),2,0.01);
+    TS_ASSERT_DELTA(row.cell<double>(6),2,0.01);
     TS_ASSERT_EQUALS(row.cell<int>(7),1);
 
     row = outputWS->getRow(1);
@@ -75,7 +75,7 @@ public:
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(3)),0.01,0.001);
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(4)),0.06,0.001);
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(5)),0.04,0.001);
-    TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(6)),2,0.01);
+    TS_ASSERT_DELTA(row.cell<double>(6),2,0.01);
     TS_ASSERT_EQUALS(row.cell<int>(7),2);
 
     row = outputWS->getRow(2);
@@ -85,7 +85,7 @@ public:
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(3)),0.035,0.001);
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(4)),0.3,0.001);
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(5)),0.04,0.001);
-    TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(6)),2,0.01);
+    TS_ASSERT_DELTA(row.cell<double>(6),2,0.01);
     TS_ASSERT_EQUALS(row.cell<int>(7),2);
 
     cleanupafterwards();
@@ -128,7 +128,7 @@ public:
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(3)),0.01,0.001);
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(4)),0.06,0.001);
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(5)),0.04,0.001);
-    TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(6)),2,0.01);
+    TS_ASSERT_DELTA(row.cell<double>(6),2,0.01);
     TS_ASSERT_EQUALS(row.cell<int>(7),1);
 
     row = outputWS->getRow(1);
@@ -138,7 +138,7 @@ public:
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(3)),0.01,0.001);
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(4)),0.06,0.001);
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(5)),0.04,0.001);
-    TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(6)),2,0.01);
+    TS_ASSERT_DELTA(row.cell<double>(6),2,0.01);
     TS_ASSERT_EQUALS(row.cell<int>(7),2);
 
     row = outputWS->getRow(2);
@@ -148,7 +148,7 @@ public:
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(3)),0.035,0.001);
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(4)),0.3,0.001);
     TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(5)),0.04,0.001);
-    TS_ASSERT_DELTA(boost::lexical_cast<double>(row.cell<std::string>(6)),2,0.01);
+    TS_ASSERT_DELTA(row.cell<double>(6),2,0.01);
     TS_ASSERT_EQUALS(row.cell<int>(7),2);
 
     cleanupafterwards();
diff --git a/Code/Mantid/Framework/DataHandling/test/SavePDFGuiTest.h b/Code/Mantid/Framework/DataHandling/test/SavePDFGuiTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..db962a619bbbea7fa59e277beaf114175bb9fc5c
--- /dev/null
+++ b/Code/Mantid/Framework/DataHandling/test/SavePDFGuiTest.h
@@ -0,0 +1,97 @@
+#ifndef MANTID_DATAHANDLING_SAVEPDFGUITEST_H_
+#define MANTID_DATAHANDLING_SAVEPDFGUITEST_H_
+
+#include <cxxtest/TestSuite.h>
+#include <Poco/File.h>
+#include <fstream>
+
+#include "MantidDataHandling/SavePDFGui.h"
+#include "MantidDataHandling/LoadNexusProcessed.h"
+
+using Mantid::DataHandling::SavePDFGui;
+using Mantid::DataHandling::LoadNexusProcessed;
+using namespace Mantid::API;
+
+class SavePDFGuiTest : public CxxTest::TestSuite
+{
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static SavePDFGuiTest *createSuite() { return new SavePDFGuiTest(); }
+  static void destroySuite( SavePDFGuiTest *suite ) { delete suite; }
+
+
+  void test_Init()
+  {
+    SavePDFGui alg;
+    TS_ASSERT_THROWS_NOTHING( alg.initialize() )
+    TS_ASSERT( alg.isInitialized() )
+  }
+
+  size_t read( std::istream & is, std::vector <char> & buff ) {
+      is.read( &buff[0], buff.size() );
+      return is.gcount();
+  }
+
+  size_t countEOL( const std::vector <char> & buff, size_t sz ) {
+      size_t newlines = 0;
+      const char * p = &buff[0];
+      for ( size_t i = 0; i < sz; i++ ) {
+        if ( p[i] == '\n' ) {
+          newlines++;
+        }
+      }
+      return newlines;
+  }
+
+  size_t countLines(const std::string &filename)
+  {
+    const size_t BUFFER_SIZE = 1024 * 1024;
+    std::vector <char> buffer( BUFFER_SIZE );
+    std::ifstream in( filename.c_str() );
+    size_t n = 0;
+    while( size_t cc = read( in, buffer ) ) {
+      n += countEOL( buffer, cc );
+    }
+    return n;
+  }
+
+  void test_exec()
+  {
+    // name of workspace to create and save
+    const std::string wsName("SavePDFGuiTest_OutputWS");
+    // name of the output file
+    const std::string outFilename("SavePDFGuiTest_Output.gr");
+
+    // Load a file to save out
+    LoadNexusProcessed load;
+    load.initialize();
+    load.setProperty("Filename", "nom_gr.nxs");
+    load.setProperty("OutputWorkspace", wsName);
+    load.execute();
+
+    // save the file
+    SavePDFGui alg;
+    TS_ASSERT_THROWS_NOTHING( alg.initialize() )
+    TS_ASSERT( alg.isInitialized() )
+    TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("InputWorkspace", wsName) );
+    TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("Filename", outFilename) );
+    TS_ASSERT_THROWS_NOTHING( alg.execute(); );
+    TS_ASSERT( alg.isExecuted() );
+
+    // do the checks
+    Poco::File outFile(outFilename);
+    TS_ASSERT( outFile.isFile());
+    TS_ASSERT_EQUALS( countLines(outFilename), 1003);
+
+    // Remove workspace from the data service.
+    AnalysisDataService::Instance().remove(wsName);
+
+    // remove the output file
+    outFile.remove(false);
+  }
+
+};
+
+
+#endif /* MANTID_DATAHANDLING_SAVEPDFGUITEST_H_ */
diff --git a/Code/Mantid/Framework/DataHandling/test/SaveParameterFileTest.h b/Code/Mantid/Framework/DataHandling/test/SaveParameterFileTest.h
index 4bd4a329164888fd8bf89214ddc57f6bf44a9bd7..77f270f79d903f192498de117820d975c907ea79 100644
--- a/Code/Mantid/Framework/DataHandling/test/SaveParameterFileTest.h
+++ b/Code/Mantid/Framework/DataHandling/test/SaveParameterFileTest.h
@@ -39,6 +39,7 @@ public:
     setParam("nickel-holder", "testString1", "hello world");
     setParam("nickel-holder", "testString2", "unchanged");
     setParamByDetID(1301, "testDouble", 2.17);
+		setFitParam("nickel-holder", "A", ", BackToBackExponential , S ,  ,  ,  ,  , sqrt(188.149*centre^4+6520.945*centre^2) , dSpacing , TOF , linear ; TOF ; TOF");
 
     //Create a temporary blank file for us to test with
     ScopedFileHelper::ScopedFile paramFile("", "__params.xml");
@@ -47,9 +48,10 @@ public:
     saveParams(paramFile.getFileName());
 
     //Change some parameters - these changes should not have an effect
-    setParam("nickel-holder", "testDouble1", 3.14);
-    setParam("nickel-holder", "testString1", "broken");
-    setParamByDetID(1301, "testDouble", 7.89);
+		setParam("nickel-holder", "testDouble1", 3.14);
+		setParam("nickel-holder", "testString1", "broken");
+		setParamByDetID(1301, "testDouble", 7.89);
+		setFitParam("nickel-holder", "B", "someString");
 
     //Load the saved parameters back in
     loadParams(paramFile.getFileName());
@@ -60,6 +62,7 @@ public:
     checkParam("nickel-holder", "testString1", "hello world");
     checkParam("nickel-holder", "testString2", "unchanged");
     checkParamByDetID(1301, "testDouble", 2.17);
+		checkFitParam("nickel-holder", "A", ", BackToBackExponential , S ,  ,  ,  ,  , sqrt(188.149*centre^4+6520.945*centre^2) , dSpacing , TOF , linear ; TOF ; TOF");
   }
 
   void setParam(std::string cName, std::string pName, std::string value)
@@ -87,6 +90,16 @@ public:
     paramMap.addDouble(comp->getComponentID(), pName, value);
   }
 
+	void setFitParam(std::string cName, std::string pName, std::string value)
+	{
+    Instrument_const_sptr inst = m_ws->getInstrument();
+    ParameterMap& paramMap = m_ws->instrumentParameters();
+    boost::shared_ptr<const IComponent> comp = inst->getComponentByName(cName);
+		auto param = ParameterFactory::create("fitting",pName);
+		param->fromString(value);
+		paramMap.add(comp.get(),param);
+	}
+
   void checkParam(std::string cName, std::string pName, std::string value)
   {
     Instrument_const_sptr inst = m_ws->getInstrument();
@@ -116,6 +129,22 @@ public:
     TS_ASSERT_DELTA(value, pValue, 0.0001);
   }
 
+  void checkFitParam(std::string cName, std::string pName, std::string value)
+  {
+    Instrument_const_sptr inst = m_ws->getInstrument();
+    ParameterMap& paramMap = m_ws->instrumentParameters();
+    boost::shared_ptr<const IComponent> comp = inst->getComponentByName(cName);
+		auto param = paramMap.get(comp.get(),pName,"fitting");
+		const Mantid::Geometry::FitParameter& fitParam = param->value<FitParameter>();
+
+		// Info about fitting parameter is in string value, see FitParameter class
+		typedef Poco::StringTokenizer tokenizer;
+		tokenizer values(value, ",", tokenizer::TOK_TRIM);
+		TS_ASSERT_EQUALS(fitParam.getFormula(), values[7]);
+		TS_ASSERT_EQUALS(fitParam.getFunction(), values[1]);
+		TS_ASSERT_EQUALS(fitParam.getResultUnit(), values[9]);
+		TS_ASSERT_EQUALS(fitParam.getFormulaUnit(), values[8]);
+  }
 
   void loadParams(std::string filename)
   {
diff --git a/Code/Mantid/Framework/DataHandling/test/SaveReflTBLTest.h b/Code/Mantid/Framework/DataHandling/test/SaveReflTBLTest.h
index ea927d34744131dea44013e156fbb78bdadc0b6b..e9f376d78cfa3782139191532501ad93120d060e 100644
--- a/Code/Mantid/Framework/DataHandling/test/SaveReflTBLTest.h
+++ b/Code/Mantid/Framework/DataHandling/test/SaveReflTBLTest.h
@@ -69,10 +69,10 @@ public:
     ITableWorkspace_sptr ws = CreateWorkspace();
 
     TableRow row = ws->appendRow();
-    row << "13460" << "0.7" << "13463,13464" << "0.01" << "0.06" << "0.04" << "2" << 4;
+    row << "13460" << "0.7" << "13463,13464" << "0.01" << "0.06" << "0.04" << 2.0 << 4;
 
     row = ws->appendRow();
-    row << "13470" << "2.3" << "13463,13464" << "0.035" << "0.3" << "0.04" << "2" << 5;
+    row << "13470" << "2.3" << "13463,13464" << "0.035" << "0.3" << "0.04" << 2.0 << 5;
 
     Mantid::API::IAlgorithm_sptr alg = Mantid::API::AlgorithmManager::Instance().create("SaveReflTBL");
     alg->setRethrows(true);
@@ -111,7 +111,7 @@ public:
     ITableWorkspace_sptr ws = CreateWorkspace();
 
     TableRow row = ws->appendRow();
-    row << "13460" << "0.7" << "13463" << "0.01" << "0.06" << "0.04" << "2" << 1;
+    row << "13460" << "0.7" << "13463" << "0.01" << "0.06" << "0.04" << 2.0 << 1;
 
     Mantid::API::IAlgorithm_sptr alg = Mantid::API::AlgorithmManager::Instance().create("SaveReflTBL");
     alg->setRethrows(true);
@@ -135,7 +135,7 @@ public:
     auto colQmin = ws->addColumn("str","Qmin");
     auto colQmax = ws->addColumn("str","Qmax");
     auto colDqq = ws->addColumn("str","dq/q");
-    auto colScale = ws->addColumn("str","Scale");
+    auto colScale = ws->addColumn("double","Scale");
 
     colRuns->setPlotType(0);
     colTheta->setPlotType(0);
@@ -146,13 +146,13 @@ public:
     colScale->setPlotType(0);
 
     TableRow row = ws->appendRow();
-    row << "13460" << "0.7" << "13463" << "0.01" << "0.06" << "0.04" << "2";
+    row << "13460" << "0.7" << "13463" << "0.01" << "0.06" << "0.04" << 2.0;
 
     row = ws->appendRow();
-    row << "13462" << "2.3" << "13463" << "0.035" << "0.3" << "0.04" << "2";
+    row << "13462" << "2.3" << "13463" << "0.035" << "0.3" << "0.04" << 2.0;
 
     row = ws->appendRow();
-    row << "13470" << "2.3" << "13463" << "0.035" << "0.3" << "0.04" << "2";
+    row << "13470" << "2.3" << "13463" << "0.035" << "0.3" << "0.04" << 2.0;
 
     Mantid::API::IAlgorithm_sptr alg = Mantid::API::AlgorithmManager::Instance().create("SaveReflTBL");
     alg->setRethrows(true);
@@ -214,7 +214,7 @@ private:
     auto colQmin = ws->addColumn("str","Qmin");
     auto colQmax = ws->addColumn("str","Qmax");
     auto colDqq = ws->addColumn("str","dq/q");
-    auto colScale = ws->addColumn("str","Scale");
+    auto colScale = ws->addColumn("double","Scale");
     auto colStitch = ws->addColumn("int","StitchGroup");
 
     colRuns->setPlotType(0);
@@ -227,32 +227,32 @@ private:
     colStitch->setPlotType(0);
 
     TableRow row = ws->appendRow();
-    row << "13460" << "0.7" << "13463" << "0.01" << "0.06" << "0.04" << "2" << 1;
+    row << "13460" << "0.7" << "13463" << "0.01" << "0.06" << "0.04" << 2.0 << 1;
 
     row = ws->appendRow();
-    row << "13462" << "2.3" << "13463" << "0.035" << "0.3" << "0.04" << "2" << 1;
+    row << "13462" << "2.3" << "13463" << "0.035" << "0.3" << "0.04" << 2.0 << 1;
 
     row = ws->appendRow();
-    row << "13470" << "2.3" << "13463" << "0.035" << "0.3" << "0.04" << "2" << 1;
+    row << "13470" << "2.3" << "13463" << "0.035" << "0.3" << "0.04" << 2.0 << 1;
 
     row = ws->appendRow();
-    row << "13460" << "0.7" << "13463" << "0.01" << "0.06" << "0.04" << "2" << 2;
+    row << "13460" << "0.7" << "13463" << "0.01" << "0.06" << "0.04" << 2.0 << 2;
 
     row = ws->appendRow();
-    row << "13462" << "2.3" << "13463" << "0.035" << "0.3" << "0.04" << "2" << 2;
+    row << "13462" << "2.3" << "13463" << "0.035" << "0.3" << "0.04" << 2.0 << 2;
 
     row = ws->appendRow();
-    row << "13470" << "2.3" << "13463" << "0.035" << "0.3" << "0.04" << "2" << 3;
+    row << "13470" << "2.3" << "13463" << "0.035" << "0.3" << "0.04" << 2.0 << 3;
 
     row = ws->appendRow();
-    row << "13460" << "0.7" << "13463" << "0.01" << "0.06" << "0.04" << "2" << 0;
+    row << "13460" << "0.7" << "13463" << "0.01" << "0.06" << "0.04" << 2.0 << 0;
 
     //this row's last two cells will show in the tableworkspace, but the first row in stich group 3's will take priority when saving
     row = ws->appendRow();
-    row << "13462" << "2.3" << "13463" << "0.035" << "0.3" << "0.4" << "3" << 3;
+    row << "13462" << "2.3" << "13463" << "0.035" << "0.3" << "0.4" << 3.0 << 3;
 
     row = ws->appendRow();
-    row << "13470" << "2.3" << "13463" << "0.035" << "0.3" << "0.04" << "2" << 4;
+    row << "13470" << "2.3" << "13463" << "0.035" << "0.3" << "0.04" << 2.0 << 4;
 
     return ws;
   }
diff --git a/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/EventWorkspace.h b/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/EventWorkspace.h
index 50ff948b4a36037cf8d590328299f8e034225afa..01ed2e99ef0f1f052856ab34a0b1efd5f6fa5868 100644
--- a/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/EventWorkspace.h
+++ b/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/EventWorkspace.h
@@ -152,6 +152,8 @@ class DLLExport EventWorkspace : public API::IEventWorkspace
   void resizeTo(const std::size_t numSpectra);
   // Pad pixels in the workspace using the loaded spectra. Requires a non-empty spectra-detector map
   void padSpectra();
+  // Pad pixels in the workspace using specList. Requires a non-empty vector
+  void padSpectra(const std::vector<int32_t> & specList); 
   // Remove pixels in the workspace that do not contain events.
   void deleteEmptyLists();
   
diff --git a/Code/Mantid/Framework/DataObjects/src/EventWorkspace.cpp b/Code/Mantid/Framework/DataObjects/src/EventWorkspace.cpp
index 222e78fd56b6e519de39eba9088d32929190db03..5027c8a023a57af6fc03f812589f212a21c7c37f 100644
--- a/Code/Mantid/Framework/DataObjects/src/EventWorkspace.cpp
+++ b/Code/Mantid/Framework/DataObjects/src/EventWorkspace.cpp
@@ -615,6 +615,29 @@ namespace Mantid
       }
     }
 
+	 /** Expands the workspace to a number of spectra corresponding to the number of
+     *  pixels/detectors contained in specList.
+     *  All events lists will be empty after calling this method.
+     */
+		void EventWorkspace::padSpectra(const std::vector<int32_t> & specList)
+		{
+			if (specList.empty())
+			{
+				padSpectra();
+			}
+			else
+			{
+				resizeTo(specList.size());
+				for (size_t i = 0; i < specList.size(); ++i)
+				{
+					// specList ranges from 1, ..., N
+					// detector ranges from 0, ..., N-1
+					getSpectrum(i)->setDetectorID(specList[i]-1);
+					getSpectrum(i)->setSpectrumNo(specList[i]);
+				}
+			}
+		}
+
     void EventWorkspace::deleteEmptyLists()
     {
       // figure out how much data to copy
diff --git a/Code/Mantid/Framework/DataObjects/src/Peak.cpp b/Code/Mantid/Framework/DataObjects/src/Peak.cpp
index 20e4ce11978615d36c5d760f3f1fb24ce5766760..78f5e920dfe635e7a746f13c62e397aaea8db0d6 100644
--- a/Code/Mantid/Framework/DataObjects/src/Peak.cpp
+++ b/Code/Mantid/Framework/DataObjects/src/Peak.cpp
@@ -528,6 +528,7 @@ namespace DataObjects
    */
   bool Peak::findDetector()
   {
+	bool found = false;
     // Scattered beam direction
     V3D oldDetPos = detPos;
     V3D beam = detPos - samplePos;
@@ -543,55 +544,38 @@ namespace DataObjects
         this->setDetectorID(det->getID());
         // The old detector position is not more precise if it comes from FindPeaksMD
         detPos = det->getPos();
-        return true;
+        found = true;
     }
-    //fix for gaps between tubes
+    //Use tube-gap parameter in instrument parameter file  to find peaks with center in gaps between tubes
     else if (m_inst->hasParameter("tube-gap"))
     {
         std::vector<double> gaps = m_inst->getNumberParameter("tube-gap", true);
-        if (gaps.empty()) return false;
-        const double gap = static_cast<double>(gaps.front());
-        V3D beam1 = beam + V3D(0.,0.,gap);
-        tracker.traceFromSample(beam1);
-        IDetector_const_sptr det1 = tracker.getDetectorResult();
-        V3D beam2 = beam + V3D(0.,0.,-gap);
-        tracker.traceFromSample(beam2);
-        IDetector_const_sptr det2 = tracker.getDetectorResult();
-        if (det1 && det2)
+        if (!gaps.empty())
         {
-            // Set the detector ID to one of the neighboring pixels
-            this->setDetectorID(static_cast<int>(det1->getID()));;
-            detPos = det1->getPos() ;
-            return true;
-        }
-        beam1 = beam + V3D(gap,0.,0.);
-        tracker.traceFromSample(beam1);
-        det1 = tracker.getDetectorResult();
-        beam2 = beam + V3D(-gap,0.,0.);
-        tracker.traceFromSample(beam2);
-        det2 = tracker.getDetectorResult();
-        if (det1 && det2)
-        {
-            // Set the detector ID to one of the neighboring pixels
-            this->setDetectorID(static_cast<int>(det1->getID()));;
-            detPos = det1->getPos() ;
-            return true;
-        }
-        beam1 = beam + V3D(0.,gap,0.);
-        tracker.traceFromSample(beam1);
-        det1 = tracker.getDetectorResult();
-        beam2 = beam + V3D(0.,-gap,0.);
-        tracker.traceFromSample(beam2);
-        det2 = tracker.getDetectorResult();
-        if (det1 && det2)
-        {
-            // Set the detector ID to one of the neighboring pixels
-            this->setDetectorID(static_cast<int>(det1->getID()));;
-            detPos = det1->getPos() ;
-            return true;
+			const double gap = static_cast<double>(gaps.front());
+			// try adding and subtracting tube-gap in 3 q dimensions to see if you can find detectors on each side of tube gap
+			for(int i=0;i<3;i++)
+			{
+				V3D gapDir = V3D(0.,0.,0.);
+				gapDir[i] = gap;
+				V3D beam1 = beam + gapDir;
+				tracker.traceFromSample(beam1);
+				IDetector_const_sptr det1 = tracker.getDetectorResult();
+				V3D beam2 = beam - gapDir;
+				tracker.traceFromSample(beam2);
+				IDetector_const_sptr det2 = tracker.getDetectorResult();
+				if (det1 && det2)
+				{
+					// Set the detector ID to one of the neighboring pixels
+					this->setDetectorID(static_cast<int>(det1->getID()));;
+					detPos = det1->getPos() ;
+					found = true;
+					break;
+				}
+			}
         }
     }
-    return false;
+    return found;
   }
 
   //----------------------------------------------------------------------------------------------
diff --git a/Code/Mantid/Framework/Geometry/CMakeLists.txt b/Code/Mantid/Framework/Geometry/CMakeLists.txt
index 8cc9ac1578df8850952e57c0c37c0e298e4afe0b..bb1d146e9c8b3f233677d091d764291933b17091 100644
--- a/Code/Mantid/Framework/Geometry/CMakeLists.txt
+++ b/Code/Mantid/Framework/Geometry/CMakeLists.txt
@@ -1,17 +1,28 @@
 set ( SRC_FILES
 	src/ComponentParser.cpp
+        src/Crystal/BraggScatterer.cpp
+        src/Crystal/BraggScattererFactory.cpp
+	src/Crystal/BraggScattererInCrystalStructure.cpp
+	src/Crystal/CenteringGroup.cpp
+        src/Crystal/CompositeBraggScatterer.cpp
 	src/Crystal/ConventionalCell.cpp
 	src/Crystal/CrystalStructure.cpp
+	src/Crystal/CyclicGroup.cpp
+	src/Crystal/Group.cpp
 	src/Crystal/IndexingUtils.cpp
+        src/Crystal/IsotropicAtomBraggScatterer.cpp
 	src/Crystal/NiggliCell.cpp
 	src/Crystal/OrientedLattice.cpp
 	src/Crystal/PointGroup.cpp
 	src/Crystal/PointGroupFactory.cpp
+	src/Crystal/ProductOfCyclicGroups.cpp
 	src/Crystal/ReducedCell.cpp
 	src/Crystal/ReflectionCondition.cpp
 	src/Crystal/ScalarUtils.cpp
-        src/Crystal/SymmetryOperation.cpp
-        src/Crystal/SymmetryOperationFactory.cpp
+	src/Crystal/SpaceGroup.cpp
+	src/Crystal/SpaceGroupFactory.cpp
+	src/Crystal/SymmetryOperation.cpp
+	src/Crystal/SymmetryOperationFactory.cpp
 	src/Crystal/SymmetryOperationSymbolParser.cpp
 	src/Crystal/UnitCell.cpp
 	src/Crystal/V3R.cpp
@@ -92,31 +103,42 @@ set ( SRC_FILES
 )
 
 set ( OPENCASCADE_SRC
-	src/Rendering/OCGeometryGenerator.cpp
-	src/Rendering/OCGeometryHandler.cpp
-	src/Rendering/OCGeometryRenderer.cpp
+  src/Rendering/OCGeometryGenerator.cpp
+  src/Rendering/OCGeometryHandler.cpp
+  src/Rendering/OCGeometryRenderer.cpp
 )
 
 set ( SRC_UNITY_IGNORE_FILES src/Instrument/CompAssembly.cpp
-        src/Instrument/ObjCompAssembly.cpp 
-        src/Rendering/OCGeometryHandler.cpp
-        src/Rendering/OCGeometryRenderer.cpp
-        )
+  src/Instrument/ObjCompAssembly.cpp 
+  src/Rendering/OCGeometryHandler.cpp
+  src/Rendering/OCGeometryRenderer.cpp
+)
         
 set ( INC_FILES
 	inc/MantidGeometry/ComponentParser.h
+        inc/MantidGeometry/Crystal/BraggScatterer.h
+        inc/MantidGeometry/Crystal/BraggScattererFactory.h
+	inc/MantidGeometry/Crystal/BraggScattererInCrystalStructure.h
+	inc/MantidGeometry/Crystal/CenteringGroup.h
+        inc/MantidGeometry/Crystal/CompositeBraggScatterer.h
 	inc/MantidGeometry/Crystal/ConventionalCell.h
 	inc/MantidGeometry/Crystal/CrystalStructure.h
+	inc/MantidGeometry/Crystal/CyclicGroup.h
+	inc/MantidGeometry/Crystal/Group.h
 	inc/MantidGeometry/Crystal/IndexingUtils.h
+        inc/MantidGeometry/Crystal/IsotropicAtomBraggScatterer.h
 	inc/MantidGeometry/Crystal/NiggliCell.h
 	inc/MantidGeometry/Crystal/OrientedLattice.h
 	inc/MantidGeometry/Crystal/PointGroup.h
 	inc/MantidGeometry/Crystal/PointGroupFactory.h
+	inc/MantidGeometry/Crystal/ProductOfCyclicGroups.h
 	inc/MantidGeometry/Crystal/ReducedCell.h
 	inc/MantidGeometry/Crystal/ReflectionCondition.h
 	inc/MantidGeometry/Crystal/ScalarUtils.h
-        inc/MantidGeometry/Crystal/SymmetryOperation.h
-        inc/MantidGeometry/Crystal/SymmetryOperationFactory.h
+	inc/MantidGeometry/Crystal/SpaceGroup.h
+	inc/MantidGeometry/Crystal/SpaceGroupFactory.h
+	inc/MantidGeometry/Crystal/SymmetryOperation.h
+	inc/MantidGeometry/Crystal/SymmetryOperationFactory.h
 	inc/MantidGeometry/Crystal/SymmetryOperationSymbolParser.h
 	inc/MantidGeometry/Crystal/UnitCell.h
 	inc/MantidGeometry/Crystal/V3R.h
@@ -206,21 +228,28 @@ set ( TEST_FILES
 	AlgebraTest.h
 	BnIdTest.h
 	BoundingBoxTest.h
+        BraggScattererFactoryTest.h
+        BraggScattererInCrystalStructureTest.h
+        BraggScattererTest.h
+	CenteringGroupTest.h
 	CompAssemblyTest.h
 	ComponentHelperTest.h
 	ComponentParserTest.h
 	ComponentTest.h
+        CompositeBraggScattererTest.h
 	CompositeImplicitFunctionTest.h
 	ConeTest.h
 	ConventionalCellTest.h
 	ConvexPolygonTest.h
 	CrystalStructureTest.h
+	CyclicGroupTest.h
 	CylinderTest.h
 	DetectorGroupTest.h
 	DetectorTest.h
 	FitParameterTest.h
 	GeneralTest.h
 	GoniometerTest.h
+	GroupTest.h
 	IDFObjectTest.h
 	IMDDimensionFactoryTest.h
 	IMDDimensionTest.h
@@ -228,6 +257,7 @@ set ( TEST_FILES
 	InstrumentDefinitionParserTest.h
 	InstrumentRayTracerTest.h
 	InstrumentTest.h
+        IsotropicAtomBraggScattererTest.h
 	LaszloIntersectionTest.h
 	LineIntersectVisitTest.h
 	LineTest.h
@@ -242,11 +272,11 @@ set ( TEST_FILES
 	MathSupportTest.h
 	NearestNeighboursFactoryTest.h
 	NearestNeighboursTest.h
+	NiggliCellTest.h
 	NullImplicitFunctionTest.h
 	ObjCompAssemblyTest.h
 	ObjComponentTest.h
 	ObjectTest.h
-	NiggliCellTest.h
 	OrientedLatticeTest.h
 	ParCompAssemblyTest.h
 	ParComponentFactoryTest.h
@@ -260,6 +290,7 @@ set ( TEST_FILES
 	PointGroupFactoryTest.h
 	PointGroupTest.h
 	PolygonEdgeTest.h
+	ProductOfCyclicGroupsTest.h
 	QuadrilateralTest.h
 	RectangularDetectorPixelTest.h
 	RectangularDetectorTest.h
@@ -276,6 +307,8 @@ set ( TEST_FILES
 	RulesUnionTest.h
 	ScalarUtilsTest.h
 	ShapeFactoryTest.h
+	SpaceGroupFactoryTest.h
+	SpaceGroupTest.h
 	SphereTest.h
 	SurfaceFactoryTest.h
 	SurfaceTest.h
@@ -293,7 +326,7 @@ set ( TEST_FILES
 )
 
 set ( GMOCK_TEST_FILES
-    MDGeometryXMLBuilderTest.h
+  MDGeometryXMLBuilderTest.h
 )
 
 
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/BraggScatterer.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/BraggScatterer.h
new file mode 100644
index 0000000000000000000000000000000000000000..e4a0e1ae6fc33b44562dc3f9235657355ffd80d4
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/BraggScatterer.h
@@ -0,0 +1,108 @@
+#ifndef MANTID_GEOMETRY_BRAGGSCATTERER_H_
+#define MANTID_GEOMETRY_BRAGGSCATTERER_H_
+
+#include "MantidGeometry/DllConfig.h"
+#include "MantidKernel/V3D.h"
+
+
+#include <complex>
+#include <boost/shared_ptr.hpp>
+
+#include "MantidKernel/PropertyManager.h"
+#include "MantidKernel/TypedValidator.h"
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+typedef std::complex<double> StructureFactor;
+
+/** BraggScatterer
+
+    BraggScatterer is a general interface for representing scatterers
+    in the unit cell of a periodic structure. Since there are many possibilities
+    of modelling scatterers, BraggScatterer is derived from PropertyManager.
+    This way, new scatterers with very different parameters can be
+    added easily.
+
+    New implementations must override the declareProperties method and
+    define any parameters there. For most applications it should be easier
+    to inherit from BraggScattererInCrystalStructure, which provides some
+    default properties that are useful in many cases. CompositeBraggScatterer
+    is designed to combine several scatterers.
+
+    CompositeBraggScatterer does not declare any properties by itself. For
+    some properties it makes sense to be equal for all scatterers in the
+    composite. This behavior can be achieved by calling the method
+    makePropertyPropagating after it has been declared. Examples are
+    the UnitCell and SpaceGroup properties in BraggScattererInCrystalStructure.
+
+    Construction of concrete scatterers is done through ScattererFactory.
+
+      @author Michael Wedel, Paul Scherrer Institut - SINQ
+      @date 20/10/2014
+
+    Copyright © 2014 PSI-MSS
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+  */
+
+class BraggScatterer;
+
+typedef boost::shared_ptr<BraggScatterer> BraggScatterer_sptr;
+
+class MANTID_GEOMETRY_DLL BraggScatterer : public Kernel::PropertyManager
+{
+public:
+    BraggScatterer();
+    virtual ~BraggScatterer() { }
+
+    void initialize();
+    bool isInitialized();
+
+    virtual std::string name() const = 0;
+    virtual BraggScatterer_sptr clone() const = 0;
+
+    virtual StructureFactor calculateStructureFactor(const Kernel::V3D &hkl) const = 0;
+
+    bool isPropertyExposedToComposite(const std::string &propertyName) const;
+    bool isPropertyExposedToComposite(Kernel::Property *property) const;
+    
+protected:
+    /// Base implementation does nothing, can be re-implemented by subclasses.
+    void afterPropertySet(const std::string &) { }
+
+    /// Base implementation does nothing - for implementing classes only.
+    virtual void declareProperties() { }
+
+    void exposePropertyToComposite(const std::string &propertyName);
+    void unexposePropertyFromComposite(const std::string &propertyName);
+
+    const std::string &getPropagatingGroupName() const;
+
+private:
+    std::string m_propagatingGroupName;
+    bool m_isInitialized;
+};
+
+} // namespace Geometry
+} // namespace Mantid
+
+#endif  /* MANTID_GEOMETRY_BRAGGSCATTERER_H_ */
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/BraggScattererFactory.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/BraggScattererFactory.h
new file mode 100644
index 0000000000000000000000000000000000000000..13e5ad89c58abb72e21ee83a99f7c7037e5bd234
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/BraggScattererFactory.h
@@ -0,0 +1,103 @@
+#ifndef MANTID_GEOMETRY_BRAGGSCATTERERFACTORY_H_
+#define MANTID_GEOMETRY_BRAGGSCATTERERFACTORY_H_
+
+#include "MantidGeometry/DllConfig.h"
+#include "MantidKernel/DynamicFactory.h"
+#include "MantidKernel/SingletonHolder.h"
+#include "MantidGeometry/Crystal/BraggScatterer.h"
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/** BraggScattererFactory :
+
+    This class implements a factory for concrete BraggScatterer classes.
+    When a new scatterer is derived from BraggScatterer, it should be registered
+    in the factory. Like other factories in Mantid, a macro is provided for
+    this purpose:
+
+        DECLARE_BRAGGSCATTERER(NewScattererClass)
+
+    At runtime, instances of this class can be created like this:
+
+        BraggScatterer_sptr scatterer = BraggScattererFactory::Instance().createScatterer("NewScattererClass");
+
+    The returned object is initialized, which is required for using the
+    Kernel::Property-based system of setting parameters for the scatterer.
+    To make creation of scatterers more convenient, it's possible to provide
+    a string with "name=value" pairs, separated by semi-colons, which assigns
+    property values. This is similar to the way FunctionFactory::createInitialized works:
+
+        BraggScatterer_sptr s = BraggScattererFactory::Instance()
+                                               .createScatterer(
+                                                    "NewScatterer",
+                                                    "SpaceGroup=F m -3 m; Position=[0.1,0.2,0.3]");
+
+    If you choose to use the raw create/createUnwrapped methods, you have to
+    make sure to call BraggScatterer::initialize() on the created instance.
+
+      @author Michael Wedel, Paul Scherrer Institut - SINQ
+      @date 26/10/2014
+
+      Copyright © 2014 PSI-MSS
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+  */
+class MANTID_GEOMETRY_DLL BraggScattererFactoryImpl : public Kernel::DynamicFactory<BraggScatterer>
+{
+public:
+    BraggScatterer_sptr createScatterer(const std::string &name, const std::string &properties = "");
+
+    /// Subscribes a scatterer class into the factory.
+    template<class C>
+    void subscribeScatterer()
+    {
+        Kernel::Instantiator<C, BraggScatterer> *instantiator = new Kernel::Instantiator<C, BraggScatterer>;
+        BraggScatterer_sptr scatterer = instantiator->createInstance();
+
+        subscribe(scatterer->name(), instantiator);
+    }
+
+private:
+    friend struct Mantid::Kernel::CreateUsingNew<BraggScattererFactoryImpl>;
+
+    BraggScattererFactoryImpl();
+};
+
+// This is taken from FuncMinimizerFactory
+#ifdef _WIN32
+    template class MANTID_GEOMETRY_DLL Mantid::Kernel::SingletonHolder<BraggScattererFactoryImpl>;
+#endif
+
+typedef Mantid::Kernel::SingletonHolder<BraggScattererFactoryImpl> BraggScattererFactory;
+
+
+} // namespace Geometry
+} // namespace Mantid
+
+#define DECLARE_BRAGGSCATTERER(classname) \
+        namespace { \
+    Mantid::Kernel::RegistrationHelper register_scatterer_##classname( \
+  ((Mantid::Geometry::BraggScattererFactory::Instance().subscribeScatterer<classname>()) \
+    , 0)); \
+    }
+
+#endif  /* MANTID_GEOMETRY_BRAGGSCATTERERFACTORY_H_ */
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/BraggScattererInCrystalStructure.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/BraggScattererInCrystalStructure.h
new file mode 100644
index 0000000000000000000000000000000000000000..48fc0f5267bf93a6919287360860ae5872009b00
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/BraggScattererInCrystalStructure.h
@@ -0,0 +1,103 @@
+#ifndef MANTID_GEOMETRY_BRAGGSCATTERERINCRYSTALSTRUCTURE_H_
+#define MANTID_GEOMETRY_BRAGGSCATTERERINCRYSTALSTRUCTURE_H_
+
+#include "MantidGeometry/DllConfig.h"
+#include "MantidGeometry/Crystal/BraggScatterer.h"
+#include "MantidGeometry/Crystal/UnitCell.h"
+#include "MantidGeometry/Crystal/SpaceGroup.h"
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/** BraggScattererInCrystalStructure
+
+    This class provides an extension of BraggScatterer, suitable
+    for scatterers that are part of a crystal structure. Information about
+    the unit cell and space group can be set. The space group information
+    is used to calculate equivalent positions in the structure.
+
+    Both space group and unit cell are exposed marked as exposed to
+    BraggScattererComposite, so all members of one composite will
+    have the same unit cell and space group.
+
+      @author Michael Wedel, Paul Scherrer Institut - SINQ
+      @date 04/11/2014
+
+    Copyright © 2014 PSI-MSS
+
+    This file is part of Mantid.
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+  */
+
+
+class MANTID_GEOMETRY_DLL BraggScattererInCrystalStructure : public BraggScatterer
+{
+public:
+    BraggScattererInCrystalStructure();
+    virtual ~BraggScattererInCrystalStructure() { }
+
+    Kernel::V3D getPosition() const;
+    std::vector<Kernel::V3D> getEquivalentPositions() const;
+    UnitCell getCell() const;
+    SpaceGroup_const_sptr getSpaceGroup() const;
+
+protected:
+    virtual void afterPropertySet(const std::string &propertyName);
+
+    /// This method should be re-implemented by subclasses for additional parameter processing.
+    virtual void afterScattererPropertySet(const std::string &) { }
+
+    /// This method should be implemented by subclasses for declaring additional properties.
+    virtual void declareScattererProperties() { }
+
+    virtual void setPosition(const Kernel::V3D &position);
+    virtual void setCell(const UnitCell &cell);
+    virtual void setSpaceGroup(const SpaceGroup_const_sptr &spaceGroup);
+
+    virtual void declareProperties();
+
+    void recalculateEquivalentPositions();
+
+    Kernel::V3D m_position;
+    std::vector<Kernel::V3D> m_equivalentPositions;
+
+    UnitCell m_cell;
+    SpaceGroup_const_sptr m_spaceGroup;
+};
+
+typedef boost::shared_ptr<BraggScattererInCrystalStructure> BraggScattererInCrystalStructure_sptr;
+
+/**
+ * Helper class for validating unit cell strings.
+ *
+ * This validator checks whether a string consists of either 3 or 6 numbers,
+ * possibly floating point numbers. It's required for the unit cell string
+ * property.
+ */
+class MANTID_GEOMETRY_DLL UnitCellStringValidator : public Kernel::TypedValidator<std::string>
+{
+protected:
+    Kernel::IValidator_sptr clone() const;
+    virtual std::string checkValidity(const std::string &unitCellString) const;
+};
+
+} // namespace Geometry
+} // namespace Mantid
+
+#endif  /* MANTID_GEOMETRY_BRAGGSCATTERERINCRYSTALSTRUCTURE_H_ */
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/CenteringGroup.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/CenteringGroup.h
new file mode 100644
index 0000000000000000000000000000000000000000..6d4a4862d3ebf35b7f4f92c2519d39c8bba28991
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/CenteringGroup.h
@@ -0,0 +1,113 @@
+#ifndef MANTID_GEOMETRY_CENTERINGGROUP_H_
+#define MANTID_GEOMETRY_CENTERINGGROUP_H_
+
+#include "MantidGeometry/DllConfig.h"
+#include "MantidGeometry/Crystal/Group.h"
+#include <map>
+
+#include "MantidKernel/SingletonHolder.h"
+
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/** CenteringGroup
+
+    This class is mostly a convenience class. It takes a bravais lattice symbol
+    (P, I, A, B, C, F, R) and forms a group that contains all translations
+    connected to the centering. This is for example used in the space group
+    generation process.
+
+    In addition to the inherited interface of Group, CenteringGroup provides
+    methods that provide some meta information, namely the "name" of the
+    centering operation. While CenteringGroup::getSymbol() returns a string,
+    CenteringGroup::getType() returns a value of the enum type
+    CenteringGroup::CenteringType.
+
+    Important differences occur in the handling of Rhombohedral centering.
+    CenteringType distinguishes between obverse (Robv) and reverse (Rrev)
+    setting. These can be given explicitly as strings for construction. When
+    only "R" is provided, the obverse setting is assumed.
+
+      @author Michael Wedel, Paul Scherrer Institut - SINQ
+      @date 07/10/2014
+
+    Copyright © 2014 PSI-MSS
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+  */
+class MANTID_GEOMETRY_DLL CenteringGroup : public Group
+{
+public:
+    enum CenteringType {
+        P, I, A, B, C, F, Robv, Rrev
+    };
+
+    CenteringGroup(const std::string &centeringSymbol);
+    virtual ~CenteringGroup() { }
+
+    CenteringType getType() const;
+    std::string getSymbol() const;
+
+protected:
+    CenteringType m_type;
+    std::string m_symbol;
+};
+
+typedef boost::shared_ptr<CenteringGroup> CenteringGroup_sptr;
+typedef boost::shared_ptr<const CenteringGroup> CenteringGroup_const_sptr;
+
+/// Helper class to keep this out of the interface of CenteringGroup.
+class MANTID_GEOMETRY_DLL CenteringGroupCreatorImpl
+{
+public:
+    ~CenteringGroupCreatorImpl() { }
+
+    CenteringGroup::CenteringType getCenteringType(const std::string &centeringSymbol) const;
+
+    std::vector<SymmetryOperation> getSymmetryOperations(CenteringGroup::CenteringType centeringType) const;
+
+protected:
+    std::vector<SymmetryOperation> getPrimitive() const;
+    std::vector<SymmetryOperation> getBodyCentered() const;
+    std::vector<SymmetryOperation> getACentered() const;
+    std::vector<SymmetryOperation> getBCentered() const;
+    std::vector<SymmetryOperation> getCCentered() const;
+    std::vector<SymmetryOperation> getFCentered() const;
+    std::vector<SymmetryOperation> getRobvCentered() const;
+    std::vector<SymmetryOperation> getRrevCentered() const;
+    CenteringGroupCreatorImpl();
+
+    std::map<std::string, CenteringGroup::CenteringType> m_centeringSymbolMap;
+private:
+    friend struct Mantid::Kernel::CreateUsingNew<CenteringGroupCreatorImpl>;
+};
+
+#ifdef _WIN32
+  template class MANTID_GEOMETRY_DLL Mantid::Kernel::SingletonHolder<CenteringGroupCreatorImpl>;
+#endif
+
+typedef Mantid::Kernel::SingletonHolder<CenteringGroupCreatorImpl> CenteringGroupCreator;
+
+} // namespace Geometry
+} // namespace Mantid
+
+#endif  /* MANTID_GEOMETRY_CENTERINGGROUP_H_ */
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/CompositeBraggScatterer.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/CompositeBraggScatterer.h
new file mode 100644
index 0000000000000000000000000000000000000000..f7e9355d808f306b75a1094503f9ab8dcaa5bf9b
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/CompositeBraggScatterer.h
@@ -0,0 +1,99 @@
+#ifndef MANTID_GEOMETRY_COMPOSITEBRAGGSCATTERER_H_
+#define MANTID_GEOMETRY_COMPOSITEBRAGGSCATTERER_H_
+
+#include "MantidGeometry/DllConfig.h"
+#include "MantidGeometry/Crystal/BraggScatterer.h"
+
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/** CompositeBraggScatterer
+
+    CompositeBraggScatterer accumulates scatterers, for easier calculation
+    of structure factors. Scatterers can be added through the method
+    addScatterer. The supplied scatterer is not stored directly,
+    it is cloned instead, so there is a new instance. The original instance
+    is not modified at all.
+
+    For structure factor calculations, all contributions from contained scatterers
+    are summed. Contained scatterers may be CompositeBraggScatterers themselves,
+    so it's possible to build up elaborate structures.
+
+    There are two ways of creating instances of CompositeBraggScatterer. The first
+    possibility is to use BraggScattererFactory, just like for other implementations
+    of BraggScatterer. Additionally there is a static method CompositeBraggScatterer::create,
+    which creates a composite scatterer of the supplied vector of scatterers.
+
+    CompositeBraggScatterer does not declare any methods by itself, instead it exposes
+    some properties of the contained scatterers (those which were marked using
+    exposePropertyToComposite). When these properties are set, their values
+    are propagated to all members of the composite. The default behavior when
+    new properties are declared in subclasses of BraggScatterer is not to expose
+    them in this way.
+
+      @author Michael Wedel, Paul Scherrer Institut - SINQ
+      @date 21/10/2014
+
+    Copyright © 2014 PSI-MSS
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+  */
+class CompositeBraggScatterer;
+
+typedef boost::shared_ptr<CompositeBraggScatterer> CompositeBraggScatterer_sptr;
+
+class MANTID_GEOMETRY_DLL CompositeBraggScatterer : public BraggScatterer
+{
+public:
+    CompositeBraggScatterer();
+    virtual ~CompositeBraggScatterer() { }
+
+    static CompositeBraggScatterer_sptr create();
+    static CompositeBraggScatterer_sptr create(const std::vector<BraggScatterer_sptr> &scatterers);
+
+    std::string name() const { return "CompositeBraggScatterer"; }
+    BraggScatterer_sptr clone() const;
+
+    void addScatterer(const BraggScatterer_sptr &scatterer);
+    size_t nScatterers() const;
+    BraggScatterer_sptr getScatterer(size_t i) const;
+    void removeScatterer(size_t i);
+
+    StructureFactor calculateStructureFactor(const Kernel::V3D &hkl) const;
+    
+protected:
+    void afterPropertySet(const std::string &propertyName);
+    void propagateProperty(const std::string &propertyName);
+    void propagatePropertyToScatterer(BraggScatterer_sptr &scatterer, const std::string &propertyName, const std::string &propertyValue);
+
+    void redeclareProperties();
+    std::map<std::string, size_t> getPropertyCountMap() const;
+
+    std::vector<BraggScatterer_sptr> m_scatterers;
+};
+
+
+
+} // namespace Geometry
+} // namespace Mantid
+
+#endif  /* MANTID_GEOMETRY_COMPOSITEBRAGGSCATTERER_H_ */
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/CyclicGroup.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/CyclicGroup.h
new file mode 100644
index 0000000000000000000000000000000000000000..68a60fe9fa88b5ce616d3e80e39b651eedbdcd19
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/CyclicGroup.h
@@ -0,0 +1,101 @@
+#ifndef MANTID_GEOMETRY_CYCLICGROUP_H_
+#define MANTID_GEOMETRY_CYCLICGROUP_H_
+
+#include "MantidGeometry/DllConfig.h"
+#include "MantidGeometry/Crystal/Group.h"
+
+#include <boost/shared_ptr.hpp>
+#include <set>
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/** CyclicGroup :
+
+    A cyclic group G has the property that it can be represented by
+    powers of one symmetry operation S of order n:
+
+      G = { S^1, S^2, ..., S^n = S^0 = I }
+
+    The operation S^m is defined as carrying out the multiplication
+    S * S * ... * S. To illustrate this, a four-fold rotation around
+    the z-axis is considered. The symmetry operation representing the
+    transformation by this symmetry element is "-y,x,z". This is also the
+    first member of the resulting group:
+
+      S^1 = S = -y,x,z
+
+    Then, multiplying this by itself:
+
+      S^2 = S * S = -x,-y,z
+      S^3 = S * S * S = y,-x,z
+      S^4 = S * S * S * S = x,y,z = I
+
+    Thus, the cyclic group G resulting from the operation "-y,x,z" contains
+    the following members:
+
+      G = { S^1, S^2, S^3, I } = { -y,x,z; -x,-y,z; y,-x,z; x,y,z }
+
+    This example shows in fact how the point group "4" can be generated as
+    a cyclic group by the generator S = -y,x,z. Details about this
+    are given for example in [1].
+
+    In code, the example is very concise:
+
+        Group_const_sptr pointGroup4 = GroupFactory::create<CyclicGroup>("-y,x,z");
+
+    This is much more convenient than having to construct a Group,
+    where all four symmetry operations would have to be supplied.
+
+    Related to this class is ProductOfCyclicGroups, which provides an easy way
+    to express a group that is the product of multiple cyclic groups
+    (such as some point groups).
+
+    [1] Shmueli, U. Acta Crystallogr. A 40, 559–567 (1984).
+        http://dx.doi.org/10.1107/S0108767384001161
+
+      @author Michael Wedel, Paul Scherrer Institut - SINQ
+      @date 03/10/2014
+
+    Copyright © 2014 PSI-MSS
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+  */
+class MANTID_GEOMETRY_DLL CyclicGroup : public Group
+{
+public:
+    CyclicGroup(const std::string &symmetryOperationString);
+    CyclicGroup(const SymmetryOperation &symmetryOperation);
+    virtual ~CyclicGroup() { }
+
+protected:
+    std::vector<SymmetryOperation> generateAllOperations(const SymmetryOperation &operation) const;
+
+};
+
+typedef boost::shared_ptr<CyclicGroup> CyclicGroup_sptr;
+typedef boost::shared_ptr<const CyclicGroup> CyclicGroup_const_sptr;
+
+
+} // namespace Geometry
+} // namespace Mantid
+
+#endif  /* MANTID_GEOMETRY_CYCLICGROUP_H_ */
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/Group.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/Group.h
new file mode 100644
index 0000000000000000000000000000000000000000..72fffc46898c1fdf0a71b99a60d5cad5ddb79ed0
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/Group.h
@@ -0,0 +1,161 @@
+#ifndef MANTID_GEOMETRY_GROUP_H_
+#define MANTID_GEOMETRY_GROUP_H_
+
+#include "MantidGeometry/DllConfig.h"
+#include "MantidGeometry/Crystal/SymmetryOperation.h"
+
+#include <vector>
+#include <set>
+
+#include <boost/shared_ptr.hpp>
+#include <boost/make_shared.hpp>
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/** Group :
+
+    The class Group represents a set of symmetry operations (or
+    symmetry group). It can be constructed by providing a vector
+    of the symmetry operations it consists of. Another possibility
+    is using a string (see SymmetryOperationFactory for format).
+
+    Upon construction of Group, the vector of symmetry operations
+    is potentially reduced to a set of unique operations, because
+    each operation may occur only once.
+
+    The number of symmetry operations in the group determines its
+    so-called order, it can be queried with the member function
+    Group::order(). If one needs to process the symmetry operation
+    themselves, they can be obtained by Group::getSymmetryOperations().
+
+    A common task is to apply all symmetry operations of a group to
+    a point (given in the form of a Kernel::V3D-object). The multiplication
+    operator for carrying out this operation has been overloaded
+    to perform this task:
+
+        vector<V3D> coordinates = Group * V3D
+
+    Please note that a set of unique coordinates is produced, which means
+    that the number of coordinates in the vector may be smaller than the
+    order of the group, depending on the input. This is because the
+    components of V3D are mapped onto the interval [0, 1).
+
+    Two groups A and B can be combined by a multiplication operation, provided by
+    the corresponding overloaded operator:
+
+      Group A, B;
+      Group C = A * B
+
+    In this operation each element of A is multiplied with each element of B
+    and from the resulting list a new group is constructed. For better illustration,
+    an example is provided. Group A has two symmetry operations: identity ("x,y,z")
+    and inversion ("-x,-y,-z"). Group B also consists of two operations:
+    identity ("x,y,z") and a rotation around the y-axis ("-x,y,-z"). In terms
+    of symmetry elements, the groups are defined like this:
+
+        A := { 1, -1 }; B := { 1, 2 [010] }
+
+    The following table shows all multiplications that are carried out and their
+    results (for multiplication of symmetry operations see SymmetryOperation):
+                             A
+                 |    x,y,z    -x,-y,-z
+         --------+------------------------
+           x,y,z |    x,y,z    -x,-y,-z
+       B         |
+         -x,y,-z |  -x,y,-z      x,-y,z
+
+    The resulting group contains the three elements of A and B (1, -1, 2 [010]),
+    but also one new element that is the result of multiplying "x,y,z" and "-x,y,-z",
+    which is "x,-y,z" - the operation resulting from a mirror plane perpendicular
+    to the y-axis. In fact, this example demonstrated how the combination of
+    two crystallographic point groups (see PointGroup documentation and wiki)
+    "-1" and "2" results in a new point group "2/m".
+
+    Most of the time it's not required to use Group directly, there are several
+    sub-classes that implement different behavior (CenteringGroup, CyclicGroup,
+    ProductOfCyclicGroups) and are easier to handle. For construction there is a simple
+    "factory function", that works for all Group-based classes which provide a
+    string-based constructor:
+
+      Group_const_sptr group = GroupFactory::create<CyclicGroup>("-x,-y,-z");
+
+    However, the most useful sub-class is SpaceGroup, which comes with its
+    own factory. For detailed information about the respective sub-classes,
+    please consult their documentation.
+
+      @author Michael Wedel, Paul Scherrer Institut - SINQ
+      @date 03/10/2014
+
+    Copyright © 2014 PSI-MSS
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+  */
+class MANTID_GEOMETRY_DLL Group
+{
+public:
+    Group();
+    Group(const std::string &symmetryOperationString);
+    Group(const std::vector<SymmetryOperation> &symmetryOperations);
+    Group(const Group &other);
+    Group &operator =(const Group &other);
+
+    virtual ~Group() { }
+
+    size_t order() const;
+    std::vector<SymmetryOperation> getSymmetryOperations() const;
+
+    Group operator *(const Group &other) const;
+
+    std::vector<Kernel::V3D> operator *(const Kernel::V3D &vector) const;
+
+    bool operator ==(const Group &other) const;
+    bool operator !=(const Group &other) const;
+
+protected:
+    void setSymmetryOperations(const std::vector<SymmetryOperation> &symmetryOperations);
+
+    std::vector<SymmetryOperation> m_allOperations;
+    std::set<SymmetryOperation> m_operationSet;
+};
+
+typedef boost::shared_ptr<Group> Group_sptr;
+typedef boost::shared_ptr<const Group> Group_const_sptr;
+
+namespace GroupFactory {
+    /// Creates a Group sub-class of type T if T has a constructor that takes a string.
+    template<typename T>
+    Group_const_sptr create(const std::string &initializationString)
+    {
+        return boost::make_shared<const T>(initializationString);
+    }
+}
+
+MANTID_GEOMETRY_DLL Group_const_sptr operator *(const Group_const_sptr &lhs, const Group_const_sptr &rhs);
+MANTID_GEOMETRY_DLL std::vector<Kernel::V3D> operator *(const Group_const_sptr &lhs, const Kernel::V3D &rhs);
+MANTID_GEOMETRY_DLL bool operator ==(const Group_const_sptr &lhs, const Group_const_sptr &rhs);
+MANTID_GEOMETRY_DLL bool operator !=(const Group_const_sptr &lhs, const Group_const_sptr &rhs);
+
+
+} // namespace Geometry
+} // namespace Mantid
+
+#endif  /* MANTID_GEOMETRY_GROUP_H_ */
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/IsotropicAtomBraggScatterer.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/IsotropicAtomBraggScatterer.h
new file mode 100644
index 0000000000000000000000000000000000000000..aee5d4f00d9da6b6aff1692e90415f2c74751020
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/IsotropicAtomBraggScatterer.h
@@ -0,0 +1,137 @@
+#ifndef MANTID_GEOMETRY_ISOTROPICATOMBRAGGSCATTERER_H_
+#define MANTID_GEOMETRY_ISOTROPICATOMBRAGGSCATTERER_H_
+
+#include "MantidGeometry/Crystal/BraggScattererInCrystalStructure.h"
+#include "MantidGeometry/Crystal/UnitCell.h"
+#include "MantidKernel/NeutronAtom.h"
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/** IsotropicAtomBraggScatterer
+
+    IsotropicAtomBraggScatterer calculates the structure factor for
+    a given HKL using the following equation, which gives the
+    structure factor for the j-th atom in the unit cell:
+
+        F(hkl)_j = b_j * o_j * DWF_j(hkl) * exp[i * 2pi * (h*x_j + k*y_j + l*z_j)]
+
+    Since there are many terms in that equation, further explanation
+    is required. The j-th atom in a unit cell occupies a certain position,
+    here denoted by the fractional coordinates (x, y, z). With this information,
+    an important calculation can be already carried out, calculation of the
+    so called "phase". This term is easier seen when the complex part is written
+    using trigonometric functions:
+
+        phi = 2pi * (h*x_j + k*y_j + l*z_j)
+        exp[i * phi] = cos(phi) + i * sin(phi)
+
+    The magnitude of the complex number is determined first of all by the
+    scattering length, b_j (which is element specific and tabulated, in
+    Mantid this is in PhysicalConstants::NeutronAtom). It is multiplied
+    by the occupancy o_j, which is a number on the interval [0, 1], where 0
+    is a bit meaningless, since it means "no atoms on this position" and
+    1 represents a fully occupied position in the crystal lattice. This number
+    can be used to model statistically distributed defects.
+
+    DWF_j denotes the Debye-Waller-factor, which models the diminishing
+    scattering power of atoms that are displaced from their position
+    (either due to temperature or other effects). It is defined like this:
+
+        DWF_j(hkl) = exp[-2.0 * pi^2 * U * 1/d(hkl)^2]
+
+    Here, U is given in Angstrom^2 (for a discussion of terms regarding
+    atomic displacement parameters, please see [1]), it is often of the
+    order 0.05. d(hkl) is alculated using the unit cell. The model used
+    in this class is isotropic (hence the class name), which may be insufficient
+    depending on the crystal structure, but as a first approximation it is
+    often enough.
+
+    This class is designed to handle atoms in a unit cell. When a position is set,
+    the internally stored space group is used to generate all positions that are
+    symmetrically equivalent. In the structure factor calculation method
+    all contributions are summed.
+
+    Easiest is demonstration by example. Copper crystallizes in the space group
+    Fm-3m, Cu atoms occupy the position (0,0,0) and, because of the F-centering,
+    also 3 additional positions.
+
+        BraggScatterer_sptr cu = BraggScattererFactory::Instance().createScatterer(
+                                                            "IsotropicAtomBraggScatterer",
+                                                            "Element=Cu; SpaceGroup=F m -3 m")
+        cu->setProperty("UnitCell", unitCellToStr(cellCu));
+
+        StructureFactor F = cu->calculateStructureFactor(V3D(1, 1, 1));
+
+    The structure factor F contains contributions from all 4 copper atoms in the cell.
+    This is convenient especially for general positions. The general position
+    of Fm-3m for example has 192 equivalents.
+
+    [1] http://ww1.iucr.org/comm/cnom/adp/finrep/finrep.html
+
+      @author Michael Wedel, Paul Scherrer Institut - SINQ
+      @date 21/10/2014
+
+    Copyright © 2014 PSI-MSS
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+  */
+class IsotropicAtomBraggScatterer;
+
+typedef boost::shared_ptr<IsotropicAtomBraggScatterer> IsotropicAtomBraggScatterer_sptr;
+
+class MANTID_GEOMETRY_DLL IsotropicAtomBraggScatterer : public BraggScattererInCrystalStructure
+{
+public:
+    IsotropicAtomBraggScatterer();
+    virtual ~IsotropicAtomBraggScatterer() { }
+
+    std::string name() const { return "IsotropicAtomBraggScatterer"; }
+    BraggScatterer_sptr clone() const;
+
+    std::string getElement() const;
+    PhysicalConstants::NeutronAtom getNeutronAtom() const;
+
+    double getOccupancy() const;
+    double getU() const;
+
+    StructureFactor calculateStructureFactor(const Kernel::V3D &hkl) const;
+
+protected:
+    void setElement(const std::string &element);
+
+    void declareScattererProperties();
+    void afterScattererPropertySet(const std::string &propertyName);
+
+    double getDebyeWallerFactor(const Kernel::V3D &hkl) const;
+    double getScatteringLength() const;
+
+    PhysicalConstants::NeutronAtom m_atom;
+    std::string m_label;
+};
+
+typedef boost::shared_ptr<IsotropicAtomBraggScatterer> IsotropicAtomBraggScatterer_sptr;
+
+
+} // namespace Geometry
+} // namespace Mantid
+
+#endif  /* MANTID_GEOMETRY_ISOTROPICATOMBRAGGSCATTERER_H_ */
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/ProductOfCyclicGroups.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/ProductOfCyclicGroups.h
new file mode 100644
index 0000000000000000000000000000000000000000..6c244d42af47634b016a2632d717c83c994963a3
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/ProductOfCyclicGroups.h
@@ -0,0 +1,80 @@
+#ifndef MANTID_GEOMETRY_PRODUCTGROUP_H_
+#define MANTID_GEOMETRY_PRODUCTGROUP_H_
+
+#include "MantidGeometry/DllConfig.h"
+#include "MantidGeometry/Crystal/Group.h"
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/** ProductOfCyclicGroups :
+
+    ProductOfCyclicGroups expands a bit on the explanations given in
+    CyclicGroup. As shown for example in [1], some point groups
+    cannot be expressed solely as a cyclic group. Instead it's
+    necessary to multiply two or three cyclic groups to obtain all
+    symmetry operations of that group.
+
+    For this purpose, ProductOfCyclicGroups was created. It takes a set of
+    n symmetry operations, each of which is seen as a generator of
+    a cyclic group C_i. The resulting n groups ("factor groups") are
+    multiplied to form a product group G:
+
+      G = C_1 * C_2 * ... * C_n
+
+    Where C_i is generated by the symmetry operation S_i. The notation
+    in code to generate even large groups from a few generators
+    becomes very short using this class:
+
+      Group_const_sptr pointGroup422 = GroupFactory::create<ProductOfCyclicGroups>("-y,x,z; x,-y,-z");
+
+    This is for example used in SpaceGroupFactory to create space groups
+    from a small set of generators supplied in the International Tables
+    for Crystallography A.
+
+    [1] Shmueli, U. Acta Crystallogr. A 40, 559–567 (1984).
+        http://dx.doi.org/10.1107/S0108767384001161
+
+      @author Michael Wedel, Paul Scherrer Institut - SINQ
+      @date 08/10/2014
+
+    Copyright © 2014 PSI-MSS
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+  */
+class MANTID_GEOMETRY_DLL ProductOfCyclicGroups : public Group
+{
+public:
+    ProductOfCyclicGroups(const std::string &generators);
+    ProductOfCyclicGroups(const std::vector<Group_const_sptr> &factorGroups);
+    virtual ~ProductOfCyclicGroups() { }
+
+protected:
+    Group_const_sptr getGeneratedGroup(const std::string &generators) const;
+    std::vector<Group_const_sptr> getFactorGroups(const std::vector<SymmetryOperation> &symmetryOperations) const;
+    Group_const_sptr getProductOfCyclicGroups(const std::vector<Group_const_sptr> &factorGroups) const;
+};
+
+
+} // namespace Geometry
+} // namespace Mantid
+
+#endif  /* MANTID_GEOMETRY_PRODUCTGROUP_H_ */
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/SpaceGroup.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/SpaceGroup.h
new file mode 100644
index 0000000000000000000000000000000000000000..3b0887bdcd0c113b11b32f9b2efeadb900628790
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/SpaceGroup.h
@@ -0,0 +1,96 @@
+#ifndef MANTID_GEOMETRY_SPACEGROUP_H_
+#define MANTID_GEOMETRY_SPACEGROUP_H_
+
+#include "MantidGeometry/DllConfig.h"
+#include "MantidGeometry/Crystal/Group.h"
+#include "MantidGeometry/Crystal/SymmetryOperation.h"
+#include "MantidKernel/V3D.h"
+
+#include <set>
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/** SpaceGroup :
+
+    A class for representing space groups, inheriting from Group.
+
+    SpaceGroup-objects represent a space group, which is a set
+    of symmetry operations. Along with storing the operations themselves,
+    which is realized through inheriting from Group, SpaceGroup also
+    stores a number (space group number according to the International
+    Tables for Crystallography A) and a Hermann-Mauguin-symbol.
+
+    SpaceGroup may for example be used to generate all equivalent positions
+    within the unit cell:
+
+      SpaceGroup_const_sptr someGroup;
+
+      V3D position(0.13, 0.54, 0.38);
+      std::vector<V3D> equivalents = someGroup->getEquivalentPositions(position);
+
+    The class should not be instantiated directly, see SpaceGroupFactory instead.
+
+      @author Michael Wedel, Paul Scherrer Institut - SINQ
+      @date 03/10/2014
+
+    Copyright © 2014 PSI-MSS
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+  */
+class MANTID_GEOMETRY_DLL SpaceGroup : public Group
+{
+public:
+    SpaceGroup(size_t itNumber, const std::string &hmSymbol, const Group &group);
+
+    SpaceGroup(const SpaceGroup &other);
+    SpaceGroup &operator =(const SpaceGroup &other);
+
+    virtual ~SpaceGroup() { }
+
+    size_t number() const;
+    std::string hmSymbol() const;
+
+    template<typename T>
+    std::vector<T> getEquivalentPositions(const T &position) const
+    {
+        const std::vector<SymmetryOperation> &symmetryOperations = getSymmetryOperations();
+
+        std::set<T> equivalents;
+        for(auto it = symmetryOperations.begin(); it != symmetryOperations.end(); ++it) {
+            equivalents.insert(Geometry::getWrappedVector((*it) * position));
+        }
+
+        return std::vector<T>(equivalents.begin(), equivalents.end());
+    }
+
+protected:
+    size_t m_number;
+    std::string m_hmSymbol;
+};
+
+typedef boost::shared_ptr<SpaceGroup> SpaceGroup_sptr;
+typedef boost::shared_ptr<const SpaceGroup> SpaceGroup_const_sptr;
+
+} // namespace Geometry
+} // namespace Mantid
+
+#endif  /* MANTID_GEOMETRY_SPACEGROUP_H_ */
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/SpaceGroupFactory.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/SpaceGroupFactory.h
new file mode 100644
index 0000000000000000000000000000000000000000..21c6bce2eb8c36cdb376de3254d80601583b3243
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/SpaceGroupFactory.h
@@ -0,0 +1,130 @@
+#ifndef MANTID_GEOMETRY_SPACEGROUPFACTORY_H_
+#define MANTID_GEOMETRY_SPACEGROUPFACTORY_H_
+
+#include "MantidGeometry/DllConfig.h"
+#include "MantidKernel/SingletonHolder.h"
+#include "MantidGeometry/Crystal/SpaceGroup.h"
+#include "MantidKernel/RegistrationHelper.h"
+
+#include <map>
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/** SpaceGroupFactory
+
+  Factory for SpaceGroups. When a space group is subscribed, it
+  creates a prototype object and stores that. All space group
+  creations through the factory are just copy-constructions.
+
+  Space groups can be subscribed using one of two available methods,
+  either by supplying ALL symmetry operations (this is called a "tabulated"
+  space group) or a set of generators (from International Tables for
+  Crystallography A).
+
+    @author Michael Wedel, Paul Scherrer Institut - SINQ
+    @date 08/10/2014
+
+    Copyright © 2014 PSI-MSS
+
+  This file is part of Mantid.
+
+  Mantid is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 3 of the License, or
+  (at your option) any later version.
+
+  Mantid 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 General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+  File change history is stored at: <https://github.com/mantidproject/mantid>
+  Code Documentation is available at: <http://doxygen.mantidproject.org>
+*/
+class MANTID_GEOMETRY_DLL SpaceGroupFactoryImpl
+{
+public:
+    virtual ~SpaceGroupFactoryImpl() { }
+
+    SpaceGroup_const_sptr createSpaceGroup(const std::string &hmSymbol) const;
+
+    bool isSubscribed(const std::string &hmSymbol) const;
+    bool isSubscribed(size_t number) const;
+
+    std::vector<std::string> subscribedSpaceGroupSymbols() const;
+    std::vector<std::string> subscribedSpaceGroupSymbols(size_t number) const;
+    std::vector<size_t> subscribedSpaceGroupNumbers() const;
+
+    void unsubscribeSpaceGroup(const std::string &hmSymbol);
+
+    void subscribeGeneratedSpaceGroup(size_t number, const std::string &hmSymbol, const std::string &generators);
+    void subscribeTabulatedSpaceGroup(size_t number, const std::string &hmSymbol, const std::string &symmetryOperations);
+
+protected:
+    void throwIfSubscribed(const std::string &hmSymbol);
+
+    std::string getCenteringString(const std::string &hmSymbol) const;
+    Group_const_sptr getGeneratedGroup(const std::string &generators, const std::string &centeringSymbol) const;
+    Group_const_sptr getTabulatedGroup(const std::string &symmetryOperations) const;
+
+    SpaceGroup_const_sptr getPrototype(Group_const_sptr generatingGroup, size_t number, const std::string &hmSymbol) const;
+
+    void subscribe(const SpaceGroup_const_sptr &prototype);
+
+    SpaceGroup_const_sptr constructFromPrototype(const SpaceGroup_const_sptr prototype) const;
+
+    std::multimap<size_t, std::string> m_numberMap;
+    std::map<std::string, SpaceGroup_const_sptr> m_prototypes;
+
+    SpaceGroupFactoryImpl();
+
+private:
+    friend struct Mantid::Kernel::CreateUsingNew<SpaceGroupFactoryImpl>;
+};
+
+// This is taken from FuncMinimizerFactory
+#ifdef _WIN32
+  template class MANTID_GEOMETRY_DLL Mantid::Kernel::SingletonHolder<SpaceGroupFactoryImpl>;
+#endif
+
+typedef Mantid::Kernel::SingletonHolder<SpaceGroupFactoryImpl> SpaceGroupFactory;
+
+
+} // namespace Geometry
+} // namespace Mantid
+
+/* Macros for compile time space group registration
+ *
+ * The macros are a bit different than in other factories,
+ * because there is no identifier that can be used to generate
+ * a unique name for each RegistrationHelper instance.
+ *
+ * Instead, the __COUNTER__ macro is used, which is available
+ * in many compilers and is incremented every time it's called.
+ *
+ * Solution was found here: http://stackoverflow.com/a/1295338
+ */
+#define SPGF_CONCAT_IMPL(x, y) x##y
+#define SPGF_CONCAT(x, y) SPGF_CONCAT_IMPL(x, y)
+
+#define DECLARE_GENERATED_SPACE_GROUP(number,hmSymbol,generators) \
+      namespace { \
+  Mantid::Kernel::RegistrationHelper SPGF_CONCAT(register_spacegroup_, __COUNTER__)( \
+((Mantid::Geometry::SpaceGroupFactory::Instance().subscribeGeneratedSpaceGroup(number, hmSymbol, generators)) \
+  , 0)); \
+  }
+
+#define DECLARE_TABULATED_SPACE_GROUP(number,hmSymbol,symmetryOperations) \
+    namespace { \
+Mantid::Kernel::RegistrationHelper SPGF_CONCAT(register_spacegroup_, __COUNTER__)( \
+((Mantid::Geometry::SpaceGroupFactory::Instance().subscribeTabulatedSpaceGroup(number, hmSymbol, symmetryOperations)) \
+, 0)); \
+}
+
+#endif  /* MANTID_GEOMETRY_SPACEGROUPFACTORY_H_ */
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/SymmetryOperationFactory.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/SymmetryOperationFactory.h
index 0f5d2d1a2fe3b8affa8b51abaea90523f6083bcf..fe409548633831b6e646f9c27c5d6245d5fbc237 100644
--- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/SymmetryOperationFactory.h
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/SymmetryOperationFactory.h
@@ -57,6 +57,8 @@ namespace Geometry
   {
   public:
       SymmetryOperation createSymOp(const std::string &identifier);
+      std::vector<SymmetryOperation> createSymOps(const std::string &identifiers);
+      std::vector<SymmetryOperation> createSymOps(const std::vector<std::string> &identifiers);
 
       void subscribeSymOp(const std::string &identifier);
       void unsubscribeSymOp(const std::string &identifier);
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/SymmetryOperationSymbolParser.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/SymmetryOperationSymbolParser.h
index 800b6fbbde22a171db65d8fe02d00af1e520ab9c..e4b4f24cece0ad2f514ee5c47d8ad728c88c8061 100644
--- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/SymmetryOperationSymbolParser.h
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/SymmetryOperationSymbolParser.h
@@ -91,9 +91,8 @@ namespace Geometry
 
       static bool isValidMatrixRow(const std::vector<int> &matrixRow);
 
-      static boost::regex m_tokenRegex;
-      static boost::regex m_matrixRowRegex;
-      static boost::regex m_vectorComponentRegex;
+      static bool regexMembersInitialized();
+      static void initializeRegexMembers();
   };
 
 
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/UnitCell.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/UnitCell.h
index 248cdc134ffae9eded1ba3b43bc7c4324010ac3d..018163d8f50ceb86b347419f2ba1de4acfa1dd24 100644
--- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/UnitCell.h
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/UnitCell.h
@@ -178,6 +178,10 @@ namespace Geometry
   };
 
   MANTID_GEOMETRY_DLL std::ostream& operator<<(std::ostream &out, const UnitCell& unitCell);
+
+  MANTID_GEOMETRY_DLL UnitCell strToUnitCell(const std::string &unitCellString);
+  MANTID_GEOMETRY_DLL std::string unitCellToStr(const UnitCell &unitCell);
+
 } // namespace Mantid
 } // namespace Geometry
 
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/ParameterMap.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/ParameterMap.h
index 603e267721fc1f87710f8f5680c3849537995e41..238d434d893c6137b3bdc7e1a8f32de7a14532e3 100644
--- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/ParameterMap.h
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Instrument/ParameterMap.h
@@ -10,7 +10,7 @@
 #include "MantidGeometry/Objects/BoundingBox.h"
 #include "MantidKernel/Cache.h"
 
-#include <boost/unordered_map.hpp>
+#include <map>
 #include <vector>
 #include <typeinfo>
 
@@ -54,19 +54,19 @@ namespace Geometry
     File change history is stored at: <https://github.com/mantidproject/mantid>.
     Code Documentation is available at: <http://doxygen.mantidproject.org>
   */
-   /// Parameter map iterator typedef
-   typedef boost::unordered_multimap<const ComponentID,boost::shared_ptr<Parameter> >::iterator component_map_it;
-   typedef boost::unordered_multimap<const ComponentID,boost::shared_ptr<Parameter> >::const_iterator component_map_cit;
+  /// Parameter map iterator typedef
+  typedef std::multimap<const ComponentID,boost::shared_ptr<Parameter> >::iterator component_map_it;
+  typedef std::multimap<const ComponentID,boost::shared_ptr<Parameter> >::const_iterator component_map_cit;
 
   class MANTID_GEOMETRY_DLL ParameterMap
   {
   public:
     /// Parameter map typedef
-    typedef boost::unordered_multimap<const ComponentID,boost::shared_ptr<Parameter> > pmap;
+    typedef std::multimap<const ComponentID,boost::shared_ptr<Parameter> > pmap;
     /// Parameter map iterator typedef
-    typedef boost::unordered_multimap<const ComponentID,boost::shared_ptr<Parameter> >::iterator pmap_it;
+    typedef std::multimap<const ComponentID,boost::shared_ptr<Parameter> >::iterator pmap_it;
     /// Parameter map iterator typedef
-    typedef boost::unordered_multimap<const ComponentID,boost::shared_ptr<Parameter> >::const_iterator pmap_cit;
+    typedef std::multimap<const ComponentID,boost::shared_ptr<Parameter> >::const_iterator pmap_cit;
     /// Default constructor
     ParameterMap();
     /// Returns true if the map is empty, false otherwise
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Objects/Object.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Objects/Object.h
index 208f7b00663bb55f59d3944d600a551d30d57ae7..48e07ce48eeb839b9a193888c73737df1a0f4d83 100644
--- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Objects/Object.h
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Objects/Object.h
@@ -5,19 +5,19 @@
 // Includes
 //----------------------------------------------------------------------
 #include "MantidGeometry/DllConfig.h"
-#include "MantidKernel/V3D.h"
+#include "MantidKernel/Material.h"
 #include "MantidKernel/Quat.h"
+#include "MantidKernel/V3D.h"
 #include "BoundingBox.h"
 #include <map>
 
 namespace Mantid
 {
-
+  //----------------------------------------------------------------------
+  // Forward declarations
+  //----------------------------------------------------------------------
   namespace Geometry
   {
-    //----------------------------------------------------------------------
-    // Forward declarations
-    //----------------------------------------------------------------------
     class Rule;
     class CompGrp;
     class Surface;
@@ -76,6 +76,9 @@ namespace Mantid
       void setName(const int nx) { ObjName=nx; }           ///< Set Name
       int getName() const  { return ObjName; }             ///< Get Name
 
+      void setMaterial(const Kernel::Material & material);
+      const Kernel::Material & material() const;
+
       /// Return whether this object has a valid shape
       bool hasValidShape() const;
       int setObject(const int ON,const std::string& Ln);
@@ -132,7 +135,7 @@ namespace Mantid
       const BoundingBox & getBoundingBox() const;
       /// Define axis-aligned bounding box
       void defineBoundingBox(const double& xmax,const double& ymax,const double& zmax,const double& xmin,const double& ymin,const double& zmin);
-      /// Set a null bounding box for this object 
+      /// Set a null bounding box for this object
       void setNullBoundingBox();
       // find internal point to object
       int getPointInObject(Kernel::V3D& point) const;
@@ -176,11 +179,11 @@ namespace Mantid
       double getTriangleSolidAngle(const Kernel::V3D& a, const Kernel::V3D& b, const Kernel::V3D& c, const Kernel::V3D& observer) const;
       double CuboidSolidAngle(const Kernel::V3D observer, const std::vector<Kernel::V3D> vectors) const;
       double SphereSolidAngle(const Kernel::V3D observer, const std::vector<Kernel::V3D> vectors, const double radius) const;
-      double CylinderSolidAngle(const Kernel::V3D & observer, const Mantid::Kernel::V3D & centre, 
-        const Mantid::Kernel::V3D & axis, 
+      double CylinderSolidAngle(const Kernel::V3D & observer, const Mantid::Kernel::V3D & centre,
+        const Mantid::Kernel::V3D & axis,
         const double radius, const double height) const;
-      double ConeSolidAngle(const Kernel::V3D & observer, const Mantid::Kernel::V3D & centre, 
-        const Mantid::Kernel::V3D & axis, 
+      double ConeSolidAngle(const Kernel::V3D & observer, const Mantid::Kernel::V3D & centre,
+        const Mantid::Kernel::V3D & axis,
         const double radius, const double height) const;
 
       /// Geometry Handle for rendering
@@ -200,6 +203,8 @@ namespace Mantid
       double* getTriangleVertices() const;
       /// original shape xml used to generate this object.
       std::string m_shapeXML;
+      /// material composition
+      Kernel::Material m_material;
 
     protected:
       std::vector<const Surface*> SurList;  ///< Full surfaces (make a map including complementary object ?)
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Objects/Track.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Objects/Track.h
index df549d77b1c1b37ef66fc05eb240f316d4513cb3..a1a1d3448b7642ff79bada75b79efab98c17bddc 100644
--- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Objects/Track.h
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Objects/Track.h
@@ -6,6 +6,7 @@
 //----------------------------------------------------------------------
 #include "MantidGeometry/DllConfig.h"
 #include "MantidGeometry/IComponent.h"
+#include "MantidGeometry/Objects/Object.h"
 #include "MantidKernel/Tolerance.h"
 #include <list>
 
@@ -51,23 +52,18 @@ namespace Mantid
     */
     struct MANTID_GEOMETRY_DLL Link
     {
-      /**
-       * Default constructor
-       */
-      inline Link() : entryPoint(),exitPoint(),distFromStart(), 
-        distInsideObject(), componentID(NULL)
-      {}
-
       /**
       * Constuctor
       * @param entry :: Kernel::V3D point to start
       * @param exit :: Kernel::V3D point to end track
       * @param totalDistance :: Total distance from start of track
+      * @param obj :: A reference to the object that was intersected
       * @param compID :: An optional component identifier for the physical object hit. (Default=NULL)
       */
-      inline Link(const Kernel::V3D& entry,const Kernel::V3D& exit, const double totalDistance, const ComponentID compID = NULL) :
-        entryPoint(entry),exitPoint(exit),distFromStart(totalDistance), distInsideObject(entryPoint.distance(exitPoint)), 
-        componentID(compID)
+      inline Link(const Kernel::V3D& entry,const Kernel::V3D& exit, const double totalDistance,
+                  const Object & obj, const ComponentID compID = NULL) :
+        entryPoint(entry),exitPoint(exit),distFromStart(totalDistance), distInsideObject(entryPoint.distance(exitPoint)),
+        object(&obj), componentID(compID)
       {}
       /// Less than operator
       inline bool operator<(const Link& other) const { return distFromStart < other.distFromStart; }
@@ -76,20 +72,21 @@ namespace Mantid
 
       /** @name Attributes. */
       //@{
-      Kernel::V3D entryPoint;             ///< Entry point
-      Kernel::V3D exitPoint;              ///< Exit point
+      Kernel::V3D entryPoint;     ///< Entry point
+      Kernel::V3D exitPoint;      ///< Exit point
       double distFromStart;       ///< Total distance from track beginning
       double distInsideObject;    ///< Total distance covered inside object
+      const Object * object;      ///< The object that was intersected
       ComponentID componentID;    ///< ComponentID of the intersected component
       //@}
-    
+
     };
 
     /**
     * Stores a point of intersection along a track. The component intersected
     * is linked using its ComponentID.
     *
-    * Ordering for IntersectionPoint is special since we need that when dist is close 
+    * Ordering for IntersectionPoint is special since we need that when dist is close
     * that the +/- flag is taken into
     * account.
     */
@@ -97,22 +94,25 @@ namespace Mantid
     {
       /**
       * Constuctor
-      * @param flag :: Indicates the direction of travel of the track with respect 
+      * @param flag :: Indicates the direction of travel of the track with respect
       * to the object: +1 is entering, -1 is leaving.
       * @param end :: The end point for this partial segment
       * @param distFromStartOfTrack :: Total distance from start of track
       * @param compID :: An optional unique ID marking the component intersected. (Default=NULL)
+      * @param obj :: A reference to the object that was intersected
       */
       inline IntersectionPoint(const int flag, const Kernel::V3D& end,
-                               const double distFromStartOfTrack, const ComponentID compID = NULL) :
-        directionFlag(flag),endPoint(end),distFromStart(distFromStartOfTrack), componentID(compID)
+                               const double distFromStartOfTrack, const Object & obj,
+                               const ComponentID compID = NULL) :
+        directionFlag(flag),endPoint(end),distFromStart(distFromStartOfTrack),
+        object(&obj), componentID(compID)
       {}
 
       /**
       * A IntersectionPoint is less-than another if either
       * (a) the difference in distances is greater than the tolerance and this distance is less than the other or
       * (b) the distance is less than the other and this point is defined as an exit point
-      * 
+      *
       * @param other :: IntersectionPoint object to compare
       * @return True if the object is considered less than, otherwise false.
       */
@@ -127,6 +127,7 @@ namespace Mantid
       int directionFlag;         ///< Directional flag
       Kernel::V3D endPoint;              ///< Point
       double distFromStart;      ///< Total distance from track begin
+      const Object * object;      ///< The object that was intersected
       ComponentID componentID;   ///< Unique component ID
       //@}
     };
@@ -155,10 +156,12 @@ namespace Mantid
       /// Destructor
       ~Track();
       /// Adds a point of intersection to the track
-      void addPoint(const int directionFlag, const Kernel::V3D& endPoint, const ComponentID compID = NULL);
+      void addPoint(const int directionFlag, const Kernel::V3D& endPoint,
+                    const Object & obj, const ComponentID compID = NULL);
       /// Adds a link to the track
-      int addLink(const Kernel::V3D& firstPoint,const Kernel::V3D& secondPoint, 
-                  const double distanceAlongTrack, const ComponentID compID = NULL);
+      int addLink(const Kernel::V3D& firstPoint,const Kernel::V3D& secondPoint,
+                  const double distanceAlongTrack, const Object & obj,
+                  const ComponentID compID = NULL);
       /// Remove touching Links that have identical components
       void removeCojoins();
       /// Construct links between added points
@@ -175,10 +178,10 @@ namespace Mantid
       /// Returns an interator to the start of the set of links
       LType::const_iterator begin() const { return m_links.begin(); }
       /// Returns an interator to one-past-the-end of the set of links
-      LType::const_iterator end() const { return m_links.end(); }       
+      LType::const_iterator end() const { return m_links.end(); }
       /// Returns the number of links
-      int count() const { return static_cast<int>(m_links.size()); }     
-      /// Is the link complete? 
+      int count() const { return static_cast<int>(m_links.size()); }
+      /// Is the link complete?
       int nonComplete() const;
 
     private:
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Line.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Line.h
index e5f8957178be2654255fd5438b3e3c097eab24fa..45952481c5dfb5812c9e878ebec45afb8ad243d4 100644
--- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Line.h
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Line.h
@@ -62,7 +62,7 @@ namespace Mantid
       Kernel::V3D Direct;   ///< Direction of outer surface (Unit Vector) 
 
       int lambdaPair(const int ix,const std::pair<std::complex<double>,
-        std::complex<double> >& SQ,std::vector<Kernel::V3D>& PntOut) const;
+        std::complex<double> >& SQ,std::list<Kernel::V3D>& PntOut) const;
 
     public: 
 
@@ -86,10 +86,10 @@ namespace Mantid
 
       int setLine(const Kernel::V3D&,const Kernel::V3D&);     ///< input Origin + direction
 
-      int intersect(std::vector<Kernel::V3D>&,const Quadratic&) const;
-      int intersect(std::vector<Kernel::V3D>&,const Cylinder&) const;
-      int intersect(std::vector<Kernel::V3D>&,const Plane&) const;
-      int intersect(std::vector<Kernel::V3D>&,const Sphere&) const;
+      int intersect(std::list<Kernel::V3D>&,const Quadratic&) const;
+      int intersect(std::list<Kernel::V3D>&,const Cylinder&) const;
+      int intersect(std::list<Kernel::V3D>&,const Plane&) const;
+      int intersect(std::list<Kernel::V3D>&,const Sphere&) const;
 
     };
 
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/LineIntersectVisit.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/LineIntersectVisit.h
index dba93f49362ab3e7acd7399ca4293d8945dc4ac2..f225702a7c68b28fb720534e728fecc835aa2695 100644
--- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/LineIntersectVisit.h
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/LineIntersectVisit.h
@@ -4,7 +4,7 @@
 #include "MantidGeometry/Surfaces/BaseVisit.h"
 #include "MantidGeometry/Surfaces/Line.h"
 #include "MantidKernel/V3D.h"
-#include <vector>
+#include <list>
 
 namespace Mantid
 {
@@ -56,8 +56,8 @@ namespace Mantid
     private:
 
       Line ATrack;                         ///< The line
-      std::vector<Kernel::V3D> PtOut;  ///< The intersection point
-      std::vector<double> DOut;            ///< The distance
+      std::list<Kernel::V3D> PtOut;  ///< The intersection point
+      std::list<double> DOut;            ///< The distance
 
       void procTrack();
 
@@ -66,7 +66,7 @@ namespace Mantid
       LineIntersectVisit(const Kernel::V3D&,
         const Kernel::V3D&);
       /// Destructor
-      virtual ~LineIntersectVisit() {};
+      virtual ~LineIntersectVisit() {}
 
       void Accept(const Surface&);
       void Accept(const Quadratic&);
@@ -78,10 +78,10 @@ namespace Mantid
 
       // Accessor
       /// Get the distance
-      const std::vector<double>& getDistance() const 
+      const std::list<double>& getDistance() const 
       { return DOut; }
       /// Get the intersection points
-      const std::vector<Kernel::V3D>& getPoints() const 
+      const std::list<Kernel::V3D>& getPoints() const 
       { return PtOut; }
       /// Get the number of intersection points
       unsigned long getNPoints() const { return (unsigned long)PtOut.size(); }
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Plane.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Plane.h
index 8e4c34e0d412fb48ae83e4367c9adf82bf2a8c19..cdb7e3c93834ad0b65306a4a943cd091a134db53 100644
--- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Plane.h
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Surfaces/Plane.h
@@ -82,7 +82,7 @@ namespace Mantid
       double distance(const Kernel::V3D&) const;      ///< distance from a point
 
       double getDistance() const { return Dist; }  ///< Distance from origin
-      Kernel::V3D getNormal() const { return NormV; }    ///< Normal to plane (+ve surface)
+      const Kernel::V3D & getNormal() const { return NormV; }    ///< Normal to plane (+ve surface)
 
       void rotate(const Kernel::Matrix<double>&);
       void displace(const Kernel::V3D&);
diff --git a/Code/Mantid/Framework/Geometry/src/Crystal/BraggScatterer.cpp b/Code/Mantid/Framework/Geometry/src/Crystal/BraggScatterer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7c33c03002183d68e29c46f785c023ded5594a84
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/src/Crystal/BraggScatterer.cpp
@@ -0,0 +1,80 @@
+#include "MantidGeometry/Crystal/BraggScatterer.h"
+
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+using namespace Kernel;
+
+/// Default constructor.
+BraggScatterer::BraggScatterer() :
+    PropertyManager(),
+    m_propagatingGroupName("PropagatingProperty"),
+    m_isInitialized(false)
+{
+}
+
+/// Initialization method that calls declareProperties() and sets initialized state to true.
+void BraggScatterer::initialize()
+{
+    declareProperties();
+
+    m_isInitialized = true;
+}
+
+/// Returns whether the instance has been initialized.
+bool BraggScatterer::isInitialized()
+{
+    return m_isInitialized;
+}
+
+/// Checks whether a property with the given name is exposed to BraggScattererComposite.
+bool BraggScatterer::isPropertyExposedToComposite(const std::string &propertyName) const
+{
+    Property *property = getProperty(propertyName);
+
+    return isPropertyExposedToComposite(property);
+}
+
+/// Checks if a property is exposed to BraggScattererComposite or throws std::invalid_argument if a null-pointer is supplied.
+bool BraggScatterer::isPropertyExposedToComposite(Property *property) const
+{
+    if(!property) {
+        throw std::invalid_argument("Cannot determine propagation behavior of null-property.");
+    }
+
+    return property->getGroup() == getPropagatingGroupName();
+}
+
+/**
+ * Exposes the property with the supplied name to BraggScattererComposite
+ *
+ * When a property is marked to be exposed to BraggScattererComposite, the composite
+ * also declares this property and tries to propagate the value assigned to the
+ * composite's property to all its members.
+ *
+ * @param propertyName :: Name of the parameter that should be exposed.
+ */
+void BraggScatterer::exposePropertyToComposite(const std::string &propertyName)
+{
+    setPropertyGroup(propertyName, m_propagatingGroupName);
+}
+
+/// Removes exposure to composite for specified property.
+void BraggScatterer::unexposePropertyFromComposite(const std::string &propertyName)
+{
+    setPropertyGroup(propertyName, "");
+}
+
+/// Returns the group name that is used to mark properties that are propagated.
+const std::string &BraggScatterer::getPropagatingGroupName() const
+{
+    return m_propagatingGroupName;
+}
+
+
+
+} // namespace Geometry
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/Geometry/src/Crystal/BraggScattererFactory.cpp b/Code/Mantid/Framework/Geometry/src/Crystal/BraggScattererFactory.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..66c9df3c48cf42155bc2f34af76a53bdb20dce8e
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/src/Crystal/BraggScattererFactory.cpp
@@ -0,0 +1,43 @@
+#include "MantidGeometry/Crystal/BraggScattererFactory.h"
+#include "MantidKernel/LibraryManager.h"
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/**
+ * Creates an initialized instance of the desired scatterer class
+ *
+ * This method tries to construct an instance of the class specified by the "name"-parameter.
+ * If it is not found, an exception is thrown (see DynamicFactory::create). Otherwise,
+ * the object is initialized. If the second argument is not empty, it is expected
+ * to contain a semi-colon separated list of "name=value"-pairs. These pairs need to be
+ * valid input for assigning properties of the created scatterer. See the example in
+ * the general class documentation.
+ *
+ * @param name :: Class name to construct.
+ * @param properties :: Semi-colon separated "name=value"-pairs.
+ * @return Initialized scatterer object.
+ */
+BraggScatterer_sptr BraggScattererFactoryImpl::createScatterer(const std::string &name, const std::string &properties)
+{
+    BraggScatterer_sptr scatterer = create(name);
+    scatterer->initialize();
+
+    if(!properties.empty()) {
+        scatterer->setProperties(properties);
+    }
+
+    return scatterer;
+}
+
+/// Private constructor.
+BraggScattererFactoryImpl::BraggScattererFactoryImpl()
+{
+    Kernel::LibraryManager::Instance();
+}
+
+
+} // namespace Geometry
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/Geometry/src/Crystal/BraggScattererInCrystalStructure.cpp b/Code/Mantid/Framework/Geometry/src/Crystal/BraggScattererInCrystalStructure.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..029245e4aa3a0d8c5d169b501cc4cc5a522765af
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/src/Crystal/BraggScattererInCrystalStructure.cpp
@@ -0,0 +1,151 @@
+#include "MantidGeometry/Crystal/BraggScattererInCrystalStructure.h"
+#include <stdexcept>
+
+#include <boost/regex.hpp>
+#include <boost/make_shared.hpp>
+#include "MantidKernel/ListValidator.h"
+#include "MantidGeometry/Crystal/SpaceGroupFactory.h"
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+using namespace Kernel;
+
+/// Default constructor.
+BraggScattererInCrystalStructure::BraggScattererInCrystalStructure() :
+    BraggScatterer(),
+    m_position(),
+    m_cell(UnitCell(1, 1, 1, 90, 90, 90)),
+    m_spaceGroup()
+{
+}
+
+/// Sets the position of the scatterer to the supplied coordinates - vector is wrapped to [0, 1) and equivalent positions are recalculated.
+void BraggScattererInCrystalStructure::setPosition(const Kernel::V3D &position)
+{
+    m_position = getWrappedVector(position);
+
+    recalculateEquivalentPositions();
+}
+
+/// Returns the position of the scatterer.
+Kernel::V3D BraggScattererInCrystalStructure::getPosition() const
+{
+    return m_position;
+}
+
+/// Returns all equivalent positions of the scatterer according to the assigned space group.
+std::vector<Kernel::V3D> BraggScattererInCrystalStructure::getEquivalentPositions() const
+{
+    return m_equivalentPositions;
+}
+
+/// Returns the cell which is currently set.
+UnitCell BraggScattererInCrystalStructure::getCell() const
+{
+    return m_cell;
+}
+
+/// Returns the assigned space group.
+SpaceGroup_const_sptr BraggScattererInCrystalStructure::getSpaceGroup() const
+{
+    return m_spaceGroup;
+}
+
+/// Assigns a unit cell, which may be required for certain calculations.
+void BraggScattererInCrystalStructure::setCell(const UnitCell &cell)
+{
+    m_cell = cell;
+}
+
+/// Sets the space group, which is required for calculation of equivalent positions.
+void BraggScattererInCrystalStructure::setSpaceGroup(const SpaceGroup_const_sptr &spaceGroup)
+{
+    m_spaceGroup = spaceGroup;
+
+    recalculateEquivalentPositions();
+}
+
+/// Declares basic properties, should not be overridden by subclasses, use declareScattererProperties instead.
+void BraggScattererInCrystalStructure::declareProperties()
+{
+    /* This is required for default behavior. It's not possible to call it
+     * from the constructure, because it's not guaranteed that the space group
+     * factory has been filled at the time the ScattererFactory is filled.
+     */
+    setSpaceGroup(SpaceGroupFactory::Instance().createSpaceGroup("P 1"));
+
+    declareProperty(new Kernel::PropertyWithValue<V3D>("Position", V3D(0.0, 0.0, 0.0)), "Position of the scatterer");
+
+    IValidator_sptr unitCellStringValidator = boost::make_shared<UnitCellStringValidator>();
+    declareProperty(new Kernel::PropertyWithValue<std::string>("UnitCell", "1.0 1.0 1.0 90.0 90.0 90.0", unitCellStringValidator), "Unit cell.");
+    exposePropertyToComposite("UnitCell");
+
+    IValidator_sptr spaceGroupValidator = boost::make_shared<ListValidator<std::string> >(SpaceGroupFactory::Instance().subscribedSpaceGroupSymbols());
+    declareProperty(new Kernel::PropertyWithValue<std::string>("SpaceGroup", "P 1", spaceGroupValidator), "Space group.");
+    exposePropertyToComposite("SpaceGroup");
+
+
+    declareScattererProperties();
+}
+
+/**
+ * Additional property processing
+ *
+ * Takes care of handling new property values, for example for construction of a space group
+ * from string and so on.
+ *
+ * Please note that derived classes should not re-implement this method, as
+ * the processing for the base properties is absolutely necessary. Instead, all deriving
+ * classes should override the method afterScattererPropertySet, which is called
+ * from this method.
+ */
+void BraggScattererInCrystalStructure::afterPropertySet(const std::string &propertyName)
+{
+    if(propertyName == "Position") {
+        PropertyWithValue<V3D> *position = dynamic_cast<PropertyWithValue<V3D> *>(getPointerToProperty("Position"));
+        setPosition((*position)());
+    } else if(propertyName == "SpaceGroup") {
+        setSpaceGroup(SpaceGroupFactory::Instance().createSpaceGroup(getProperty("SpaceGroup")));
+    } else if(propertyName == "UnitCell") {
+        setCell(strToUnitCell(getProperty("UnitCell")));
+    }
+
+    afterScattererPropertySet(propertyName);
+}
+
+/// Uses the stored space group to calculate all equivalent positions or if present.
+void BraggScattererInCrystalStructure::recalculateEquivalentPositions()
+{
+    m_equivalentPositions.clear();
+
+    if(m_spaceGroup) {
+        m_equivalentPositions = m_spaceGroup * m_position;
+    } else {
+        m_equivalentPositions.push_back(m_position);
+    }
+}
+
+
+/// Return a clone of the validator.
+IValidator_sptr UnitCellStringValidator::clone() const
+{
+    return boost::make_shared<UnitCellStringValidator>(*this);
+}
+
+/// Check if the string is valid input for Geometry::strToUnitCell.
+std::string UnitCellStringValidator::checkValidity(const std::string &unitCellString) const
+{
+    boost::regex unitCellRegex("((\\d+(\\.\\d+){0,1}\\s+){2}|(\\d+(\\.\\d+){0,1}\\s+){5})(\\d+(\\.\\d+){0,1}\\s*)");
+
+    if(!boost::regex_match(unitCellString, unitCellRegex)) {
+        return "Unit cell string is invalid: " + unitCellString;
+    }
+
+    return "";
+}
+
+} // namespace Geometry
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/Geometry/src/Crystal/CenteringGroup.cpp b/Code/Mantid/Framework/Geometry/src/Crystal/CenteringGroup.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e8d2ba62de0b6c800fda13b1a736b66e65bfd09c
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/src/Crystal/CenteringGroup.cpp
@@ -0,0 +1,137 @@
+#include "MantidGeometry/Crystal/CenteringGroup.h"
+#include "MantidGeometry/Crystal/SymmetryOperationFactory.h"
+
+#include <boost/assign.hpp>
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/// String-based constructor which accepts centering symbols such as P, I or F.
+CenteringGroup::CenteringGroup(const std::string &centeringSymbol) :
+    Group(),
+    m_type(),
+    m_symbol()
+{
+    m_type = CenteringGroupCreator::Instance().getCenteringType(centeringSymbol);
+    m_symbol = centeringSymbol.substr(0, 1);
+
+    setSymmetryOperations(CenteringGroupCreator::Instance().getSymmetryOperations(m_type));
+}
+
+/// Returns the centering type of the group (distinguishes between Rhombohedral obverse and reverse).
+CenteringGroup::CenteringType CenteringGroup::getType() const
+{
+    return m_type;
+}
+
+/// Returns the centering symbol, does not distinguish between Rhombohedral obverse and reverse.
+std::string CenteringGroup::getSymbol() const
+{
+    return m_symbol;
+}
+
+
+/// Returns centering type enum value if centering symbol exists, throws std::invalid_argument exception otherwise.
+CenteringGroup::CenteringType CenteringGroupCreatorImpl::getCenteringType(const std::string &centeringSymbol) const
+{
+    auto it = m_centeringSymbolMap.find(centeringSymbol);
+
+    if(it == m_centeringSymbolMap.end()) {
+        throw std::invalid_argument("Centering does not exist: " + centeringSymbol);
+    }
+
+    return it->second;
+}
+
+/// Returns a vector of symmetry operations for the given centering type or throws std::invalid_argument if an invalid value is supplied.
+std::vector<SymmetryOperation> CenteringGroupCreatorImpl::getSymmetryOperations(CenteringGroup::CenteringType centeringType) const
+{
+    switch(centeringType) {
+    case CenteringGroup::P:
+        return getPrimitive();
+    case CenteringGroup::I:
+        return getBodyCentered();
+    case CenteringGroup::A:
+        return getACentered();
+    case CenteringGroup::B:
+        return getBCentered();
+    case CenteringGroup::C:
+        return getCCentered();
+    case CenteringGroup::F:
+        return getFCentered();
+    case CenteringGroup::Robv:
+        return getRobvCentered();
+    case CenteringGroup::Rrev:
+        return getRrevCentered();
+    default:
+        throw std::invalid_argument("Unknown centering type.");
+    }
+}
+
+/// Returns symmetry operations for P-centering.
+std::vector<SymmetryOperation> CenteringGroupCreatorImpl::getPrimitive() const
+{
+    return SymmetryOperationFactory::Instance().createSymOps("x,y,z");
+}
+
+/// Returns symmetry operations for I-centering.
+std::vector<SymmetryOperation> CenteringGroupCreatorImpl::getBodyCentered() const
+{
+    return SymmetryOperationFactory::Instance().createSymOps("x,y,z; x+1/2,y+1/2,z+1/2");
+}
+
+/// Returns symmetry operations for A-centering.
+std::vector<SymmetryOperation> CenteringGroupCreatorImpl::getACentered() const
+{
+    return SymmetryOperationFactory::Instance().createSymOps("x,y,z; x,y+1/2,z+1/2");
+}
+
+/// Returns symmetry operations for B-centering.
+std::vector<SymmetryOperation> CenteringGroupCreatorImpl::getBCentered() const
+{
+    return SymmetryOperationFactory::Instance().createSymOps("x,y,z; x+1/2,y,z+1/2");
+}
+
+/// Returns symmetry operations for C-centering.
+std::vector<SymmetryOperation> CenteringGroupCreatorImpl::getCCentered() const
+{
+    return SymmetryOperationFactory::Instance().createSymOps("x,y,z; x+1/2,y+1/2,z");
+}
+
+/// Returns symmetry operations for F-centering.
+std::vector<SymmetryOperation> CenteringGroupCreatorImpl::getFCentered() const
+{
+    return SymmetryOperationFactory::Instance().createSymOps("x,y,z; x,y+1/2,z+1/2; x+1/2,y,z+1/2; x+1/2,y+1/2,z");
+}
+
+/// Returns symmetry operations for R-centering, obverse setting.
+std::vector<SymmetryOperation> CenteringGroupCreatorImpl::getRobvCentered() const
+{
+    return SymmetryOperationFactory::Instance().createSymOps("x,y,z; x+1/3,y+2/3,z+2/3; x+2/3,y+1/3,z+1/3");
+}
+
+/// Returns symmetry operations for R-centering, reverse setting.
+std::vector<SymmetryOperation> CenteringGroupCreatorImpl::getRrevCentered() const
+{
+    return SymmetryOperationFactory::Instance().createSymOps("x,y,z; x+1/3,y+2/3,z+1/3; x+2/3,y+1/3,z+2/3");
+}
+
+CenteringGroupCreatorImpl::CenteringGroupCreatorImpl() :
+    m_centeringSymbolMap()
+{
+    m_centeringSymbolMap.insert(std::make_pair("P", CenteringGroup::P));
+    m_centeringSymbolMap.insert(std::make_pair("I", CenteringGroup::I));
+    m_centeringSymbolMap.insert(std::make_pair("A", CenteringGroup::A));
+    m_centeringSymbolMap.insert(std::make_pair("B", CenteringGroup::B));
+    m_centeringSymbolMap.insert(std::make_pair("C", CenteringGroup::C));
+    m_centeringSymbolMap.insert(std::make_pair("F", CenteringGroup::F));
+    m_centeringSymbolMap.insert(std::make_pair("R", CenteringGroup::Robv));
+    m_centeringSymbolMap.insert(std::make_pair("Robv", CenteringGroup::Robv));
+    m_centeringSymbolMap.insert(std::make_pair("Rrev", CenteringGroup::Rrev));
+}
+
+
+} // namespace Geometry
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/Geometry/src/Crystal/CompositeBraggScatterer.cpp b/Code/Mantid/Framework/Geometry/src/Crystal/CompositeBraggScatterer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c19d8a1e668dbde0f17ba28a8749abb3a461de9b
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/src/Crystal/CompositeBraggScatterer.cpp
@@ -0,0 +1,190 @@
+#include "MantidGeometry/Crystal/CompositeBraggScatterer.h"
+#include "MantidGeometry/Crystal/BraggScattererFactory.h"
+#include <stdexcept>
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+using namespace Kernel;
+
+/// Default constructor.
+CompositeBraggScatterer::CompositeBraggScatterer() :
+    BraggScatterer(),
+    m_scatterers()
+{
+}
+
+/// Static method that creates a new instance of CompositeBraggScatterer and returns it (wrapped by a smart pointer).
+CompositeBraggScatterer_sptr CompositeBraggScatterer::create()
+{
+    CompositeBraggScatterer_sptr compositeScatterer = boost::make_shared<CompositeBraggScatterer>();
+    compositeScatterer->initialize();
+
+    return compositeScatterer;
+}
+
+/// Creates and empty CompositeBraggScatterer and adds all scatterers contained in the supplied vector.
+CompositeBraggScatterer_sptr CompositeBraggScatterer::create(const std::vector<BraggScatterer_sptr> &scatterers)
+{
+    CompositeBraggScatterer_sptr collection = CompositeBraggScatterer::create();
+
+    for(auto it = scatterers.begin(); it != scatterers.end(); ++it) {
+        collection->addScatterer(*it);
+    }
+
+    return collection;
+}
+
+/// Recursively clones all contained scatterers and returns the resulting composite.
+BraggScatterer_sptr CompositeBraggScatterer::clone() const
+{
+    CompositeBraggScatterer_sptr clone = boost::make_shared<CompositeBraggScatterer>();
+    clone->initialize();    
+
+    for(auto it = m_scatterers.begin(); it != m_scatterers.end(); ++it) {
+        clone->addScatterer(*it);
+    }
+
+    clone->setProperties(this->asString(false, ';'));
+
+    return clone;
+}
+
+/// Clones the supplied scatterer, assigns the internal space group and unit cell to the clone and adds it to the composite.
+void CompositeBraggScatterer::addScatterer(const BraggScatterer_sptr &scatterer)
+{
+    if(!scatterer) {
+        throw std::invalid_argument("Cannot process null-scatterer.");
+    }
+
+    BraggScatterer_sptr localScatterer = scatterer->clone();
+
+    m_scatterers.push_back(localScatterer);
+
+    redeclareProperties();
+}
+
+/// Returns the number of scatterers contained in the composite.
+size_t CompositeBraggScatterer::nScatterers() const
+{
+    return m_scatterers.size();
+}
+
+/// Returns the i-th scatterer or throws an std::out_of_range exception.
+BraggScatterer_sptr CompositeBraggScatterer::getScatterer(size_t i) const
+{
+    if(i >= nScatterers()) {
+        throw std::out_of_range("Index is out of range.");
+    }
+
+    return m_scatterers[i];
+}
+
+/// Removes the i-th scatterer from the composite or throws an std::out_of_range exception.
+void CompositeBraggScatterer::removeScatterer(size_t i)
+{
+    if(i >= nScatterers()) {
+        throw std::out_of_range("Index is out of range.");
+    }
+
+    m_scatterers.erase(m_scatterers.begin() + i);
+
+    redeclareProperties();
+}
+
+/// Calculates the structure factor for the given HKL by summing all contributions from contained scatterers.
+StructureFactor CompositeBraggScatterer::calculateStructureFactor(const Kernel::V3D &hkl) const
+{
+    StructureFactor sum(0.0, 0.0);
+
+    for(auto it = m_scatterers.begin(); it != m_scatterers.end(); ++it) {
+        sum += (*it)->calculateStructureFactor(hkl);
+    }
+
+    return sum;
+}
+
+/// Makes sure that space group and unit cell are propagated to all stored scatterers.
+void CompositeBraggScatterer::afterPropertySet(const std::string &propertyName)
+{
+    propagateProperty(propertyName);
+}
+
+/// Propagates the given property to all contained scatterers that have this property.
+void CompositeBraggScatterer::propagateProperty(const std::string &propertyName)
+{
+    std::string propertyValue = getPropertyValue(propertyName);
+
+    for(auto it = m_scatterers.begin(); it != m_scatterers.end(); ++it) {
+        propagatePropertyToScatterer(*it, propertyName, propertyValue);
+    }
+}
+
+void CompositeBraggScatterer::propagatePropertyToScatterer(BraggScatterer_sptr &scatterer, const std::string &propertyName, const std::string &propertyValue)
+{
+    try {
+        scatterer->setPropertyValue(propertyName, propertyValue);
+    } catch(Kernel::Exception::NotFoundError) {
+        // do nothing.
+    }
+}
+
+/**
+ * Synchronize properties with scatterer members
+ *
+ * This method synchronizes the properties of CompositeBraggScatterer with the properties
+ * of the contained BraggScatterer instances. It adds new properties if required
+ * and removed properties that are no longer used (for example because the member that
+ * introduced the property has been removed).
+ */
+void CompositeBraggScatterer::redeclareProperties()
+{
+    std::map<std::string, size_t> propertyUseCount = getPropertyCountMap();
+
+    for(auto it = m_scatterers.begin(); it != m_scatterers.end(); ++it) {
+        // Check if any of the declared properties is in this scatterer (and set value if that's the case)
+        for(auto prop = propertyUseCount.begin(); prop != propertyUseCount.end(); ++prop) {
+            if((*it)->existsProperty(prop->first)) {
+                prop->second += 1;
+
+                propagatePropertyToScatterer(*it, prop->first, getPropertyValue(prop->first));
+            }
+        }
+
+        // Use the properties of this scatterer which have been marked as exposed to composite
+        std::vector<Property *> properties = (*it)->getPropertiesInGroup(getPropagatingGroupName());
+        for(auto prop = properties.begin(); prop != properties.end(); ++prop) {
+            std::string propertyName = (*prop)->name();
+            if(!existsProperty(propertyName)) {
+                declareProperty((*prop)->clone());
+            }
+        }
+    }
+
+    // Remove unused properties
+    for(auto it = propertyUseCount.begin(); it != propertyUseCount.end(); ++it) {
+        if(it->second == 0) {
+            removeProperty(it->first);
+        }
+    }
+}
+
+/// Returns a map with all declared property names and 0.
+std::map<std::string, size_t> CompositeBraggScatterer::getPropertyCountMap() const
+{
+    std::map<std::string, size_t> propertyUseCount;
+
+    std::vector<Property *> compositeProperties = getProperties();
+    for(auto it = compositeProperties.begin(); it != compositeProperties.end(); ++it) {
+        propertyUseCount.insert(std::make_pair((*it)->name(), 0));
+    }
+
+    return propertyUseCount;
+}
+
+DECLARE_BRAGGSCATTERER(CompositeBraggScatterer)
+
+} // namespace Geometry
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/Geometry/src/Crystal/CyclicGroup.cpp b/Code/Mantid/Framework/Geometry/src/Crystal/CyclicGroup.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b65c308663c289fba30f13c4562c968206bca82e
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/src/Crystal/CyclicGroup.cpp
@@ -0,0 +1,38 @@
+#include "MantidGeometry/Crystal/CyclicGroup.h"
+#include "MantidGeometry/Crystal/SymmetryOperationFactory.h"
+#include <boost/make_shared.hpp>
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/// Construct cyclic group from one symmetry operation by applying it to itself until identity is obtained.
+CyclicGroup::CyclicGroup(const std::string &symmetryOperationString) :
+    Group(generateAllOperations(SymmetryOperationFactory::Instance().createSymOp(symmetryOperationString)))
+{
+
+}
+
+/// Construct CyclicGroup from a SymmetryOperation object.
+CyclicGroup::CyclicGroup(const SymmetryOperation &symmetryOperation) :
+    Group(generateAllOperations(symmetryOperation))
+{
+}
+
+/// Returns a vector with all symmetry operations that are part of the cyclic group defined by the generating operation.
+std::vector<SymmetryOperation> CyclicGroup::generateAllOperations(const SymmetryOperation &operation) const
+{
+    std::vector<SymmetryOperation> symOps(1, operation);
+
+    for(size_t i = 1; i < operation.order(); ++i) {
+        symOps.push_back(operation * symOps.back());
+    }
+
+    return symOps;
+}
+
+
+
+} // namespace Geometry
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/Geometry/src/Crystal/Group.cpp b/Code/Mantid/Framework/Geometry/src/Crystal/Group.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..411b3428553e5141196c07a27e48f02f81ebfda3
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/src/Crystal/Group.cpp
@@ -0,0 +1,160 @@
+#include "MantidGeometry/Crystal/Group.h"
+#include "MantidGeometry/Crystal/SymmetryOperationFactory.h"
+#include <boost/make_shared.hpp>
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/// Default constructor. Creates a group with one symmetry operation (identity).
+Group::Group() :
+    m_allOperations(),
+    m_operationSet()
+{
+    std::vector<SymmetryOperation> operation(1);
+    setSymmetryOperations(operation);
+}
+
+/// Uses SymmetryOperationFactory to create a vector of symmetry operations from the string.
+Group::Group(const std::string &symmetryOperationString) :
+    m_allOperations(),
+    m_operationSet()
+{
+    setSymmetryOperations(SymmetryOperationFactory::Instance().createSymOps(symmetryOperationString));
+}
+
+/// Constructs a group from the symmetry operations in the vector, duplicates are removed.
+Group::Group(const std::vector<SymmetryOperation> &symmetryOperations) :
+    m_allOperations(),
+    m_operationSet()
+{
+    setSymmetryOperations(symmetryOperations);
+}
+
+/// Copy constructor.
+Group::Group(const Group &other) :
+    m_allOperations(other.m_allOperations),
+    m_operationSet(other.m_operationSet)
+{
+
+}
+
+/// Assignment operator.
+Group &Group::operator =(const Group &other)
+{
+    m_allOperations = other.m_allOperations;
+    m_operationSet = other.m_operationSet;
+
+    return *this;
+}
+
+/// Returns the order of the group, which is the number of symmetry operations.
+size_t Group::order() const
+{
+    return m_allOperations.size();
+}
+
+/// Returns a vector with all symmetry operations.
+std::vector<SymmetryOperation> Group::getSymmetryOperations() const
+{
+    return m_allOperations;
+}
+
+/**
+ * Multiplication operator of two groups.
+ *
+ * Multiplies each element of this group with each element of the other
+ * group, as described in the class documentation.
+ *
+ * @param other :: A group.
+ * @return The product resulting from the group multiplication.
+ */
+Group Group::operator *(const Group &other) const
+{
+    std::vector<SymmetryOperation> result;
+    result.reserve(order() * other.order());
+
+    for(auto selfOp = m_allOperations.begin(); selfOp != m_allOperations.end(); ++selfOp) {
+        for(auto otherOp = other.m_allOperations.begin(); otherOp != other.m_allOperations.end(); ++otherOp) {
+            result.push_back((*selfOp) * (*otherOp));
+        }
+    }
+
+    return Group(result);
+}
+
+/// Returns a unique set of Kernel::V3D resulting from applying all symmetry operations, vectors are wrapped to [0, 1).
+std::vector<Kernel::V3D> Group::operator *(const Kernel::V3D &vector) const
+{
+    std::set<Kernel::V3D> result;
+
+    for(auto op = m_allOperations.begin(); op != m_allOperations.end(); ++op) {
+        result.insert(Geometry::getWrappedVector((*op) * vector));
+    }
+
+    return std::vector<Kernel::V3D>(result.begin(), result.end());
+}
+
+/// Returns true if both groups contain the same set of symmetry operations.
+bool Group::operator ==(const Group &other) const
+{
+    return m_operationSet == other.m_operationSet;
+}
+
+/// Returns true if groups are different from eachother.
+bool Group::operator !=(const Group &other) const
+{
+    return !(this->operator ==(other));
+}
+
+/// Assigns symmetry operations, throws std::invalid_argument if vector is empty.
+void Group::setSymmetryOperations(const std::vector<SymmetryOperation> &symmetryOperations)
+{
+    if(symmetryOperations.size() < 1) {
+        throw std::invalid_argument("Group needs at least one element.");
+    }
+
+    m_operationSet = std::set<SymmetryOperation>(symmetryOperations.begin(), symmetryOperations.end());
+    m_allOperations = std::vector<SymmetryOperation>(m_operationSet.begin(), m_operationSet.end());
+}
+
+/// Convenience operator* for directly multiplying groups using shared pointers.
+Group_const_sptr operator *(const Group_const_sptr &lhs, const Group_const_sptr &rhs)
+{
+    if(!lhs || !rhs) {
+        throw std::invalid_argument("One of the operands is null. Aborting.");
+    }
+
+    return boost::make_shared<const Group>((*lhs) * (*rhs));
+}
+
+/// Convenience operator* for getting a vector of V3D using shared pointers.
+std::vector<Kernel::V3D> operator *(const Group_const_sptr &lhs, const Kernel::V3D &rhs)
+{
+    if(!lhs) {
+        throw std::invalid_argument("Cannot use null pointer for multiplication.");
+    }
+
+    return (*lhs) * rhs;
+}
+
+/// Equality operator for shared pointers.
+bool operator ==(const Group_const_sptr &lhs, const Group_const_sptr &rhs)
+{
+    if(!lhs || !rhs) {
+        throw std::invalid_argument("One of the operands is null. Aborting.");
+    }
+
+    return (*lhs) == (*rhs);
+}
+
+/// Inequality operator for shared pointers.
+bool operator !=(const Group_const_sptr &lhs, const Group_const_sptr &rhs)
+{
+    return !(operator ==(lhs, rhs));
+}
+
+
+} // namespace Geometry
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/Geometry/src/Crystal/IsotropicAtomBraggScatterer.cpp b/Code/Mantid/Framework/Geometry/src/Crystal/IsotropicAtomBraggScatterer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1dd91a09625cffc0e2296eb57d46fa740cb3b9f9
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/src/Crystal/IsotropicAtomBraggScatterer.cpp
@@ -0,0 +1,144 @@
+#include "MantidGeometry/Crystal/IsotropicAtomBraggScatterer.h"
+#include "MantidKernel/Atom.h"
+#include <stdexcept>
+
+#include "MantidKernel/BoundedValidator.h"
+#include "MantidKernel/MandatoryValidator.h"
+
+#include "MantidGeometry/Crystal/BraggScattererFactory.h"
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+using namespace Kernel;
+
+/// Constructor which takes an element symbol, fractional coordinates, isotropic atomic displacement parameter and occupancy.
+IsotropicAtomBraggScatterer::IsotropicAtomBraggScatterer() :
+    BraggScattererInCrystalStructure(),
+    m_atom(),
+    m_label()
+{
+}
+
+/// Clones the instance.
+BraggScatterer_sptr IsotropicAtomBraggScatterer::clone() const
+{
+    IsotropicAtomBraggScatterer_sptr clone = boost::make_shared<IsotropicAtomBraggScatterer>();
+    clone->initialize();
+    clone->setProperties(this->asString(false, ';'));
+
+    return clone;
+}
+
+/// Tries to obtain element specific data for the given symbol using PhysicalConstants::getAtom.
+void IsotropicAtomBraggScatterer::setElement(const std::string &element)
+{
+    PhysicalConstants::Atom atom = PhysicalConstants::getAtom(element);
+
+    m_atom = atom.neutron;
+    m_label = atom.symbol;
+}
+
+/// Returns the string representation of the contained element.
+std::string IsotropicAtomBraggScatterer::getElement() const
+{
+    return m_label;
+}
+
+/// Returns the internally stored NeutronAtom that holds element specific data.
+PhysicalConstants::NeutronAtom IsotropicAtomBraggScatterer::getNeutronAtom() const
+{
+    return m_atom;
+}
+
+/// Returns the occupancy.
+double IsotropicAtomBraggScatterer::getOccupancy() const
+{
+    return getProperty("Occupancy");
+}
+
+/// Returns the isotropic atomic displacement parameter.
+double IsotropicAtomBraggScatterer::getU() const
+{
+    return getProperty("U");
+}
+
+/**
+ * Calculates the structure factor
+ *
+ * This method calculates the structure factor, taking into account contributions from all
+ * atoms on the stored position _and all symmetrically equivalent_.
+ * For details, please refer to the class documentation in the header file.
+ *
+ * @param hkl :: HKL for which the structure factor should be calculated
+ * @return Structure factor (complex).
+ */
+StructureFactor IsotropicAtomBraggScatterer::calculateStructureFactor(const V3D &hkl) const
+{
+    double amplitude = getOccupancy() * getDebyeWallerFactor(hkl) * getScatteringLength();
+
+    StructureFactor sum(0.0, 0.0);
+
+    std::vector<V3D> equivalentPositions = getEquivalentPositions();
+    for(auto pos = equivalentPositions.begin(); pos != equivalentPositions.end(); ++pos) {
+        double phase = 2.0 * M_PI * (*pos).scalar_prod(hkl);
+        sum += amplitude * StructureFactor(cos(phase), sin(phase));
+    }
+
+    return sum;
+}
+
+/**
+ * Declares properties of this scatterer model
+ *
+ * In addition to the properties of BraggScatterer, this class implements three more properties,
+ * as described in the general class documentation, with some restrictions on allowed
+ * values:
+ *  - U must be 0 or greater
+ *  - Occupancy must be on the interval [0,1]
+ *  - Element must be present.
+ */
+void IsotropicAtomBraggScatterer::declareScattererProperties()
+{
+    // Default behavior requires this.
+    setElement("H");
+
+    boost::shared_ptr<BoundedValidator<double> > uValidator = boost::make_shared<BoundedValidator<double> >();
+    uValidator->setLower(0.0);
+
+    declareProperty(new PropertyWithValue<double>("U", 0.0, uValidator), "Isotropic atomic displacement in Angstrom^2");
+
+    IValidator_sptr occValidator = boost::make_shared<BoundedValidator<double> >(0.0, 1.0);
+    declareProperty(new PropertyWithValue<double>("Occupancy", 1.0, occValidator), "Site occupancy, values on interval [0,1].");
+
+    declareProperty(new PropertyWithValue<std::string>("Element", "H", boost::make_shared<MandatoryValidator<std::string> >()));
+}
+
+/// After setting the element as a string, the corresponding
+void IsotropicAtomBraggScatterer::afterScattererPropertySet(const std::string &propertyName)
+{
+    if(propertyName == "Element") {
+        setElement(getPropertyValue(propertyName));
+    }
+}
+
+/// Returns the Debye-Waller factor, using an isotropic atomic displacement and the stored unit cell.
+double IsotropicAtomBraggScatterer::getDebyeWallerFactor(const V3D &hkl) const
+{
+    V3D dstar = getCell().getB() * hkl;
+
+    return exp(-2.0 * M_PI * M_PI * getU() * dstar.norm2());
+}
+
+/// Returns the scattering length of the stored element.
+double IsotropicAtomBraggScatterer::getScatteringLength() const
+{
+    return m_atom.coh_scatt_length_real;
+}
+
+DECLARE_BRAGGSCATTERER(IsotropicAtomBraggScatterer)
+
+} // namespace Geometry
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/Geometry/src/Crystal/ProductOfCyclicGroups.cpp b/Code/Mantid/Framework/Geometry/src/Crystal/ProductOfCyclicGroups.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0cafb2407b358856fcc6cff22dc0c747b890faa6
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/src/Crystal/ProductOfCyclicGroups.cpp
@@ -0,0 +1,58 @@
+#include "MantidGeometry/Crystal/ProductOfCyclicGroups.h"
+
+#include "MantidGeometry/Crystal/SymmetryOperationFactory.h"
+#include "MantidGeometry/Crystal/CyclicGroup.h"
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/// String constructor with semicolon-separated symmetry operations
+ProductOfCyclicGroups::ProductOfCyclicGroups(const std::string &generators) :
+    Group(*(getGeneratedGroup(generators)))
+{
+}
+
+/// Constructor which directly takes a list of factor groups to form the product
+ProductOfCyclicGroups::ProductOfCyclicGroups(const std::vector<Group_const_sptr> &factorGroups) :
+    Group(*(getProductOfCyclicGroups(factorGroups)))
+{
+}
+
+/// Generates symmetry operations from the string, creates a CyclicGroup from each operation and multiplies them to form a factor group.
+Group_const_sptr ProductOfCyclicGroups::getGeneratedGroup(const std::string &generators) const
+{
+    std::vector<SymmetryOperation> operations = SymmetryOperationFactory::Instance().createSymOps(generators);
+    std::vector<Group_const_sptr> factorGroups = getFactorGroups(operations);
+
+    return getProductOfCyclicGroups(factorGroups);
+}
+
+/// Returns a vector of cyclic groups for the given vector of symmetry operations
+std::vector<Group_const_sptr> ProductOfCyclicGroups::getFactorGroups(const std::vector<SymmetryOperation> &symmetryOperations) const
+{
+    std::vector<Group_const_sptr> groups;
+
+    for(auto it = symmetryOperations.begin(); it != symmetryOperations.end(); ++it) {
+        groups.push_back(GroupFactory::create<CyclicGroup>((*it).identifier()));
+    }
+
+    return groups;
+}
+
+/// Multiplies all supplied groups and returns the result
+Group_const_sptr ProductOfCyclicGroups::getProductOfCyclicGroups(const std::vector<Group_const_sptr> &factorGroups) const
+{
+    Group_const_sptr productGroup = boost::make_shared<const Group>(*(factorGroups.front()));
+
+    for(size_t i = 1; i < factorGroups.size(); ++i) {
+        productGroup = productGroup * factorGroups[i];
+    }
+
+    return productGroup;
+}
+
+
+} // namespace Geometry
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/Geometry/src/Crystal/SpaceGroup.cpp b/Code/Mantid/Framework/Geometry/src/Crystal/SpaceGroup.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..62ecbfd5564779b48bb659902c4ac1d90a83e459
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/src/Crystal/SpaceGroup.cpp
@@ -0,0 +1,58 @@
+#include "MantidGeometry/Crystal/SpaceGroup.h"
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/**
+ * Constructor
+ *
+ * This constructor creates a space group with the symmetry operations contained
+ * in the Group-parameter and assigns the given number and symbol.
+ *
+ * @param itNumber :: Space group number according to International Tables for Crystallography A
+ * @param hmSymbol :: Herman-Mauguin symbol for the space group
+ * @param group :: Group that contains all symmetry operations (including centering).
+ */
+SpaceGroup::SpaceGroup(size_t itNumber, const std::string &hmSymbol, const Group &group) :
+    Group(group),
+    m_number(itNumber),
+    m_hmSymbol(hmSymbol)
+{
+}
+
+/// Copy constructor
+SpaceGroup::SpaceGroup(const SpaceGroup &other) :
+    Group(other),
+    m_number(other.m_number),
+    m_hmSymbol(other.m_hmSymbol)
+{
+
+}
+
+/// Assignment operator, utilizes Group's assignment operator
+SpaceGroup &SpaceGroup::operator =(const SpaceGroup &other)
+{
+    Group::operator =(other);
+
+    m_number = other.m_number;
+    m_hmSymbol = other.m_hmSymbol;
+
+    return *this;
+}
+
+/// Returns the stored space group number
+size_t SpaceGroup::number() const
+{
+    return m_number;
+}
+
+/// Returns the stored Hermann-Mauguin symbol
+std::string SpaceGroup::hmSymbol() const
+{
+    return m_hmSymbol;
+}
+
+} // namespace Geometry
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/Geometry/src/Crystal/SpaceGroupFactory.cpp b/Code/Mantid/Framework/Geometry/src/Crystal/SpaceGroupFactory.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..96091872d9f619caba0ccdd4f3bbf268457cbf7a
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/src/Crystal/SpaceGroupFactory.cpp
@@ -0,0 +1,236 @@
+#include "MantidGeometry/Crystal/SpaceGroupFactory.h"
+#include "MantidGeometry/Crystal/SymmetryOperationFactory.h"
+
+#include "MantidGeometry/Crystal/ProductOfCyclicGroups.h"
+#include "MantidGeometry/Crystal/CenteringGroup.h"
+
+#include "MantidKernel/LibraryManager.h"
+
+#include <boost/make_shared.hpp>
+
+namespace Mantid
+{
+namespace Geometry
+{
+
+/// Creates a space group given the Hermann-Mauguin symbol, throws std::invalid_argument if symbol is not registered.
+SpaceGroup_const_sptr SpaceGroupFactoryImpl::createSpaceGroup(const std::string &hmSymbol) const
+{
+    if(!isSubscribed(hmSymbol)) {
+        throw std::invalid_argument("Space group with symbol '" + hmSymbol + "' is not registered.");
+    }
+
+    return constructFromPrototype(m_prototypes.find(hmSymbol)->second);
+}
+
+/// Returns true if space group with given symbol is subscribed.
+bool SpaceGroupFactoryImpl::isSubscribed(const std::string &hmSymbol) const
+{
+    return m_prototypes.find(hmSymbol) != m_prototypes.end();
+}
+
+/// Returns true if space group with given number is subscribed.
+bool SpaceGroupFactoryImpl::isSubscribed(size_t number) const
+{
+    return m_numberMap.find(number) != m_numberMap.end();
+}
+
+/// Returns a vector with all subscribed space group symbols.
+std::vector<std::string> SpaceGroupFactoryImpl::subscribedSpaceGroupSymbols() const
+{
+    std::vector<std::string> symbols;
+    symbols.reserve(m_prototypes.size());
+
+    for(auto it = m_prototypes.begin(); it != m_prototypes.end(); ++it) {
+        symbols.push_back(it->first);
+    }
+
+    return symbols;
+}
+
+/// Returns a vector with all symbols that correspond to a space group number
+std::vector<std::string> SpaceGroupFactoryImpl::subscribedSpaceGroupSymbols(size_t number) const
+{
+    std::vector<std::string> symbols;
+
+    auto keyPair = m_numberMap.equal_range(number);
+
+    for(auto it = keyPair.first; it != keyPair.second; ++it) {
+        symbols.push_back(it->second);
+    }
+
+    return symbols;
+}
+
+/// Returns a vector with all subscribed space group numbers.
+std::vector<size_t> SpaceGroupFactoryImpl::subscribedSpaceGroupNumbers() const
+{
+    std::vector<size_t> numbers;
+    numbers.reserve(m_numberMap.size());
+
+    for(auto it = m_numberMap.begin(); it != m_numberMap.end(); it = m_numberMap.upper_bound(it->first)) {
+        numbers.push_back(it->first);
+    }
+
+    return numbers;
+}
+
+/// Unsubscribes the space group with the given Hermann-Mauguin symbol, but throws std::invalid_argument if symbol is not registered.
+void SpaceGroupFactoryImpl::unsubscribeSpaceGroup(const std::string &hmSymbol)
+{
+    if(!isSubscribed(hmSymbol)) {
+        throw std::invalid_argument("Cannot unsubscribe space group that is not registered.");
+    }
+
+    auto eraseSymbol = m_prototypes.find(hmSymbol);
+    SpaceGroup_const_sptr spaceGroup = eraseSymbol->second;
+
+    auto eraseNumber = m_numberMap.find(spaceGroup->number());
+    m_numberMap.erase(eraseNumber);
+    m_prototypes.erase(eraseSymbol);
+}
+
+/**
+ * Subscribes a space group into the factory using generators
+ *
+ * With this method one can register a space group that is generated by an algorithm
+ * based on the instructions in [1]. Currently it's important that the Herrman-
+ * Mauguin symbol starts with an upper case letter, because that is used to generate
+ * centering translations (it should be upper case anyway).
+ *
+ * The method will throw an exception if the number or symbol is already registered.
+ *
+ * [1] Shmueli, U. Acta Crystallogr. A 40, 559–567 (1984).
+ *     http://dx.doi.org/10.1107/S0108767384001161
+ *
+ * @param number :: Space group number according to International Tables for Crystallography A
+ * @param hmSymbol :: Herrman-Mauguin symbol with upper case first letter (centering).
+ * @param generators ::
+ */
+void SpaceGroupFactoryImpl::subscribeGeneratedSpaceGroup(size_t number, const std::string &hmSymbol, const std::string &generators)
+{
+    throwIfSubscribed(hmSymbol);
+
+    // Generate factor group and centering group
+    std::string centeringSymbol = getCenteringString(hmSymbol);
+    Group_const_sptr generatingGroup = getGeneratedGroup(generators, centeringSymbol);
+
+    SpaceGroup_const_sptr prototype = getPrototype(generatingGroup, number, hmSymbol);
+    subscribe(prototype);
+}
+
+/// Subscribes a "tabulated space group" into the factory where all symmetry operations need to be supplied, including centering.
+void SpaceGroupFactoryImpl::subscribeTabulatedSpaceGroup(size_t number, const std::string &hmSymbol, const std::string &symmetryOperations)
+{
+    throwIfSubscribed(hmSymbol);
+
+    // Generate a group using the supplied symmetry operations
+    Group_const_sptr generatingGroup = getTabulatedGroup(symmetryOperations);
+
+    SpaceGroup_const_sptr prototype = getPrototype(generatingGroup, number, hmSymbol);
+    subscribe(prototype);
+}
+
+/// Creatings a prototype instance of SpaceGroup using the supplied parameters.
+SpaceGroup_const_sptr SpaceGroupFactoryImpl::getPrototype(Group_const_sptr generatingGroup, size_t number, const std::string &hmSymbol) const
+{
+    if(!generatingGroup) {
+        throw std::runtime_error("Could not create Group from supplied symmetry operations.");
+    }
+
+    return boost::make_shared<const SpaceGroup>(number, hmSymbol, *generatingGroup);
+}
+
+/// Returns a copy-constructed instance of the supplied space group prototype object.
+SpaceGroup_const_sptr SpaceGroupFactoryImpl::constructFromPrototype(const SpaceGroup_const_sptr prototype) const
+{
+    return boost::make_shared<const SpaceGroup>(*prototype);
+}
+
+/// Throws std::invalid_argument if a space group with the given Hermann-Mauguin symbol is already registered in the factory.
+void SpaceGroupFactoryImpl::throwIfSubscribed(const std::string &hmSymbol)
+{
+    if(isSubscribed(hmSymbol)) {
+        throw std::invalid_argument("Space group with this symbol is already registered.");
+    }
+}
+
+/// Stores the given prototype in the space group factory.
+void SpaceGroupFactoryImpl::subscribe(const SpaceGroup_const_sptr &prototype)
+{
+    m_numberMap.insert(std::make_pair(prototype->number(), prototype->hmSymbol()));
+    m_prototypes.insert(std::make_pair(prototype->hmSymbol(), prototype));
+}
+
+/// Returns a group with the given symmetry operations.
+Group_const_sptr SpaceGroupFactoryImpl::getTabulatedGroup(const std::string &symmetryOperations) const
+{
+    return GroupFactory::create<Group>(symmetryOperations);
+}
+
+std::string SpaceGroupFactoryImpl::getCenteringString(const std::string &hmSymbol) const
+{
+    return hmSymbol.substr(0, 1);
+}
+
+/**
+ * Returns a group constructed from a generator string and a centering symbol
+ *
+ * Generators have to be provided as a semicolon separated list of symmetry operations
+ * in x,y,z format, for example "-x,-y,-z; -x,y,z; -y,x,z". A ProductOfCyclicGroups using this
+ * string is constructed. Centering symbol has to be supported by CenteringGroup. The
+ * group is then calculated as the product of these two groups.
+ *
+ * @param generators :: Semicolon separated list of symmetry operations.
+ * @param centeringSymbol :: Symbol for the lattice centering (see CenteringGroup).
+ * @return Resulting group.
+ */
+Group_const_sptr SpaceGroupFactoryImpl::getGeneratedGroup(const std::string &generators, const std::string &centeringSymbol) const
+{
+    Group_const_sptr baseGroup = GroupFactory::create<ProductOfCyclicGroups>(generators);
+    Group_const_sptr centeringGroup = GroupFactory::create<CenteringGroup>(centeringSymbol);
+
+    return baseGroup * centeringGroup;
+}
+
+/// Constructor cannot be called, since SingletonHolder is used.
+SpaceGroupFactoryImpl::SpaceGroupFactoryImpl() :
+    m_numberMap(),
+    m_prototypes()
+{
+    Kernel::LibraryManager::Instance();
+}
+
+/* Space groups according to International Tables for Crystallography,
+ * using the generators specified there.
+ *
+ * When two origin choices are possible, only the first is given.
+ */
+// Triclinic
+DECLARE_TABULATED_SPACE_GROUP(1, "P 1", "x,y,z")
+DECLARE_GENERATED_SPACE_GROUP(2, "P -1", "-x,-y,-z")
+
+// Monoclinic
+DECLARE_GENERATED_SPACE_GROUP(3, "P 1 2 1", "-x,y,-z")
+DECLARE_GENERATED_SPACE_GROUP(4, "P 1 21 1", "-x,y+1/2,-z")
+DECLARE_GENERATED_SPACE_GROUP(5, "C 1 2 1", "-x,y,-z")
+DECLARE_GENERATED_SPACE_GROUP(6, "P 1 m 1", "x,-y,z")
+DECLARE_GENERATED_SPACE_GROUP(7, "P 1 c 1", "x,-y,z+1/2")
+DECLARE_GENERATED_SPACE_GROUP(8, "C 1 m 1", "x,-y,z")
+DECLARE_GENERATED_SPACE_GROUP(9, "C 1 c 1", "x,-y,z+1/2")
+DECLARE_GENERATED_SPACE_GROUP(10, "P 1 2/m 1", "-x,y,-z; -x,-y,-z")
+DECLARE_GENERATED_SPACE_GROUP(11, "P 1 21/m 1", "-x,y+1/2,-z; -x,-y,-z")
+DECLARE_GENERATED_SPACE_GROUP(12, "C 1 2/m 1", "-x,y,-z; -x,-y,-z")
+DECLARE_GENERATED_SPACE_GROUP(13, "P 1 2/c 1", "-x,y,-z+1/2; -x,-y,-z")
+DECLARE_GENERATED_SPACE_GROUP(14, "P 1 21/c 1", "-x,y+1/2,-z+1/2; -x,-y,-z")
+DECLARE_GENERATED_SPACE_GROUP(15, "C 1 2/c 1", "-x,y,-z+1/2; -x,-y,-z")
+
+DECLARE_GENERATED_SPACE_GROUP(194, "P 63/m m c", "-y,x-y,z; -x,-y,z+1/2; y,x,-z; -x,-y,-z")
+
+DECLARE_GENERATED_SPACE_GROUP(221, "P m -3 m", "-x,-y,z; -x,y,-z; z,x,y; y,x,-z; -x,-y,-z")
+DECLARE_GENERATED_SPACE_GROUP(225, "F m -3 m", "-x,-y,z; -x,y,-z; z,x,y; y,x,-z; -x,-y,-z")
+DECLARE_GENERATED_SPACE_GROUP(227, "F d -3 m", "-x,-y+1/2,z+1/2; -x+1/2,y+1/2,-z; z,x,y; y+3/4,x+1/4,-z+3/4; -x+1/4,-y+1/4,-z+1/4")
+DECLARE_GENERATED_SPACE_GROUP(229, "I m -3 m", "-x,-y,z; -x,y,-z; z,x,y; y,x,-z; -x,-y,-z")
+
+} // namespace Geometry
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/Geometry/src/Crystal/SymmetryOperationFactory.cpp b/Code/Mantid/Framework/Geometry/src/Crystal/SymmetryOperationFactory.cpp
index 688919bb73d8a70d08ea4831b318121c59c92ac0..f8a911561d77e7e0c8ad684aa645bd169b2ad6d7 100644
--- a/Code/Mantid/Framework/Geometry/src/Crystal/SymmetryOperationFactory.cpp
+++ b/Code/Mantid/Framework/Geometry/src/Crystal/SymmetryOperationFactory.cpp
@@ -3,6 +3,7 @@
 #include "MantidKernel/Exception.h"
 
 #include <boost/make_shared.hpp>
+#include <boost/algorithm/string.hpp>
 
 namespace Mantid
 {
@@ -19,6 +20,26 @@ SymmetryOperation SymmetryOperationFactoryImpl::createSymOp(const std::string &i
     return SymmetryOperation(m_prototypes[identifier]);
 }
 
+/// Creates all symmetry operations in string (separated by semicolon).
+std::vector<SymmetryOperation> SymmetryOperationFactoryImpl::createSymOps(const std::string &identifiers)
+{
+    std::vector<std::string> symOpStrings;
+    boost::split(symOpStrings, identifiers, boost::is_any_of(";"));
+
+    return createSymOps(symOpStrings);
+}
+
+/// Creates all symmetry operations with the given strings (whitespaces at beginning and end are removed).
+std::vector<SymmetryOperation> SymmetryOperationFactoryImpl::createSymOps(const std::vector<std::string> &identifiers)
+{
+    std::vector<SymmetryOperation> symOps;
+    for(auto it = identifiers.begin(); it != identifiers.end(); ++it) {
+        symOps.push_back(createSymOp(boost::trim_copy(*it)));
+    }
+
+    return symOps;
+}
+
 /// Subscribes a symmetry operation into the factory
 void SymmetryOperationFactoryImpl::subscribeSymOp(const std::string &identifier)
 {
diff --git a/Code/Mantid/Framework/Geometry/src/Crystal/SymmetryOperationSymbolParser.cpp b/Code/Mantid/Framework/Geometry/src/Crystal/SymmetryOperationSymbolParser.cpp
index cf9df83eaf4d3af9431a1fa10c4d0f7903fbe9fa..783a117bb8f4d60ccbd6ca76b234bd15c6f63dd8 100644
--- a/Code/Mantid/Framework/Geometry/src/Crystal/SymmetryOperationSymbolParser.cpp
+++ b/Code/Mantid/Framework/Geometry/src/Crystal/SymmetryOperationSymbolParser.cpp
@@ -9,10 +9,6 @@ namespace Mantid
 namespace Geometry
 {
 
-boost::regex SymmetryOperationSymbolParser::m_tokenRegex = boost::regex("[+\\-]?((x|y|z)|(\\d/\\d))", boost::regex::icase);
-boost::regex SymmetryOperationSymbolParser::m_matrixRowRegex = boost::regex("^[+\\-]?(x|y|z)", boost::regex::icase);
-boost::regex SymmetryOperationSymbolParser::m_vectorComponentRegex = boost::regex("^[+\\-]?(\\d/\\d)", boost::regex::icase);
-
 /// Default constructor
 SymmetryOperationSymbolParser::SymmetryOperationSymbolParser()
 {
@@ -157,17 +153,23 @@ std::pair<std::vector<int>, RationalNumber> SymmetryOperationSymbolParser::parse
 
     size_t totalMatchedLength = 0;
 
+    // Regular expressions for different token types
+    boost::regex tokenRegex("[+\\-]?((x|y|z)|(\\d/\\d))", boost::regex::icase);
+    boost::regex matrixRowRegex("^[+\\-]?(x|y|z)", boost::regex::icase);
+    boost::regex vectorComponentRegex("^[+\\-]?(\\d/\\d)", boost::regex::icase);
+
+
     // Check how many tokens this string is composed of and iterate through them
-    boost::sregex_iterator iter(component.begin(), component.end(), m_tokenRegex);
+    boost::sregex_iterator iter(component.begin(), component.end(), tokenRegex);
     boost::sregex_iterator end;
     for(; iter != end; ++iter) {
         std::string currentString = iter->str();
         totalMatchedLength += currentString.size();
 
         // Try to handle the current token as either a matrix row (x, y, z) or a vector component (a/b)
-        if(boost::regex_match(currentString, m_matrixRowRegex)) {
+        if(boost::regex_match(currentString, matrixRowRegex)) {
             processMatrixRowToken(currentString, matrixRow);
-        } else if(boost::regex_match(currentString, m_vectorComponentRegex)) {
+        } else if(boost::regex_match(currentString, vectorComponentRegex)) {
             processVectorComponentToken(currentString, vectorComponent);
         } else {
             throw std::runtime_error("Failed to parse input: " + component);
diff --git a/Code/Mantid/Framework/Geometry/src/Crystal/UnitCell.cpp b/Code/Mantid/Framework/Geometry/src/Crystal/UnitCell.cpp
index a85f910dd106b0d4662ee9f08f072a2ebfef5f9f..313e47f991f1536a2459344ff7d44ec9fb1fa9f9 100644
--- a/Code/Mantid/Framework/Geometry/src/Crystal/UnitCell.cpp
+++ b/Code/Mantid/Framework/Geometry/src/Crystal/UnitCell.cpp
@@ -7,6 +7,9 @@
 #include <iostream>
 #include <cfloat>
 
+#include <boost/tokenizer.hpp>
+#include <boost/lexical_cast.hpp>
+
 namespace Mantid
 {
 namespace Geometry
@@ -733,6 +736,37 @@ namespace Geometry
     return out;
   }
 
+  std::string unitCellToStr(const UnitCell &unitCell)
+  {
+      std::ostringstream stream;
+      stream << std::setprecision(9);
+
+      stream << unitCell.a() << " " << unitCell.b() << " " << unitCell.c() << " " << unitCell.alpha() << " " << unitCell.beta() << " " << unitCell.gamma();
+
+      return stream.str();
+  }
+
+  UnitCell strToUnitCell(const std::string &unitCellString)
+  {
+      boost::char_separator<char> separator(" ");
+      boost::tokenizer<boost::char_separator<char> > cellTokens(unitCellString, separator);
+
+      std::vector<double> components;
+
+      for(boost::tokenizer<boost::char_separator<char>>::iterator token = cellTokens.begin(); token != cellTokens.end(); ++token) {
+          components.push_back(boost::lexical_cast<double>(*token));
+      }
+
+      switch(components.size()) {
+      case 3:
+          return UnitCell(components[0], components[1], components[2]);
+      case 6:
+          return UnitCell(components[0], components[1], components[2], components[3], components[4], components[5]);
+      default:
+          throw std::runtime_error("Failed to parse unit cell input string: " + unitCellString);
+      }
+  }
+
 
 } // namespace Mantid
 } // namespace Geometry
diff --git a/Code/Mantid/Framework/Geometry/src/Instrument/ObjComponent.cpp b/Code/Mantid/Framework/Geometry/src/Instrument/ObjComponent.cpp
index 45e17b2cb93f7bcde27e6259553d972d2efe94da..6eb8f985a0a845307f6f10bb0ba5a359abe25557 100644
--- a/Code/Mantid/Framework/Geometry/src/Instrument/ObjComponent.cpp
+++ b/Code/Mantid/Framework/Geometry/src/Instrument/ObjComponent.cpp
@@ -72,8 +72,8 @@ namespace Mantid
         m_shape = newShape;
     }
 
-    /** 
-     * Return the material of the component. Currently 
+    /**
+     * Return the material of the component. Currently
      * unaffected by parametrization
      */
     const Kernel::Material_const_sptr ObjComponent::material() const
@@ -132,7 +132,7 @@ namespace Mantid
         //use the scale factor
         out *= getScaleFactor();
         out += this->getPos();
-        track.addLink(in,out,out.distance(track.startPoint()),this->getComponentID());
+        track.addLink(in,out,out.distance(track.startPoint()), *(this->shape()), this->getComponentID());
       }
 
       return intercepts;
@@ -160,18 +160,18 @@ namespace Mantid
       }
     }
 
-    
+
   /**
     * Given an input estimate of the axis aligned (AA) bounding box (BB), return an improved set of values.
     * The AA BB is determined in the frame of the object and the initial estimate will be transformed there.
     * The returned BB will be the frame of the ObjComponent and may not be optimal.
     * @param absoluteBB :: [InOut] The bounding box for this object component will be stored here.
-    * if BB alignment is different from axis alignment, the system of coordinates to alighn is taken fron  
+    * if BB alignment is different from axis alignment, the system of coordinates to alighn is taken fron
     * the absoluteBB
     */
   void ObjComponent::getBoundingBox(BoundingBox& absoluteBB) const
   {
- 
+
 // Start with the box in the shape's coordinates
       const Object_const_sptr s = shape();
       if ( ! s ){
@@ -200,22 +200,22 @@ namespace Mantid
       // Rotate
       (this->getRotation()).rotateBB(absoluteBB.xMin(),absoluteBB.yMin(),absoluteBB.zMin(),
         absoluteBB.xMax(),absoluteBB.yMax(),absoluteBB.zMax());
-    
-  
+
+
       // Shift
       const V3D localPos = this->getPos();
-      absoluteBB.xMin() += localPos.X(); 
+      absoluteBB.xMin() += localPos.X();
       absoluteBB.xMax() += localPos.X();
-      absoluteBB.yMin() += localPos.Y(); 
+      absoluteBB.yMin() += localPos.Y();
       absoluteBB.yMax() += localPos.Y();
-      absoluteBB.zMin() += localPos.Z(); 
+      absoluteBB.zMin() += localPos.Z();
       absoluteBB.zMax() += localPos.Z();
 
       if(!Coord_system.empty()){
         absoluteBB.realign(&Coord_system);
-      }  
+      }
   }
- 
+
     /**
     * Gets the Height of the object by querying the underlying BoundingBox.
     * @return height of object
@@ -235,7 +235,7 @@ namespace Mantid
       const BoundingBox & bbox = shape()->getBoundingBox();
       return ( bbox.xMax() - bbox.xMin() ) / getScaleFactor().X();
     }
-    
+
     /**
     * Gets the Depth of the object by querying the underlying BoundingBox.
     * @return depth of object
diff --git a/Code/Mantid/Framework/Geometry/src/Instrument/ParameterMap.cpp b/Code/Mantid/Framework/Geometry/src/Instrument/ParameterMap.cpp
index 284df56cbb9d5eaa78c63b422f8e197062247b94..9741362db10326b37d78a33b0092786b1479e9dd 100644
--- a/Code/Mantid/Framework/Geometry/src/Instrument/ParameterMap.cpp
+++ b/Code/Mantid/Framework/Geometry/src/Instrument/ParameterMap.cpp
@@ -131,10 +131,10 @@ namespace Mantid
      * @return true if the objects are considered not equal, false otherwise
      */
     bool ParameterMap::operator!=(const ParameterMap & rhs) const
-    { 
-      return !(this->operator==(rhs)); 
+    {
+      return !(this->operator==(rhs));
     }
-    
+
     /**
      * Compares the values in this object with that given for equality
      * The order of the values in the map is not important.
@@ -144,10 +144,10 @@ namespace Mantid
     bool ParameterMap::operator==(const ParameterMap & rhs) const
     {
       if(this == &rhs) return true; // True for the same object
-      
+
       // Quick size check
       if(this->size() != rhs.size()) return false;
-      
+
       // The map is unordered and the key is only valid at runtime. The
       // asString method turns the ComponentIDs to full-qualified name identifiers
       // so we will use the same approach to compare them
@@ -175,7 +175,7 @@ namespace Mantid
       return true;
     }
 
-     
+
     /**
      * Output information that helps understanding the mismatch between two parameter maps.
      * To loop through the difference between two very large parameter map can take time, in which
@@ -187,15 +187,15 @@ namespace Mantid
     const std::string ParameterMap::diff(const ParameterMap & rhs, const bool & firstDiffOnly) const
     {
       if(this == &rhs) return std::string(""); // True for the same object
-      
+
       // Quick size check
-      if(this->size() != rhs.size()) 
+      if(this->size() != rhs.size())
       {
-          return std::string("Number of parameters does not match: ") + 
+          return std::string("Number of parameters does not match: ") +
             boost::lexical_cast<std::string>(this->size()) + " not equal to " +
             boost::lexical_cast<std::string>(rhs.size());
       }
-      
+
       // Run this same loops as in operator==
       // The map is unordered and the key is only valid at runtime. The
       // asString method turns the ComponentIDs to full-qualified name identifiers
@@ -221,7 +221,7 @@ namespace Mantid
           }
         }
 
-        if(!match) 
+        if(!match)
         {
           // output some information that helps with understanding the mismatch
           strOutput << "Parameter mismatch LHS=RHS for LHS parameter in component with name: " << fullName
@@ -306,7 +306,7 @@ namespace Mantid
         if( name == pos() || name == rot() ) clearPositionSensitiveCaches();
       }
     }
-    
+
     /**
      * Add a value into the map
      * @param type :: A string denoting the type, e.g. double, string, fitting
@@ -314,7 +314,7 @@ namespace Mantid
      * @param name :: The name of the parameter
      * @param value :: The parameter's value
      */
-    void ParameterMap::add(const std::string& type,const IComponent* comp,const std::string& name, 
+    void ParameterMap::add(const std::string& type,const IComponent* comp,const std::string& name,
                            const std::string& value)
     {
       auto param = ParameterFactory::create(type,name);
@@ -331,7 +331,7 @@ namespace Mantid
       // can not add null pointer
       if(!par)return;
 
-      PARALLEL_CRITICAL(parameter_add)
+      PARALLEL_CRITICAL(m_mapAccess)
       {
         auto existing_par = positionOf(comp,par->name().c_str(),"");
         // As this is only an add method it should really throw if it already exists.
@@ -350,13 +350,13 @@ namespace Mantid
     }
 
     /** Create or adjust "pos" parameter for a component
-     * Assumed that name either equals "x", "y" or "z" otherwise this 
+     * Assumed that name either equals "x", "y" or "z" otherwise this
      * method will not add or modify "pos" parameter
      * @param comp :: Component
      * @param name :: name of the parameter
      * @param value :: value
      */
-    void ParameterMap::addPositionCoordinate(const IComponent* comp, const std::string& name, 
+    void ParameterMap::addPositionCoordinate(const IComponent* comp, const std::string& name,
                                              const double value)
     {
       Parameter_sptr param = get(comp,pos());
@@ -393,7 +393,7 @@ namespace Mantid
     }
 
     /** Create or adjust "rot" parameter for a component
-     * Assumed that name either equals "rotx", "roty" or "rotz" otherwise this 
+     * Assumed that name either equals "rotx", "roty" or "rotz" otherwise this
      * method will not add/modify "rot" parameter
      * @param comp :: Component
      * @param name :: Parameter name
@@ -420,7 +420,7 @@ namespace Mantid
         rotZ = paramRotZ->value<double>();
       else
         rotZ = 0.0;
-        
+
 
       // adjust rotation
       Quat quat;
@@ -452,7 +452,7 @@ namespace Mantid
       addQuat(comp, rot(), quat);
     }
 
-    /**  
+    /**
      * Adds a double value to the parameter map.
      * @param comp :: Component to which the new parameter is related
      * @param name :: Name for the new parameter
@@ -474,7 +474,7 @@ namespace Mantid
       add(pDouble(),comp,name,value);
     }
 
-    /**  
+    /**
      * Adds an int value to the parameter map.
      * @param comp :: Component to which the new parameter is related
      * @param name :: Name for the new parameter
@@ -496,7 +496,7 @@ namespace Mantid
       add(pInt(),comp,name,value);
     }
 
-    /**  
+    /**
      * Adds a bool value to the parameter map.
      * @param comp :: Component to which the new parameter is related
      * @param name :: Name for the new parameter
@@ -517,7 +517,7 @@ namespace Mantid
       add(pBool(),comp,name,value);
     }
 
-    /**  
+    /**
      * Adds a std::string value to the parameter map.
      * @param comp :: Component to which the new parameter is related
      * @param name :: Name for the new parameter
@@ -528,7 +528,7 @@ namespace Mantid
       add<std::string>(pString(),comp,name,value);
     }
 
-    /**  
+    /**
      * Adds a V3D value to the parameter map.
      * @param comp :: Component to which the new parameter is related
      * @param name :: Name for the new parameter
@@ -552,7 +552,7 @@ namespace Mantid
       clearPositionSensitiveCaches();
     }
 
-    /**  
+    /**
      * Adds a Quat value to the parameter map.
      * @param comp :: Component to which the new parameter is related
      * @param name :: Name for the new parameter
@@ -616,8 +616,8 @@ namespace Mantid
       pmap_cit it_found = m_map.find(id);
       if(it_found != m_map.end())
       {
-        pmap_cit itr, itr_end;
-        boost::tie(itr,itr_end) = m_map.equal_range(id);
+        pmap_cit itr = m_map.lower_bound(id);
+        pmap_cit itr_end = m_map.upper_bound(id);
         for(; itr != itr_end; ++itr)
         {
           const Parameter_sptr & param = itr->second;
@@ -625,7 +625,7 @@ namespace Mantid
         }
         return false;
       }
-      else 
+      else
         return false;
     }
 
@@ -654,7 +654,7 @@ namespace Mantid
       Parameter_sptr result;
       if(!comp) return result;
 
-      PARALLEL_CRITICAL(ParameterMap_get)
+      PARALLEL_CRITICAL(m_mapAccess)
       {
         auto itr = positionOf(comp,name, type);
         if (itr != m_map.end())
@@ -662,8 +662,8 @@ namespace Mantid
       }
       return result;
     }
-    
-    /**Return an iterator pointing to a named parameter of a given type. 
+
+    /**Return an iterator pointing to a named parameter of a given type.
      * @param comp :: Component to which parameter is related
      * @param name :: Parameter name
      * @param type :: An optional type string. If empty, any type is returned
@@ -680,8 +680,8 @@ namespace Mantid
           pmap_it it_found = m_map.find(id);
           if (it_found != m_map.end())
           {
-            pmap_it itr, itr_end;
-            boost::tie(itr,itr_end) = m_map.equal_range(id);
+            pmap_it itr = m_map.lower_bound(id);
+            pmap_it itr_end = m_map.upper_bound(id);
             for( ; itr != itr_end; ++itr )
             {
               Parameter_sptr param = itr->second;
@@ -692,11 +692,11 @@ namespace Mantid
               }
             }
           }
-      }     
+      }
       return result;
     }
 
-    /**Return a const iterator pointing to a named parameter of a given type. 
+    /**Return a const iterator pointing to a named parameter of a given type.
      * @param comp :: Component to which parameter is related
      * @param name :: Parameter name
      * @param type :: An optional type string. If empty, any type is returned
@@ -713,8 +713,8 @@ namespace Mantid
           pmap_cit it_found = m_map.find(id);
           if (it_found != m_map.end())
           {
-            pmap_cit itr, itr_end;
-            boost::tie(itr,itr_end) = m_map.equal_range(id);
+            pmap_cit itr = m_map.lower_bound(id);
+            pmap_cit itr_end = m_map.upper_bound(id);
             for( ; itr != itr_end; ++itr )
             {
               Parameter_sptr param = itr->second;
@@ -725,7 +725,7 @@ namespace Mantid
               }
             }
           }
-      }     
+      }
       return result;
     }
 
@@ -739,7 +739,7 @@ namespace Mantid
     Parameter_sptr ParameterMap::getByType(const IComponent* comp, const std::string& type) const
     {
       Parameter_sptr result = Parameter_sptr();
-      PARALLEL_CRITICAL(ParameterMap_get)
+      PARALLEL_CRITICAL(m_mapAccess)
       {
         if( !m_map.empty() )
         {
@@ -749,8 +749,8 @@ namespace Mantid
           {
              if (it_found->first)
              {
-                pmap_cit itr, itr_end;
-                boost::tie(itr,itr_end) = m_map.equal_range(id);
+                pmap_cit itr = m_map.lower_bound(id);
+                pmap_cit itr_end = m_map.upper_bound(id);
                 for( ; itr != itr_end; ++itr )
                 {
                     Parameter_sptr param = itr->second;
@@ -763,7 +763,7 @@ namespace Mantid
              } // found->firdst
           } // it_found != m_map.end()
         } //!m_map.empty()
-      } // PARALLEL_CRITICAL(ParameterMap_get)
+      } // PARALLEL_CRITICAL(m_map_access)
       return result;
     }
 
@@ -789,7 +789,7 @@ namespace Mantid
     }
 
 
-    /** 
+    /**
      * Find a parameter by name, recursively going up the component tree
      * to higher parents.
      * @param comp :: The component to start the search with
@@ -797,13 +797,13 @@ namespace Mantid
      * @param type :: An optional type string
      * @returns the first matching parameter.
      */
-    Parameter_sptr ParameterMap::getRecursive(const IComponent* comp,const std::string& name, 
+    Parameter_sptr ParameterMap::getRecursive(const IComponent* comp,const std::string& name,
                                               const std::string & type) const
     {
       return getRecursive(comp, name.c_str(), type.c_str());
     }
 
-    /** 
+    /**
      * Find a parameter by name, recursively going up the component tree
      * to higher parents.
      * @param comp :: The component to start the search with
@@ -811,7 +811,7 @@ namespace Mantid
      * @param type :: An optional type string
      * @returns the first matching parameter.
      */
-    Parameter_sptr ParameterMap::getRecursive(const IComponent* comp, const char* name, 
+    Parameter_sptr ParameterMap::getRecursive(const IComponent* comp, const char* name,
                                               const char * type) const
     {
       Parameter_sptr result = this->get(comp->getComponentID(), name, type);
@@ -827,7 +827,7 @@ namespace Mantid
       return result;
     }
 
-    /**  
+    /**
      * Return the value of a parameter as a string
      * @param comp :: Component to which parameter is related
      * @param name :: Parameter name
@@ -849,7 +849,7 @@ namespace Mantid
       return param->asString();
     }
 
-    /** 
+    /**
      * Returns a set with all the parameter names for the given component
      * @param comp :: A pointer to the component of interest
      * @returns A set of names of parameters for the given component
@@ -864,16 +864,16 @@ namespace Mantid
         return paramNames;
       }
 
-      pmap_cit itr, itr_end;
-      boost::tie(itr,itr_end) = m_map.equal_range(id);
+      pmap_cit itr = m_map.lower_bound(id);
+      pmap_cit itr_end = m_map.upper_bound(id);
       for(pmap_cit it = itr; it != itr_end; ++it)
       {
         paramNames.insert(it->second->name());
       }
 
       return paramNames;
-    } 
-    
+    }
+
     /**
      * Return a string representation of the parameter map. The format is either:
      * |detID:id-value;param-type;param-name;param-value| for a detector or
@@ -913,10 +913,10 @@ namespace Mantid
       m_cacheRotMap.clear();
       m_boundingBoxMap.clear();
     }
- 
+
     ///Sets a cached location on the location cache
     /// @param comp :: The Component to set the location of
-    /// @param location :: The location 
+    /// @param location :: The location
     void ParameterMap::setCachedLocation(const IComponent* comp, const V3D& location) const
     {
       // Call to setCachedLocation is a write so not thread-safe
@@ -942,7 +942,7 @@ namespace Mantid
 
     ///Sets a cached rotation on the rotation cache
     /// @param comp :: The Component to set the rotation of
-    /// @param rotation :: The rotation as a quaternion 
+    /// @param rotation :: The rotation as a quaternion
     void ParameterMap::setCachedRotation(const IComponent* comp, const Quat& rotation) const
     {
       // Call to setCachedRotation is a write so not thread-safe
@@ -995,7 +995,7 @@ namespace Mantid
      * @param oldPMap :: Old map corresponding to the Old component
      */
     void ParameterMap::copyFromParameterMap(const IComponent* oldComp,
-                                            const IComponent* newComp, const ParameterMap *oldPMap) 
+                                            const IComponent* newComp, const ParameterMap *oldPMap)
     {
 
       std::set<std::string> oldParameterNames = oldPMap->names(oldComp);
@@ -1007,7 +1007,7 @@ namespace Mantid
         m_map.insert(std::make_pair(newComp->getComponentID(),thisParameter));
       }
     }
-    
+
     //--------------------------------------------------------------------------------------------
     /** Save the object to an open NeXus file.
      * @param file :: open NeXus file
@@ -1028,4 +1028,3 @@ namespace Mantid
 
   } // Namespace Geometry
 } // Namespace Mantid
-
diff --git a/Code/Mantid/Framework/Geometry/src/Instrument/RectangularDetector.cpp b/Code/Mantid/Framework/Geometry/src/Instrument/RectangularDetector.cpp
index 8dfdbc9f571f427ae4551056fc9488b9b6b47ffe..f3239590c99489b5107d13350e7ccef78a6c6da8 100644
--- a/Code/Mantid/Framework/Geometry/src/Instrument/RectangularDetector.cpp
+++ b/Code/Mantid/Framework/Geometry/src/Instrument/RectangularDetector.cpp
@@ -8,7 +8,7 @@
 #include "MantidKernel/Exception.h"
 #include <algorithm>
 #include <ostream>
-#include <stdexcept> 
+#include <stdexcept>
 #include "MantidGeometry/Instrument/RectangularDetectorPixel.h"
 
 namespace Mantid
@@ -44,7 +44,7 @@ RectangularDetector::RectangularDetector(const RectangularDetector* base, const
 /** Valued constructor
  *  @param n :: name of the assembly
  *  @param reference :: the parent Component
- * 
+ *
  * 	If the reference is an object of class Component,
  *  normal parenting apply. If the reference object is
  *  an assembly itself, then in addition to parenting
@@ -63,7 +63,7 @@ RectangularDetector::RectangularDetector(const std::string& n, IComponent* refer
  */
 RectangularDetector::~RectangularDetector()
 {
-  
+
 }
 
 /** Clone method
@@ -406,7 +406,7 @@ void RectangularDetector::initialize(boost::shared_ptr<Object> shape,
       //Calculate its id and set it.
       int id;
       id = this->getDetectorIDAtXY(ix, iy);
-     
+
       //minimum rectangular detector id
       if(id<minDetId)
       {
@@ -437,7 +437,7 @@ void RectangularDetector::initialize(boost::shared_ptr<Object> shape,
   m_minDetId=minDetId;
   m_maxDetId=maxDetId;
 
-   
+
 }
 
 //-------------------------------------------------------------------------------------------------
@@ -544,8 +544,8 @@ void RectangularDetector::testIntersectionWithChildren(Track & testRay, std::deq
   if (yIndex >= ypixels()) return;
 
   // TODO: Do I need to put something smart here for the first 3 parameters?
-  testRay.addLink(intersec, intersec, 0.0,
-      getAtXY(xIndex, yIndex)->getComponentID());
+  auto comp = getAtXY(xIndex, yIndex);
+  testRay.addLink(intersec, intersec, 0.0, *(comp->shape()), comp->getComponentID());
 }
 
 
diff --git a/Code/Mantid/Framework/Geometry/src/Objects/Object.cpp b/Code/Mantid/Framework/Geometry/src/Objects/Object.cpp
index a863dc39f4820f15c0c176ae58c166da8802a76d..221750d9bb4f589c80b7292f364c67e1ac5d69a2 100644
--- a/Code/Mantid/Framework/Geometry/src/Objects/Object.cpp
+++ b/Code/Mantid/Framework/Geometry/src/Objects/Object.cpp
@@ -4,7 +4,6 @@
 #include "MantidKernel/MultiThreaded.h"
 #include "MantidGeometry/Objects/Rules.h"
 #include "MantidGeometry/Objects/Track.h"
-#include "MantidGeometry/Objects/BoundingBox.h"
 
 #include "MantidGeometry/Surfaces/Surface.h"
 #include "MantidGeometry/Surfaces/LineIntersectVisit.h"
@@ -36,7 +35,8 @@ namespace Mantid
     ObjName(0), TopRule(0), m_boundingBox(), AABBxMax(0), AABByMax(0), AABBzMax(0),
       AABBxMin(0), AABByMin(0), AABBzMin(0), boolBounded(false), handle(), bGeometryCaching(false),
       vtkCacheReader(boost::shared_ptr<vtkGeometryCacheReader>()),
-      vtkCacheWriter(boost::shared_ptr<vtkGeometryCacheWriter>())
+      vtkCacheWriter(boost::shared_ptr<vtkGeometryCacheWriter>()),
+      m_material() // empty by default
     {
       handle = boost::shared_ptr<GeometryHandler>(new CacheGeometryHandler(this));
     }
@@ -49,7 +49,7 @@ namespace Mantid
     ObjName(0), TopRule(0), m_boundingBox(), AABBxMax(0), AABByMax(0), AABBzMax(0),
       AABBxMin(0), AABByMin(0), AABBzMin(0), boolBounded(false), handle(), bGeometryCaching(false),
       vtkCacheReader(boost::shared_ptr<vtkGeometryCacheReader>()), vtkCacheWriter(boost::shared_ptr<
-      vtkGeometryCacheWriter>()), m_shapeXML(shapeXML)
+      vtkGeometryCacheWriter>()), m_shapeXML(shapeXML), m_material() // empty by default
     {
       handle = boost::shared_ptr<GeometryHandler>(new CacheGeometryHandler(this));
     }
@@ -60,11 +60,11 @@ namespace Mantid
     */
     Object::Object(const Object& A) :
     ObjName(A.ObjName), TopRule((A.TopRule) ? A.TopRule->clone() : NULL), m_boundingBox(A.m_boundingBox),
-      AABBxMax(A.AABBxMax), AABByMax(A.AABByMax), AABBzMax(A.AABBzMax), AABBxMin(A.AABBxMin), 
+      AABBxMax(A.AABBxMax), AABByMax(A.AABByMax), AABBzMax(A.AABBzMax), AABBxMin(A.AABBxMin),
       AABByMin(A.AABByMin), AABBzMin(A.AABBzMin), boolBounded(A.boolBounded), handle(A.handle->clone()),
       bGeometryCaching(A.bGeometryCaching), vtkCacheReader(A.vtkCacheReader),
       vtkCacheWriter(A.vtkCacheWriter),
-      m_shapeXML(A.m_shapeXML)
+      m_shapeXML(A.m_shapeXML), m_material(A.m_material)
     {
       if (TopRule) createSurfaceList();
     }
@@ -93,6 +93,7 @@ namespace Mantid
         vtkCacheReader = A.vtkCacheReader;
         vtkCacheWriter = A.vtkCacheWriter;
         m_shapeXML = A.m_shapeXML;
+        m_material = A.m_material;
 
         if (TopRule) createSurfaceList();
       }
@@ -108,9 +109,25 @@ namespace Mantid
       delete TopRule;
     }
 
+    /**
+     * @param material The new Material that the object is composed from
+     */
+    void Object::setMaterial(const Kernel::Material &material)
+    {
+      m_material = material;
+    }
+
+    /**
+     * @return The Material that the object is composed from
+     */
+    const Kernel::Material &Object::material() const
+    {
+      return m_material;
+    }
+
     /**
     * Returns whether this object has a valid shape
-    * @returns True if the surface list is populated and there is a 
+    * @returns True if the surface list is populated and there is a
     * defined TopRule, false otherwise.
     */
     bool Object::hasValidShape() const
@@ -262,7 +279,7 @@ namespace Mantid
     * @retval 1000+ keyNumber :: Error with keyNumber
     * @retval 0 :: successfully populated all the whole Object.
     */
-    int Object::populate(const std::map<int, Surface*>& Smap)     
+    int Object::populate(const std::map<int, Surface*>& Smap)
     {
       std::deque<Rule*> Rst;
       Rst.push_back(TopRule);
@@ -624,7 +641,7 @@ namespace Mantid
     /**
     * Takes the complement of a group
     */
-    void Object::makeComplement() 
+    void Object::makeComplement()
     {
       Rule* NCG = procComp(TopRule);
       TopRule = NCG;
@@ -793,16 +810,18 @@ namespace Mantid
       {
         (*vc)->acceptVisitor(LI);
       }
-      const std::vector<Kernel::V3D>& IPts(LI.getPoints());
-      const std::vector<double>& dPts(LI.getDistance());
+      const auto& IPts(LI.getPoints());
+      const auto& dPts(LI.getDistance());
 
-      for (unsigned int i = 0; i < IPts.size(); i++)
+      auto ditr = dPts.begin();
+      auto itrEnd = IPts.end();
+      for (auto iitr = IPts.begin(); iitr != itrEnd; ++iitr, ++ditr)
       {
-        if (dPts[i] > 0.0) // only interested in forward going points
+        if (*ditr > 0.0) // only interested in forward going points
         {
           // Is the point and enterance/exit Point
-          const int flag = calcValidType(IPts[i], UT.direction());
-          UT.addPoint(flag, IPts[i]);
+          const int flag = calcValidType(*iitr, UT.direction());
+          UT.addPoint(flag, *iitr, *this);
         }
       }
       UT.buildLink();
@@ -1265,12 +1284,12 @@ namespace Mantid
     double Object::CylinderSolidAngle(const V3D & observer, const Mantid::Kernel::V3D & centre,
       const Mantid::Kernel::V3D & axis, const double radius, const double height) const
     {
-      // The cylinder is triangulated along its axis EXCLUDING the end caps so that stacked cylinders 
-      // give the correct value of solid angle (i.e shadowing is losely taken into account by this 
+      // The cylinder is triangulated along its axis EXCLUDING the end caps so that stacked cylinders
+      // give the correct value of solid angle (i.e shadowing is losely taken into account by this
       //method)
-      // Any triangle that has a normal facing away from the observer gives a negative solid 
+      // Any triangle that has a normal facing away from the observer gives a negative solid
       //angle and is excluded
-      // For simplicity the triangulation points are constructed such that the cone axis 
+      // For simplicity the triangulation points are constructed such that the cone axis
       // points up the +Z axis and then rotated into their final position
       Kernel::V3D axis_direction = axis;
       axis_direction.normalize();
@@ -1495,7 +1514,7 @@ namespace Mantid
     */
     const BoundingBox & Object::getBoundingBox() const
     {
-      // This member function is const given that from a user's perspective it is perfecly reasonable 
+      // This member function is const given that from a user's perspective it is perfecly reasonable
       // to call it on a const object. We need to call a non-const function in places to update the cache,
       // which is where the const_cast comes in to play.
 
@@ -1507,10 +1526,10 @@ namespace Mantid
       else if( m_boundingBox.isNull() )
       {
         // First up, construct the trial set of elements from the object's bounding box
-        const double big(1e10); 
+        const double big(1e10);
         double minX(-big), maxX(big), minY(-big), maxY(big), minZ(-big), maxZ(big);
         TopRule->getBoundingBox(maxX, maxY, maxZ, minX, minY, minZ);
-        //If the object is not axis aligned then the bounding box will be poor, in particular the minima are left at the trial start so return 
+        //If the object is not axis aligned then the bounding box will be poor, in particular the minima are left at the trial start so return
         // a null object here
         if (minX < -100 || maxX > 100 || minY < -100 || maxY > 100 || minZ < -100 || maxZ > 100)
         {
diff --git a/Code/Mantid/Framework/Geometry/src/Objects/RuleItems.cpp b/Code/Mantid/Framework/Geometry/src/Objects/RuleItems.cpp
index b78500bee17f5be0a2c15210e762d4fdf0892d51..97a69ac7534f19476cee3caa39210b17b17b4073 100644
--- a/Code/Mantid/Framework/Geometry/src/Objects/RuleItems.cpp
+++ b/Code/Mantid/Framework/Geometry/src/Objects/RuleItems.cpp
@@ -292,9 +292,11 @@ Intersection::isValid(const Kernel::V3D& Vec) const
     @retval 0 :: Vec is outside object.
   */
 {
-  if (!A || !B)
-    return false;
-  return (A->isValid(Vec) && B->isValid(Vec)) ? true : false;
+  if(A && B)
+  {
+    return (A->isValid(Vec) && B->isValid(Vec));
+  }
+  return false;
 }
 
 bool
@@ -849,9 +851,10 @@ SurfPoint::isValid(const Kernel::V3D& Pt) const
   */
 {
   if (key)
-    return (key->side(Pt)*sign)>=0 ? true : false;
-  else
-    return false;
+  {
+    return (key->side(Pt)*sign)>=0;
+  }
+  return false;
 }
 
 bool 
diff --git a/Code/Mantid/Framework/Geometry/src/Objects/Track.cpp b/Code/Mantid/Framework/Geometry/src/Objects/Track.cpp
index 05e1a05332682d198beae3b5b90d6dadafba984e..9fc1a56a65a8f056d8f86d9c19dac82dfd6f2e7f 100644
--- a/Code/Mantid/Framework/Geometry/src/Objects/Track.cpp
+++ b/Code/Mantid/Framework/Geometry/src/Objects/Track.cpp
@@ -26,7 +26,7 @@ namespace Mantid
     * Constructor
     * @param startPt :: Initial point
     * @param unitVector :: Directional vector. It must be unit vector.
-    */ 
+    */
     Track::Track(const V3D& startPt, const V3D& unitVector) :
     m_startPoint(startPt),m_unitVector(unitVector)
     {}
@@ -34,7 +34,7 @@ namespace Mantid
     /**
      * Copy Constructor
      * @param other :: Track to initialise this copy with.
-     */ 
+     */
     Track::Track(const Track& other) : m_startPoint(other.m_startPoint),m_unitVector(other.m_unitVector),
       m_links(other.m_links),m_surfPoints(other.m_surfPoints)
     {}
@@ -43,7 +43,7 @@ namespace Mantid
     * Assignment operator
     * @param other :: The track to copy from
     * @return *this
-    */ 
+    */
     Track& Track::operator=(const Track& other)
     {
       if (this != &other)
@@ -63,7 +63,7 @@ namespace Mantid
     {}
 
     /**
-     * Resets the track starting point and direction. 
+     * Resets the track starting point and direction.
      * @param startPoint :: The new starting point
      * @param direction :: The new direction. Must be a unit vector!
      */
@@ -153,11 +153,14 @@ namespace Mantid
      * @param directionFlag :: A flag indicating if the direction of travel is entering/leaving
      * an object. +1 is entering, -1 is leaving.
      * @param endPoint :: Point of intersection
+     * @param obj :: A reference to the object that was intersected
      * @param compID :: ID of the component that this link is about (Default=NULL)
      */
-    void Track::addPoint(const int directionFlag, const V3D& endPoint, const ComponentID compID)
+    void Track::addPoint(const int directionFlag, const V3D& endPoint, const Object & obj,
+                         const ComponentID compID)
     {
-      IntersectionPoint newPoint(directionFlag, endPoint, endPoint.distance(m_startPoint), compID);
+      IntersectionPoint newPoint(directionFlag, endPoint, endPoint.distance(m_startPoint),
+                                 obj, compID);
       PType::iterator lowestPtr = std::lower_bound(m_surfPoints.begin(), m_surfPoints.end(), newPoint);
       m_surfPoints.insert(lowestPtr, newPoint);
     }
@@ -167,14 +170,15 @@ namespace Mantid
     * @param firstPoint :: first Point
     * @param secondPoint :: second Point
     * @param distanceAlongTrack :: Distance along track
+    * @param obj :: A reference to the object that was intersected
     * @param compID :: ID of the component that this link is about (Default=NULL)
     * @retval Index of link within the track
     */
     int Track::addLink(const V3D& firstPoint, const V3D& secondPoint,
-      const double distanceAlongTrack, const ComponentID compID)
+      const double distanceAlongTrack, const Object &obj, const ComponentID compID)
     {
       // Process First Point
-      Link newLink(firstPoint,secondPoint,distanceAlongTrack,compID);
+      Link newLink(firstPoint,secondPoint,distanceAlongTrack,obj,compID);
       int index(0);
       if( m_links.empty() )
       {
@@ -193,7 +197,7 @@ namespace Mantid
 
      /**
       * Builds a set of linking track components.
-      * This version deals with touching surfaces 
+      * This version deals with touching surfaces
       */
     void Track::buildLink()
     {
@@ -213,7 +217,7 @@ namespace Mantid
       {
         if (ac->directionFlag==-1)
         {
-          addLink(m_startPoint,ac->endPoint,ac->distFromStart,ac->componentID);  // from the void
+          addLink(m_startPoint,ac->endPoint,ac->distFromStart,*ac->object,ac->componentID);  // from the void
           workPt = ac->endPoint;
         }
         ++ac;
@@ -221,7 +225,7 @@ namespace Mantid
         {
           ++bc;
         }
-      } 
+      }
 
       //have we now passed over all of the potential intersections without actually hitting the object
       if (ac == m_surfPoints.end())
@@ -231,7 +235,7 @@ namespace Mantid
         return;
       }
 
-      workPt = ac->endPoint;      
+      workPt = ac->endPoint;
       while(bc != m_surfPoints.end())      // Since bc > ac
       {
         if (ac->directionFlag==1 && bc->directionFlag==-1)
@@ -240,19 +244,19 @@ namespace Mantid
           if (fabs(ac->distFromStart - bc->distFromStart)>Tolerance)
           {
             // track leave ac into bc.
-            addLink(ac->endPoint,bc->endPoint,bc->distFromStart,ac->componentID);
+            addLink(ac->endPoint,bc->endPoint,bc->distFromStart,*ac->object,ac->componentID);
           }
           // Points with intermediate void
           else
           {
-            addLink(workPt,ac->endPoint,ac->distFromStart,ac->componentID);
+            addLink(workPt,ac->endPoint,ac->distFromStart,*ac->object,ac->componentID);
           }
           workPt = bc->endPoint;
 
           // ADDING to ac twice: since processing pairs
           ++ac;
           ++ac;
-          ++bc;    // can I do this past the end ? 
+          ++bc;    // can I do this past the end ?
           if (bc!=m_surfPoints.end())
           {
             ++bc;
@@ -263,9 +267,9 @@ namespace Mantid
           ++ac;
           ++bc;
         }
-      }	
+      }
 
-      m_surfPoints.clear();        // While vector 
+      m_surfPoints.clear();        // While vector
       return;
     }
 
diff --git a/Code/Mantid/Framework/Geometry/src/Surfaces/Line.cpp b/Code/Mantid/Framework/Geometry/src/Surfaces/Line.cpp
index 69e2dbbc1e1dd17057ff2f9f95b07aaaec8557f8..c4c424e9fb55436078e497b83470407cfda37330 100644
--- a/Code/Mantid/Framework/Geometry/src/Surfaces/Line.cpp
+++ b/Code/Mantid/Framework/Geometry/src/Surfaces/Line.cpp
@@ -136,9 +136,9 @@ namespace Mantid
     }
 
     int
-      Line::lambdaPair(const int ix,const std::pair<
+      Line::lambdaPair(const int ix, const std::pair<
       std::complex<double>,std::complex<double> >& SQ,
-      std::vector<Kernel::V3D>& PntOut) const
+      std::list<Kernel::V3D> &PntOut) const
       /** 
       Helper function to decide which roots to take.
       The assumption is that lambda has been solved by quadratic
@@ -190,7 +190,7 @@ namespace Mantid
     }
 
     int
-      Line::intersect(std::vector<Kernel::V3D>& VecOut,
+      Line::intersect(std::list<Kernel::V3D> &VecOut,
       const Quadratic& Sur) const
       /**
       For the line that intersects the surfaces 
@@ -220,7 +220,7 @@ namespace Mantid
     }  
 
     int 
-      Line::intersect(std::vector<Kernel::V3D>& PntOut ,const Plane& Pln) const
+      Line::intersect(std::list<Kernel::V3D>& PntOut ,const Plane& Pln) const
       /** 
       For the line that intersects the cylinder generate 
       add the point to the VecOut, return number of points
@@ -244,7 +244,7 @@ namespace Mantid
     }
 
     int 
-      Line::intersect(std::vector<Kernel::V3D>& PntOut ,const Cylinder& Cyl) const
+      Line::intersect(std::list<Kernel::V3D> &PntOut , const Cylinder& Cyl) const
       /** 
       For the line that intersects the cylinder generate 
       add the point to the VecOut, return number of points
@@ -273,7 +273,7 @@ namespace Mantid
     }
 
     int 
-      Line::intersect(std::vector<Kernel::V3D>& PntOut ,const Sphere& Sph) const
+      Line::intersect(std::list<Kernel::V3D> &PntOut , const Sphere& Sph) const
       /** 
       For the line that intersects the cylinder generate 
       add the point to the VecOut, return number of points
diff --git a/Code/Mantid/Framework/Geometry/src/Surfaces/Plane.cpp b/Code/Mantid/Framework/Geometry/src/Surfaces/Plane.cpp
index 95962e6acb5e797a3a1b8e0838f9977885ae2f03..4e5004b92152aeebfaf0456353b085fa647efec8 100644
--- a/Code/Mantid/Framework/Geometry/src/Surfaces/Plane.cpp
+++ b/Code/Mantid/Framework/Geometry/src/Surfaces/Plane.cpp
@@ -220,8 +220,7 @@ Plane::side(const Kernel::V3D& A) const
     @retval 0 :: A is on the plane itself (within tolerence) 
   */
 {
-  double Dp=NormV.scalar_prod(A);
-  Dp-=Dist;
+  double Dp=NormV.scalar_prod(A)-Dist;
   if (Tolerance<fabs(Dp))
     return (Dp>0) ? 1 : -1;
   return 0;
diff --git a/Code/Mantid/Framework/Geometry/src/Surfaces/Sphere.cpp b/Code/Mantid/Framework/Geometry/src/Surfaces/Sphere.cpp
index 476bf61dc33c22437c44c11c1c750ad64b8f760d..16dbd702f15abd97ba4f6a96e897bda1949db566 100644
--- a/Code/Mantid/Framework/Geometry/src/Surfaces/Sphere.cpp
+++ b/Code/Mantid/Framework/Geometry/src/Surfaces/Sphere.cpp
@@ -19,17 +19,17 @@ namespace Mantid
     Sphere::Sphere() : Quadratic(),
       Centre(0,0,0),Radius(0.0)
       /**
-      Default constructor 
-      make sphere at the origin radius zero 
+      Default constructor
+      make sphere at the origin radius zero
       */
     {
       setBaseEqn();
     }
 
-    Sphere::Sphere(const Sphere &A) : 
+    Sphere::Sphere(const Sphere &A) :
     Quadratic(A),Centre(A.Centre),Radius(A.Radius)
       /**
-      Default Copy constructor 
+      Default Copy constructor
       @param A :: Sphere to copy
       */
     { }
@@ -37,7 +37,7 @@ namespace Mantid
     Sphere*
       Sphere::clone() const
       /**
-      Makes a clone (implicit virtual copy constructor) 
+      Makes a clone (implicit virtual copy constructor)
       @return new (*this)
       */
     {
@@ -45,7 +45,7 @@ namespace Mantid
     }
 
     Sphere&
-      Sphere::operator=(const Sphere &A) 
+      Sphere::operator=(const Sphere &A)
       /**
       Default Assignment operator
       @param A :: Sphere to copy
@@ -69,19 +69,19 @@ namespace Mantid
 
     int
       Sphere::setSurface(const std::string& Pstr)
-      /** 
-      Processes a standard MCNPX cone string    
+      /**
+      Processes a standard MCNPX cone string
       Recall that cones can only be specified on an axis
-      Valid input is: 
-      - so radius 
+      Valid input is:
+      - so radius
       - s cen_x cen_y cen_z radius
       - sx - cen_x radius
-      @return : 0 on success, neg of failure 
+      @return : 0 on success, neg of failure
       */
     {
       std::string Line=Pstr;
       std::string item;
-      if (!Mantid::Kernel::Strings::section(Line,item) || 
+      if (!Mantid::Kernel::Strings::section(Line,item) ||
         tolower(item[0])!='s' || item.length()>2)
         return -1;
 
@@ -115,24 +115,25 @@ namespace Mantid
       Radius=R;
       setBaseEqn();
       return 0;
-    } 
+    }
 
 
     int
       Sphere::side(const Kernel::V3D& Pt) const
       /**
-      Calculate where the point Pt is relative to the 
+      Calculate where the point Pt is relative to the
       sphere.
       @param Pt :: Point to test
       @retval -1 :: Pt within sphere
       @retval 0 :: point on the surface (within CTolerance)
-      @retval 1 :: Pt outside the sphere 
+      @retval 1 :: Pt outside the sphere
       */
     {
-      const double displace = centreToPoint(Pt) - Radius;
       //MG:  Surface test  - This does not use onSurface since it would double the amount of
       // computation if the object is not on the surface which is most likely
-      if( std::abs(displace) < Tolerance )
+      const double xdiff(Pt.X()-Centre.X()), ydiff(Pt.Y()-Centre.Y()), zdiff(Pt.Z()-Centre.Z());
+      const double displace = sqrt(xdiff*xdiff + ydiff*ydiff + zdiff*zdiff) - Radius;
+      if( fabs(displace) < Tolerance )
       {
         return 0;
       }
@@ -157,9 +158,9 @@ namespace Mantid
 
     double
       Sphere::distance(const Kernel::V3D& Pt) const
-      /** 
-      Determine the shortest distance from the Surface 
-      to the Point. 
+      /**
+      Determine the shortest distance from the Surface
+      to the Point.
       @param Pt :: Point to calculate distance from
       @return distance (Positive only)
       */
@@ -170,7 +171,7 @@ namespace Mantid
 
 
     void
-      Sphere::displace(const Kernel::V3D& Pt) 
+      Sphere::displace(const Kernel::V3D& Pt)
       /**
       Apply a shift of the centre
       @param Pt :: distance to add to the centre
@@ -182,7 +183,7 @@ namespace Mantid
     }
 
     void
-      Sphere::rotate(const Kernel::Matrix<double>& MA) 
+      Sphere::rotate(const Kernel::Matrix<double>& MA)
       /**
       Apply a Rotation matrix
       @param MA :: matrix to rotate by
@@ -197,13 +198,13 @@ namespace Mantid
     {
       /**
       Compute the distance between the given point and the centre of the sphere
-      @param pt :: The chosen point 
+      @param pt :: The chosen point
       */
       const Kernel::V3D displace_vec = pt - Centre;
       return displace_vec.norm();
     }
 
-    void 
+    void
       Sphere::setCentre(const Kernel::V3D& A)
       /**
       Set the centre point
@@ -215,7 +216,7 @@ namespace Mantid
       return;
     }
 
-    void 
+    void
       Sphere::setBaseEqn()
       /**
       Sets an equation of type (general sphere)
@@ -224,7 +225,7 @@ namespace Mantid
     {
       BaseEqn[0]=1.0;     // A x^2
       BaseEqn[1]=1.0;     // B y^2
-      BaseEqn[2]=1.0;     // C z^2 
+      BaseEqn[2]=1.0;     // C z^2
       BaseEqn[3]=0.0;     // D xy
       BaseEqn[4]=0.0;     // E xz
       BaseEqn[5]=0.0;     // F yz
@@ -236,12 +237,12 @@ namespace Mantid
     }
 
 
-    void 
+    void
       Sphere::write(std::ostream& OX) const
-      /** 
-      Object of write is to output a MCNPX plane info 
-      @param OX :: Output stream (required for multiple std::endl)  
-      \todo (Needs precision) 
+      /**
+      Object of write is to output a MCNPX plane info
+      @param OX :: Output stream (required for multiple std::endl)
+      \todo (Needs precision)
       */
     {
       std::ostringstream cx;
diff --git a/Code/Mantid/Framework/Geometry/test/BraggScattererFactoryTest.h b/Code/Mantid/Framework/Geometry/test/BraggScattererFactoryTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..a8c28f9913ac765f340c9d715f492bcbbb02c367
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/test/BraggScattererFactoryTest.h
@@ -0,0 +1,57 @@
+#ifndef MANTID_GEOMETRY_BRAGGSCATTERERFACTORYTEST_H_
+#define MANTID_GEOMETRY_BRAGGSCATTERERFACTORYTEST_H_
+
+#include <cxxtest/TestSuite.h>
+#include <gmock/gmock.h>
+
+#include "MantidGeometry/Crystal/BraggScattererFactory.h"
+
+using namespace Mantid::Geometry;
+using namespace Mantid::Kernel;
+
+class BraggScattererFactoryTest : public CxxTest::TestSuite
+{
+public:
+    // This pair of boilerplate methods prevent the suite being created statically
+    // This means the constructor isn't called when running other tests
+    static BraggScattererFactoryTest *createSuite() { return new BraggScattererFactoryTest(); }
+    static void destroySuite( BraggScattererFactoryTest *suite ) { delete suite; }
+
+
+    void testSubscribeCreateUnsubscribeGetKeys()
+    {
+        std::vector<std::string> registered = BraggScattererFactory::Instance().getKeys();
+        TS_ASSERT_EQUALS(std::find(registered.begin(), registered.end(), "MockScatterer"), registered.end());
+        TS_ASSERT_THROWS_ANYTHING(BraggScattererFactory::Instance().createScatterer("MockScatterer"));
+
+        BraggScattererFactory::Instance().subscribeScatterer<MockScatterer>();
+
+        registered = BraggScattererFactory::Instance().getKeys();
+        TS_ASSERT_DIFFERS(std::find(registered.begin(), registered.end(), "MockScatterer"), registered.end());
+        TS_ASSERT_THROWS_NOTHING(BraggScattererFactory::Instance().createScatterer("MockScatterer"));
+
+        BraggScatterer_sptr scatterer = BraggScattererFactory::Instance().createScatterer("MockScatterer");
+        TS_ASSERT(scatterer->isInitialized());
+
+        BraggScattererFactory::Instance().unsubscribe("MockScatterer");
+        registered = BraggScattererFactory::Instance().getKeys();
+        TS_ASSERT_EQUALS(std::find(registered.begin(), registered.end(), "MockScatterer"), registered.end());
+        TS_ASSERT_THROWS_ANYTHING(BraggScattererFactory::Instance().createScatterer("MockScatterer"));
+    }
+
+private:
+    class MockScatterer : public BraggScatterer
+    {
+    public:
+        MockScatterer() : BraggScatterer() {}
+        ~MockScatterer() { }
+
+        std::string name() const { return "MockScatterer"; }
+
+        MOCK_CONST_METHOD0(clone, BraggScatterer_sptr());
+        MOCK_CONST_METHOD1(calculateStructureFactor, StructureFactor(const V3D &));
+    };
+};
+
+
+#endif /* MANTID_GEOMETRY_BRAGGSCATTERERFACTORYTEST_H_ */
diff --git a/Code/Mantid/Framework/Geometry/test/BraggScattererInCrystalStructureTest.h b/Code/Mantid/Framework/Geometry/test/BraggScattererInCrystalStructureTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..5c9bf1ef3a036a8221b7386873f19bf8b25002a6
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/test/BraggScattererInCrystalStructureTest.h
@@ -0,0 +1,154 @@
+#ifndef MANTID_GEOMETRY_BRAGGSCATTERERINCRYSTALSTRUCTURETEST_H_
+#define MANTID_GEOMETRY_BRAGGSCATTERERINCRYSTALSTRUCTURETEST_H_
+
+#include <cxxtest/TestSuite.h>
+#include <gmock/gmock.h>
+
+#include "MantidGeometry/Crystal/BraggScattererInCrystalStructure.h"
+#include "MantidGeometry/Crystal/SpaceGroupFactory.h"
+
+using namespace Mantid::Geometry;
+using namespace Mantid::Kernel;
+
+class BraggScattererInCrystalStructureTest : public CxxTest::TestSuite
+{
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static BraggScattererInCrystalStructureTest *createSuite() { return new BraggScattererInCrystalStructureTest(); }
+  static void destroySuite( BraggScattererInCrystalStructureTest *suite ) { delete suite; }
+
+
+  void testInitialization()
+  {
+      BraggScattererInCrystalStructure_sptr scatterer = getDefaultScatterer();
+
+      TS_ASSERT(!scatterer->isInitialized());
+      TS_ASSERT_THROWS_NOTHING(scatterer->initialize());
+      TS_ASSERT(scatterer->isInitialized());
+
+      TS_ASSERT(scatterer->existsProperty("Position"));
+      TS_ASSERT(scatterer->existsProperty("UnitCell"));
+      TS_ASSERT(scatterer->existsProperty("SpaceGroup"));
+  }
+
+  void testAfterScattererPropertySet()
+  {
+      //BraggScattererInCrystalStructure_sptr scatterer = getInitializedScatterer();
+      //MockBraggScatterer *mockScatterer = dynamic_cast<MockBraggScatterer *>(scatterer.get());
+      //EXPECT_CALL(mockScatterer, afterScattererPropertySet)
+  }
+
+  void testGetSetPosition()
+  {
+      BraggScattererInCrystalStructure_sptr scatterer = getInitializedScatterer();
+
+      V3D goodPosition(0.2, 0.4, 0.3);
+      TS_ASSERT_THROWS_NOTHING(scatterer->setProperty("Position", goodPosition));
+
+      V3D testPos;
+      TS_ASSERT_THROWS_NOTHING(testPos = scatterer->getPosition());
+      TS_ASSERT_EQUALS(testPos, goodPosition);
+
+      V3D badPosition(1.2, 4.3, -6.2);
+      TS_ASSERT_THROWS_NOTHING(scatterer->setProperty("Position", badPosition));
+      TS_ASSERT_THROWS_NOTHING(testPos = scatterer->getPosition());
+      TS_ASSERT_DIFFERS(testPos, badPosition);
+      TS_ASSERT_EQUALS(testPos, V3D(0.2, 0.3, 0.8));
+  }
+
+  void testGetSetCell()
+  {
+      BraggScattererInCrystalStructure_sptr scatterer = getInitializedScatterer();
+
+      UnitCell cell(5.43, 5.43, 5.43);
+
+      TS_ASSERT_THROWS_NOTHING(scatterer->setProperty("UnitCell", unitCellToStr(cell)));
+      TS_ASSERT_EQUALS(scatterer->getCell().getG(), cell.getG());
+  }
+
+  void testGetSetSpaceGroup()
+  {
+      BraggScattererInCrystalStructure_sptr scatterer = getInitializedScatterer();
+
+      SpaceGroup_const_sptr testGroup = SpaceGroupFactory::Instance().createSpaceGroup("P m -3 m");
+
+      TS_ASSERT_THROWS_NOTHING(scatterer->setProperty("SpaceGroup", "P m -3 m"));
+      TS_ASSERT_EQUALS(scatterer->getSpaceGroup()->hmSymbol(), testGroup->hmSymbol());
+  }
+
+  void testEquivalentPositions()
+  {
+      BraggScattererInCrystalStructure_sptr scatterer = getInitializedScatterer();
+
+      V3D generalPosition(0.3, 0.32, 0.45);
+
+      // No space group set - no equivalent positions
+      scatterer->setProperty("Position", generalPosition);
+      TS_ASSERT_EQUALS(scatterer->getEquivalentPositions().size(), 1);
+      TS_ASSERT_EQUALS(scatterer->getEquivalentPositions().front(), generalPosition);
+
+      // Assigning a space group must cause recalculation of equivalent positions
+      SpaceGroup_const_sptr testGroup = SpaceGroupFactory::Instance().createSpaceGroup("P m -3 m");
+      scatterer->setProperty("SpaceGroup", "P m -3 m");
+
+      TS_ASSERT_EQUALS(scatterer->getEquivalentPositions().size(), testGroup->order());
+
+      // Re-setting the position also recalculates
+      V3D specialPosition(0.0, 0.0, 0.0);
+
+      scatterer->setProperty("Position", specialPosition);
+      // Pm-3m does not contain translations, so (0,0,0) is not transformed by any symmetry operation of the group
+      TS_ASSERT_EQUALS(scatterer->getEquivalentPositions().size(), 1);
+      TS_ASSERT_EQUALS(scatterer->getEquivalentPositions().front(), specialPosition);
+  }
+
+  void testUnitCellStringValidator()
+  {
+      IValidator_sptr validator = boost::make_shared<UnitCellStringValidator>();
+
+      // non-working examples
+      TS_ASSERT_DIFFERS(validator->isValid("1.0"), "");
+      TS_ASSERT_DIFFERS(validator->isValid("1.0 1.0"), "");
+      TS_ASSERT_DIFFERS(validator->isValid("1.0 1.0 1.0 1.0"), "");
+      TS_ASSERT_DIFFERS(validator->isValid("1.0 1.0 1.0 1.0 1.0"), "");
+      TS_ASSERT_DIFFERS(validator->isValid("1.0.3 1.0 1.0"), "");
+
+      // Working examples
+      TS_ASSERT_EQUALS(validator->isValid("1.0 1.0 1.0"), "");
+      TS_ASSERT_EQUALS(validator->isValid("1.0 1.0 1.0 90.0 90.0 90.0"), "");
+      TS_ASSERT_EQUALS(validator->isValid("1 2 3 90 90 90"), "");
+      TS_ASSERT_EQUALS(validator->isValid("1.1 2.2 3.2 90 90 90"), "");
+      TS_ASSERT_EQUALS(validator->isValid("1.0 1.0 1.0 90.0 90.0 90.0  "), "");
+  }
+
+private:
+  BraggScattererInCrystalStructure_sptr getDefaultScatterer()
+  {
+      return boost::make_shared<MockBraggScatterer>();
+  }
+
+  BraggScattererInCrystalStructure_sptr getInitializedScatterer()
+  {
+      BraggScattererInCrystalStructure_sptr raw = getDefaultScatterer();
+      raw->initialize();
+
+      return raw;
+  }
+
+  class MockBraggScatterer : public BraggScattererInCrystalStructure
+  {
+  public:
+      MockBraggScatterer() : BraggScattererInCrystalStructure() { }
+      ~MockBraggScatterer() { }
+
+      MOCK_CONST_METHOD0(name, std::string());
+      MOCK_CONST_METHOD0(clone, BraggScatterer_sptr());
+      MOCK_CONST_METHOD1(calculateStructureFactor, StructureFactor(const V3D&));
+      MOCK_METHOD1(afterScattererPropertySet, void(const std::string &));
+  };
+
+};
+
+
+#endif /* MANTID_GEOMETRY_BRAGGSCATTERERINCRYSTALSTRUCTURETEST_H_ */
diff --git a/Code/Mantid/Framework/Geometry/test/BraggScattererTest.h b/Code/Mantid/Framework/Geometry/test/BraggScattererTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..584d3de1f5807937d41341965fa79dbef5242d68
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/test/BraggScattererTest.h
@@ -0,0 +1,62 @@
+#ifndef MANTID_GEOMETRY_BRAGGSCATTERERTEST_H_
+#define MANTID_GEOMETRY_BRAGGSCATTERERTEST_H_
+
+#include <cxxtest/TestSuite.h>
+#include <gmock/gmock.h>
+
+#include "MantidGeometry/Crystal/BraggScatterer.h"
+
+using namespace Mantid::Geometry;
+using namespace Mantid::Kernel;
+
+class BraggScattererTest : public CxxTest::TestSuite
+{
+public:
+    // This pair of boilerplate methods prevent the suite being created statically
+    // This means the constructor isn't called when running other tests
+    static BraggScattererTest *createSuite() { return new BraggScattererTest(); }
+    static void destroySuite( BraggScattererTest *suite ) { delete suite; }
+
+    void testConstruction()
+    {
+        TS_ASSERT_THROWS_NOTHING(MockBraggScatterer scatterer);
+    }
+
+    void testInitialization()
+    {
+        BraggScatterer_sptr scatterer = getDefaultScatterer();
+
+        TS_ASSERT(!scatterer->isInitialized());
+        TS_ASSERT_THROWS_NOTHING(scatterer->initialize());
+        TS_ASSERT(scatterer->isInitialized());
+    }
+
+private:
+    BraggScatterer_sptr getDefaultScatterer()
+    {
+        return boost::make_shared<MockBraggScatterer>();
+    }
+
+    BraggScatterer_sptr getInitializedScatterer()
+    {
+        BraggScatterer_sptr raw = getDefaultScatterer();
+        raw->initialize();
+
+        return raw;
+    }
+
+    class MockBraggScatterer : public BraggScatterer
+    {
+    public:
+        MockBraggScatterer() : BraggScatterer() { }
+        ~MockBraggScatterer() { }
+
+        MOCK_CONST_METHOD0(name, std::string());
+        MOCK_CONST_METHOD0(clone, BraggScatterer_sptr());
+        MOCK_CONST_METHOD1(calculateStructureFactor, StructureFactor(const V3D&));
+        MOCK_METHOD1(afterScattererPropertySet, void(const std::string &));
+    };
+};
+
+
+#endif /* MANTID_GEOMETRY_BRAGGSCATTERERTEST_H_ */
diff --git a/Code/Mantid/Framework/Geometry/test/CenteringGroupTest.h b/Code/Mantid/Framework/Geometry/test/CenteringGroupTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..092ce9dcc0041b1ed8e126dc1b498f0d985e97ee
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/test/CenteringGroupTest.h
@@ -0,0 +1,65 @@
+#ifndef MANTID_GEOMETRY_CENTERINGGROUPTEST_H_
+#define MANTID_GEOMETRY_CENTERINGGROUPTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidGeometry/Crystal/CenteringGroup.h"
+#include "MantidGeometry/Crystal/SymmetryOperationFactory.h"
+
+using namespace Mantid::Geometry;
+
+class CenteringGroupTest : public CxxTest::TestSuite
+{
+public:
+    // This pair of boilerplate methods prevent the suite being created statically
+    // This means the constructor isn't called when running other tests
+    static CenteringGroupTest *createSuite() { return new CenteringGroupTest(); }
+    static void destroySuite( CenteringGroupTest *suite ) { delete suite; }
+
+    void testValidCenterings()
+    {
+        testCenteringGroup("P", CenteringGroup::P, "P", SymmetryOperationFactory::Instance().createSymOps("x,y,z"));
+        testCenteringGroup("I", CenteringGroup::I, "I", SymmetryOperationFactory::Instance().createSymOps("x,y,z; x+1/2,y+1/2,z+1/2"));
+        testCenteringGroup("A", CenteringGroup::A, "A", SymmetryOperationFactory::Instance().createSymOps("x,y,z; x,y+1/2,z+1/2"));
+        testCenteringGroup("B", CenteringGroup::B, "B", SymmetryOperationFactory::Instance().createSymOps("x,y,z; x+1/2,y,z+1/2"));
+        testCenteringGroup("C", CenteringGroup::C, "C", SymmetryOperationFactory::Instance().createSymOps("x,y,z; x+1/2,y+1/2,z"));
+        testCenteringGroup("F", CenteringGroup::F, "F", SymmetryOperationFactory::Instance().createSymOps("x,y,z; x,y+1/2,z+1/2; x+1/2,y,z+1/2; x+1/2,y+1/2,z"));
+        testCenteringGroup("R", CenteringGroup::Robv, "R", SymmetryOperationFactory::Instance().createSymOps("x,y,z; x+1/3,y+2/3,z+2/3; x+2/3,y+1/3,z+1/3"));
+        testCenteringGroup("Robv", CenteringGroup::Robv, "R", SymmetryOperationFactory::Instance().createSymOps("x,y,z; x+1/3,y+2/3,z+2/3; x+2/3,y+1/3,z+1/3"));
+        testCenteringGroup("Rrev", CenteringGroup::Rrev, "R", SymmetryOperationFactory::Instance().createSymOps("x,y,z; x+1/3,y+2/3,z+1/3; x+2/3,y+1/3,z+2/3"));
+    }
+
+    void testInvalidCentering()
+    {
+        TS_ASSERT_THROWS(CenteringGroup group("G"), std::invalid_argument);
+        TS_ASSERT_THROWS(CenteringGroup group("f"), std::invalid_argument);
+    }
+
+private:
+    void testCenteringGroup(const std::string &symbol, CenteringGroup::CenteringType expectedCenteringType, const std::string &expectedSymbol, const std::vector<SymmetryOperation> &expectedOperations)
+    {
+        TSM_ASSERT_THROWS_NOTHING("Exception when trying to create " + symbol, CenteringGroup rawGroup(symbol));
+
+        Group_const_sptr group = GroupFactory::create<CenteringGroup>(symbol);
+        std::vector<SymmetryOperation> ops = group->getSymmetryOperations();
+        TSM_ASSERT_EQUALS("Unexpected number of operations for " + symbol, ops.size(), expectedOperations.size());
+
+        for(auto it = expectedOperations.begin(); it != expectedOperations.end(); ++it) {
+            TSM_ASSERT("Operation " + (*it).identifier() + " not found in " + symbol, symOpExistsInCollection(*it, ops));
+        }
+
+        CenteringGroup_const_sptr centeringGroup = boost::dynamic_pointer_cast<const CenteringGroup>(group);
+        TSM_ASSERT("Could not cast to pointer in " + symbol, centeringGroup);
+        TSM_ASSERT_EQUALS("CenteringType did not match for " + symbol, centeringGroup->getType(), expectedCenteringType);
+        TSM_ASSERT_EQUALS("CenteringString did not match for " + symbol, centeringGroup->getSymbol(), expectedSymbol);
+    }
+
+
+    bool symOpExistsInCollection(const SymmetryOperation &op, const std::vector<SymmetryOperation> &collection)
+    {
+        return std::find(collection.begin(), collection.end(), op) != collection.end();
+    }
+};
+
+
+#endif /* MANTID_GEOMETRY_CENTERINGGROUPTEST_H_ */
diff --git a/Code/Mantid/Framework/Geometry/test/CompositeBraggScattererTest.h b/Code/Mantid/Framework/Geometry/test/CompositeBraggScattererTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..dd5009871e408de381459a0352549b0e1dc528d8
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/test/CompositeBraggScattererTest.h
@@ -0,0 +1,220 @@
+#ifndef MANTID_GEOMETRY_BRAGGSCATTERERCOLLECTIONTEST_H_
+#define MANTID_GEOMETRY_BRAGGSCATTERERCOLLECTIONTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidGeometry/Crystal/CompositeBraggScatterer.h"
+#include "MantidGeometry/Crystal/UnitCell.h"
+#include "MantidKernel/V3D.h"
+#include "MantidGeometry/Crystal/SpaceGroupFactory.h"
+
+#include "MantidGeometry/Crystal/IsotropicAtomBraggScatterer.h"
+#include <map>
+
+using namespace Mantid::Geometry;
+using namespace Mantid::Kernel;
+
+
+class CompositeBraggScattererTest : public CxxTest::TestSuite
+{
+public:
+    // This pair of boilerplate methods prevent the suite being created statically
+    // This means the constructor isn't called when running other tests
+    static CompositeBraggScattererTest *createSuite() { return new CompositeBraggScattererTest(); }
+    static void destroySuite( CompositeBraggScattererTest *suite ) { delete suite; }
+
+
+    void testConstructor()
+    {
+        TS_ASSERT_THROWS_NOTHING(CompositeBraggScatterer scatterers);
+    }
+
+    void testCreate()
+    {
+        TS_ASSERT_THROWS_NOTHING(CompositeBraggScatterer_sptr scatterer = CompositeBraggScatterer::create());
+
+        std::vector<BraggScatterer_sptr> scatterers;
+        scatterers.push_back(getInitializedScatterer("Si", V3D(0.35, 0, 0)));
+        scatterers.push_back(getInitializedScatterer("Si", V3D(0.25, 0.25, 0.25)));
+
+        CompositeBraggScatterer_sptr scatterer = CompositeBraggScatterer::create(scatterers);
+        TS_ASSERT_EQUALS(scatterer->nScatterers(), 2);
+        TS_ASSERT_EQUALS(boost::dynamic_pointer_cast<BraggScattererInCrystalStructure>(scatterer->getScatterer(0))->getPosition(), V3D(0.35, 0, 0));
+        TS_ASSERT_EQUALS(boost::dynamic_pointer_cast<BraggScattererInCrystalStructure>(scatterer->getScatterer(1))->getPosition(), V3D(0.25, 0.25, 0.25));
+    }
+
+    void testClone()
+    {
+        CompositeBraggScatterer_sptr scatterer = getCompositeScatterer();
+        BraggScatterer_sptr clone = scatterer->clone();
+
+        CompositeBraggScatterer_sptr collectionClone = boost::dynamic_pointer_cast<CompositeBraggScatterer>(clone);
+
+        TS_ASSERT(collectionClone);
+        TS_ASSERT_EQUALS(collectionClone->nScatterers(), 2);
+        TS_ASSERT_EQUALS(boost::dynamic_pointer_cast<BraggScattererInCrystalStructure>(collectionClone->getScatterer(0))->getPosition(), V3D(0.35, 0, 0));
+        TS_ASSERT_EQUALS(boost::dynamic_pointer_cast<BraggScattererInCrystalStructure>(collectionClone->getScatterer(1))->getPosition(), V3D(0.25, 0.25, 0.25));
+    }
+
+    void testAddGetScatterer()
+    {
+        UnitCell cell(5.43, 5.43, 5.43);
+        SpaceGroup_const_sptr spaceGroup = SpaceGroupFactory::Instance().createSpaceGroup("P 1 2/m 1");
+
+        CompositeBraggScatterer_sptr scatterer = CompositeBraggScatterer::create();
+        TS_ASSERT_EQUALS(scatterer->propertyCount(), 0);
+
+        IsotropicAtomBraggScatterer_sptr siOne = getInitializedScatterer("Si", V3D(0, 0, 0));
+        TS_ASSERT_DIFFERS(siOne->getSpaceGroup()->hmSymbol(), spaceGroup->hmSymbol());
+
+        size_t oldCount = scatterer->nScatterers();
+        scatterer->addScatterer(siOne);
+        TS_ASSERT_EQUALS(scatterer->propertyCount(), 2);
+
+        TS_ASSERT_EQUALS(scatterer->nScatterers(), oldCount + 1);
+
+        // Properties are propagated.
+        scatterer->setProperty("UnitCell", unitCellToStr(cell));
+        scatterer->setProperty("SpaceGroup", spaceGroup->hmSymbol());
+
+        // The scatterer is cloned, so the new space group is not in siOne
+        TS_ASSERT_EQUALS(boost::dynamic_pointer_cast<BraggScattererInCrystalStructure>(scatterer->getScatterer(0))->getSpaceGroup()->hmSymbol(), spaceGroup->hmSymbol());
+        TS_ASSERT_DIFFERS(siOne->getSpaceGroup()->hmSymbol(), spaceGroup->hmSymbol());
+
+        TS_ASSERT_THROWS(scatterer->getScatterer(2), std::out_of_range);
+    }
+
+    void testRemoveScatterer()
+    {
+        CompositeBraggScatterer_sptr scattererCollection = getCompositeScatterer();
+        size_t oldCount = scattererCollection->nScatterers();
+
+        TS_ASSERT_THROWS_NOTHING(scattererCollection->getScatterer(oldCount - 1));
+        TS_ASSERT_THROWS_NOTHING(scattererCollection->removeScatterer(0));
+
+        TS_ASSERT_EQUALS(scattererCollection->nScatterers(), oldCount - 1);
+
+        TS_ASSERT_THROWS(scattererCollection->getScatterer(oldCount - 1), std::out_of_range);
+        TS_ASSERT_THROWS(scattererCollection->removeScatterer(10), std::out_of_range);
+
+        scattererCollection->removeScatterer(0);
+
+        // Unused properties are removed, so when there are no scatterers, there are no properties.
+        TS_ASSERT_EQUALS(scattererCollection->propertyCount(), 0);
+    }
+
+    void testStructureFactorCalculation()
+    {
+        /* To check that structure factor calculation is correct also for
+         * oblique cells with low symmetry, this hypothetical Si with monoclinic
+         * cell and one atom in a general position is used.
+         *
+         * For comparison, a shelxl .ins file was prepared with the structure and
+         * squared structure factor amplitudes were calculated using the LIST 4 option.
+         */
+        UnitCell cell(5.43, 6.43, 7.43, 90.0, 103.0, 90.0);
+        SpaceGroup_const_sptr spaceGroup = SpaceGroupFactory::Instance().createSpaceGroup("P 1 2/m 1");
+
+        CompositeBraggScatterer_sptr coll = CompositeBraggScatterer::create();
+        coll->addScatterer(getInitializedScatterer("Si", V3D(0.2, 0.3, 0.4), 0.01267));
+
+        coll->setProperty("SpaceGroup", spaceGroup->hmSymbol());
+        coll->setProperty("UnitCell", unitCellToStr(cell));
+
+        // Load reference data, obtained with SHELXL-2014.
+        std::map<V3D, double> referenceData = getCalculatedStructureFactors();
+
+        for(auto it = referenceData.begin(); it != referenceData.end(); ++it) {
+            double ampl = std::abs(coll->calculateStructureFactor(it->first));
+            double sqAmpl = ampl * ampl;
+
+            // F^2 is calculated to two decimal places, so the maximum deviation is 5e-3,
+            TS_ASSERT_DELTA(sqAmpl, it->second, 5.1e-3);
+        }
+    }
+
+private:
+    IsotropicAtomBraggScatterer_sptr getInitializedScatterer(const std::string &element, const V3D &position, double U = 0.0, double occ = 1.0)
+    {
+        IsotropicAtomBraggScatterer_sptr scatterer = boost::make_shared<IsotropicAtomBraggScatterer>();
+        scatterer->initialize();
+        scatterer->setProperty("Element", element);
+        scatterer->setProperty("Position", position);
+        scatterer->setProperty("U", U);
+        scatterer->setProperty("Occupancy", occ);
+
+        return scatterer;
+    }
+
+    CompositeBraggScatterer_sptr getCompositeScatterer()
+    {
+        std::vector<BraggScatterer_sptr> scatterers;
+        scatterers.push_back(getInitializedScatterer("Si", V3D(0.35, 0, 0)));
+        scatterers.push_back(getInitializedScatterer("Si", V3D(0.25, 0.25, 0.25)));
+
+        return CompositeBraggScatterer::create(scatterers);
+    }
+
+    std::map<V3D, double> getCalculatedStructureFactors()
+    {
+        std::map<V3D, double> fSquaredCalc;
+        fSquaredCalc.insert(std::make_pair(V3D(2, 0, 0),  167.84));
+        fSquaredCalc.insert(std::make_pair(V3D(3, 0, 0),  153.50));
+        fSquaredCalc.insert(std::make_pair(V3D(4, 0, 0),  19.76));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 0, 0),  176.21));
+        fSquaredCalc.insert(std::make_pair(V3D(1, 1, 0),  2.44));
+        fSquaredCalc.insert(std::make_pair(V3D(2, 1, 0),  15.83));
+        fSquaredCalc.insert(std::make_pair(V3D(3, 1, 0),  14.48));
+        fSquaredCalc.insert(std::make_pair(V3D(4, 1, 0),  1.86));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 1, 0),  16.62));
+        fSquaredCalc.insert(std::make_pair(V3D(2, 2, 0),  104.66));
+        fSquaredCalc.insert(std::make_pair(V3D(3, 2, 0),  95.72));
+        fSquaredCalc.insert(std::make_pair(V3D(4, 2, 0),  12.32));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 2, 0),  109.88));
+        fSquaredCalc.insert(std::make_pair(V3D(3, 3, 0),  90.10));
+        fSquaredCalc.insert(std::make_pair(V3D(4, 3, 0),  11.60));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 3, 0),  103.43));
+        fSquaredCalc.insert(std::make_pair(V3D(4, 4, 0),  1.55));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 4, 0),  13.86));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 5, 0),  130.22));
+        fSquaredCalc.insert(std::make_pair(V3D(1, 1, 1),  16.45));
+        fSquaredCalc.insert(std::make_pair(V3D(2, 1, 1),  2.26));
+        fSquaredCalc.insert(std::make_pair(V3D(3, 1, 1),  21.53));
+        fSquaredCalc.insert(std::make_pair(V3D(4, 1, 1),  1.80));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 1, 1),  10.47));
+        fSquaredCalc.insert(std::make_pair(V3D(2, 2, 1),  14.95));
+        fSquaredCalc.insert(std::make_pair(V3D(3, 2, 1),  142.33));
+        fSquaredCalc.insert(std::make_pair(V3D(4, 2, 1),  11.92));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 2, 1),  69.17));
+        fSquaredCalc.insert(std::make_pair(V3D(3, 3, 1),  133.97));
+        fSquaredCalc.insert(std::make_pair(V3D(4, 3, 1),  11.22));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 3, 1),  65.11));
+        fSquaredCalc.insert(std::make_pair(V3D(4, 4, 1),  1.50));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 4, 1),  8.73));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 5, 1),  81.98));
+        fSquaredCalc.insert(std::make_pair(V3D(2, 2, 2),  14.36));
+        fSquaredCalc.insert(std::make_pair(V3D(3, 2, 2),  88.94));
+        fSquaredCalc.insert(std::make_pair(V3D(4, 2, 2),  77.57));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 2, 2),  9.52));
+        fSquaredCalc.insert(std::make_pair(V3D(3, 3, 2),  83.72));
+        fSquaredCalc.insert(std::make_pair(V3D(4, 3, 2),  73.02));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 3, 2),  8.96));
+        fSquaredCalc.insert(std::make_pair(V3D(4, 4, 2),  9.79));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 4, 2),  1.20));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 5, 2),  11.29));
+        fSquaredCalc.insert(std::make_pair(V3D(3, 3, 3),  11.44));
+        fSquaredCalc.insert(std::make_pair(V3D(4, 3, 3),  103.89));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 3, 3),  8.30));
+        fSquaredCalc.insert(std::make_pair(V3D(4, 4, 3),  13.93));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 4, 3),  1.11));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 5, 3),  10.45));
+        fSquaredCalc.insert(std::make_pair(V3D(4, 4, 4),  8.33));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 4, 4),  6.93));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 5, 4),  65.05));
+        fSquaredCalc.insert(std::make_pair(V3D(5, 5, 5),  88.57));
+        return fSquaredCalc;
+    }
+};
+
+
+#endif /* MANTID_GEOMETRY_BRAGGSCATTERERCOLLECTIONTEST_H_ */
diff --git a/Code/Mantid/Framework/Geometry/test/CyclicGroupTest.h b/Code/Mantid/Framework/Geometry/test/CyclicGroupTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..5d40bfb3142c99540820275019d83ebdf62be21c
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/test/CyclicGroupTest.h
@@ -0,0 +1,61 @@
+#ifndef MANTID_GEOMETRY_CYCLICGROUPTEST_H_
+#define MANTID_GEOMETRY_CYCLICGROUPTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidGeometry/Crystal/CyclicGroup.h"
+#include "MantidGeometry/Crystal/SymmetryOperationFactory.h"
+
+#include <boost/make_shared.hpp>
+
+using namespace Mantid::Geometry;
+using namespace Mantid::Kernel;
+
+class CyclicGroupTest : public CxxTest::TestSuite
+{
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static CyclicGroupTest *createSuite() { return new CyclicGroupTest(); }
+  static void destroySuite( CyclicGroupTest *suite ) { delete suite; }
+
+
+  void testConstructor()
+  {
+      CyclicGroup_const_sptr group = boost::make_shared<const CyclicGroup>(SymmetryOperationFactory::Instance().createSymOp("-x,-y,-z"));
+
+      TS_ASSERT_EQUALS(group->order(), 2);
+  }
+
+  void testCreate()
+  {
+      Group_const_sptr group = GroupFactory::create<CyclicGroup>("-x,-y,-z");
+      TS_ASSERT(boost::dynamic_pointer_cast<const CyclicGroup>(group));
+
+      TS_ASSERT_EQUALS(group->order(), 2);
+  }
+
+  void testMultiplication()
+  {
+      /* Even though this is part of Group, it's a good example and basically
+       * the method used to generate point groups.
+       */
+
+      Group_const_sptr groupOne = GroupFactory::create<CyclicGroup>("-x,-y,z");
+      Group_const_sptr groupTwo = GroupFactory::create<CyclicGroup>("x,-y,-z");
+
+      // This is in fact point group 222
+      Group_const_sptr groupThree = groupOne * groupTwo;
+
+      TS_ASSERT_EQUALS(groupThree->order(), 4);
+
+      Group_const_sptr groupFour = GroupFactory::create<CyclicGroup>("-x,-y,-z");
+
+      // Which becomes mmm, if inversion is added.
+      Group_const_sptr groupFive = groupFour * groupThree;
+      TS_ASSERT_EQUALS(groupFive->order(), 8);
+  }
+};
+
+
+#endif /* MANTID_GEOMETRY_CYCLICGROUPTEST_H_ */
diff --git a/Code/Mantid/Framework/Geometry/test/GroupTest.h b/Code/Mantid/Framework/Geometry/test/GroupTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..75cfb8a0a1fa321b5eccf3b9fe1c73a152d2fb11
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/test/GroupTest.h
@@ -0,0 +1,195 @@
+#ifndef MANTID_GEOMETRY_GROUPTEST_H_
+#define MANTID_GEOMETRY_GROUPTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidGeometry/Crystal/Group.h"
+#include "MantidGeometry/Crystal/SymmetryOperationFactory.h"
+#include <boost/make_shared.hpp>
+
+using namespace Mantid::Geometry;
+
+class GroupTest : public CxxTest::TestSuite
+{
+public:
+    // This pair of boilerplate methods prevent the suite being created statically
+    // This means the constructor isn't called when running other tests
+    static GroupTest *createSuite() { return new GroupTest(); }
+    static void destroySuite( GroupTest *suite ) { delete suite; }
+
+    void testDefaultConstructor()
+    {
+        Group group;
+        TS_ASSERT_EQUALS(group.order(), 1);
+        TS_ASSERT(group.getSymmetryOperations().front().isIdentity());
+    }
+
+    void testStringConstructor()
+    {
+        Group group("x,y,z; -x,-y,-z");
+
+        TS_ASSERT_EQUALS(group.order(), 2);
+    }
+
+    void testConstructor()
+    {
+        std::vector<SymmetryOperation> symOps;
+        symOps.push_back(SymmetryOperationFactory::Instance().createSymOp("x,y,z"));
+        symOps.push_back(SymmetryOperationFactory::Instance().createSymOp("-x,-y,-z"));
+
+        TS_ASSERT_THROWS_NOTHING(Group group(symOps));
+
+        Group group(symOps);
+
+        std::vector<SymmetryOperation> groupOps = group.getSymmetryOperations();
+        TS_ASSERT_EQUALS(groupOps.size(), 2);
+
+        std::vector<SymmetryOperation> empty;
+        TS_ASSERT_THROWS(Group group(empty), std::invalid_argument);
+    }
+
+    void testCopyConstructor()
+    {
+        std::vector<SymmetryOperation> symOps;
+        symOps.push_back(SymmetryOperationFactory::Instance().createSymOp("x,y,z"));
+        symOps.push_back(SymmetryOperationFactory::Instance().createSymOp("-x,-y,-z"));
+
+        Group group(symOps);
+        Group otherGroup(group);
+
+        TS_ASSERT_EQUALS(group.order(), otherGroup.order());
+        TS_ASSERT_EQUALS(group.getSymmetryOperations(), otherGroup.getSymmetryOperations());
+    }
+
+    void testAssignmentOperator()
+    {
+        std::vector<SymmetryOperation> symOps;
+        symOps.push_back(SymmetryOperationFactory::Instance().createSymOp("x,y,z"));
+        symOps.push_back(SymmetryOperationFactory::Instance().createSymOp("-x,-y,-z"));
+
+        Group otherGroup(symOps);
+
+        Group group;
+        TS_ASSERT_DIFFERS(group.order(), otherGroup.order());
+        TS_ASSERT_DIFFERS(group.getSymmetryOperations(), otherGroup.getSymmetryOperations());
+
+        group = otherGroup;
+        TS_ASSERT_EQUALS(group.order(), otherGroup.order());
+        TS_ASSERT_EQUALS(group.getSymmetryOperations(), otherGroup.getSymmetryOperations());
+    }
+
+    void testOrder()
+    {
+        Group defaultGroup;
+        TS_ASSERT_EQUALS(defaultGroup.order(), 1);
+
+        // Making a group of two operations gives order 2
+        std::vector<SymmetryOperation> symOps;
+        symOps.push_back(SymmetryOperationFactory::Instance().createSymOp("x,y,z"));
+        symOps.push_back(SymmetryOperationFactory::Instance().createSymOp("-x,-y,-z"));
+
+        Group biggerGroup(symOps);
+        TS_ASSERT_EQUALS(biggerGroup.order(), 2);
+
+        // Adding another one results in 3
+        symOps.push_back(SymmetryOperationFactory::Instance().createSymOp("-x,y,z"));
+        Group evenBiggerGroup(symOps);
+        TS_ASSERT_EQUALS(evenBiggerGroup.order(), 3);
+
+        // Multiple occurences of the same operation do not count
+        symOps.push_back(SymmetryOperationFactory::Instance().createSymOp("-x,-y,-z"));
+        Group sameAsBefore(symOps);
+        TS_ASSERT_EQUALS(sameAsBefore.order(), 3);
+    }
+
+    void testComparison()
+    {
+        std::vector<SymmetryOperation> symOps;
+        symOps.push_back(SymmetryOperationFactory::Instance().createSymOp("x,y,z"));
+        symOps.push_back(SymmetryOperationFactory::Instance().createSymOp("-x,-y,-z"));
+
+        Group groupOne(symOps);
+        Group groupTwo(symOps);
+
+        TS_ASSERT(groupOne == groupTwo);
+        TS_ASSERT(groupTwo == groupOne);
+
+        Group defaultGroup;
+        TS_ASSERT(!(groupOne == defaultGroup));
+        TS_ASSERT(!(defaultGroup == groupOne));
+        TS_ASSERT(groupOne != defaultGroup);
+        TS_ASSERT(defaultGroup != groupOne);
+    }
+
+    void testMultiplicationOperator()
+    {
+        // We take pointgroup -1
+        std::vector<SymmetryOperation> inversion;
+        inversion.push_back(SymmetryOperationFactory::Instance().createSymOp("x,y,z"));
+        inversion.push_back(SymmetryOperationFactory::Instance().createSymOp("-x,-y,-z"));
+
+        // And 2 (b-axis unique)
+        std::vector<SymmetryOperation> twoFoldY;
+        twoFoldY.push_back(SymmetryOperationFactory::Instance().createSymOp("x,y,z"));
+        twoFoldY.push_back(SymmetryOperationFactory::Instance().createSymOp("-x,y,-z"));
+
+        Group one(inversion);
+        Group two(twoFoldY);
+
+        // Multiplication results in 2/m
+        Group three = one * two;
+        TS_ASSERT_EQUALS(three.order(), 4);
+
+        // The multiplication created m perpendicular to b (x,-y,-z)
+        SymmetryOperation mirrorY = SymmetryOperationFactory::Instance().createSymOp("x,-y,z");
+        std::vector<SymmetryOperation> opsOfThree = three.getSymmetryOperations();
+
+        // Check that it is found in the list of symmetry operations of the new group
+        TS_ASSERT_DIFFERS(std::find(opsOfThree.begin(), opsOfThree.end(), mirrorY), opsOfThree.end());
+
+        Group four = two * one;
+        TS_ASSERT(three == four);
+    }
+
+    void testSmartPointerOperators()
+    {
+        // We take pointgroup -1
+        std::vector<SymmetryOperation> inversion;
+        inversion.push_back(SymmetryOperationFactory::Instance().createSymOp("x,y,z"));
+        inversion.push_back(SymmetryOperationFactory::Instance().createSymOp("-x,-y,-z"));
+
+        // And 2 (b-axis unique)
+        std::vector<SymmetryOperation> twoFoldY;
+        twoFoldY.push_back(SymmetryOperationFactory::Instance().createSymOp("x,y,z"));
+        twoFoldY.push_back(SymmetryOperationFactory::Instance().createSymOp("-x,y,-z"));
+
+        Group_const_sptr one = boost::make_shared<const Group>(inversion);
+        Group_const_sptr two = boost::make_shared<const Group>(twoFoldY);
+
+        Group_const_sptr three = one * two;
+        TS_ASSERT_EQUALS(three->order(), 4);
+
+        SymmetryOperation mirrorY = SymmetryOperationFactory::Instance().createSymOp("x,-y,z");
+        std::vector<SymmetryOperation> opsOfThree = three->getSymmetryOperations();
+
+        // Check that it is found in the list of symmetry operations of the new group
+        TS_ASSERT_DIFFERS(std::find(opsOfThree.begin(), opsOfThree.end(), mirrorY), opsOfThree.end());
+
+        // Make sure that null-pointer do not work
+        Group_const_sptr null;
+
+        TS_ASSERT_THROWS(null * null, std::invalid_argument);
+        TS_ASSERT_THROWS(null == null, std::invalid_argument);
+        TS_ASSERT_THROWS(null != null, std::invalid_argument);
+        TS_ASSERT_THROWS(three * null, std::invalid_argument);
+        TS_ASSERT_THROWS(null * three, std::invalid_argument);
+
+        Mantid::Kernel::V3D coords(0.4, 0.3, 0.1);
+        TS_ASSERT_THROWS(null * coords, std::invalid_argument);
+    }
+
+
+};
+
+
+#endif /* MANTID_GEOMETRY_GROUPTEST_H_ */
diff --git a/Code/Mantid/Framework/Geometry/test/IsotropicAtomBraggScattererTest.h b/Code/Mantid/Framework/Geometry/test/IsotropicAtomBraggScattererTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..8a17e6a3271d72aad2b118a3d82304697d90998a
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/test/IsotropicAtomBraggScattererTest.h
@@ -0,0 +1,210 @@
+#ifndef MANTID_GEOMETRY_ISOTROPICATOMBRAGGSCATTERERTEST_H_
+#define MANTID_GEOMETRY_ISOTROPICATOMBRAGGSCATTERERTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidGeometry/Crystal/IsotropicAtomBraggScatterer.h"
+#include "MantidGeometry/Crystal/SpaceGroupFactory.h"
+
+using namespace Mantid::Geometry;
+using namespace Mantid::Kernel;
+
+class IsotropicAtomBraggScattererTest : public CxxTest::TestSuite
+{
+public:
+    // This pair of boilerplate methods prevent the suite being created statically
+    // This means the constructor isn't called when running other tests
+    static IsotropicAtomBraggScattererTest *createSuite() { return new IsotropicAtomBraggScattererTest(); }
+    static void destroySuite( IsotropicAtomBraggScattererTest *suite ) { delete suite; }
+
+
+    void testConstructor()
+    {
+        TS_ASSERT_THROWS_NOTHING(IsotropicAtomBraggScatterer scatterer);
+    }
+
+    void testProperties()
+    {
+        IsotropicAtomBraggScatterer_sptr scatterer = boost::make_shared<IsotropicAtomBraggScatterer>();
+
+        TS_ASSERT_THROWS_NOTHING(scatterer->initialize());
+
+        TS_ASSERT(scatterer->existsProperty("Position"));
+        TS_ASSERT(scatterer->existsProperty("SpaceGroup"));
+        TS_ASSERT(scatterer->existsProperty("UnitCell"));
+        TS_ASSERT(scatterer->existsProperty("U"));
+        TS_ASSERT(scatterer->existsProperty("Element"));
+        TS_ASSERT(scatterer->existsProperty("Occupancy"));
+
+    }
+
+    void testGetSetElement()
+    {
+        IsotropicAtomBraggScatterer_sptr scatterer = getInitializedScatterer();
+
+        TS_ASSERT_THROWS_NOTHING(scatterer->setProperty("Element", "Si"));
+        TS_ASSERT_EQUALS(scatterer->getElement(), "Si");
+        TS_ASSERT_EQUALS(scatterer->getNeutronAtom().z_number, 14);
+
+        TS_ASSERT_THROWS_ANYTHING(scatterer->setProperty("Element","Random"));
+    }
+
+    void testGetSetOccupancy()
+    {
+        IsotropicAtomBraggScatterer_sptr scatterer = getInitializedScatterer();
+
+        TS_ASSERT_THROWS_NOTHING(scatterer->setProperty("Occupancy", 0.3));
+        TS_ASSERT_EQUALS(scatterer->getOccupancy(), 0.3);
+        TS_ASSERT_THROWS_NOTHING(scatterer->setProperty("Occupancy", 0.0));
+        TS_ASSERT_THROWS_NOTHING(scatterer->setProperty("Occupancy", 1.0));
+
+        TS_ASSERT_THROWS(scatterer->setProperty("Occupancy", -0.3), std::invalid_argument);
+        TS_ASSERT_THROWS(scatterer->setProperty("Occupancy", 1.3), std::invalid_argument);
+    }
+
+    void testGetSetU()
+    {
+        IsotropicAtomBraggScatterer_sptr scatterer = getInitializedScatterer();
+
+        TS_ASSERT_THROWS_NOTHING(scatterer->setProperty("U", 0.0));
+        TS_ASSERT_THROWS_NOTHING(scatterer->setProperty("U", 1.0));
+        TS_ASSERT_EQUALS(scatterer->getU(), 1.0);
+
+        TS_ASSERT_THROWS_NOTHING(scatterer->setProperty("U", 1.23e12));
+        TS_ASSERT_THROWS_NOTHING(scatterer->setProperty("U", 1.23e-2));
+
+        TS_ASSERT_THROWS(scatterer->setProperty("U", -0.2), std::invalid_argument);
+    }
+
+    void testCreate()
+    {
+        IsotropicAtomBraggScatterer_sptr isotropic = getInitializedScatterer("Si", V3D(0.3, 0.1, 0.12), 1.0, 0.5);
+
+        TS_ASSERT(isotropic);
+        TS_ASSERT_EQUALS(isotropic->getElement(), "Si");
+        TS_ASSERT_EQUALS(isotropic->getOccupancy(), 0.5);
+        TS_ASSERT_EQUALS(isotropic->getU(), 1.0);
+        TS_ASSERT_EQUALS(isotropic->getPosition(), V3D(0.3, 0.1, 0.12));
+    }
+
+    void testClone()
+    {
+        UnitCell cell(5.43, 5.43, 5.43);
+        SpaceGroup_const_sptr spaceGroup = SpaceGroupFactory::Instance().createSpaceGroup("P m -3 m");
+
+        IsotropicAtomBraggScatterer_sptr scatterer = getInitializedScatterer("H", V3D(1.0, 0, 0), 0.0);
+        scatterer->setProperty("U", 3.04);
+        scatterer->setProperty("Occupancy", 0.5);
+        scatterer->setProperty("UnitCell", unitCellToStr(cell));
+        scatterer->setProperty("SpaceGroup", spaceGroup->hmSymbol());
+
+        BraggScatterer_sptr baseclone = scatterer->clone();
+        BraggScattererInCrystalStructure_sptr clone = boost::dynamic_pointer_cast<BraggScattererInCrystalStructure>(baseclone);
+
+        TS_ASSERT(clone)
+
+        TS_ASSERT_EQUALS(clone->getPosition(), scatterer->getPosition());
+        TS_ASSERT_EQUALS(clone->getCell().getG(), scatterer->getCell().getG());
+        TS_ASSERT_EQUALS(clone->getSpaceGroup()->hmSymbol(), scatterer->getSpaceGroup()->hmSymbol());
+
+        IsotropicAtomBraggScatterer_sptr scattererClone = boost::dynamic_pointer_cast<IsotropicAtomBraggScatterer>(clone);
+        TS_ASSERT(scattererClone);
+
+        TS_ASSERT_EQUALS(scattererClone->getU(), scatterer->getU());
+        TS_ASSERT_EQUALS(scattererClone->getOccupancy(), scatterer->getOccupancy());
+    }
+
+    void testCalculateStructureFactor()
+    {
+        IsotropicAtomBraggScatterer_sptr scatterer = getInitializedScatterer("Si", V3D(0.0, 0.0, 0.0), 0.0);
+
+        double bSi = scatterer->getNeutronAtom().coh_scatt_length_real;
+
+        V3D hkl(1, 0, 0);
+
+        // There's only one atom in (0,0,0) and U is 0 - rigid scatterer
+        StructureFactor structureFactor = scatterer->calculateStructureFactor(hkl);
+
+        /* Phase is (1,0,0) * (0,0,0) = (1*0 + 0*0 + 0*0) = 0
+         * cos(phase) = 1.0
+         * sin(phase) = 0.0
+         */
+        TS_ASSERT_EQUALS(structureFactor.real(), bSi);
+        TS_ASSERT_EQUALS(structureFactor.imag(), 0.0);
+
+        // For using U, the cell needs to be set, because 1/d is required
+        UnitCell cell(5.43, 5.43, 5.43);
+        scatterer->setProperty("UnitCell", unitCellToStr(cell));
+        scatterer->setProperty("U", 0.05);
+
+        structureFactor = scatterer->calculateStructureFactor(hkl);
+        /* Real part is reduced by exp(-U * 2*pi^2 * 1/d^2)
+         * d = 5.43, d^2 = 29.4849, 1/d^2 = 0.033916...
+         * exp(-0.05 * 2 * pi^2 * 1/29.4849) = 0.96708...
+         */
+        TS_ASSERT_EQUALS(structureFactor.real(), bSi * 0.96708061593352515459);
+
+        // Occupancy goes in directly
+        scatterer->setProperty("Occupancy", 0.5);
+        structureFactor = scatterer->calculateStructureFactor(hkl);
+        TS_ASSERT_EQUALS(structureFactor.real(), bSi * 0.5 * 0.96708061593352515459);
+
+        // Set a space group with F-centering
+        SpaceGroup_const_sptr spaceGroup = SpaceGroupFactory::Instance().createSpaceGroup("F m -3 m");
+        scatterer->setProperty("SpaceGroup", spaceGroup->hmSymbol());
+
+        /* Now there are 4 equivalent positions, the contributions cancel out for (1, 0, 0)
+         * scalar products are:
+         *   (1,0,0) * (0,0,0) = (1*0 + 1*0 + 1*0)         = 0    cos(0) = 1, sin(0) = 0
+         *   (1,0,0) * (0,0.5,0.5) = (1*0 + 0*0.5 + 0*0.5) = 0    cos(0) = 1, sin(0) = 0
+         *   (1,0,0) * (0.5,0,0.5) = (1*0.5 + 0*0 + 0*0.5) = 0.5  cos(pi) = -1, sin(pi) = 0
+         *   (1,0,0) * (0.5,0.5,0) = (1*0.5 + 0*0.5 + 0*0) = 0.5  cos(pi) = -1, sin(pi) = 0
+         *
+         *   That means 1 * real + 1 * real + (-1 * real) + (-1 * real) = 0
+         */
+        structureFactor = scatterer->calculateStructureFactor(hkl);
+
+        // It's not always exactly 0 (floating point math), but should not be less than 0
+        TS_ASSERT_LESS_THAN(structureFactor.real(), 1e-9);
+        TS_ASSERT_LESS_THAN_EQUALS(0, structureFactor.real());
+
+        // For (1, 1, 1), the value is defined
+        hkl = V3D(1, 1, 1);
+        structureFactor = scatterer->calculateStructureFactor(hkl);
+
+        /* scalar products are:
+         *   (1,1,1) * (0,0,0) = (1*0 + 1*0 + 1*0)         = 0  cos(0) = 1, sin(0) = 0
+         *   (1,1,1) * (0,0.5,0.5) = (1*0 + 1*0.5 + 1*0.5) = 1  cos(2pi) = 1, sin(2pi) = 0
+         *   (1,1,1) * (0.5,0,0.5) = (1*0.5 + 1*0 + 1*0.5) = 1  cos(2pi) = 1, sin(2pi) = 0
+         *   (1,1,1) * (0.5,0.5,0) = (1*0.5 + 1*0.5 + 1*0) = 1  cos(2pi) = 1, sin(2pi) = 0
+         *
+         * That means 4 * real * debye waller * occupation. d = 3.13...
+         */
+        TS_ASSERT_DELTA(structureFactor.real(), 4.0 * bSi * 0.90445723107190849637 * 0.5, 5e-16)
+    }
+
+private:
+    IsotropicAtomBraggScatterer_sptr getInitializedScatterer()
+    {
+        IsotropicAtomBraggScatterer_sptr scatterer = boost::make_shared<IsotropicAtomBraggScatterer>();
+        scatterer->initialize();
+
+        return scatterer;
+    }
+
+    IsotropicAtomBraggScatterer_sptr getInitializedScatterer(const std::string &element, const V3D &position, double U = 0.0, double occ = 1.0)
+    {
+        IsotropicAtomBraggScatterer_sptr scatterer = getInitializedScatterer();
+
+        scatterer->setProperty("Element", element);
+        scatterer->setProperty("Position", position);
+        scatterer->setProperty("U", U);
+        scatterer->setProperty("Occupancy", occ);
+
+        return scatterer;
+    }
+
+};
+
+
+#endif /* MANTID_GEOMETRY_ISOTROPICATOMBRAGGSCATTERERTEST_H_ */
diff --git a/Code/Mantid/Framework/Geometry/test/LineIntersectVisitTest.h b/Code/Mantid/Framework/Geometry/test/LineIntersectVisitTest.h
index 448aafecbc6e82ab5ce61a09f21758ffa04dc657..24765b26c2704c84f3ed00786b567cbe460dfde6 100644
--- a/Code/Mantid/Framework/Geometry/test/LineIntersectVisitTest.h
+++ b/Code/Mantid/Framework/Geometry/test/LineIntersectVisitTest.h
@@ -20,8 +20,8 @@ public:
 	void testConstructor(){
 		LineIntersectVisit A(V3D(-1.0,-1.0,-1.0),V3D(1.0,0.0,0.0));
 		TS_ASSERT_EQUALS(A.getNPoints(),0);
-		TS_ASSERT_EQUALS(A.getPoints(),std::vector<Kernel::V3D>());
-		TS_ASSERT_EQUALS(A.getDistance(),std::vector<double>());
+		TS_ASSERT_EQUALS(A.getPoints(),std::list<Kernel::V3D>());
+		TS_ASSERT_EQUALS(A.getDistance(),std::list<double>());
 	}
 
 	void testAcceptPlane(){
@@ -31,10 +31,10 @@ public:
 		TS_ASSERT_EQUALS(extractString(B),"-1 px 0\n");
 		A.Accept(B);
 		TS_ASSERT_EQUALS(A.getNPoints(),1);
-		std::vector<Kernel::V3D> Pnts;
+		std::list<Kernel::V3D> Pnts;
 		Pnts.push_back(V3D(0.0,-1.0,-1.0));
 		TS_ASSERT_EQUALS(A.getPoints(),Pnts);
-		std::vector<double> Dist;
+		std::list<double> Dist;
 		Dist.push_back(1.0);
 		TS_ASSERT_EQUALS(A.getDistance(),Dist);
 	}
@@ -45,14 +45,13 @@ public:
 		Sphere B;
 		B.setSurface("s 0.0 0.0 0.0 2");
 		A.Accept(B);
-		std::vector<V3D> pntOut;
+		std::list<V3D> pntOut;
 		// changed for forward going only intercepts on quadratice surfaces
 		//pntOut.push_back(V3D(-2.0,0.0,0.0));
 		pntOut.push_back(V3D(2.0,0.0,0.0));
 		TS_ASSERT_EQUALS(A.getNPoints(),1);
 		TS_ASSERT_EQUALS(A.getPoints(),pntOut);
-		std::vector<double> Dist;
-		//Dist.push_back(2.0);
+		std::list<double> Dist;
 		Dist.push_back(2.0);
 		TS_ASSERT_EQUALS(A.getDistance(),Dist);		
 	}
@@ -67,19 +66,13 @@ public:
 		A.Accept(B);
 		// change for forward only intercept
 		TS_ASSERT_EQUALS(A.getNPoints(),1);
-		std::vector<V3D> pntOut;
-		pntOut=A.getPoints();
-		//TS_ASSERT_DELTA(pntOut[0].X(),-1,0.0000001);
-		//TS_ASSERT_DELTA(pntOut[0].Y(),0.0,0.0000001);
-		//TS_ASSERT_DELTA(pntOut[0].Z(),0.0,0.0000001);
-		TS_ASSERT_DELTA(pntOut[0].X(),1,0.0000001);
-		TS_ASSERT_DELTA(pntOut[0].Y(),0.0,0.0000001);
-		TS_ASSERT_DELTA(pntOut[0].Z(),0.0,0.0000001);
+		const auto &pntOut = A.getPoints();
+		TS_ASSERT_DELTA(pntOut.front().X(),1,0.0000001);
+		TS_ASSERT_DELTA(pntOut.front().Y(),0.0,0.0000001);
+		TS_ASSERT_DELTA(pntOut.front().Z(),0.0,0.0000001);
 
-		std::vector<double> Dist;
-		Dist=A.getDistance();
-		TS_ASSERT_DELTA(Dist[0],1.0,0.0000001);
-		//TS_ASSERT_DELTA(Dist[1],1.0,0.0000001);		
+		const auto &Dist = A.getDistance();
+		TS_ASSERT_DELTA(Dist.front(),1.0,0.0000001);
 	}
 
 	void testAcceptCylinder(){
@@ -92,13 +85,13 @@ public:
 		TS_ASSERT_EQUALS(B.getNormal(),V3D(0,1,0));
 
 		A.Accept(B);
-		std::vector<V3D> pntOut;
+		std::list<V3D> pntOut;
 		// forward only
 		//pntOut.push_back(V3D(-1.0,0.0,0.0));
 		pntOut.push_back(V3D(1.0,0.0,0.0));
 		TS_ASSERT_EQUALS(A.getNPoints(),1);
 		TS_ASSERT_EQUALS(A.getPoints(),pntOut);
-		std::vector<double> Dist;
+		std::list<double> Dist;
 		//Dist.push_back(1.0);
 		Dist.push_back(1.0);
 		TS_ASSERT_EQUALS(A.getDistance(),Dist);	
@@ -106,14 +99,12 @@ public:
 		LineIntersectVisit C(V3D(1.1,0.0,0.0),V3D(-1.0,0.0,0.0));
 		C.Accept(B);
 		TS_ASSERT_EQUALS(C.getNPoints(),2);
-        std::vector<V3D> pntOut2;
+		std::list<V3D> pntOut2;
 		pntOut2.push_back(V3D(-1.0,0.0,0.0));
 		pntOut2.push_back(V3D(1.0,0.0,0.0));
 		TS_ASSERT_EQUALS(C.getPoints(),pntOut2);
 	}
 
-	void testAcceptGeneral(){
-	}
 private:
 
 std::string extractString(const Surface& pv)
diff --git a/Code/Mantid/Framework/Geometry/test/LineTest.h b/Code/Mantid/Framework/Geometry/test/LineTest.h
index b0a2f59dc0f65faa9c49d77c0826223f6d39c6bd..2b2d4fcf56ba7cf89d7751afbed3022420f72784 100644
--- a/Code/Mantid/Framework/Geometry/test/LineTest.h
+++ b/Code/Mantid/Framework/Geometry/test/LineTest.h
@@ -142,13 +142,12 @@ public:
 		TS_ASSERT_EQUALS(B.getRadius(),1);
 		TS_ASSERT_EQUALS(B.getNormal(),V3D(0,1,0));
 
-		std::vector<V3D> pntOut;
+		std::list<V3D> pntOut;
 		A.intersect(pntOut,B);
 
 		// forward only solution for cylinders
-		TS_ASSERT_EQUALS(pntOut.size(),1);		
-		//TS_ASSERT_EQUALS(pntOut[0],V3D(-1.0,0.0,0.0));
-		TS_ASSERT_EQUALS(pntOut[0],V3D(1.0,0.0,0.0));
+		TS_ASSERT_EQUALS(pntOut.size(),1);
+		TS_ASSERT_EQUALS(pntOut.front(),V3D(1.0,0.0,0.0));
 	}
 
   	//A Line with equation equivalent to x axis will cut A Cylinder with 1 radius with center at 0,0,0  y axis normal 
@@ -164,12 +163,13 @@ public:
 		TS_ASSERT_EQUALS(B.getRadius(),1);
 		TS_ASSERT_EQUALS(B.getNormal(),V3D(0,1,0));
 
-		std::vector<V3D> pntOut;
+		std::list<V3D> pntOut;
 		A.intersect(pntOut,B);
 
-		TS_ASSERT_EQUALS(pntOut.size(),2);	
-		TS_ASSERT_EQUALS(pntOut[0],V3D(1.0,0.0,0.0));
-		TS_ASSERT_EQUALS(pntOut[1],V3D(-1.0,0.0,0.0));
+		TS_ASSERT_EQUALS(pntOut.size(),2);
+		auto itr = pntOut.begin();
+		TS_ASSERT_EQUALS(*(itr++), V3D(1.0,0.0,0.0));
+		TS_ASSERT_EQUALS(*itr,V3D(-1.0,0.0,0.0));
 	}
 
 	//A Line with equation equivalent to x axis will cut a plane YZ with equation x=5 will cut at one point 5,0,0
@@ -181,11 +181,11 @@ public:
 
 		Plane B;
 		TS_ASSERT_EQUALS(B.setSurface("px 5 0 0"),0);
-		std::vector<V3D> pntOut;
+		std::list<V3D> pntOut;
 		A.intersect(pntOut,B);
 
-		TS_ASSERT_EQUALS(pntOut.size(),1);		
-		TS_ASSERT_EQUALS(pntOut[0],V3D(5.0,0.0,0.0));
+		TS_ASSERT_EQUALS(pntOut.size(),1);
+		TS_ASSERT_EQUALS(pntOut.front(),V3D(5.0,0.0,0.0));
 	}
 
 	//A Line with equation equivalent to x axis will cut A sphere with 2 radius with center at 0,0,0 
@@ -197,12 +197,11 @@ public:
 
 		Sphere B;
 		B.setSurface("s 0.0 0.0 0.0 2");
-		std::vector<V3D> pntOut;
+		std::list<V3D> pntOut;
 		A.intersect(pntOut,B);
 		// forward only solutions
-		TS_ASSERT_EQUALS(pntOut.size(),1);		
-		//TS_ASSERT_EQUALS(pntOut[0],V3D(-2.0,0.0,0.0));
-		TS_ASSERT_EQUALS(pntOut[0],V3D(2.0,0.0,0.0));
+		TS_ASSERT_EQUALS(pntOut.size(),1);
+		TS_ASSERT_EQUALS(pntOut.front(),V3D(2.0,0.0,0.0));
 	}
 
   //A Line with equation equivalent to x axis starting at -10 will cut A sphere with 2 radius with center at 0,0,0 
@@ -214,11 +213,12 @@ public:
 
 		Sphere B;
 		B.setSurface("s 0.0 0.0 0.0 2");
-		std::vector<V3D> pntOut;
+		std::list<V3D> pntOut;
 		A.intersect(pntOut,B);
-		TS_ASSERT_EQUALS(pntOut.size(),2);	
-		TS_ASSERT_EQUALS(pntOut[0],V3D(2.0,0.0,0.0));
-		TS_ASSERT_EQUALS(pntOut[1],V3D(-2.0,0.0,0.0));
+		TS_ASSERT_EQUALS(pntOut.size(),2);
+    auto itr = pntOut.begin();
+		TS_ASSERT_EQUALS(*(itr++), V3D(2.0,0.0,0.0));
+		TS_ASSERT_EQUALS(*itr, V3D(-2.0,0.0,0.0));
 	}
 };
 
diff --git a/Code/Mantid/Framework/Geometry/test/ObjectTest.h b/Code/Mantid/Framework/Geometry/test/ObjectTest.h
index bc51c9c2d46cca0be521e582ec090d301e12df6f..a36c79899c878383a7fb1588c96ada09a304e17a 100644
--- a/Code/Mantid/Framework/Geometry/test/ObjectTest.h
+++ b/Code/Mantid/Framework/Geometry/test/ObjectTest.h
@@ -11,18 +11,18 @@
 
 #include <boost/shared_ptr.hpp>
 
-#include "MantidKernel/V3D.h" 
-#include "MantidGeometry/Objects/Object.h" 
-#include "MantidGeometry/Surfaces/Cylinder.h" 
-#include "MantidGeometry/Surfaces/Sphere.h" 
-#include "MantidGeometry/Surfaces/Plane.h" 
-#include "MantidGeometry/Math/Algebra.h" 
-#include "MantidGeometry/Surfaces/SurfaceFactory.h" 
-#include "MantidGeometry/Objects/Track.h" 
+#include "MantidGeometry/Objects/Object.h"
+#include "MantidGeometry/Surfaces/Cylinder.h"
+#include "MantidGeometry/Surfaces/Sphere.h"
+#include "MantidGeometry/Surfaces/Plane.h"
+#include "MantidGeometry/Math/Algebra.h"
+#include "MantidGeometry/Surfaces/SurfaceFactory.h"
+#include "MantidGeometry/Objects/Track.h"
 #include "MantidGeometry/Rendering/GluGeometryHandler.h"
-#include "MantidGeometry/Objects/BoundingBox.h"
 #include "MantidGeometry/Objects/ShapeFactory.h"
 
+#include "MantidKernel/Material.h"
+
 #include "MantidTestHelpers/ComponentCreationHelper.h"
 
 using namespace Mantid;
@@ -34,6 +34,25 @@ class ObjectTest: public CxxTest::TestSuite
 
 public:
 
+  void testDefaultObjectHasEmptyMaterial()
+  {
+    Object obj;
+
+    TSM_ASSERT_DELTA("Expected a zero number density",0.0, obj.material().numberDensity(), 1e-12);
+  }
+
+  void testObjectSetMaterialReplacesExisting()
+  {
+    using Mantid::Kernel::Material;
+    Object obj;
+
+    TSM_ASSERT_DELTA("Expected a zero number density", 0.0,
+                     obj.material().numberDensity(), 1e-12);
+    obj.setMaterial(Material("arm", PhysicalConstants::getNeutronAtom(13), 45.0));
+    TSM_ASSERT_DELTA("Expected a number density of 45", 45.0,
+                     obj.material().numberDensity(), 1e-12);
+  }
+
   void testCopyConstructorGivesObjectWithSameAttributes()
   {
     Object_sptr original = ComponentCreationHelper::createSphere(1.0, V3D(), "sphere");
@@ -224,7 +243,7 @@ public:
 
   void testGetBoundingBoxForSphere()
   {
-    Object_sptr geom_obj = createSphere();    
+    Object_sptr geom_obj = createSphere();
     const double tolerance(1e-10);
 
     double xmax,ymax,zmax,xmin,ymin,zmin;
@@ -279,10 +298,10 @@ public:
     SphSurMap[41]->setSurface(S41);
     SphSurMap[41]->setName(41);
 
-    // A sphere 
+    // A sphere
     std::string ObjSphere="-41" ;
 
-    Object_sptr geom_obj = Object_sptr(new Object); 
+    Object_sptr geom_obj = Object_sptr(new Object);
     geom_obj->setObject(41,ObjSphere);
     geom_obj->populate(SphSurMap);
 
@@ -292,7 +311,7 @@ public:
     // format = startPoint, endPoint, total distance so far
     // forward only intercepts means that start point should be track origin
     expectedResults.push_back(Link(V3D(-1,1.5,1),
-      V3D(sqrt(16-0.25)+1,1.5,1.0),sqrt(15.75)+2));
+      V3D(sqrt(16-0.25)+1,1.5,1.0),sqrt(15.75)+2,*geom_obj));
 
     checkTrackIntercept(geom_obj,track,expectedResults);
   }
@@ -304,7 +323,7 @@ public:
     Track track(V3D(0,-10,0),V3D(0,1,0));
 
     //format = startPoint, endPoint, total distance so far
-    expectedResults.push_back(Link(V3D(0,-4.1,0),V3D(0,4.1,0),14.1));
+    expectedResults.push_back(Link(V3D(0,-4.1,0),V3D(0,4.1,0),14.1,*geom_obj));
 
     checkTrackIntercept(geom_obj,track,expectedResults);
   }
@@ -316,7 +335,7 @@ public:
     Track track(V3D(-10,0,0),V3D(1,0,0));
 
     //format = startPoint, endPoint, total distance so far
-    expectedResults.push_back(Link(V3D(-4.1,0,0),V3D(4.1,0,0),14.1));
+    expectedResults.push_back(Link(V3D(-4.1,0,0),V3D(4.1,0,0),14.1,*geom_obj));
     checkTrackIntercept(geom_obj,track,expectedResults);
   }
 
@@ -325,7 +344,7 @@ public:
     std::vector<Link> expectedResults;
     Object_sptr geom_obj = createCappedCylinder();
     //format = startPoint, endPoint, total distance so far
-    expectedResults.push_back(Link(V3D(0,-3,0),V3D(0,3,0),13));
+    expectedResults.push_back(Link(V3D(0,-3,0),V3D(0,3,0),13,*geom_obj));
 
     Track track(V3D(0,-10,0),V3D(0,1,0));
     checkTrackIntercept(geom_obj,track,expectedResults);
@@ -338,7 +357,7 @@ public:
     Track track(V3D(-10,0,0),V3D(1,0,0));
 
     //format = startPoint, endPoint, total distance so far
-    expectedResults.push_back(Link(V3D(-3.2,0,0),V3D(1.2,0,0),11.2));
+    expectedResults.push_back(Link(V3D(-3.2,0,0),V3D(1.2,0,0),11.2,*geom_obj));
     checkTrackIntercept(geom_obj,track,expectedResults);
   }
 
@@ -399,8 +418,8 @@ public:
     TS_ASSERT(object2.interceptSurface(TL)!=0);
 
     std::vector<Link> expectedResults;
-    expectedResults.push_back(Link(V3D(-1,0,0),V3D(1,0,0),6));
-    expectedResults.push_back(Link(V3D(4.5,0,0),V3D(6.5,0,0),11.5));
+    expectedResults.push_back(Link(V3D(-1,0,0),V3D(1,0,0),6,object1));
+    expectedResults.push_back(Link(V3D(4.5,0,0),V3D(6.5,0,0),11.5,object2));
     checkTrackIntercept(TL,expectedResults);
 
   }
@@ -430,8 +449,8 @@ public:
     TS_ASSERT(object2.interceptSurface(TL)!=0);
 
     std::vector<Link> expectedResults;
-    expectedResults.push_back(Link(V3D(-1,0,0),V3D(1,0,0),6));
-    expectedResults.push_back(Link(V3D(1,0,0),V3D(6.5,0,0),11.5));
+    expectedResults.push_back(Link(V3D(-1,0,0),V3D(1,0,0),6, object1));
+    expectedResults.push_back(Link(V3D(1,0,0),V3D(6.5,0,0),11.5, object2));
 
     checkTrackIntercept(TL,expectedResults);
 
@@ -463,9 +482,9 @@ public:
     TS_ASSERT(object2.interceptSurface(TL)!=0);
 
     std::vector<Link> expectedResults;
-    expectedResults.push_back(Link(V3D(-1,0,0),V3D(-0.8,0,0),4.2));
-    expectedResults.push_back(Link(V3D(-0.8,0,0),V3D(0.8,0,0),5.8));
-    expectedResults.push_back(Link(V3D(0.8,0,0),V3D(1,0,0),6));
+    expectedResults.push_back(Link(V3D(-1,0,0),V3D(-0.8,0,0),4.2,object1));
+    expectedResults.push_back(Link(V3D(-0.8,0,0),V3D(0.8,0,0),5.8,object1));
+    expectedResults.push_back(Link(V3D(0.8,0,0),V3D(1,0,0),6,object2));
     checkTrackIntercept(TL,expectedResults);
   }
 
@@ -495,9 +514,9 @@ public:
     TS_ASSERT(object2.interceptSurface(TL)!=0);
 
     std::vector<Link> expectedResults;
-    expectedResults.push_back(Link(V3D(-1,0,0),V3D(-0.4,0,0),4.6));
-    expectedResults.push_back(Link(V3D(-0.4,0,0),V3D(0.2,0,0),5.2));
-    expectedResults.push_back(Link(V3D(0.2,0,0),V3D(1,0,0),6));
+    expectedResults.push_back(Link(V3D(-1,0,0),V3D(-0.4,0,0),4.6,object1));
+    expectedResults.push_back(Link(V3D(-0.4,0,0),V3D(0.2,0,0),5.2,object1));
+    expectedResults.push_back(Link(V3D(0.2,0,0),V3D(1,0,0),6,object2));
     checkTrackIntercept(TL,expectedResults);
   }
 
@@ -814,7 +833,7 @@ public:
 private:
 
   /// Surface type
-  typedef std::map<int,Surface*> STYPE ; 
+  typedef std::map<int,Surface*> STYPE ;
 
   /// set timeTest true to get time comparisons of soild angle methods
   const static bool timeTest=false;
@@ -840,11 +859,11 @@ private:
     CylSurMap[32]->setName(32);
     CylSurMap[33]->setName(33);
 
-    // Capped cylinder (id 21) 
+    // Capped cylinder (id 21)
     // using surface ids: 31 (cylinder) 32 (plane (top) ) and 33 (plane (base))
     std::string ObjCapCylinder="-31 -32 33";
 
-    Object_sptr retVal = Object_sptr(new Object); 
+    Object_sptr retVal = Object_sptr(new Object);
     retVal->setObject(21,ObjCapCylinder);
     retVal->populate(CylSurMap);
 
@@ -874,11 +893,11 @@ private:
     CylSurMap[32]->setName(32);
     CylSurMap[33]->setName(33);
 
-    // Capped cylinder (id 21) 
+    // Capped cylinder (id 21)
     // using surface ids: 31 (cylinder) 32 (plane (top) ) and 33 (plane (base))
     std::string ObjCapCylinder="-31 -32 33";
 
-    Object_sptr retVal = Object_sptr(new Object); 
+    Object_sptr retVal = Object_sptr(new Object);
     retVal->setObject(21,ObjCapCylinder);
     retVal->populate(CylSurMap);
 
@@ -895,10 +914,10 @@ private:
     SphSurMap[41]->setSurface(S41);
     SphSurMap[41]->setName(41);
 
-    // A sphere 
+    // A sphere
     std::string ObjSphere="-41" ;
 
-    Object_sptr retVal = Object_sptr(new Object); 
+    Object_sptr retVal = Object_sptr(new Object);
     retVal->setObject(41,ObjSphere);
     retVal->populate(SphSurMap);
 
@@ -957,7 +976,7 @@ private:
     // Note that the testObject now manages the "new Plane"
     Geometry::Surface* A;
     for(vc=SurfLine.begin();vc!=SurfLine.end();vc++)
-    {  
+    {
       A=Geometry::SurfaceFactory::Instance()->processLine(vc->second);
       if (!A)
       {
@@ -1003,11 +1022,11 @@ private:
     CubeSurMap[5]->setName(5);
     CubeSurMap[6]->setName(6);
 
-    // Cube (id 68) 
+    // Cube (id 68)
     // using surface ids:  1-6
     std::string ObjCube="1 -2 3 -4 5 -6";
 
-    Object_sptr retVal = Object_sptr(new Object); 
+    Object_sptr retVal = Object_sptr(new Object);
     retVal->setObject(68,ObjCube);
     retVal->populate(CubeSurMap);
 
@@ -1046,11 +1065,11 @@ private:
     CubeSurMap[5]->setName(5);
     CubeSurMap[6]->setName(6);
 
-    // Cube (id 68) 
+    // Cube (id 68)
     // using surface ids:  1-6
     std::string ObjCube="1 -2 3 -4 5 -6";
 
-    Object_sptr retVal = Object_sptr(new Object); 
+    Object_sptr retVal = Object_sptr(new Object);
     retVal->setObject(68,ObjCube);
     retVal->populate(CubeSurMap);
 
diff --git a/Code/Mantid/Framework/Geometry/test/ProductOfCyclicGroupsTest.h b/Code/Mantid/Framework/Geometry/test/ProductOfCyclicGroupsTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..a4159c15524ba42a5e655da29a80a45eef8c4661
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/test/ProductOfCyclicGroupsTest.h
@@ -0,0 +1,89 @@
+#ifndef MANTID_GEOMETRY_PRODUCTGROUPTEST_H_
+#define MANTID_GEOMETRY_PRODUCTGROUPTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidGeometry/Crystal/ProductOfCyclicGroups.h"
+#include "MantidGeometry/Crystal/CyclicGroup.h"
+#include "MantidGeometry/Crystal/SymmetryOperationFactory.h"
+
+using namespace Mantid::Geometry;
+
+class ProductOfCyclicGroupsTest : public CxxTest::TestSuite
+{
+public:
+    // This pair of boilerplate methods prevent the suite being created statically
+    // This means the constructor isn't called when running other tests
+    static ProductOfCyclicGroupsTest *createSuite() { return new ProductOfCyclicGroupsTest(); }
+    static void destroySuite( ProductOfCyclicGroupsTest *suite ) { delete suite; }
+
+
+    void testStringConstructor()
+    {
+        TS_ASSERT_THROWS_NOTHING(ProductOfCyclicGroups group("x,y,z"));
+
+        TS_ASSERT_THROWS_ANYTHING(ProductOfCyclicGroups group("x,y,z; doesnt work"));
+        TS_ASSERT_THROWS_ANYTHING(ProductOfCyclicGroups group("x,y,z| z,x,y"));
+    }
+
+    void testVectorConstructor()
+    {
+        std::vector<Group_const_sptr> groups;
+        groups.push_back(GroupFactory::create<CyclicGroup>("-x,-y,-z"));
+        groups.push_back(GroupFactory::create<CyclicGroup>("x,-y,z"));
+
+        TS_ASSERT_THROWS_NOTHING(ProductOfCyclicGroups group(groups));
+
+        Group_const_sptr null;
+        groups.push_back(null);
+
+        TS_ASSERT_THROWS_ANYTHING(ProductOfCyclicGroups group(groups));
+    }
+
+    void testGetGeneratedGroup()
+    {
+        TestableProductOfCyclicGroups group;
+
+        Group_const_sptr generatedGroup = group.getGeneratedGroup("-x,-y,-z; x,-y,z");
+
+        // Inversion generates 1, -1; Mirror 1, m [010] -> results in 1, -1, m [010], 2 [010]
+        TS_ASSERT_EQUALS(generatedGroup->order(), 4);
+    }
+
+    void testGetFactorGroups()
+    {
+        TestableProductOfCyclicGroups group;
+
+        std::vector<SymmetryOperation> symmetryOperations = SymmetryOperationFactory::Instance().createSymOps("-x,-y,-z; x,-y,z");
+        std::vector<Group_const_sptr> generatedGroup = group.getFactorGroups(symmetryOperations);
+        // one group for each symmetry operation
+        TS_ASSERT_EQUALS(generatedGroup.size(), 2);
+    }
+
+    void testGetProductOfCyclicGroups()
+    {
+        TestableProductOfCyclicGroups group;
+
+        std::vector<Group_const_sptr> groups;
+        groups.push_back(GroupFactory::create<CyclicGroup>("-x,-y,-z"));
+        groups.push_back(GroupFactory::create<CyclicGroup>("x,-y,z"));
+
+        Group_const_sptr productGroup = group.getProductOfCyclicGroups(groups);
+
+        TS_ASSERT_EQUALS(productGroup->order(), 4);
+    }
+
+private:
+    class TestableProductOfCyclicGroups : public ProductOfCyclicGroups
+    {
+        friend class ProductOfCyclicGroupsTest;
+    public:
+        TestableProductOfCyclicGroups() :
+            ProductOfCyclicGroups("x,y,z") { }
+        ~TestableProductOfCyclicGroups() { }
+    };
+
+};
+
+
+#endif /* MANTID_GEOMETRY_PRODUCTGROUPTEST_H_ */
diff --git a/Code/Mantid/Framework/Geometry/test/SpaceGroupFactoryTest.h b/Code/Mantid/Framework/Geometry/test/SpaceGroupFactoryTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..5803c6dfd5430b68dbbb356254fe535b9f6c00ab
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/test/SpaceGroupFactoryTest.h
@@ -0,0 +1,181 @@
+#ifndef MANTID_GEOMETRY_SPACEGROUPFACTORYTEST_H_
+#define MANTID_GEOMETRY_SPACEGROUPFACTORYTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidGeometry/Crystal/SpaceGroupFactory.h"
+
+using namespace  Mantid::Geometry;
+using Mantid::Kernel::V3D;
+
+class SpaceGroupFactoryTest : public CxxTest::TestSuite
+{
+public:
+    // This pair of boilerplate methods prevent the suite being created statically
+    // This means the constructor isn't called when running other tests
+    static SpaceGroupFactoryTest *createSuite() { return new SpaceGroupFactoryTest(); }
+    static void destroySuite( SpaceGroupFactoryTest *suite ) { delete suite; }
+
+    void testInstance()
+    {
+        TS_ASSERT_THROWS_NOTHING(SpaceGroupFactory::Instance());
+    }
+
+    void testSubscribeGeneratedSpaceGroup()
+    {
+        TestableSpaceGroupFactory factory;
+
+        TS_ASSERT(!factory.isSubscribed(2));
+        TS_ASSERT(!factory.isSubscribed("P-1"));
+
+        TS_ASSERT_THROWS_NOTHING(factory.subscribeGeneratedSpaceGroup(2, "P-1", "-x,-y,-z"));
+
+        TS_ASSERT(factory.isSubscribed(2));
+        TS_ASSERT(factory.isSubscribed("P-1"));
+
+        // subscribing twice does not work
+        TS_ASSERT_THROWS(factory.subscribeGeneratedSpaceGroup(2, "P-1", "-x,-y,-z"), std::invalid_argument);
+
+
+        // but having a different symbol for the same number is ok.
+        TS_ASSERT_THROWS_NOTHING(factory.subscribeGeneratedSpaceGroup(2, "F-1", "-x,-y,-z"))
+
+        // neither does with a tabulated space group
+        TS_ASSERT_THROWS(factory.subscribeTabulatedSpaceGroup(2, "P-1", "x,y,z; -x,-y,-z"), std::invalid_argument);
+
+        // Different number with same symbol - does not work
+        TS_ASSERT_THROWS(factory.subscribeGeneratedSpaceGroup(3, "P-1", "-x,-y,-z"), std::invalid_argument);
+
+        // invalid generators are caught before anything is done
+        TS_ASSERT_THROWS_ANYTHING(factory.subscribeGeneratedSpaceGroup(4, "Fake", "invalid"));
+
+        TS_ASSERT(!factory.isSubscribed(4));
+        TS_ASSERT(!factory.isSubscribed("Fake"));
+    }
+
+    void testSubscribeTabulatedSpaceGroup()
+    {
+        TestableSpaceGroupFactory factory;
+
+        TS_ASSERT(!factory.isSubscribed(2));
+        TS_ASSERT(!factory.isSubscribed("P-1"));
+
+        TS_ASSERT_THROWS_NOTHING(factory.subscribeTabulatedSpaceGroup(2, "P-1", "x,y,z; -x,-y,-z"));
+
+        TS_ASSERT(factory.isSubscribed(2));
+        TS_ASSERT(factory.isSubscribed("P-1"));
+
+        // subscribing twice does not work
+        TS_ASSERT_THROWS(factory.subscribeTabulatedSpaceGroup(2, "P-1", "x,y,z; -x,-y,-z"), std::invalid_argument);
+
+        // but having a different symbol for the same number is ok.
+        TS_ASSERT_THROWS_NOTHING(factory.subscribeTabulatedSpaceGroup(2, "F-1", "x,y,z; -x,-y,-z"))
+
+        // neither does with a generated space group
+        TS_ASSERT_THROWS(factory.subscribeGeneratedSpaceGroup(2, "P-1", "-x,-y,-z"), std::invalid_argument);
+
+        // Different number with same symbol - does not work
+        TS_ASSERT_THROWS(factory.subscribeTabulatedSpaceGroup(3, "P-1", "-x,-y,-z"), std::invalid_argument);
+
+        // invalid generators are caught before anything is done
+        TS_ASSERT_THROWS_ANYTHING(factory.subscribeTabulatedSpaceGroup(4, "Fake", "invalid"));
+
+        TS_ASSERT(!factory.isSubscribed(4));
+        TS_ASSERT(!factory.isSubscribed("Fake"));
+    }
+
+    void testIsSubscribed()
+    {
+        TestableSpaceGroupFactory factory;
+
+        TS_ASSERT(!factory.isSubscribed(1));
+
+        TS_ASSERT(!factory.isSubscribed(2));
+        TS_ASSERT(!factory.isSubscribed("P-1"));
+
+        TS_ASSERT_THROWS_NOTHING(factory.subscribeTabulatedSpaceGroup(2, "P-1", "x,y,z; -x,-y,-z"));
+
+        TS_ASSERT(factory.isSubscribed(2));
+        TS_ASSERT(factory.isSubscribed("P-1"));
+
+        TS_ASSERT(!factory.isSubscribed(1));
+    }
+
+    void testSubscribedSpaceGroupSymbols()
+    {
+        TestableSpaceGroupFactory factory;
+
+        TS_ASSERT(factory.subscribedSpaceGroupSymbols().empty());
+
+        TS_ASSERT_THROWS_NOTHING(factory.subscribeTabulatedSpaceGroup(2, "P-1", "x,y,z; -x,-y,-z"));
+
+        std::vector<std::string> symbols = factory.subscribedSpaceGroupSymbols();
+        TS_ASSERT_EQUALS(symbols.size(), 1);
+        TS_ASSERT_DIFFERS(std::find(symbols.begin(), symbols.end(), "P-1"), symbols.end());
+
+        TS_ASSERT_THROWS_NOTHING(factory.subscribeTabulatedSpaceGroup(1, "P1", "x,y,z"));
+        symbols = factory.subscribedSpaceGroupSymbols();
+        TS_ASSERT_EQUALS(symbols.size(), 2);
+        TS_ASSERT_DIFFERS(std::find(symbols.begin(), symbols.end(), "P1"), symbols.end());
+    }
+
+    void testSubscribedSpaceGroupNumbers()
+    {
+        TestableSpaceGroupFactory factory;
+
+        TS_ASSERT(factory.subscribedSpaceGroupNumbers().empty());
+
+        TS_ASSERT_THROWS_NOTHING(factory.subscribeTabulatedSpaceGroup(2, "P-1", "x,y,z; -x,-y,-z"));
+
+        std::vector<size_t> numbers = factory.subscribedSpaceGroupNumbers();
+        TS_ASSERT_EQUALS(numbers.size(), 1);
+        TS_ASSERT_DIFFERS(std::find(numbers.begin(), numbers.end(), 2), numbers.end());
+
+        TS_ASSERT_THROWS_NOTHING(factory.subscribeTabulatedSpaceGroup(1, "P1", "x,y,z"));
+        numbers = factory.subscribedSpaceGroupNumbers();
+        TS_ASSERT_EQUALS(numbers.size(), 2);
+        TS_ASSERT_DIFFERS(std::find(numbers.begin(), numbers.end(), 1), numbers.end());
+
+        // Subscribing the same number twice should not influence vector size
+        TS_ASSERT_THROWS_NOTHING(factory.subscribeTabulatedSpaceGroup(1, "F1", "x,y,z"));
+        numbers = factory.subscribedSpaceGroupNumbers();
+        TS_ASSERT_EQUALS(numbers.size(), 2);
+    }
+
+    void testSubscribedSpaceGroupSymbolsForNumber()
+    {
+        TestableSpaceGroupFactory factory;
+        factory.subscribeTabulatedSpaceGroup(2, "P-1", "x,y,z; -x,-y,-z");
+        factory.subscribeTabulatedSpaceGroup(2, "F-1", "x,y,z; -x,-y,-z");
+        factory.subscribeTabulatedSpaceGroup(1, "P1", "x,y,z");
+
+        std::vector<std::string> symbols = factory.subscribedSpaceGroupSymbols(1);
+        TS_ASSERT_EQUALS(symbols.size(), 1);
+
+        symbols = factory.subscribedSpaceGroupSymbols(2);
+        TS_ASSERT_EQUALS(symbols.size(), 2);
+    }
+
+    void testUnsubscribeSymbol()
+    {
+        TestableSpaceGroupFactory factory;
+
+        TS_ASSERT_THROWS(factory.unsubscribeSpaceGroup("P-1"), std::invalid_argument);
+
+        TS_ASSERT_THROWS_NOTHING(factory.subscribeTabulatedSpaceGroup(2, "P-1", "x,y,z; -x,-y,-z"));
+        TS_ASSERT_THROWS_NOTHING(factory.unsubscribeSpaceGroup("P-1"));
+    }
+
+private:
+    class TestableSpaceGroupFactory : public SpaceGroupFactoryImpl
+    {
+        friend class SpaceGroupFactoryTest;
+    public:
+        TestableSpaceGroupFactory() : SpaceGroupFactoryImpl() { }
+        ~TestableSpaceGroupFactory() { }
+    };
+
+};
+
+
+#endif /* MANTID_GEOMETRY_SPACEGROUPFACTORYTEST_H_ */
diff --git a/Code/Mantid/Framework/Geometry/test/SpaceGroupTest.h b/Code/Mantid/Framework/Geometry/test/SpaceGroupTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..92aabd1b36c90ae9ad77204fe7eddd27a2e8772d
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/test/SpaceGroupTest.h
@@ -0,0 +1,77 @@
+#ifndef MANTID_GEOMETRY_SPACEGROUPTEST_H_
+#define MANTID_GEOMETRY_SPACEGROUPTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidGeometry/Crystal/SpaceGroup.h"
+#include "MantidGeometry/Crystal/SymmetryOperationFactory.h"
+#include "MantidGeometry/Crystal/CyclicGroup.h"
+#include "MantidKernel/V3D.h"
+
+using namespace Mantid::Geometry;
+using Mantid::Kernel::V3D;
+
+class SpaceGroupTest : public CxxTest::TestSuite
+{
+public:
+    // This pair of boilerplate methods prevent the suite being created statically
+    // This means the constructor isn't called when running other tests
+    static SpaceGroupTest *createSuite() { return new SpaceGroupTest(); }
+    static void destroySuite( SpaceGroupTest *suite ) { delete suite; }
+
+
+    void testConstruction()
+    {
+        Group_const_sptr inversion = GroupFactory::create<CyclicGroup>("-x,-y,-z");
+        SpaceGroup p1bar(2, "P-1", *inversion);
+
+        TS_ASSERT_EQUALS(p1bar.number(), 2);
+        TS_ASSERT_EQUALS(p1bar.hmSymbol(), "P-1");
+        TS_ASSERT_EQUALS(p1bar.order(), 2);
+        TS_ASSERT_EQUALS(p1bar.getSymmetryOperations().size(), 2);
+    }
+
+    void testNumber()
+    {
+        TestableSpaceGroup empty;
+        TS_ASSERT_EQUALS(empty.number(), 0);
+
+        empty.m_number = 2;
+        TS_ASSERT_EQUALS(empty.number(), 2);
+    }
+
+    void testSymbol()
+    {
+        TestableSpaceGroup empty;
+        TS_ASSERT_EQUALS(empty.hmSymbol(), "");
+
+        empty.m_hmSymbol = "Test";
+        TS_ASSERT_EQUALS(empty.hmSymbol(), "Test");
+    }
+
+    void testAssignmentOperator()
+    {
+        Group_const_sptr inversion = GroupFactory::create<CyclicGroup>("-x,-y,-z");
+        SpaceGroup p1bar(2, "P-1", *inversion);
+
+        SpaceGroup other = p1bar;
+
+        TS_ASSERT_EQUALS(other.number(), p1bar.number());
+        TS_ASSERT_EQUALS(other.hmSymbol(), p1bar.hmSymbol());
+        TS_ASSERT_EQUALS(other.order(), p1bar.order());
+    }
+
+private:
+    class TestableSpaceGroup : public SpaceGroup {
+        friend class SpaceGroupTest;
+    public:
+        TestableSpaceGroup() :
+            SpaceGroup(0, "", Group())
+        { }
+
+        ~TestableSpaceGroup() { }
+    };
+};
+
+
+#endif /* MANTID_GEOMETRY_SPACEGROUPTEST_H_ */
diff --git a/Code/Mantid/Framework/Geometry/test/SymmetryOperationFactoryTest.h b/Code/Mantid/Framework/Geometry/test/SymmetryOperationFactoryTest.h
index 79242eee1bdef38f0fe5c08e9e671556f03ec1d7..50db96be1f8bc352dc1560c78ee9a50ca3a0c1e9 100644
--- a/Code/Mantid/Framework/Geometry/test/SymmetryOperationFactoryTest.h
+++ b/Code/Mantid/Framework/Geometry/test/SymmetryOperationFactoryTest.h
@@ -47,6 +47,44 @@ public:
         TS_ASSERT_EQUALS(SymmetryOperationFactory::Instance().isSubscribed("x,y,z"), true);
     }
 
+    void testCreateSymOpsVector()
+    {
+        std::vector<std::string> opStrings;
+        opStrings.push_back("x,y,z");
+
+        std::vector<SymmetryOperation> symOps = SymmetryOperationFactory::Instance().createSymOps(opStrings);
+        TS_ASSERT_EQUALS(symOps.size(), 1);
+        TS_ASSERT_EQUALS(symOps.front().identifier(), "x,y,z");
+
+        // Add another one
+        opStrings.push_back("-x,-y,-z");
+
+        TS_ASSERT_THROWS_NOTHING(symOps = SymmetryOperationFactory::Instance().createSymOps(opStrings));
+        TS_ASSERT_EQUALS(symOps.size(), 2);
+        TS_ASSERT_EQUALS(symOps.front().identifier(), "x,y,z");
+        TS_ASSERT_EQUALS(symOps.back().identifier(), "-x,-y,-z");
+
+        opStrings.push_back("doesNotWork");
+        TS_ASSERT_THROWS(symOps = SymmetryOperationFactory::Instance().createSymOps(opStrings), Mantid::Kernel::Exception::ParseError);
+    }
+
+    void testCreateSymOpsString()
+    {
+        std::string validOne("-x,-y,-z");
+        std::string validTwo("-x,-y,-z; x+1/2,y+1/2,z+1/2");
+        std::string validThree("-x,-y,-z; x+1/2,y+1/2,z+1/2; x,-y,z");
+
+        TS_ASSERT_THROWS_NOTHING(SymmetryOperationFactory::Instance().createSymOps(validOne));
+        TS_ASSERT_THROWS_NOTHING(SymmetryOperationFactory::Instance().createSymOps(validTwo));
+        TS_ASSERT_THROWS_NOTHING(SymmetryOperationFactory::Instance().createSymOps(validThree));
+
+        std::string invalidSep("-x,-y,-z | x+1/2,y+1/2,z+1/2");
+        std::string invalidOne("-x,-y,-z; invalid");
+
+        TS_ASSERT_THROWS(SymmetryOperationFactory::Instance().createSymOps(invalidSep), Mantid::Kernel::Exception::ParseError);
+        TS_ASSERT_THROWS(SymmetryOperationFactory::Instance().createSymOps(invalidOne), Mantid::Kernel::Exception::ParseError);
+    }
+
     void testUnsubscribe()
     {
         TS_ASSERT_EQUALS(SymmetryOperationFactory::Instance().isSubscribed("x,y,z"), true);
diff --git a/Code/Mantid/Framework/Geometry/test/TrackTest.h b/Code/Mantid/Framework/Geometry/test/TrackTest.h
index 0e1ad153792bfb811936fa1acd330d08df79d478..b1cfb51fd7f9015acb9a92eac8647014ae9df4f0 100644
--- a/Code/Mantid/Framework/Geometry/test/TrackTest.h
+++ b/Code/Mantid/Framework/Geometry/test/TrackTest.h
@@ -15,110 +15,115 @@ using Mantid::Kernel::V3D;
 class TrackTest : public CxxTest::TestSuite
 {
 public:
-	void testConstructor(){
-		Track A(V3D(0,0,0),V3D(1.0,0.0,0.0));
-		TS_ASSERT_EQUALS(A.startPoint(),V3D(0.0,0.0,0));
-		TS_ASSERT_EQUALS(A.direction(),V3D(1.0,0.0,0.0));
-	}
+  void testConstructor(){
+    Track A(V3D(0,0,0),V3D(1.0,0.0,0.0));
+    TS_ASSERT_EQUALS(A.startPoint(),V3D(0.0,0.0,0));
+    TS_ASSERT_EQUALS(A.direction(),V3D(1.0,0.0,0.0));
+  }
 
-	void testTrackParamConstructor(){
-		Track A(V3D(1,1,1),V3D(1.0,0.0,0.0));
-		TS_ASSERT_EQUALS(A.startPoint(),V3D(1.0,1.0,1));
-		TS_ASSERT_EQUALS(A.direction(),V3D(1.0,0.0,0.0));
-		Track B(A);
-		TS_ASSERT_EQUALS(B.startPoint(),V3D(1.0,1.0,1));
-		TS_ASSERT_EQUALS(B.direction(),V3D(1.0,0.0,0.0));
-	}
+  void testTrackParamConstructor(){
+    Track A(V3D(1,1,1),V3D(1.0,0.0,0.0));
+    TS_ASSERT_EQUALS(A.startPoint(),V3D(1.0,1.0,1));
+    TS_ASSERT_EQUALS(A.direction(),V3D(1.0,0.0,0.0));
+    Track B(A);
+    TS_ASSERT_EQUALS(B.startPoint(),V3D(1.0,1.0,1));
+    TS_ASSERT_EQUALS(B.direction(),V3D(1.0,0.0,0.0));
+  }
 
-	void testIterator(){
-		Track A(V3D(1,1,1),V3D(1.0,0.0,0.0));
-		Track::LType::const_iterator iterBegin=A.begin();
-		Track::LType::const_iterator iterEnd=A.end();
-		TS_ASSERT_EQUALS(iterBegin,iterEnd);
-	}
+  void testIterator(){
+    Track A(V3D(1,1,1),V3D(1.0,0.0,0.0));
+    Track::LType::const_iterator iterBegin=A.begin();
+    Track::LType::const_iterator iterEnd=A.end();
+    TS_ASSERT_EQUALS(iterBegin,iterEnd);
+  }
 
-	void testAddLink(){
-		Track A(V3D(1,1,1),V3D(1.0,0.0,0.0));
-		A.addLink(V3D(2,2,2),V3D(3,3,3),2.0,NULL);
-		Track::LType::const_iterator iterBegin=A.begin();
-		Track::LType::const_iterator iterEnd=A.end();
-		iterBegin++;
-		TS_ASSERT_EQUALS(iterBegin,iterEnd);
-	}
+  void testAddLink(){
+    Track A(V3D(1,1,1),V3D(1.0,0.0,0.0));
+    Object shape;
+    A.addLink(V3D(2,2,2),V3D(3,3,3),2.0, shape, NULL);
+    Track::LType::const_iterator iterBegin=A.begin();
+    Track::LType::const_iterator iterEnd=A.end();
+    iterBegin++;
+    TS_ASSERT_EQUALS(iterBegin,iterEnd);
+  }
 
-	void testreset(){
-		Track A(V3D(1,1,1),V3D(1.0,0.0,0.0));
-		TS_ASSERT_EQUALS(A.startPoint(),V3D(1.0,1.0,1));
-		TS_ASSERT_EQUALS(A.direction(),V3D(1.0,0.0,0.0));
-		A.reset(V3D(2,2,2),V3D(0.0,1.0,0.0));
-		TS_ASSERT_EQUALS(A.startPoint(),V3D(2.0,2.0,2));
-		TS_ASSERT_EQUALS(A.direction(),V3D(0.0,1.0,0.0));
-	}
+  void testreset(){
+    Track A(V3D(1,1,1),V3D(1.0,0.0,0.0));
+    TS_ASSERT_EQUALS(A.startPoint(),V3D(1.0,1.0,1));
+    TS_ASSERT_EQUALS(A.direction(),V3D(1.0,0.0,0.0));
+    A.reset(V3D(2,2,2),V3D(0.0,1.0,0.0));
+    TS_ASSERT_EQUALS(A.startPoint(),V3D(2.0,2.0,2));
+    TS_ASSERT_EQUALS(A.direction(),V3D(0.0,1.0,0.0));
+  }
 
-	void testAssignment(){ //Also have to test the Links and Points
-		Track A(V3D(1,1,1),V3D(1.0,0.0,0.0));
-		TS_ASSERT_EQUALS(A.startPoint(),V3D(1.0,1.0,1));
-		TS_ASSERT_EQUALS(A.direction(),V3D(1.0,0.0,0.0));
-		Track B(V3D(2,2,2),V3D(0.0,1.0,0.0));
-		TS_ASSERT_EQUALS(B.startPoint(),V3D(2.0,2.0,2));
-		TS_ASSERT_EQUALS(B.direction(),V3D(0.0,1.0,0.0));		
-		B=A;
-		TS_ASSERT_EQUALS(B.startPoint(),V3D(1.0,1.0,1));
-		TS_ASSERT_EQUALS(B.direction(),V3D(1.0,0.0,0.0));
-	}
+  void testAssignment(){ //Also have to test the Links and Points
+    Track A(V3D(1,1,1),V3D(1.0,0.0,0.0));
+    TS_ASSERT_EQUALS(A.startPoint(),V3D(1.0,1.0,1));
+    TS_ASSERT_EQUALS(A.direction(),V3D(1.0,0.0,0.0));
+    Track B(V3D(2,2,2),V3D(0.0,1.0,0.0));
+    TS_ASSERT_EQUALS(B.startPoint(),V3D(2.0,2.0,2));
+    TS_ASSERT_EQUALS(B.direction(),V3D(0.0,1.0,0.0));
+    B=A;
+    TS_ASSERT_EQUALS(B.startPoint(),V3D(1.0,1.0,1));
+    TS_ASSERT_EQUALS(B.direction(),V3D(1.0,0.0,0.0));
+  }
 
-	void testBuildLink(){
-		Track A(V3D(-5,-5,0),V3D(1.0,0.0,0.0));
-		TS_ASSERT_EQUALS(A.startPoint(),V3D(-5.0,-5.0,0.0));
-		TS_ASSERT_EQUALS(A.direction(),V3D(1.0,0.0,0.0));
-		A.addPoint(1,V3D(-5.0,-2.0,0.0)); //Entry at -5,-2,0
-		A.addPoint(-1,V3D(-5.0,2.0,0.0)); //Exit point at -5,2,0
-		A.buildLink();
-		//Check track length
-		int index=0;
-		for(Track::LType::const_iterator it=A.begin();it!=A.end();++it){
-			TS_ASSERT_DELTA(it->distFromStart,7,0.0001);
-			TS_ASSERT_DELTA(it->distInsideObject,4,0.0001);
-			TS_ASSERT_EQUALS(it->componentID, (Component *)NULL);
-			TS_ASSERT_EQUALS(it->entryPoint,V3D(-5.0,-2.0,0.0));
-			TS_ASSERT_EQUALS(it->exitPoint,V3D(-5.0,2.0,0.0));
-			index++;
-		}
-		TS_ASSERT_EQUALS(index,1);
-	}
+  void testBuildLink(){
+    Track A(V3D(-5,-5,0),V3D(1.0,0.0,0.0));
+    Object shape;
 
-	void testRemoveCojoins(){
-		Track A(V3D(1,1,1),V3D(1.0,0.0,0.0));
-		A.addLink(V3D(2,2,2),V3D(3,3,3),2.0);
-		A.addLink(V3D(2.0001,2.0001,2.0001),V3D(3,3,3),2.001);
-		//Check track length
-		int index=0;
-		for(Track::LType::const_iterator it=A.begin();it!=A.end();++it){
-			index++;
-		}
-		TS_ASSERT_EQUALS(index,2);
-		A.removeCojoins();
-		index=0;
-		{
-		for(Track::LType::const_iterator it=A.begin();it!=A.end();++it){
-			index++;
-		}
-		}
-		TS_ASSERT_EQUALS(index,1);
-	}
+    TS_ASSERT_EQUALS(A.startPoint(),V3D(-5.0,-5.0,0.0));
+    TS_ASSERT_EQUALS(A.direction(),V3D(1.0,0.0,0.0));
+    A.addPoint(1,V3D(-5.0,-2.0,0.0), shape); //Entry at -5,-2,0
+    A.addPoint(-1,V3D(-5.0,2.0,0.0), shape); //Exit point at -5,2,0
+    A.buildLink();
+    //Check track length
+    int index=0;
+    for(Track::LType::const_iterator it=A.begin();it!=A.end();++it){
+      TS_ASSERT_DELTA(it->distFromStart,7,0.0001);
+      TS_ASSERT_DELTA(it->distInsideObject,4,0.0001);
+      TS_ASSERT_EQUALS(it->componentID, (Component *)NULL);
+      TS_ASSERT_EQUALS(it->entryPoint,V3D(-5.0,-2.0,0.0));
+      TS_ASSERT_EQUALS(it->exitPoint,V3D(-5.0,2.0,0.0));
+      index++;
+    }
+    TS_ASSERT_EQUALS(index,1);
+  }
 
-	void testNonComplete(){
-		Track A(V3D(1,1,1),V3D(1.0,0.0,0.0));
-		A.addLink(V3D(2,2,2),V3D(3,3,3),2.0);
-		A.addLink(V3D(2.0001,2.0001,2.0001),V3D(3,3,3),2.001);
-		TS_ASSERT(A.nonComplete()>0);
-		Track B(V3D(1,1,1),V3D(1.0,0.0,0.0));
-		TS_ASSERT_EQUALS(B.startPoint(),V3D(1.0,1.0,1));
-		TS_ASSERT_EQUALS(B.direction(),V3D(1.0,0.0,0.0));
-		B.addLink(V3D(1,1,1),V3D(1,3,1),0.0);
-		B.addLink(V3D(1,3,1),V3D(1,5,1),2.0);
-		TS_ASSERT_EQUALS(B.nonComplete(),0);
-	}
+  void testRemoveCojoins(){
+    Track A(V3D(1,1,1),V3D(1.0,0.0,0.0));
+    Object shape;
+    A.addLink(V3D(2,2,2),V3D(3,3,3),2.0, shape);
+    A.addLink(V3D(2.0001,2.0001,2.0001),V3D(3,3,3),2.001, shape);
+    //Check track length
+    int index=0;
+    for(Track::LType::const_iterator it=A.begin();it!=A.end();++it){
+      index++;
+    }
+    TS_ASSERT_EQUALS(index,2);
+    A.removeCojoins();
+    index=0;
+    {
+    for(Track::LType::const_iterator it=A.begin();it!=A.end();++it){
+      index++;
+    }
+    }
+    TS_ASSERT_EQUALS(index,1);
+  }
+
+  void testNonComplete(){
+    Track A(V3D(1,1,1),V3D(1.0,0.0,0.0));
+    Object shape;
+    A.addLink(V3D(2,2,2),V3D(3,3,3),2.0, shape);
+    A.addLink(V3D(2.0001,2.0001,2.0001),V3D(3,3,3),2.001, shape);
+    TS_ASSERT(A.nonComplete()>0);
+    Track B(V3D(1,1,1),V3D(1.0,0.0,0.0));
+    TS_ASSERT_EQUALS(B.startPoint(),V3D(1.0,1.0,1));
+    TS_ASSERT_EQUALS(B.direction(),V3D(1.0,0.0,0.0));
+    B.addLink(V3D(1,1,1),V3D(1,3,1),0.0, shape);
+    B.addLink(V3D(1,3,1),V3D(1,5,1),2.0, shape);
+    TS_ASSERT_EQUALS(B.nonComplete(),0);
+  }
 };
 
 #endif
diff --git a/Code/Mantid/Framework/Geometry/test/UnitCellTest.h b/Code/Mantid/Framework/Geometry/test/UnitCellTest.h
index 6ca9c3621f2f35f7ec29dbad9fd4cb601cd49d7b..4dc36d03ee071175e592b832f4a551859ec3999e 100644
--- a/Code/Mantid/Framework/Geometry/test/UnitCellTest.h
+++ b/Code/Mantid/Framework/Geometry/test/UnitCellTest.h
@@ -146,6 +146,25 @@ public:
     }
   }
 
+  void testStrToUnitCell()
+  {
+      UnitCell cell(2.0, 4.0, 5.0, 90.0, 100.0, 102.0);
+      std::string cellString = unitCellToStr(cell);
+      UnitCell other = strToUnitCell(cellString);
+
+      TS_ASSERT_EQUALS(cell.getG(), other.getG());
+
+      UnitCell precisionLimit(2.1234567891, 3.0, 4.1234567891, 90.0, 90.0, 90.0);
+      std::string precisionLimitString = unitCellToStr(precisionLimit);
+      UnitCell precisionLimitOther = strToUnitCell(precisionLimitString);
+
+      TS_ASSERT_DIFFERS(precisionLimit.a(), precisionLimitOther.a());
+      TS_ASSERT_DELTA(precisionLimit.a(), precisionLimitOther.a(), 1e-9);
+
+      TS_ASSERT_DIFFERS(precisionLimit.c(), precisionLimitOther.c());
+      TS_ASSERT_DELTA(precisionLimit.c(), precisionLimitOther.c(), 1e-9);
+  }
+
 };
 
 
diff --git a/Code/Mantid/Framework/Kernel/CMakeLists.txt b/Code/Mantid/Framework/Kernel/CMakeLists.txt
index eb69cdb6b0b683733d014cc96952e1b62144e511..c76df1829da6b7d8e456c71a7dff37c04df1559e 100644
--- a/Code/Mantid/Framework/Kernel/CMakeLists.txt
+++ b/Code/Mantid/Framework/Kernel/CMakeLists.txt
@@ -11,8 +11,8 @@ set ( SRC_FILES
 	src/ConfigService.cpp
 	src/DataItem.cpp
 	src/DateAndTime.cpp
-	src/DateValidator.cpp
 	src/DateTimeValidator.cpp
+	src/DateValidator.cpp
 	src/DeltaEMode.cpp
 	src/DirectoryValidator.cpp
 	src/DiskBuffer.cpp
@@ -65,6 +65,7 @@ set ( SRC_FILES
 	src/PropertyManager.cpp
 	src/PropertyManagerOwner.cpp
 	src/PropertyWithValue.cpp
+	src/ProxyInfo.cpp
 	src/PseudoRandomNumberGenerator.cpp
 	src/Quat.cpp
 	src/ReadLock.cpp
@@ -129,8 +130,8 @@ set ( INC_FILES
 	inc/MantidKernel/DataItem.h
 	inc/MantidKernel/DataService.h
 	inc/MantidKernel/DateAndTime.h
-	inc/MantidKernel/DateValidator.h
 	inc/MantidKernel/DateTimeValidator.h
+	inc/MantidKernel/DateValidator.h
 	inc/MantidKernel/DeltaEMode.h
 	inc/MantidKernel/DirectoryValidator.h
 	inc/MantidKernel/DiskBuffer.h
@@ -185,6 +186,7 @@ set ( INC_FILES
 	inc/MantidKernel/MultiThreaded.h
 	inc/MantidKernel/NDPseudoRandomNumberGenerator.h
 	inc/MantidKernel/NDRandomNumberGenerator.h
+	inc/MantidKernel/NetworkProxy.h
 	inc/MantidKernel/NeutronAtom.h
 	inc/MantidKernel/NexusDescriptor.h
 	inc/MantidKernel/NullValidator.h
@@ -197,6 +199,7 @@ set ( INC_FILES
 	inc/MantidKernel/PropertyManager.h
 	inc/MantidKernel/PropertyManagerOwner.h
 	inc/MantidKernel/PropertyWithValue.h
+	inc/MantidKernel/ProxyInfo.h
 	inc/MantidKernel/PseudoRandomNumberGenerator.h
 	inc/MantidKernel/QuasiRandomNumberSequence.h
 	inc/MantidKernel/Quat.h
@@ -310,6 +313,7 @@ set ( TEST_FILES
 	PropertyManagerTest.h
 	PropertyTest.h
 	PropertyWithValueTest.h
+	ProxyInfoTest.h
 	QuatTest.h
 	ReadLockTest.h
 	RebinHistogramTest.h
@@ -344,6 +348,16 @@ set ( TEST_FILES
 	WriteLockTest.h
 )
 
+if ( ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+    LIST( APPEND SRC_FILES src/NetworkProxyOSX.cpp )
+    SET( NETWORK_LIBRARIES "-framework SystemConfiguration" "-framework CoreFoundation"  "-framework CoreServices")
+elseif (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+    LIST( APPEND SRC_FILES src/NetworkProxyWin.cpp )
+    SET( NETWORK_LIBRARIES Winhttp )
+else()
+    LIST( APPEND SRC_FILES src/NetworkProxyLinux.cpp )
+endif()
+
 if(UNITY_BUILD)
   include(UnityBuild)
   enable_unity_build(Kernel SRC_FILES SRC_UNITY_IGNORE_FILES 10)
@@ -362,7 +376,7 @@ set_target_properties ( Kernel PROPERTIES OUTPUT_NAME MantidKernel
 # Add to the 'Framework' group in VS
 set_property ( TARGET Kernel PROPERTY FOLDER "MantidFramework" )
 
-target_link_libraries ( Kernel ${MANTIDLIBS} ${GSL_LIBRARIES} ${NEXUS_LIBRARIES} )
+target_link_libraries ( Kernel ${MANTIDLIBS} ${GSL_LIBRARIES} ${NEXUS_LIBRARIES} ${NETWORK_LIBRARIES} )
 if ( WIN32 )
   target_link_libraries ( Kernel Psapi.lib ) # For memory usage queries
 endif()
diff --git a/Code/Mantid/Framework/Kernel/inc/MantidKernel/ConfigService.h b/Code/Mantid/Framework/Kernel/inc/MantidKernel/ConfigService.h
index c82d26ecfac271580ea886d5be75ca003df9c291..62f8ebbc64125112ce31a64185db1313d3a89fd8 100644
--- a/Code/Mantid/Framework/Kernel/inc/MantidKernel/ConfigService.h
+++ b/Code/Mantid/Framework/Kernel/inc/MantidKernel/ConfigService.h
@@ -158,6 +158,8 @@ namespace Mantid
       std::string getCurrentDir() const;
       /// Returns the system's temp directory
       std::string getTempDir();
+      /// Returns the system's appdata directory
+      std::string getAppDataDir();
       //Return the executable path
       std::string getDirectoryOfExecutable() const;
       //Return the full path to the executable
@@ -184,6 +186,8 @@ namespace Mantid
       /// Get the list of user search paths
       const std::vector<std::string>& getUserSearchDirs() const;
       /// Get instrument search directory
+      const std::vector<std::string>& getInstrumentDirectories() const;
+      /// Get instrument search directory
       const std::string getInstrumentDirectory() const;
       //@}
 
@@ -249,13 +253,17 @@ namespace Mantid
       /// Create the storage of the data search directories
       void cacheDataSearchPaths();
       /// Create the storage of the user search directories
-      void cacheUserSearchPaths();
+      void cacheUserSearchPaths();      
+      /// Create the storage of the instrument directories
+      void cacheInstrumentPaths();
       /// Returns true if the path is in the data search list
       bool isInDataSearchList(const std::string & path) const;
       /// Empty the list of facilities, deleting the FacilityInfo objects in the process
       void clearFacilities();
       /// Set the PV_PLUGIN_PATH to point at this version of Mantid.
       void setParaViewPluginPath() const;
+      /// Verifies the directory exists and add it to the back of the directory list if valid
+      bool addDirectoryifExists(const std::string& directoryName, std::vector<std::string>& directoryList);
 
       // Forward declaration of inner class
       template <class T>
@@ -288,6 +296,8 @@ namespace Mantid
       std::vector<std::string> m_DataSearchDirs;
       /// Store a list of user search paths
       std::vector<std::string> m_UserSearchDirs;
+      /// Store a list of instrument directory paths
+      std::vector<std::string> m_InstrumentDirs;
       /// A map of facilities to instruments
       std::map<std::string,std::vector<std::string> > m_instr_prefixes;
 
diff --git a/Code/Mantid/Framework/Kernel/inc/MantidKernel/NetworkProxy.h b/Code/Mantid/Framework/Kernel/inc/MantidKernel/NetworkProxy.h
new file mode 100644
index 0000000000000000000000000000000000000000..299d80b4037cfa8652c392764d4b88d76614956d
--- /dev/null
+++ b/Code/Mantid/Framework/Kernel/inc/MantidKernel/NetworkProxy.h
@@ -0,0 +1,59 @@
+#ifndef MANTID_KERNEL_NETWORKPROXY_H_
+#define MANTID_KERNEL_NETWORKPROXY_H_
+
+#include "MantidKernel/System.h"
+#include "MantidKernel/ProxyInfo.h"
+#include "MantidKernel/Logger.h"
+
+
+namespace Mantid
+{
+namespace Kernel
+{
+
+  /** NetworkProxy : Network proxy utility for getting network proxy information.
+
+    Copyright &copy; 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+  */
+  class DLLExport NetworkProxy 
+  {
+  public:
+    /// Constructor
+    NetworkProxy();
+
+    /// Get http proxy information.
+    ProxyInfo getHttpProxy(const std::string& targetURLString);
+
+    /// Destructor
+    virtual ~NetworkProxy();
+    
+  private:
+
+    /// Logger object
+    Mantid::Kernel::Logger m_logger;
+
+  };
+
+
+} // namespace Kernel
+} // namespace Mantid
+
+#endif  /* MANTID_KERNEL_NETWORKPROXY_H_ */
diff --git a/Code/Mantid/Framework/Kernel/inc/MantidKernel/PhysicalConstants.h b/Code/Mantid/Framework/Kernel/inc/MantidKernel/PhysicalConstants.h
index c4c59f7bad30c1a99f1b23216382f39b1fad0681..fa19d947a33037a587f012ec097007534b7931e7 100644
--- a/Code/Mantid/Framework/Kernel/inc/MantidKernel/PhysicalConstants.h
+++ b/Code/Mantid/Framework/Kernel/inc/MantidKernel/PhysicalConstants.h
@@ -16,7 +16,7 @@ namespace Mantid
 
     @author Russell Taylor, Tessella Support Services plc
     @date 30/10/2007
-    
+
     Copyright &copy; 2007-2010 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
 
     This file is part of Mantid.
@@ -34,7 +34,7 @@ namespace Mantid
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-    File change history is stored at: <https://github.com/mantidproject/mantid>.   
+    File change history is stored at: <https://github.com/mantidproject/mantid>.
     Code Documentation is available at: <http://doxygen.mantidproject.org>
 */
 namespace PhysicalConstants
@@ -52,16 +52,19 @@ namespace PhysicalConstants
 
   /** Standard acceleration due to gravity. Precise value in ms<SUP>-2</SUP>. */
   static const double g = 9.80665;
-  
+
   /** Mass of the neutron in kg. Taken from <http://physics.nist.gov/cuu/Constants> on 30/10/2007. */
   static const double NeutronMass = 1.674927211e-27;
 
   /** Mass of the neutron in AMU. Taken from <http://physics.nist.gov/cuu/Constants> on 02/01/2013. */
   static const double NeutronMassAMU = 1.008664916;
 
+  /** AMU in kg. Taken from <http://physics.nist.gov/cuu/Constants> on 10/09/2014. */
+  static const double AtomicMassUnit = 1.660538921e-27;
+
   /** 1 meV in Joules. Taken from <http://physics.nist.gov/cuu/Constants> on 28/03/2008. */
   static const double meV = 1.602176487e-22;
-  
+
   /** 1 meV in wavenumber (cm<SUP>-1</SUP>). Taken from <http://physics.nist.gov/cuu/Constants> on 02/04/2008. */
   static const double meVtoWavenumber = 8.06554465;
 
@@ -74,10 +77,10 @@ namespace PhysicalConstants
   /**  Muon lifetime. Taken from MuLan experiment on 08/12/2008. */
   static const double MuonLifetime = 2.197019e-6;
 
-  /** Standard atmospheric pressure in kPa. 
+  /** Standard atmospheric pressure in kPa.
    * Taken from <http://physics.nist.gov/cgi-bin/cuu/Value?stdatm|search_for=adopted_in!> on 01/12/2010 **/
   static const double StandardAtmosphere = 101.325;
-  
+
   /** Boltzmann Constant in meV/K
    * Taken from <http://physics.nist.gov/cuu/Constants> on 10/07/2012
    */
diff --git a/Code/Mantid/Framework/Kernel/inc/MantidKernel/ProxyInfo.h b/Code/Mantid/Framework/Kernel/inc/MantidKernel/ProxyInfo.h
new file mode 100644
index 0000000000000000000000000000000000000000..014f95d16c99d34e245119ffba941240c5d93a0f
--- /dev/null
+++ b/Code/Mantid/Framework/Kernel/inc/MantidKernel/ProxyInfo.h
@@ -0,0 +1,58 @@
+#ifndef MANTID_KERNEL_PROXYINFO_H_
+#define MANTID_KERNEL_PROXYINFO_H_
+
+#include "MantidKernel/System.h"
+#include <string>
+
+namespace Mantid
+{
+  namespace Kernel
+  {
+
+    /** ProxyInfo : Container for carrying around network proxy information
+
+     Copyright &copy; 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
+
+     This file is part of Mantid.
+
+     Mantid is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published by
+     the Free Software Foundation; either version 3 of the License, or
+     (at your option) any later version.
+
+     Mantid 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 General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+     File change history is stored at: <https://github.com/mantidproject/mantid>
+     Code Documentation is available at: <http://doxygen.mantidproject.org>
+     */
+    class DLLExport ProxyInfo
+    {
+    private:
+      std::string m_host;
+      int m_port;
+      bool m_isHttpProxy;
+      bool m_isEmptyProxy;
+
+    public:
+      virtual ~ProxyInfo();
+      ProxyInfo();
+      ProxyInfo(const ProxyInfo& other);
+      ProxyInfo& operator=(const ProxyInfo& other);
+      ProxyInfo(const std::string& host, const int port, const bool isHttpProxy);
+      std::string host() const;
+      int port() const;
+      bool isHttpProxy() const;
+      bool emptyProxy() const;
+
+    };
+
+  } // namespace Kernel
+} // namespace Mantid
+
+#endif  /* MANTID_KERNEL_PROXYINFO_H_ */
diff --git a/Code/Mantid/Framework/Kernel/src/ConfigService.cpp b/Code/Mantid/Framework/Kernel/src/ConfigService.cpp
index a8c19760fe57132ac7bd7d3633ef0114d206bb44..1cc770bb01f5fa24a262e68d882b09eccf11eff0 100644
--- a/Code/Mantid/Framework/Kernel/src/ConfigService.cpp
+++ b/Code/Mantid/Framework/Kernel/src/ConfigService.cpp
@@ -1,6 +1,7 @@
 //----------------------------------------------------------------------
 // Includes
 //----------------------------------------------------------------------
+
 #include "MantidKernel/ConfigService.h"
 #include "MantidKernel/MantidVersion.h"
 #include "MantidKernel/ParaViewVersion.h"
@@ -32,6 +33,7 @@
 #include <Poco/PipeStream.h>
 #include <Poco/StreamCopier.h>
 
+
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/algorithm/string/join.hpp>
 #include <boost/regex.hpp>
@@ -46,6 +48,7 @@
   #include <mach-o/dyld.h>
 #endif
 
+
 namespace Mantid
 {
 /**
@@ -179,7 +182,7 @@ ConfigServiceImpl::ConfigServiceImpl() :
 #else
   m_user_properties_file_name("Mantid.user.properties"),
 #endif
-  m_DataSearchDirs(), m_UserSearchDirs(), m_instr_prefixes(), m_removedFlag("@@REMOVED@@")
+  m_DataSearchDirs(), m_UserSearchDirs(), m_InstrumentDirs(), m_instr_prefixes(), m_removedFlag("@@REMOVED@@")
 {
   //getting at system details
   m_pSysConfig = new WrappedObject<Poco::Util::SystemConfiguration> ;
@@ -215,13 +218,20 @@ ConfigServiceImpl::ConfigServiceImpl() :
     }
   }
 
+  //Assert that the appdata and the instrument subdirectory exists
+  std::string appDataDir = getAppDataDir();
+  Poco::Path path(appDataDir);
+  path.pushDirectory("instrument");
+  Poco::File file(path);
+  //createdirectories will fail gracefully if it is already present
+  file.createDirectories();
+
   //Fill the list of possible relative path keys that may require conversion to absolute paths
   m_ConfigPaths.insert(std::make_pair("mantidqt.python_interfaces_directory", true));
   m_ConfigPaths.insert(std::make_pair("plugins.directory", true));
   m_ConfigPaths.insert(std::make_pair("pvplugins.directory", true));
   m_ConfigPaths.insert(std::make_pair("mantidqt.plugins.directory", true));
   m_ConfigPaths.insert(std::make_pair("instrumentDefinition.directory", true));
-  m_ConfigPaths.insert(std::make_pair("parameterDefinition.directory", true));
   m_ConfigPaths.insert(std::make_pair("groupingFiles.directory", true));
   m_ConfigPaths.insert(std::make_pair("maskFiles.directory", true));
   m_ConfigPaths.insert(std::make_pair("colormaps.directory", true));
@@ -718,6 +728,8 @@ void ConfigServiceImpl::createUserPropertiesFile() const
     filestr << std::endl;
     filestr << "## Show invisible workspaces" << std::endl;
     filestr << "#MantidOptions.InvisibleWorkspaces=0" << std::endl;
+    filestr << "## Re-use plot instances for different plot types" << std::endl;
+    filestr << "#MantidOptions.ReusePlotInstances=Off" << std::endl;
     filestr << std::endl;
     filestr << "## Uncomment to disable use of OpenGL to render unwrapped instrument views" << std::endl;
     filestr << "#MantidOptions.InstrumentView.UseOpenGL=Off" << std::endl;
@@ -820,6 +832,7 @@ void ConfigServiceImpl::updateConfig(const std::string& filename, const bool app
     cacheDataSearchPaths();
     appendDataSearchDir(getString("defaultsave.directory"));
     cacheUserSearchPaths();
+    cacheInstrumentPaths();
   }
 }
 
@@ -1128,6 +1141,10 @@ void ConfigServiceImpl::setString(const std::string & key, const std::string & v
   else if (key == "usersearch.directories")
   {
     cacheUserSearchPaths();
+  }  
+  else if (key == "instrumentDefinition.directory")
+  {
+    cacheInstrumentPaths();
   }
   else if (key == "defaultsave.directory")
   {
@@ -1251,6 +1268,28 @@ std::string ConfigServiceImpl::getTempDir()
   return m_pSysConfig->getString("system.tempDir");
 }
 
+/** Gets the absolute path of the appdata directory
+*
+* @returns The absolute path of the appdata directory
+*/
+std::string ConfigServiceImpl::getAppDataDir()
+{
+  const std::string applicationName = "mantid";
+#if POCO_OS == POCO_OS_WINDOWS_NT
+  const std::string vendorName = "mantidproject"; 
+  std::string appdata = std::getenv("APPDATA");
+  Poco::Path path(appdata);
+  path.makeDirectory();
+  path.pushDirectory(vendorName);
+  path.pushDirectory(applicationName);
+  return path.toString();
+#else //linux and mac
+  Poco::Path path(Poco::Path::home());
+  path.pushDirectory("." + applicationName);
+  return path.toString();
+#endif
+}
+
 /**
  * Get the directory containing the program executable
  * @returns A string containing the path of the directory 
@@ -1501,26 +1540,84 @@ const std::vector<std::string>& ConfigServiceImpl::getUserSearchDirs() const
 }
 
 /**
- * Return the search directory for XML instrument definition files (IDFs)
- * @returns Full path of instrument search directory
+ * Return the search directories for XML instrument definition files (IDFs)
+ * @returns An ordered list of paths for instrument searching
+ */
+const std::vector<std::string>& ConfigServiceImpl::getInstrumentDirectories() const
+{
+  return m_InstrumentDirs;
+}
+
+/**
+ * Return the base search directories for XML instrument definition files (IDFs)
+ * @returns a last entry of getInstrumentDirectories
  */
 const std::string ConfigServiceImpl::getInstrumentDirectory() const
 {
-  // Determine the search directory for XML instrument definition files (IDFs)
-  std::string directoryName = getString("instrumentDefinition.directory");
-  if (directoryName.empty())
-  {
-    // This is the assumed deployment directory for IDFs, where we need to be relative to the
-    // directory of the executable, not the current working directory.
-    directoryName = Poco::Path(getPropertiesDir()).resolve("../instrument").toString();
-  }
+  return m_InstrumentDirs[m_InstrumentDirs.size()-1];
+}
+
+/**
+ * Fills the internal cache of instrument definition directories
+ */
+void ConfigServiceImpl::cacheInstrumentPaths()
+{
+    m_InstrumentDirs.clear();
+    Poco::Path path(getAppDataDir());
+    path.makeDirectory();
+    path.pushDirectory("instrument");
+    std::string appdatadir =  path.toString();
+    addDirectoryifExists(appdatadir,m_InstrumentDirs);
+
+#ifndef _WIN32
+    std::string etcdatadir =  "/etc/mantid/instrument";
+    addDirectoryifExists(etcdatadir,m_InstrumentDirs);
+#endif
+
+    // Determine the search directory for XML instrument definition files (IDFs)
+    std::string directoryName = getString("instrumentDefinition.directory");
+    if (directoryName.empty())
+    {
+      // This is the assumed deployment directory for IDFs, where we need to be relative to the
+      // directory of the executable, not the current working directory.
+      directoryName = Poco::Path(getPropertiesDir()).resolve("../instrument").toString();
+    }
+    addDirectoryifExists(directoryName,m_InstrumentDirs);
+}
+
 
-  if (!Poco::File(directoryName).isDirectory())
+
+/**
+ * Verifies the directory exists and add it to the back of the directory list if valid
+ * @param directoryName the directory name to add
+ * @param directoryList the list to add the directory to
+ * @returns true if the directory was valid and added to the list
+ */
+bool ConfigServiceImpl::addDirectoryifExists(const std::string& directoryName, std::vector<std::string>& directoryList)
+{
+  try
   {
-    g_log.error("Unable to locate instrument search directory at: " + directoryName);
+    if (Poco::File(directoryName).isDirectory())
+    {
+      directoryList.push_back(directoryName);
+      return true;
+    }
+    else
+    {
+      g_log.information("Unable to locate directory at: " + directoryName);
+      return false;
+    }
   }
-
-  return directoryName;
+  catch (Poco::PathNotFoundException&)
+  {
+    g_log.information("Unable to locate directory at: " + directoryName);
+    return false;
+  }   
+  catch (Poco::FileNotFoundException&)
+  {
+    g_log.information("Unable to locate directory at: " + directoryName);
+    return false;
+  } 
 }
 
 /**
diff --git a/Code/Mantid/Framework/Kernel/src/DirectoryValidator.cpp b/Code/Mantid/Framework/Kernel/src/DirectoryValidator.cpp
index d0c2daa5b4c045cb45200dc849902e4ef9052a25..1592a9c581ebebe93eb8c1f85bd655f4c9b04a39 100644
--- a/Code/Mantid/Framework/Kernel/src/DirectoryValidator.cpp
+++ b/Code/Mantid/Framework/Kernel/src/DirectoryValidator.cpp
@@ -1,5 +1,6 @@
 #include "MantidKernel/DirectoryValidator.h"
 #include <algorithm>
+#include <Poco/Exception.h>
 #include <Poco/File.h>
 #include <Poco/Path.h>
 #include <iostream>
@@ -51,10 +52,17 @@ std::string DirectoryValidator::checkValidity(const std::string& value) const
   //If the path is required to exist check it is there
   if ( m_testExist )
   {
-   if ( value.empty() || !Poco::File(value).exists() )
-    return "Directory \"" + value + "\" not found";
-   if (!Poco::File(value).isDirectory())
-     return "Directory \"" + value + "\" specified is actually a file";
+    try
+    {
+      if ( value.empty() || !Poco::File(value).exists() )
+        return "Directory \"" + value + "\" not found";
+      if (!Poco::File(value).isDirectory())
+        return "Directory \"" + value + "\" specified is actually a file";
+    }
+    catch ( Poco::FileException & )
+    {
+      return "Error accessing directory \"" + value + "\"";
+    }
   }
 
   //Otherwise we are okay, file extensions are just a suggestion so no validation on them is necessary
diff --git a/Code/Mantid/Framework/Kernel/src/MagneticFormFactorTable.cpp b/Code/Mantid/Framework/Kernel/src/MagneticFormFactorTable.cpp
index d06a93ad2053a50587004cd40884416ae195d803..9125c8df5e6884969947945d75a2740a2cf11a50 100644
--- a/Code/Mantid/Framework/Kernel/src/MagneticFormFactorTable.cpp
+++ b/Code/Mantid/Framework/Kernel/src/MagneticFormFactorTable.cpp
@@ -22,7 +22,7 @@ namespace Mantid
 
     /**
      * Returns an interpolated form factor for the given \f$Q^2\f$ value
-     * @param qsqr :: \f$Q^2\f$ in \f$\AA^{-2}\f$
+     * @param qsqr :: \f$Q^2\f$ in \f$\mbox{\AA}^{-2}\f$
      * @return The interpolated value
      */
     double MagneticFormFactorTable::value(const double qsqr) const
diff --git a/Code/Mantid/Framework/Kernel/src/MagneticIon.cpp b/Code/Mantid/Framework/Kernel/src/MagneticIon.cpp
index 36d4e61a513a3f1045bf4b9350646920b881ec25..d549f815b0d165e75c75a131741cfb6ac4d5b91b 100644
--- a/Code/Mantid/Framework/Kernel/src/MagneticIon.cpp
+++ b/Code/Mantid/Framework/Kernel/src/MagneticIon.cpp
@@ -28,9 +28,9 @@ namespace Mantid
     }
 
     /**
-     * Returns the value of the form factor for the given \f$Q^2\f$ in \f$\AA^-2\f$ taking into account the
+     * Returns the value of the form factor for the given \f$Q^2\f$ in \f$\mbox{\AA}^-2\f$ taking into account the
      * number of terms given by the value of j & l
-     * @param qsqr :: The square of the momentum transfer in \f$\AA^-2\f$
+     * @param qsqr :: The square of the momentum transfer in \f$\mbox{\AA}^-2\f$
      * @param j :: The total angular momentum
      * @param l :: The orbital angular momentum
      * @return
diff --git a/Code/Mantid/Framework/Kernel/src/Memory.cpp b/Code/Mantid/Framework/Kernel/src/Memory.cpp
index a68ee473c2f18422aeaa90d2e8b9ee8f363bc664..3175d21e9fd5b99c0a56a798a5a0fd790dec387c 100644
--- a/Code/Mantid/Framework/Kernel/src/Memory.cpp
+++ b/Code/Mantid/Framework/Kernel/src/Memory.cpp
@@ -6,7 +6,7 @@
 #include <sstream>
 
 #ifdef USE_TCMALLOC
-#include "google/malloc_extension.h"
+#include "gperftools/malloc_extension.h"
 #endif
 
 #ifdef __linux__
diff --git a/Code/Mantid/Framework/Kernel/src/NetworkProxyLinux.cpp b/Code/Mantid/Framework/Kernel/src/NetworkProxyLinux.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..bb39f0ca278e290485b7825aea65f268ebf95c89
--- /dev/null
+++ b/Code/Mantid/Framework/Kernel/src/NetworkProxyLinux.cpp
@@ -0,0 +1,40 @@
+#include "MantidKernel/NetworkProxy.h"
+#include <Poco/URI.h>
+
+namespace Mantid
+{
+  namespace Kernel
+  {
+
+    //----------------------------------------------------------------------------------------------
+    /** Constructor
+     */
+    NetworkProxy::NetworkProxy() :
+        m_logger("network_proxy_logger_generic")
+    {
+    }
+
+    //----------------------------------------------------------------------------------------------
+    /** Destructor
+     */
+    NetworkProxy::~NetworkProxy()
+    {
+    }
+
+    ProxyInfo NetworkProxy::getHttpProxy(const std::string&)
+    {
+      ProxyInfo proxyInfo; // NoProxy.
+      char * proxy_var = getenv("http_proxy");
+      if (proxy_var == 0)
+        proxy_var = getenv("HTTP_PROXY");
+
+      if (proxy_var != 0)
+      {
+        Poco::URI uri_p(proxy_var);
+        proxyInfo = ProxyInfo(uri_p.getHost(), uri_p.getPort(), true /*http proxy*/);
+      }
+      return proxyInfo;
+    }
+
+  } // namespace Kernel
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/Kernel/src/NetworkProxyOSX.cpp b/Code/Mantid/Framework/Kernel/src/NetworkProxyOSX.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4ec9182a22ab7cfd045e314f9f3ed427af6b09e6
--- /dev/null
+++ b/Code/Mantid/Framework/Kernel/src/NetworkProxyOSX.cpp
@@ -0,0 +1,276 @@
+// Compile on OSX only.
+#if defined(__APPLE__)
+
+#include "MantidKernel/NetworkProxy.h"
+#include <SystemConfiguration/SystemConfiguration.h>
+#include <CoreFoundation/CoreFoundation.h>
+#include <CFNetwork/CFProxySupport.h>
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <vector>
+
+namespace Mantid
+{
+  namespace Kernel
+  {
+
+    /**
+     * Helper function to convert CFStringRefs to std::string
+     * @param stringRef : CRFStringRef variable
+     * @return std::string
+     */
+    std::string toString(CFStringRef stringRef)
+    {
+      std::string buffer;
+      const int max_size = 1000;
+      buffer.resize(max_size);
+      CFStringGetCString(stringRef, &buffer[0], max_size, kCFStringEncodingUTF8);
+      // Strip out whitespace
+      std::stringstream trimmer;
+      trimmer << buffer;
+      buffer.clear();
+      trimmer >> buffer;
+      return buffer;
+    }
+
+    /**
+     * Helper enums.
+     */
+    enum ProxyType
+    {
+      DefaultProxy, Socks5Proxy, NoProxy, HttpProxy, HttpCachingProxy, FtpCachingProxy
+    };
+
+    /// Typedef Collection of proxy information.
+    typedef std::vector<ProxyInfo> ProxyInfoVec;
+
+    /**
+     * Extract proxy information from a CFDistionaryRef
+     * @param dict : CFDictionary item
+     * @return ProxyInfo object.
+     */
+    ProxyInfo proxyFromDictionary(CFDictionaryRef dict)
+    {
+      ProxyInfo proxyInfo;
+      ProxyType proxyType = NoProxy;
+
+      CFStringRef cfProxyType = (CFStringRef) CFDictionaryGetValue(dict, kCFProxyTypeKey);
+
+      if (CFStringCompare(cfProxyType, kCFProxyTypeFTP, 0) == kCFCompareEqualTo)
+      {
+        proxyType = FtpCachingProxy;
+      }
+      else if (CFStringCompare(cfProxyType, kCFProxyTypeHTTP, 0) == kCFCompareEqualTo)
+      {
+        proxyType = HttpProxy;
+      }
+      else if (CFStringCompare(cfProxyType, kCFProxyTypeHTTPS, 0) == kCFCompareEqualTo)
+      {
+        proxyType = HttpProxy;
+      }
+      else if (CFStringCompare(cfProxyType, kCFProxyTypeSOCKS, 0) == kCFCompareEqualTo)
+      {
+        proxyType = Socks5Proxy;
+      }
+
+      int port = 0;
+      std::string hostName = toString((CFStringRef) CFDictionaryGetValue(dict, kCFProxyHostNameKey));
+      CFNumberRef portNumber = (CFNumberRef) CFDictionaryGetValue(dict, kCFProxyPortNumberKey);
+      if (portNumber)
+      {
+        CFNumberGetValue(portNumber, kCFNumberSInt16Type, &port);
+      }
+      if (proxyType != NoProxy)
+      {
+        proxyInfo = ProxyInfo(hostName, port, proxyType == HttpProxy);
+      }
+
+      return proxyInfo;
+    }
+
+    /**
+     * Get proxy information from a proxy script.
+     * @param dict : Dictionary to search through.
+     * @param targetURLString : Target remote URL
+     * @param logger : Log object
+     * @return Collection of proxy information.
+     */
+    ProxyInfoVec proxyInformationFromPac(CFDictionaryRef dict, const std::string& targetURLString, Logger& logger )
+    {
+      ProxyInfoVec proxyInfoVec;
+
+      // is there a PAC enabled? If so, use it first.
+      CFNumberRef pacEnabled;
+      if ((pacEnabled = (CFNumberRef) CFDictionaryGetValue(dict, kSCPropNetProxiesProxyAutoConfigEnable)))
+      {
+        int enabled;
+        if (CFNumberGetValue(pacEnabled, kCFNumberIntType, &enabled) && enabled)
+        {
+          // PAC is enabled
+          CFStringRef cfPacLocation = (CFStringRef) CFDictionaryGetValue(dict,
+              kSCPropNetProxiesProxyAutoConfigURLString);
+          CFDataRef pacData;
+          CFURLRef pacURL = CFURLCreateWithString(kCFAllocatorDefault, cfPacLocation, NULL);
+          SInt32 errorCode;
+          if (!CFURLCreateDataAndPropertiesFromResource(kCFAllocatorDefault, pacURL, &pacData, NULL,
+                  NULL, &errorCode))
+          {
+            logger.debug() << "Unable to get the PAC script at " << toString(cfPacLocation) << "Error code: " << errorCode << std::endl;
+            return proxyInfoVec;
+          }
+
+          CFStringRef pacScript = CFStringCreateFromExternalRepresentation(kCFAllocatorDefault, pacData,
+              kCFStringEncodingISOLatin1);
+
+          CFURLRef targetURL = CFURLCreateWithBytes(kCFAllocatorDefault,
+              (UInt8*) targetURLString.c_str(), targetURLString.size(), kCFStringEncodingUTF8, NULL);
+          if (!targetURL)
+          {
+            logger.debug("Problem with Target URI for proxy script");
+            return proxyInfoVec;
+          }
+
+          CFErrorRef pacError;
+          CFArrayRef proxies = CFNetworkCopyProxiesForAutoConfigurationScript(pacScript, targetURL,
+              &pacError);
+
+          if (!proxies)
+          {
+            std::string pacLocation = toString(cfPacLocation);
+            CFStringRef pacErrorDescription = CFErrorCopyDescription(pacError);
+            logger.debug() << "Execution of PAC script at \"%s\" failed: %s" << pacLocation << toString(pacErrorDescription) << std::endl;
+          }
+
+          CFIndex size = CFArrayGetCount(proxies);
+          for (CFIndex i = 0; i < size; ++i)
+          {
+            CFDictionaryRef proxy = (CFDictionaryRef) CFArrayGetValueAtIndex(proxies, i);
+            proxyInfoVec.push_back(proxyFromDictionary(proxy));
+          }
+        }
+      }
+      return proxyInfoVec;
+    }
+
+    /**
+     * Proxy from dictionary.
+     * @param dict
+     * @param type
+     * @param enableKey
+     * @param hostKey
+     * @param portKey
+     * @return return Proxy object.
+     */
+    ProxyInfo proxyFromDictionary(CFDictionaryRef dict, ProxyType type, CFStringRef enableKey,
+        CFStringRef hostKey, CFStringRef portKey)
+    {
+      ProxyInfo proxyInfo;
+      CFNumberRef protoEnabled;
+      CFNumberRef protoPort;
+      CFStringRef protoHost;
+      if (enableKey && (protoEnabled = (CFNumberRef) CFDictionaryGetValue(dict, enableKey))
+          && (protoHost = (CFStringRef) CFDictionaryGetValue(dict, hostKey)) && (protoPort =
+              (CFNumberRef) CFDictionaryGetValue(dict, portKey)))
+      {
+        int enabled;
+        if (CFNumberGetValue(protoEnabled, kCFNumberIntType, &enabled) && enabled)
+        {
+          std::string host = toString(protoHost);
+
+          int port;
+          CFNumberGetValue(protoPort, kCFNumberIntType, &port);
+          proxyInfo = ProxyInfo(host, port, HttpProxy);
+        }
+      }
+
+      // proxy not enabled
+      return proxyInfo;
+    }
+
+    /**
+     * Specifially look for http proxy settings.
+     * @param dict :
+     * @return Return the proxy info object.
+     */
+    ProxyInfo httpProxyFromSystem(CFDictionaryRef dict)
+    {
+      ProxyInfo tempProxy = proxyFromDictionary(dict, HttpProxy, kSCPropNetProxiesHTTPEnable,
+          kSCPropNetProxiesHTTPProxy, kSCPropNetProxiesHTTPPort);
+
+      return tempProxy;
+    }
+
+    /**
+     * Find the http proxy.
+     * Look through the proxy settings script first.
+     * @param targetURLString : Target remote URL string
+     * @param logger : ref to log object.
+     * @return Proxy object.
+     */
+    ProxyInfo findHttpProxy(const std::string& targetURLString, Mantid::Kernel::Logger& logger)
+    {
+      ProxyInfo httpProxy;
+      CFDictionaryRef dict = SCDynamicStoreCopyProxies(NULL);
+      if (!dict)
+      {
+        logger.debug("ScriptRepository SCDynamicStoreCopyProxies returned NULL");
+      }
+
+      // Query the proxy pac first.
+      ProxyInfoVec info = proxyInformationFromPac(dict, targetURLString, logger);
+
+      bool foundHttpProxy = false;
+      for (ProxyInfoVec::iterator it = info.begin(); it != info.end(); ++it)
+      {
+        ProxyInfo proxyInfo = *it;
+        if (proxyInfo.isHttpProxy())
+        {
+          foundHttpProxy = true;
+          httpProxy = *it;
+          break;
+        }
+      }
+      // Query the http proxy settings second.
+      if (!foundHttpProxy)
+      {
+        ProxyInfo tempProxy = httpProxyFromSystem(dict);
+        if (tempProxy.isHttpProxy())
+        {
+          httpProxy = tempProxy;
+          foundHttpProxy = true;
+        }
+      }
+
+      if (!foundHttpProxy)
+      {
+        logger.debug("ScriptRepositry. No system HTTP Proxy set!");
+      }
+
+      return httpProxy;
+
+    }
+
+    //----------------------------------------------------------------------------------------------
+    /** Constructor
+     */
+    NetworkProxy::NetworkProxy() : m_logger("network_proxy_logger_osx")
+    {
+    }
+
+    //----------------------------------------------------------------------------------------------
+    /** Destructor
+     */
+    NetworkProxy::~NetworkProxy()
+    {
+    }
+
+    ProxyInfo NetworkProxy::getHttpProxy(const std::string& targetURLString)
+    {
+      return findHttpProxy(targetURLString, m_logger);
+    }
+
+  } // namespace Kernel
+} // namespace Mantid
+
+#endif
diff --git a/Code/Mantid/Framework/Kernel/src/NetworkProxyWin.cpp b/Code/Mantid/Framework/Kernel/src/NetworkProxyWin.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..315e8eb6b0ea5efb9b15cb84d31911f51628490f
--- /dev/null
+++ b/Code/Mantid/Framework/Kernel/src/NetworkProxyWin.cpp
@@ -0,0 +1,192 @@
+// Only compile on windows.
+#if defined(_WIN32) || defined(_WIN64)
+
+#include "MantidKernel/NetworkProxy.h"
+#include <windows.h>
+#include <Winhttp.h>
+
+namespace Mantid
+{
+  namespace Kernel
+  {
+
+    bool get_proxy_configuration_win(const std::string & target_url, std::string &proxy_str, std::string & err_msg)
+    {
+      HINTERNET hSession = NULL;
+      std::wstring proxy;
+      std::wstring wtarget_url;
+      if (target_url.find("http://") == std::string::npos)
+      {
+        wtarget_url = L"http://";
+      }
+      wtarget_url += std::wstring(target_url.begin(),target_url.end());
+      bool fail = false;
+      std::stringstream info;
+      WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ie_proxy;
+      WINHTTP_AUTOPROXY_OPTIONS proxy_options;
+      WINHTTP_PROXY_INFO proxy_info;
+      ZeroMemory( &proxy_options, sizeof(proxy_options));
+      ZeroMemory( &ie_proxy, sizeof(ie_proxy));
+      ZeroMemory( &proxy_info, sizeof(proxy_info));
+
+      // the loop is just to allow us to go out of this session whenever we want
+      while(true)
+      {
+        // Use WinHttpOpen to obtain a session handle.
+        hSession = WinHttpOpen( L"ScriptRepository FindingProxy/1.0",
+            WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
+            WINHTTP_NO_PROXY_NAME,
+            WINHTTP_NO_PROXY_BYPASS, 0 );
+        if (!hSession)
+        {
+          fail = true;
+          info << "Failed to create the session (Error Code: " << GetLastError() << ").";
+          break;
+        }
+        // get the configuration of the web browser
+        if (!WinHttpGetIEProxyConfigForCurrentUser(&ie_proxy))
+        {
+          fail = true;
+          info << "Could not find the proxy settings (Error code :" << GetLastError();
+          break;
+        }
+
+        if (ie_proxy.lpszProxy)
+        {
+          // the proxy was already given,
+          // it is not necessary to query the system for the auto proxy
+          proxy = ie_proxy.lpszProxy;
+          break;
+        }
+
+        if (ie_proxy.fAutoDetect)
+        {
+          // if auto detect, than setup the proxy to auto detect
+          proxy_options.dwFlags |= WINHTTP_AUTOPROXY_AUTO_DETECT;
+          proxy_options.dwAutoDetectFlags = WINHTTP_AUTO_DETECT_TYPE_DNS_A;
+        }
+
+        if (ie_proxy.lpszAutoConfigUrl)
+        {
+          // configure to auto proxy
+          proxy_options.dwFlags |= WINHTTP_AUTOPROXY_CONFIG_URL;
+          proxy_options.lpszAutoConfigUrl = ie_proxy.lpszAutoConfigUrl;
+        }
+
+        if (!WinHttpGetProxyForUrl(hSession, wtarget_url.c_str(), &proxy_options, &proxy_info))
+        {
+          info << "Could not find the proxy for this url (Error code :" << GetLastError() <<").";
+          fail = true;
+          break;
+        }
+
+        //std::cout << "get proxy for url passed" << std::endl;
+        if (proxy_info.dwAccessType == WINHTTP_ACCESS_TYPE_NO_PROXY)
+        {
+          // no proxy (return an empty proxy)
+          break;
+        }
+
+        if (proxy_info.lpszProxy)
+        {
+          //proxy found. Get it.
+          proxy = proxy_info.lpszProxy;
+          break;
+        }
+        break; // loop finished
+      }
+
+      // free memory of all possibly allocated objects
+      // ie_proxy
+      if (ie_proxy.lpszAutoConfigUrl)
+      GlobalFree(ie_proxy.lpszAutoConfigUrl);
+      if (ie_proxy.lpszProxy)
+      GlobalFree(ie_proxy.lpszProxy);
+      if (ie_proxy.lpszProxyBypass)
+      GlobalFree(ie_proxy.lpszProxyBypass);
+      // proxy_info
+      if (proxy_info.lpszProxyBypass)
+      GlobalFree(proxy_info.lpszProxyBypass);
+      if (proxy_info.lpszProxy)
+      GlobalFree(proxy_info.lpszProxy);
+
+      // hSession
+      if( hSession ) WinHttpCloseHandle( hSession );
+
+      if (fail)
+      {
+        err_msg = info.str();
+      }
+      proxy_str = std::string(proxy.begin(),proxy.end());
+      return !fail;
+    }
+
+    //----------------------------------------------------------------------------------------------
+    /** Constructor
+     */
+    NetworkProxy::NetworkProxy() :
+    m_logger("network_proxy_logger_win")
+    {
+    }
+
+    //----------------------------------------------------------------------------------------------
+    /** Destructor
+     */
+    NetworkProxy::~NetworkProxy()
+    {
+    }
+
+    /**
+     * Get the http proxy information
+     * @param targetURLString
+     * @return Proxy information
+     */
+    ProxyInfo NetworkProxy::getHttpProxy(const std::string& targetURLString)
+    {
+
+      ProxyInfo proxyInfo; // No proxy
+      std::string errmsg, proxy_option;
+      m_logger.debug() << "Attempt to get the windows proxy configuration for this connection" << std::endl;
+      if(get_proxy_configuration_win(targetURLString, proxy_option,errmsg))
+      {
+        std::string proxyServer;
+        int proxyPort;
+        if (!proxy_option.empty())
+        {
+          size_t pos = proxy_option.rfind(':');
+          if (pos != std::string::npos)
+          {
+            if (pos == 4 || pos == 5) // means it found http(s):
+            {
+              proxyServer = proxy_option;
+              proxyPort = 8080; // default port for proxy
+            }
+            else
+            {
+              proxyServer = std::string(proxy_option.begin(),proxy_option.begin()+pos);
+              std::stringstream port_str;
+              port_str << std::string(proxy_option.begin()+pos+1,proxy_option.end());
+              port_str >> proxyPort;
+            }
+          }
+          else
+          {
+            proxyServer = proxy_option;
+            proxyPort = 8080;
+          }
+        }
+        proxyInfo = ProxyInfo(proxyServer, proxyPort, true);
+      }
+      else
+      {
+        m_logger.information() << "ScriptRepository failed to find the proxy information. It will attempt without proxy. "
+        << errmsg << std::endl;
+      }
+
+      return proxyInfo;
+    }
+
+  } // namespace Kernel
+} // namespace Mantid
+
+#endif
diff --git a/Code/Mantid/Framework/Kernel/src/ProxyInfo.cpp b/Code/Mantid/Framework/Kernel/src/ProxyInfo.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6d6866e0d697d1c52267e512a9787f875571263a
--- /dev/null
+++ b/Code/Mantid/Framework/Kernel/src/ProxyInfo.cpp
@@ -0,0 +1,112 @@
+#include "MantidKernel/ProxyInfo.h"
+#include <stdexcept>
+#include <iostream>
+
+namespace Mantid
+{
+  namespace Kernel
+  {
+
+    //----------------------------------------------------------------------------------------------
+    /** Destructor
+     */
+    ProxyInfo::~ProxyInfo()
+    {
+    }
+
+//----------------------------------------------------------------------------------------------
+    /** Constructor
+     */
+    ProxyInfo::ProxyInfo() :
+        m_host(""), m_port(0), m_isHttpProxy(false), m_isEmptyProxy(true)
+    {
+    }
+
+    /**
+     * Proxy information constructor
+     * @param host : host url
+     * @param port : port number
+     * @param isHttpProxy : is this a http proxy
+     */
+    ProxyInfo::ProxyInfo(const std::string& host, const int port, const bool isHttpProxy) :
+        m_host(host), m_port(port), m_isHttpProxy(isHttpProxy), m_isEmptyProxy(false)
+    {
+      if(host.empty() || port == 0)
+      {
+        m_isEmptyProxy = true;
+      }
+    }
+
+    /**
+     * Host url
+     * @return host url or throws if an unset proxy.
+     */
+    std::string ProxyInfo::host() const
+    {
+      if (m_isEmptyProxy)
+      {
+        throw std::logic_error("Calling host on an undefined proxy");
+      }
+      return m_host;
+    }
+
+    /**
+     * Port Number
+     * @return Port number or throws if an unset proxy.
+     */
+    int ProxyInfo::port() const
+    {
+      if (m_isEmptyProxy)
+      {
+        throw std::logic_error("Calling port on an undefined proxy");
+      }
+      return m_port;
+    }
+
+    /**
+     * Is this a http proxy
+     * @return True if a http proxy or throws if an unset proxy.
+     */
+    bool ProxyInfo::isHttpProxy() const
+    {
+      return m_isHttpProxy;
+    }
+
+    /**
+     *
+     * @return True if an empty proxy.
+     */
+    bool ProxyInfo::emptyProxy() const
+    {
+      return m_isEmptyProxy;
+    }
+
+    /**
+     * Copy constructor
+     * @param other : to copy from
+     */
+    ProxyInfo::ProxyInfo(const ProxyInfo& other) :
+        m_host(other.m_host), m_port(other.m_port), m_isHttpProxy(other.m_isHttpProxy), m_isEmptyProxy(other.m_isEmptyProxy)   
+    {
+
+    }
+
+    /**
+     * Assignment operator
+     * @param other : to assign from.
+     * @return
+     */
+    ProxyInfo& ProxyInfo::operator=(const ProxyInfo& other)
+    {
+      if (&other != this)
+      {
+        m_host = other.m_host;
+        m_isEmptyProxy = other.m_isEmptyProxy;
+        m_isHttpProxy = other.m_isHttpProxy;
+        m_port = other.m_port;
+      }
+      return *this;
+    }
+
+  } // namespace Kernel
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/Kernel/src/V3D.cpp b/Code/Mantid/Framework/Kernel/src/V3D.cpp
index 8e06fb397002f4f228aeb5aa6cc3de72deb5d92d..1e6025349131047ff27d5691da3ee6c5ceab6e06 100644
--- a/Code/Mantid/Framework/Kernel/src/V3D.cpp
+++ b/Code/Mantid/Framework/Kernel/src/V3D.cpp
@@ -482,9 +482,8 @@ V3D::cross_prod(const V3D& v) const
 double
 V3D::distance(const V3D& v) const
 {
-  V3D dif(*this);
-  dif-=v;
-  return dif.norm();
+  const double dx(x-v.x), dy(y-v.y), dz(z-v.z);
+  return sqrt(dx*dx +dy*dy + dz*dz);
 }
 
 /** Calculates the zenith angle (theta) of this vector with respect to another
@@ -556,15 +555,10 @@ V3D::rotate(const Kernel::Matrix<double>& A)
     @param A :: Rotation matrix (needs to be >3x3)
   */
 {
-  Matrix<double> Pv(3,1);
-  Pv[0][0]=x;
-  Pv[1][0]=y;
-  Pv[2][0]=z;
-  Matrix<double> Po=A*Pv;
-  x=Po[0][0];
-  y=Po[1][0];
-  z=Po[2][0];
-  return;
+  double xold(x), yold(y), zold(z);
+  x = A[0][0]*xold + A[0][1]*yold + A[0][2]*zold;
+  y = A[1][0]*xold + A[1][1]*yold + A[1][2]*zold;
+  z = A[2][0]*xold + A[2][1]*yold + A[2][2]*zold;
 }
 
 /**
diff --git a/Code/Mantid/Framework/Kernel/test/ConfigServiceTest.h b/Code/Mantid/Framework/Kernel/test/ConfigServiceTest.h
index 5af09a06f0089a3426c44e6b2f350038e6a89262..1f2a1202346eb5c5b971b7c24b68dde5f6c56a2c 100644
--- a/Code/Mantid/Framework/Kernel/test/ConfigServiceTest.h
+++ b/Code/Mantid/Framework/Kernel/test/ConfigServiceTest.h
@@ -187,6 +187,43 @@ public:
     TS_ASSERT_LESS_THAN(0, ConfigService::Instance().getCurrentDir().length()); //check that the string is not empty
 //        TS_ASSERT_LESS_THAN(0, ConfigService::Instance().getHomeDir().length()); //check that the string is not empty
     TS_ASSERT_LESS_THAN(0, ConfigService::Instance().getTempDir().length()); //check that the string is not empty
+
+	  std::string appdataDir = ConfigService::Instance().getAppDataDir();
+	  TS_ASSERT_LESS_THAN(0, appdataDir.length());
+#ifdef _WIN32
+	  std::string::size_type index = appdataDir.find("\\AppData\\Roaming\\mantidproject\\mantid");
+	  TSM_ASSERT_LESS_THAN("Could not find correct path in getAppDataDir()",index,appdataDir.size());
+#else
+	  std::string::size_type index = appdataDir.find("/.mantid");
+	  TSM_ASSERT_LESS_THAN("Could not find correct path in getAppDataDir()",index,appdataDir.size());
+#endif
+
+  }
+
+  void TestInstrumentDirectory()
+  {
+	  
+    auto directories = ConfigService::Instance().getInstrumentDirectories();
+	  TS_ASSERT_LESS_THAN(1,directories.size());
+	  //the first entry should be the AppDataDir + instrument
+	  TSM_ASSERT_LESS_THAN("Could not find the appData directory in getInstrumentDirectories()[0]",directories[0].find(ConfigService::Instance().getAppDataDir()),directories[0].size());
+	  TSM_ASSERT_LESS_THAN("Could not find the 'instrument' directory in getInstrumentDirectories()[0]",directories[0].find("instrument"),directories[0].size());
+
+	  if (directories.size() == 3)
+	  {
+		  // The middle entry should be /etc/mantid/instrument
+		  TSM_ASSERT_LESS_THAN("Could not find /etc/mantid/instrument path in getInstrumentDirectories()[1]",directories[1].find("etc/mantid/instrument"),directories[1].size());
+	  }
+	  //Check that the last directory matches that returned by getInstrumentDirectory
+	  TS_ASSERT_EQUALS(directories[directories.size()-1],ConfigService::Instance().getInstrumentDirectory());
+
+	  //check all of the directory entries actually exist
+	  for (auto it = directories.begin(); it != directories.end(); ++it)
+	  {
+		  Poco::File directory(*it);
+		  TSM_ASSERT(*it + " does not exist", directory.exists());
+	  }
+
   }
 
   void TestCustomProperty()
diff --git a/Code/Mantid/Framework/Kernel/test/ProxyInfoTest.h b/Code/Mantid/Framework/Kernel/test/ProxyInfoTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..6e7b235ce2ccdf20409d2ef0a04d114fd3bc10f9
--- /dev/null
+++ b/Code/Mantid/Framework/Kernel/test/ProxyInfoTest.h
@@ -0,0 +1,113 @@
+#ifndef MANTID_SCRIPTREPOSITORY_PROXYINFOTEST_H_
+#define MANTID_SCRIPTREPOSITORY_PROXYINFOTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidKernel/ProxyInfo.h"
+
+using Mantid::Kernel::ProxyInfo;
+
+class ProxyInfoTest: public CxxTest::TestSuite
+{
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static ProxyInfoTest *createSuite()
+  {
+    return new ProxyInfoTest();
+  }
+  static void destroySuite(ProxyInfoTest *suite)
+  {
+    delete suite;
+  }
+
+  void test_construction_no_proxy()
+  {
+    ProxyInfo proxyInfo;
+    TSM_ASSERT("Is not a valid proxy object", proxyInfo.emptyProxy());
+    TS_ASSERT_THROWS(proxyInfo.host(), std::logic_error&);
+    TS_ASSERT_THROWS(proxyInfo.port(), std::logic_error&);
+    TSM_ASSERT("Cannot be a http proxy if not a proxy at all.", !proxyInfo.isHttpProxy());
+  }
+
+  void test_empty_host_is_empy_proxy()
+  {
+    const std::string url = "";
+    const int port = 1;
+    const bool isHttpProxy = true;
+    ProxyInfo proxyInfo(url, port, isHttpProxy);
+    TSM_ASSERT("This is a NOT valid proxy object", proxyInfo.emptyProxy());
+  }
+
+  void test_empty_port_is_empy_proxy()
+  {
+    const std::string url = "some_url";
+    const int port = 0;
+    const bool isHttpProxy = true;
+    ProxyInfo proxyInfo(url, port, isHttpProxy);
+    TSM_ASSERT("This is a NOT valid proxy object", proxyInfo.emptyProxy());
+  }
+
+  void test_construction_proxy()
+  {
+    const std::string url = "some_url";
+    const int port = 1;
+    const bool isHttpProxy = true;
+    ProxyInfo proxyInfo(url, port, isHttpProxy);
+    TSM_ASSERT("This is a valid proxy object", !proxyInfo.emptyProxy());
+    TS_ASSERT_EQUALS(url, proxyInfo.host());
+    TS_ASSERT_EQUALS(port, proxyInfo.port());
+    TS_ASSERT_EQUALS(isHttpProxy, proxyInfo.isHttpProxy());
+  }
+
+  void test_is_http_proxy()
+  {
+    const std::string url = "some_url";
+    const int port = 1;
+    const bool isHttpProxy = false;
+    ProxyInfo proxyInfo(url, port, isHttpProxy);
+    TS_ASSERT_EQUALS(isHttpProxy, proxyInfo.isHttpProxy());
+  }
+
+  void test_copy_live_proxy()
+  {
+    const std::string url = "some_url";
+    const int port = 1;
+    const bool isHttpProxy = true;
+    ProxyInfo a(url, port, isHttpProxy);
+    ProxyInfo b = a;
+
+    TS_ASSERT_EQUALS(a.host(), b.host());
+    TS_ASSERT_EQUALS(a.port(), b.port());
+    TS_ASSERT_EQUALS(a.isHttpProxy(), b.isHttpProxy());
+  }
+
+  void test_assign_from_live_proxy()
+  {
+    ProxyInfo a("a", 1, false);
+    ProxyInfo b("b", 2, true);
+
+    a = b;
+    TS_ASSERT_EQUALS(a.host(), b.host());
+    TS_ASSERT_EQUALS(a.port(), b.port());
+    TS_ASSERT_EQUALS(a.isHttpProxy(), b.isHttpProxy());
+  }
+
+  void test_copy_dead_proxy()
+  {
+    ProxyInfo a;
+    ProxyInfo b = a; // Should not throw
+    TS_ASSERT(b.emptyProxy())
+  }
+
+  void test_assign_from_dead_proxy()
+  {
+    ProxyInfo a;
+    ProxyInfo b("b", 1, true);
+    b = a; // Should not throw
+    TS_ASSERT(b.emptyProxy())
+  }
+
+};
+
+#endif /* MANTID_SCRIPTREPOSITORY_PROXYINFOTEST_H_ */
diff --git a/Code/Mantid/Framework/Kernel/test/V3DTest.h b/Code/Mantid/Framework/Kernel/test/V3DTest.h
index 98f6367c19481da8cf1d12c77a09f5950bfb348a..e5d7fb2112c905cbdf7b6c18d0fb547cc27e3d5a 100644
--- a/Code/Mantid/Framework/Kernel/test/V3DTest.h
+++ b/Code/Mantid/Framework/Kernel/test/V3DTest.h
@@ -8,6 +8,7 @@
 #include <vector>
 
 #include "MantidKernel/V3D.h"
+#include "MantidKernel/Matrix.h"
 #include "MantidTestHelpers/NexusTestHelper.h"
 
 using Mantid::Kernel::V3D;
@@ -300,6 +301,63 @@ public:
     TS_ASSERT_DELTA( a.angle(d), M_PI, 0.0001);
   }
 
+  void testRotate()
+  {
+    V3D direc(1,1,1);
+    const double theta = 45.0*M_PI/180.0;
+    const double invRt2(1.0/sqrt(2.0));
+
+    // rotate around X
+    Mantid::Kernel::Matrix<double> rx(3,3);
+    rx[0][0] = 1.0;
+    rx[1][1] = cos(theta);
+    rx[1][2] = -sin(theta);
+    rx[2][2] = cos(theta);
+    rx[2][1] = sin(theta);
+    direc.rotate(rx);
+
+    TS_ASSERT_DELTA(direc.X(), 1.0, 1e-08);
+    TS_ASSERT_DELTA(direc.Y(), 0.0, 1e-08);
+    TS_ASSERT_DELTA(direc.Z(), 2.0*invRt2, 1e-08);
+
+    // rotate around Y
+    direc = V3D(1,1,1);
+    Mantid::Kernel::Matrix<double> ry(3,3);
+    ry[0][0] = cos(theta);
+    ry[0][2] = sin(theta);
+    ry[1][1] = 1.0;
+    ry[2][0] = -sin(theta);
+    ry[2][2] = cos(theta);
+    direc.rotate(ry);
+
+    TS_ASSERT_DELTA(direc.X(), 2.0*invRt2, 1e-08);
+    TS_ASSERT_DELTA(direc.Y(), 1.0, 1e-08);
+    TS_ASSERT_DELTA(direc.Z(), 0.0, 1e-08);
+
+    // rotate around Z
+    direc = V3D(1,1,1);
+    Mantid::Kernel::Matrix<double> rz(3,3);
+    rz[0][0] = cos(theta);
+    rz[0][1] = -sin(theta);
+    rz[1][0] = sin(theta);
+    rz[1][1] = cos(theta);
+    rz[2][2] = 1.0;
+    direc.rotate(rz);
+
+    TS_ASSERT_DELTA(direc.X(), 0.0, 1e-08);
+    TS_ASSERT_DELTA(direc.Y(), 2.0*invRt2, 1e-08);
+    TS_ASSERT_DELTA(direc.Z(), 1.0, 1e-08);
+
+    // General rotation
+    Mantid::Kernel::Matrix<double> Rt = rz*ry*rx;
+    direc = V3D(1,1,1);
+    direc.rotate(Rt);
+
+    TS_ASSERT_DELTA(direc.X(), invRt2*(1+invRt2), 1e-08);
+    TS_ASSERT_DELTA(direc.Y(), invRt2*(1+invRt2), 1e-08);
+    TS_ASSERT_DELTA(direc.Z(), 1.0-invRt2, 1e-08);
+  }
+
   void testSpherical()
   {
     double r = 3, theta = 45.0, phi = 45.0;
@@ -539,4 +597,45 @@ public:
 
 };
 
+//---------------------------------------------------------------------------
+// Performance tests
+//---------------------------------------------------------------------------
+
+class V3DTestPerformance : public CxxTest::TestSuite
+{
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static V3DTestPerformance *createSuite() { return new V3DTestPerformance(); }
+  static void destroySuite( V3DTestPerformance *suite ) { delete suite; }
+
+  V3DTestPerformance()
+  {
+    const double theta = 45.0*M_PI/180.0;
+
+    // rotate around X
+    m_rotx = Mantid::Kernel::Matrix<double>(3,3);
+    m_rotx[0][0] = 1.0;
+    m_rotx[1][1] = cos(theta);
+    m_rotx[1][2] = -sin(theta);
+    m_rotx[2][2] = cos(theta);
+    m_rotx[2][1] = sin(theta);
+  }
+
+  void testRotate()
+  {
+    V3D direction(1.0,1.0,1.0);
+    for(size_t i = 0; i < 100000; ++i)
+    {
+      direction = V3D(1.0,1.0,1.0);
+      direction.rotate(m_rotx);
+    }
+    // Do something so the compiler doesn't optimise the loop away
+    TS_ASSERT_DELTA(direction.Y(), 0.0, 1e-08);
+  }
+
+private:
+  Mantid::Kernel::Matrix<double> m_rotx;
+};
+
 #endif
diff --git a/Code/Mantid/Framework/MDAlgorithms/CMakeLists.txt b/Code/Mantid/Framework/MDAlgorithms/CMakeLists.txt
index 23dbe3fd76b17c5605cbe2a58f990b6c30fd9bb8..e0fdf07f80079d8be53e1ec6a5f81cbab17f9267 100644
--- a/Code/Mantid/Framework/MDAlgorithms/CMakeLists.txt
+++ b/Code/Mantid/Framework/MDAlgorithms/CMakeLists.txt
@@ -22,6 +22,7 @@ set ( SRC_FILES
 	src/CreateMDWorkspace.cpp
 	src/DivideMD.cpp
 	src/EqualToMD.cpp
+	src/EvaluateMDFunction.cpp
 	src/ExponentialMD.cpp
 	src/FakeMDEventData.cpp
 	src/FindPeaksMD.cpp
@@ -103,6 +104,7 @@ set ( INC_FILES
 	inc/MantidMDAlgorithms/DllConfig.h
 	inc/MantidMDAlgorithms/EqualToMD.h
 	inc/MantidMDAlgorithms/ExponentialMD.h
+	inc/MantidMDAlgorithms/EvaluateMDFunction.h
 	inc/MantidMDAlgorithms/FakeMDEventData.h
 	inc/MantidMDAlgorithms/FindPeaksMD.h
 	inc/MantidMDAlgorithms/GSLFunctions.h
@@ -185,6 +187,7 @@ set ( TEST_FILES
 	DivideMDTest.h
 	EqualToMDTest.h
 	ExponentialMDTest.h
+	EvaluateMDFunctionTest.h
 	FakeMDEventDataTest.h
 	FindPeaksMDTest.h
 	FitResolutionConvolvedModelTest.h
diff --git a/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/EvaluateMDFunction.h b/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/EvaluateMDFunction.h
new file mode 100644
index 0000000000000000000000000000000000000000..ed2ee59597c9fba38dfe6a30709b6c5f39f40faa
--- /dev/null
+++ b/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/EvaluateMDFunction.h
@@ -0,0 +1,56 @@
+#ifndef MANTID_MDALGORITHMS_EVALUATEMDFUNCTION_H_
+#define MANTID_MDALGORITHMS_EVALUATEMDFUNCTION_H_
+
+#include "MantidKernel/System.h"
+#include "MantidAPI/Algorithm.h"
+
+namespace Mantid
+{
+namespace MDAlgorithms
+{
+
+  /** EvaluateMDFunction : TODO: DESCRIPTION
+    
+    Copyright &copy; 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+  */
+  class DLLExport EvaluateMDFunction  : public API::Algorithm
+  {
+  public:
+    EvaluateMDFunction();
+    virtual ~EvaluateMDFunction();
+    
+    virtual const std::string name() const {return "EvaluateMDFunction";}
+    virtual int version() const;
+    virtual const std::string category() const;
+    virtual const std::string summary() const;
+
+  private:
+    void init();
+    void exec();
+
+
+  };
+
+
+} // namespace MDAlgorithms
+} // namespace Mantid
+
+#endif  /* MANTID_MDALGORITHMS_EVALUATEMDFUNCTION_H_ */
diff --git a/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/Quantification/Resolution/TobyFitResolutionModel.h b/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/Quantification/Resolution/TobyFitResolutionModel.h
index 6b92cd6ccdfc1a0225085a3f1a9e1ef08e91f191..d33e03f2f177d60247acc2014502195f56dd356f 100644
--- a/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/Quantification/Resolution/TobyFitResolutionModel.h
+++ b/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/Quantification/Resolution/TobyFitResolutionModel.h
@@ -134,8 +134,6 @@ namespace Mantid
 
       /// Storage for currently in use random number generators
       mutable std::vector<Kernel::NDRandomNumberGenerator*> m_randomNumbers;
-      /// The value to mark an attribute as active
-      int m_activeAttrValue;
       /// Check for convergence after loop min number of steps
       int m_mcLoopMin;
       /// Maximum number of Monte Carlo evaluations
diff --git a/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/SXDMDNorm.h b/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/SXDMDNorm.h
index 3ff33b52b27772a000db1df2226cc6c76b4474bb..a6d7c3e1218239423bbca99136a968d18e4b1eb6 100644
--- a/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/SXDMDNorm.h
+++ b/Code/Mantid/Framework/MDAlgorithms/inc/MantidMDAlgorithms/SXDMDNorm.h
@@ -66,6 +66,8 @@ namespace MDAlgorithms
     double KincidentMin,KincidentMax;
     ///index of h,k,l dimensions in the output workspaces
     size_t hIndex,kIndex,lIndex;
+    /// cached x values along dimensions h,k,l
+    std::vector<double> m_hX, m_kX, m_lX;
   };
 
 
diff --git a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDParent.cpp b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDParent.cpp
index a8a64f5f1f360721d6d08c28249d7d94bdf3a5b5..c91bfedbcd0c4fafda1eb75ebdab47be009b0f15 100644
--- a/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDParent.cpp
+++ b/Code/Mantid/Framework/MDAlgorithms/src/ConvertToMDParent.cpp
@@ -188,6 +188,30 @@ namespace Mantid
 
           if(oldInstrName==currentWSInstrumentName)
           { 
+            // a direct mode instrument can be unchanged but incident energy can be different.
+            // It is cheap operation so we should always replace incident energy on the target workspace
+            bool hasEi= InWS2D->run().hasProperty("Ei");
+            bool hasEfix= InWS2D->run().hasProperty("eFixed");
+            if (hasEi||hasEfix)
+            {
+
+              double Ei;
+              if (hasEi) Ei=InWS2D->run().getPropertyValueAsType<double>("Ei");
+              if (hasEfix) Ei=InWS2D->run().getPropertyValueAsType<double>("eFixed");
+
+              TargTableWS->logs()->addProperty<double>("Ei",Ei,true);           
+            }
+            else
+            {
+              Emode = Kernel::DeltaEMode().fromString(dEModeRequested);
+              if(Emode==Kernel::DeltaEMode::Direct)
+                  throw(std::invalid_argument("Input neutron's energy has to be present at the workspace as Ei or eFixed number log in Direct inelastic mode"));
+              //if(Emode==Kernel::DeltaEMode::Indirect && !hasEfix)
+              //    throw(std::invalid_argument("Input neutron's energy has to be present at the workspace as eFixed number log in Indirect inelastic mode"));
+
+            }
+ 
+
             if(!updateMasks) return TargTableWS;
             //Target workspace with preprocessed detectors exists and seems is correct one. 
             // We still need to update masked detectors information
diff --git a/Code/Mantid/Framework/MDAlgorithms/src/EvaluateMDFunction.cpp b/Code/Mantid/Framework/MDAlgorithms/src/EvaluateMDFunction.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b4e1a6cc8203c426291e27c610be9f8a7cd2e629
--- /dev/null
+++ b/Code/Mantid/Framework/MDAlgorithms/src/EvaluateMDFunction.cpp
@@ -0,0 +1,98 @@
+#include "MantidMDAlgorithms/EvaluateMDFunction.h"
+#include "MantidAPI/FunctionProperty.h"
+#include "MantidAPI/IMDHistoWorkspace.h"
+#include "MantidAPI/AlgorithmManager.h"
+#include "MantidAPI/IMDIterator.h"
+#include "MantidAPI/FunctionDomainMD.h"
+#include "MantidAPI/FunctionValues.h"
+
+namespace Mantid
+{
+namespace MDAlgorithms
+{
+
+  using Mantid::Kernel::Direction;
+  using Mantid::API::WorkspaceProperty;
+
+  // Register the algorithm into the AlgorithmFactory
+  DECLARE_ALGORITHM(EvaluateMDFunction)
+  
+
+
+  //----------------------------------------------------------------------------------------------
+  /** Constructor
+   */
+  EvaluateMDFunction::EvaluateMDFunction()
+  {
+  }
+    
+  //----------------------------------------------------------------------------------------------
+  /** Destructor
+   */
+  EvaluateMDFunction::~EvaluateMDFunction()
+  {
+  }
+  
+
+  //----------------------------------------------------------------------------------------------
+
+  
+  /// Algorithm's version for identification. @see Algorithm::version
+  int EvaluateMDFunction::version() const { return 1;};
+  
+  /// Algorithm's category for identification. @see Algorithm::category
+  const std::string EvaluateMDFunction::category() const { return "MDAlgorithms";}
+
+  /// Algorithm's summary for use in the GUI and help. @see Algorithm::summary
+  const std::string EvaluateMDFunction::summary() const { return "Evaluates an MD function on a MD histo workspace.";};
+
+  //----------------------------------------------------------------------------------------------
+  /** Initialize the algorithm's properties.
+   */
+  void EvaluateMDFunction::init()
+  {
+    declareProperty(new WorkspaceProperty<API::IMDHistoWorkspace>("InputWorkspace","",Direction::Input), "An input workspace that provides dimensions for the output.");
+    declareProperty(new API::FunctionProperty("Function"),"Parameters defining the fitting function and its initial values");
+    declareProperty(new WorkspaceProperty<API::IMDHistoWorkspace>("OutputWorkspace","",Direction::Output), "An output workspace.");
+  }
+
+  //----------------------------------------------------------------------------------------------
+  /** Execute the algorithm.
+   */
+  void EvaluateMDFunction::exec()
+  {
+    API::IMDHistoWorkspace_sptr input = getProperty("InputWorkspace");
+
+    auto cloner = API::AlgorithmManager::Instance().create("CloneMDWorkspace");
+    cloner->initialize();
+    cloner->setChild(true);
+    cloner->setProperty("InputWorkspace", input);
+    cloner->setPropertyValue("OutputWorkspace", "_");
+    cloner->execute();
+
+    API::IMDWorkspace_sptr clone = cloner->getProperty("OutputWorkspace");
+    API::IMDHistoWorkspace_sptr output = boost::dynamic_pointer_cast<API::IMDHistoWorkspace>(clone);
+
+    if ( !output )
+      throw std::runtime_error("Cannot create output workspace");
+
+    API::IFunction_sptr function = getProperty("Function");
+    function->setWorkspace( output );
+
+    API::FunctionDomainMD domain( output );
+    API::FunctionValues values( domain );
+
+    function->function( domain, values );
+
+    double *data = values.getPointerToCalculated(0);
+    size_t length = values.size();
+    double *outputData = output->getSignalArray();
+    std::copy( data, data + length, outputData );
+
+    setProperty("OutputWorkspace",output);
+  }
+
+
+
+} // namespace MDAlgorithms
+} // namespace Mantid
diff --git a/Code/Mantid/Framework/MDAlgorithms/src/IntegratePeaksMD2.cpp b/Code/Mantid/Framework/MDAlgorithms/src/IntegratePeaksMD2.cpp
index 3fcd0366d2f329f5c09db6f1a4e94cf7dd8f0dc5..8337881274a2bcdefee4f8e645722c4889127c79 100644
--- a/Code/Mantid/Framework/MDAlgorithms/src/IntegratePeaksMD2.cpp
+++ b/Code/Mantid/Framework/MDAlgorithms/src/IntegratePeaksMD2.cpp
@@ -589,6 +589,14 @@ namespace MDAlgorithms
   }
 
   /** Calculate if this Q is on a detector
+   * Define edges for each instrument by masking. For CORELLI, tubes 1 and 16, and pixels 0 and 255.
+   * Get Q in the lab frame for every peak, call it C
+   * For every point on the edge, the trajectory in reciprocal space is a straight line, going through O=V3D(0,0,0).
+   * Calculate a point at a fixed momentum, say k=1. Q in the lab frame E=V3D(-k*sin(tt)*cos(ph),-k*sin(tt)*sin(ph),k-k*cos(ph)).
+   * Normalize E to 1: E=E*(1./E.norm())
+   * The distance from C to OE is given by dv=C-E*(C.scalar_prod(E))
+   * If dv.norm<integration_radius, one of the detector trajectories on the edge is too close to the peak
+   * This method is applied to all masked pixels. If there are masked pixels trajectories inside an integration volume, the peak must be rejected.
    *
    * @param QLabFrame: The Peak center.
    * @param r: Peak radius.
diff --git a/Code/Mantid/Framework/MDAlgorithms/src/LoadMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/LoadMD.cpp
index 5b5d3b02c1d2e88a0c85932647952846959b1f13..e9736c335496273e79224b602d90ceb268e92912 100644
--- a/Code/Mantid/Framework/MDAlgorithms/src/LoadMD.cpp
+++ b/Code/Mantid/Framework/MDAlgorithms/src/LoadMD.cpp
@@ -366,7 +366,10 @@ namespace Mantid
           if(!box)continue;
 
           if(BoxEventIndex[2*i+1]>0) // Load in memory NOT using the file as the back-end,
+          {
+            boxTree[i]->reserveMemoryForLoad(BoxEventIndex[2*i+1]);
             boxTree[i]->loadAndAddFrom(loader.get(),BoxEventIndex[2*i],static_cast<size_t>(BoxEventIndex[2*i+1]));
+          }
 
         }
         loader->closeFile();
diff --git a/Code/Mantid/Framework/MDAlgorithms/src/MergeMDFiles.cpp b/Code/Mantid/Framework/MDAlgorithms/src/MergeMDFiles.cpp
index ce5f98266480ad3c2c5b3cb7abf28d779defebde..2798ea8d4b2d2557541c2c212e487d2bdc8afda9 100644
--- a/Code/Mantid/Framework/MDAlgorithms/src/MergeMDFiles.cpp
+++ b/Code/Mantid/Framework/MDAlgorithms/src/MergeMDFiles.cpp
@@ -159,17 +159,24 @@ namespace MDAlgorithms
     TargetBox->clear();
 
     uint64_t nBoxEvents(0);
+    std::vector<size_t> numFileEvents(m_EventLoader.size());
+
     for (size_t iw=0; iw<this->m_EventLoader.size(); iw++)
     {
       size_t ID = TargetBox->getID();
+      numFileEvents[iw] = static_cast<size_t>(m_fileComponentsStructure[iw].getEventIndex()[2*ID+1]);
+      nBoxEvents += numFileEvents[iw];
+    }
 
-       uint64_t fileLocation   = m_fileComponentsStructure[iw].getEventIndex()[2*ID+0];
-       size_t   numFileEvents  = static_cast<size_t>(m_fileComponentsStructure[iw].getEventIndex()[2*ID+1]);
-       if(numFileEvents==0)continue;
-       //TODO: it is possible to avoid the reallocation of the memory at each load 
-      TargetBox->loadAndAddFrom(m_EventLoader[iw],fileLocation,numFileEvents);
+    // At this point memory required is known, so it is reserved all in one go
+    TargetBox->reserveMemoryForLoad(nBoxEvents);
 
-       nBoxEvents += numFileEvents;
+    for (size_t iw=0; iw<this->m_EventLoader.size(); iw++)
+    {
+      size_t ID = TargetBox->getID();
+      uint64_t fileLocation   = m_fileComponentsStructure[iw].getEventIndex()[2*ID+0];
+      if(numFileEvents[iw]==0) continue;
+      TargetBox->loadAndAddFrom(m_EventLoader[iw],fileLocation,numFileEvents[iw]);
     }
 
     return nBoxEvents;
diff --git a/Code/Mantid/Framework/MDAlgorithms/src/Quantification/ForegroundModel.cpp b/Code/Mantid/Framework/MDAlgorithms/src/Quantification/ForegroundModel.cpp
index bf1406abab529da108be3a0f4a335cd2a106de8f..fa4cee8cbcfca9ff59e455f1ffefdf919dbda83f 100644
--- a/Code/Mantid/Framework/MDAlgorithms/src/Quantification/ForegroundModel.cpp
+++ b/Code/Mantid/Framework/MDAlgorithms/src/Quantification/ForegroundModel.cpp
@@ -161,7 +161,7 @@ namespace Mantid
 
     /**
      * Returns the form factor for the given \f$Q^2\f$ value
-     * @param qsqr :: \f$Q^2\f$ in \f$\AA^{-2}\f$
+     * @param qsqr :: \f$Q^2\f$ in \f$\mbox{\AA}^{-2}\f$
      * @returns The form factor for the given factor or 1.0 if turned off
      */
     double ForegroundModel::formFactor(const double qsqr) const
diff --git a/Code/Mantid/Framework/MDAlgorithms/src/SXDMDNorm.cpp b/Code/Mantid/Framework/MDAlgorithms/src/SXDMDNorm.cpp
index 0c25c0873798396d90dad07182a510c12a8081c3..db70979476418d76a42f6ba3005159b844c8a2d6 100644
--- a/Code/Mantid/Framework/MDAlgorithms/src/SXDMDNorm.cpp
+++ b/Code/Mantid/Framework/MDAlgorithms/src/SXDMDNorm.cpp
@@ -17,7 +17,7 @@ namespace MDAlgorithms
   using namespace Mantid::Kernel;
 
   ///function to  compare two intersections (h,k,l,Momentum) by Momentum
-  bool compareMomentum(Mantid::Kernel::VMD v1, Mantid::Kernel::VMD v2)
+  bool compareMomentum(const Mantid::Kernel::VMD &v1, const Mantid::Kernel::VMD &v2)
   {
     return (v1[3]<v2[3]);
   }
@@ -32,6 +32,16 @@ namespace MDAlgorithms
    */
   SXDMDNorm::SXDMDNorm()
   {
+      hIndex=-1;
+      kIndex=-1;
+      lIndex=-1;
+      hIntegrated=true;
+      kIntegrated=true;
+      lIntegrated=true;
+      m_nDims=0;
+      transf=Mantid::Kernel::DblMatrix(3,3);
+      KincidentMin=0;
+      KincidentMax=EMPTY_DBL();
   }
 
   //----------------------------------------------------------------------------------------------
@@ -141,16 +151,17 @@ namespace MDAlgorithms
       {
           float dimMin=static_cast<float>(m_inputWS->getDimension(i)->getMinimum());
           float dimMax=static_cast<float>(m_inputWS->getDimension(i)->getMaximum());
-
           Kernel::TimeSeriesProperty<double> *run_property = dynamic_cast<Kernel::TimeSeriesProperty<double> *>(m_inputWS->getExperimentInfo(0)->run().getProperty(m_inputWS->getDimension(i)->getName()));
-          coord_t value=static_cast<coord_t>(run_property->firstValue());
-          otherValues.push_back(value);
-          //in the original MD data no time was spent measuring between dimMin and dimMax
-          if ((value<dimMin)||(value>dimMax))
+          if (run_property!=NULL)
           {
+            coord_t value=static_cast<coord_t>(run_property->firstValue());
+            otherValues.push_back(value);
+            //in the original MD data no time was spent measuring between dimMin and dimMax
+            if ((value<dimMin)||(value>dimMax))
+            {
               skipProcessing=true;
+            }
           }
-
           delete run_property;
       }
 
@@ -224,6 +235,27 @@ namespace MDAlgorithms
           }
       }
 
+      auto &hDim = *m_normWS->getDimension(hIndex);
+      m_hX.resize( hDim.getNBins() );
+      for(size_t i = 0; i < m_hX.size(); ++i)
+      {
+        m_hX[i] = hDim.getX(i);
+      }
+
+      auto &kDim = *m_normWS->getDimension(kIndex);
+      m_kX.resize( kDim.getNBins() );
+      for(size_t i = 0; i < m_kX.size(); ++i)
+      {
+        m_kX[i] = kDim.getX(i);
+      }
+
+      auto &lDim = *m_normWS->getDimension(lIndex);
+      m_lX.resize( lDim.getNBins() );
+      for(size_t i = 0; i < m_lX.size(); ++i)
+      {
+        m_lX[i] = lDim.getX(i);
+      }
+
       Mantid::API::MatrixWorkspace_const_sptr fW=getProperty("FluxWorkspace");
       Mantid::DataObjects::EventWorkspace_const_sptr fluxW = boost::dynamic_pointer_cast<const Mantid::DataObjects::EventWorkspace>(fW);
       KincidentMin=fluxW->getEventXMin();
@@ -239,25 +271,34 @@ namespace MDAlgorithms
       {
           double PC=m_normWS->getExperimentInfo(0)->run().getProtonCharge();
           Kernel::PropertyWithValue< std::vector<double> > *prop=dynamic_cast< Mantid::Kernel::PropertyWithValue<std::vector<double> >*>(m_normWS->getExperimentInfo(0)->getLog("RUBW_MATRIX"));
-          Mantid::Kernel::DblMatrix RUBW((*prop)()); //includes the 2*pi factor but not goniometer for now :)
-          transf=m_normWS->getExperimentInfo(0)->run().getGoniometerMatrix()*RUBW;
-          transf.Invert();
+          if (prop==NULL)
+          {
+              throw std::runtime_error("No RUBW_MATRIX");
+          }
+          else
+          {
+              Mantid::Kernel::DblMatrix RUBW((*prop)()); //includes the 2*pi factor but not goniometer for now :)
+              transf=m_normWS->getExperimentInfo(0)->run().getGoniometerMatrix()*RUBW;
+              transf.Invert();
+          }
           //FIXME: the detector positions are from the IDF. Need to account for calibration
           std::vector<detid_t> detIDS=m_normWS->getExperimentInfo(0)->getInstrument()->getDetectorIDs(true);
 
           Mantid::API::Progress *prog=new Mantid::API::Progress(this,0.3,1,static_cast<int64_t>(detIDS.size()));
           const detid2index_map d2m=fluxW->getDetectorIDToWorkspaceIndexMap();
           const detid2index_map d2mSA=sA->getDetectorIDToWorkspaceIndexMap();
+          auto instrument = m_normWS->getExperimentInfo(0)->getInstrument();
 
           PARALLEL_FOR1(m_normWS)
           for(int i=0;i<static_cast<int>(detIDS.size());i++)
           {
               PARALLEL_START_INTERUPT_REGION
-              Mantid::Geometry::IDetector_const_sptr detector=m_normWS->getExperimentInfo(0)->getInstrument()->getDetector(detIDS[i]);
+              Mantid::Geometry::IDetector_const_sptr detector=instrument->getDetector(detIDS[i]);
               if(!detector->isMonitor()&&!detector->isMasked())
               {
                   //get intersections
                   std::vector<Mantid::Kernel::VMD> intersections=calculateIntersections(detector);
+
                   if(!intersections.empty())
                   {
                       //calculate indices
@@ -269,30 +310,44 @@ namespace MDAlgorithms
                       std::vector<Mantid::DataObjects::WeightedEventNoTime> el=fluxW->getEventList(sp).getWeightedEventsNoTime();
                       //get iterator to the first event that has momentum >= (*intersections.begin())[3]
                       std::vector<Mantid::DataObjects::WeightedEventNoTime>::iterator start=el.begin();
+                      // check that el isn't empty
+                      if ( start == el.end() ) continue;
                       while((*start).tof()<(*intersections.begin())[3]) ++start;
 
                       double solid=sA->readY(d2mSA.find(detIDS[i])->second)[0]*PC;
-                      std::vector<Mantid::Kernel::VMD>::iterator it;
-                      for (it=intersections.begin()+1;it!=intersections.end();++it)
+
+                      const size_t sizeOfMVD = intersections.front().size();
+                      // pre-allocate for efficiency
+                      std::vector<coord_t> pos( sizeOfMVD + otherValues.size() );
+
+                      for (auto it=intersections.begin()+1;it!=intersections.end();++it)
                       {
-                          Mantid::Kernel::VMD deltav=(*it)-(*(it-1));//difference between consecutive intersections
-                          Mantid::Kernel::VMD avev=((*it)+(*(it-1)))*0.5;//average between two intersection (to get position)
+                          //Mantid::Kernel::VMD deltav=(*it)-(*(it-1));//difference between consecutive intersections
+                          // the full vector isn't used so compute only what is necessary
+                          double delta = (*it)[3] - (*(it-1))[3];
+
                           double eps=1e-7;//do not integrate if momemntum difference is smaller than eps, assume contribution is 0
-                          if (deltav[3]>eps)
+                          if (delta > eps)
                           {
-                              std::vector<coord_t> pos=avev.toVector<coord_t>();
-                              pos.insert(pos.end()-1,otherValues.begin(),otherValues.end());
-                              VMD posNew=mat*pos;
-                              size_t linIndex=m_normWS->getLinearIndexAtCoord(posNew.toVector<coord_t>().data());
+                              //Mantid::Kernel::VMD avev=((*it)+(*(it-1)))*0.5;//average between two intersection (to get position)
+                              //std::vector<coord_t> pos=avev.toVector<coord_t>();
+                              //pos.insert(pos.end()-1,otherValues.begin(),otherValues.end());
+                              // a bit longer and less readable but faster version of the above
+                              std::transform( it->getBareArray(), it->getBareArray() + sizeOfMVD, (it-1)->getBareArray(), pos.begin(), std::plus<coord_t>() );
+                              std::transform( pos.begin(), pos.begin() + sizeOfMVD, pos.begin(), std::bind2nd( std::multiplies<coord_t>(), 0.5 ) );
+                              std::copy( otherValues.begin(), otherValues.end(), pos.begin() + sizeOfMVD );
+
+                              std::vector<coord_t> posNew = mat*pos;
+                              size_t linIndex=m_normWS->getLinearIndexAtCoord(posNew.data());
 
                               if(linIndex!=size_t(-1))
                               {
                                   double signal=0.;
                                   while((*start).tof()<(*it)[3])
                                   {
-                                      signal+=(*start).weight();
                                       if (start==el.end())
                                           break;
+                                      signal+=(*start).weight();
                                       ++start;
                                   }
                                   signal*=solid;
@@ -312,10 +367,11 @@ namespace MDAlgorithms
               PARALLEL_END_INTERUPT_REGION
           }
           PARALLEL_CHECK_INTERUPT_REGION
-
+          delete prog;
       }
 
       this->setProperty("OutputNormalizationWorkspace",m_normWS);
+
   }
 
 
@@ -332,6 +388,11 @@ namespace MDAlgorithms
 
         double eps=1e-7;
 
+        auto hNBins = m_hX.size();
+        auto kNBins = m_kX.size();
+        auto lNBins = m_lX.size();
+        intersections.reserve( hNBins + kNBins + lNBins + 8 );
+
         //calculate intersections with planes perpendicular to h
         if (fabs(hStart-hEnd)>eps)
         {
@@ -340,9 +401,9 @@ namespace MDAlgorithms
             double fl=(lEnd-lStart)/(hEnd-hStart);
             if(!hIntegrated)
             {
-              for(size_t i=0;i<m_normWS->getDimension(hIndex)->getNBins();i++)
+              for(size_t i=0;i<hNBins;i++)
               {
-                double hi=m_normWS->getDimension(hIndex)->getX(i);
+                double hi = m_hX[i];
                 if ((hi>=hMin)&&(hi<=hMax)&&((hStart-hi)*(hEnd-hi)<0))
                 {
                     // if hi is between hStart and hEnd, then ki and li will be between kStart, kEnd and lStart, lEnd and momi will be between KincidentMin and KnincidemtmMax
@@ -392,9 +453,9 @@ namespace MDAlgorithms
             double fl=(lEnd-lStart)/(kEnd-kStart);
             if(!kIntegrated)
             {
-              for(size_t i=0;i<m_normWS->getDimension(kIndex)->getNBins();i++)
+              for(size_t i=0;i<kNBins;i++)
               {
-                double ki=m_normWS->getDimension(kIndex)->getX(i);
+                double ki = m_kX[i];
                 if ((ki>=kMin)&&(ki<=kMax)&&((kStart-ki)*(kEnd-ki)<0))
                 {
                     // if ki is between kStart and kEnd, then hi and li will be between hStart, hEnd and lStart, lEnd
@@ -444,9 +505,9 @@ namespace MDAlgorithms
             double fk=(kEnd-kStart)/(lEnd-lStart);
             if(!lIntegrated)
             {
-              for(size_t i=0;i<m_normWS->getDimension(lIndex)->getNBins();i++)
+              for(size_t i=0;i<lNBins;i++)
               {
-                double li=m_normWS->getDimension(lIndex)->getX(i);
+                double li = m_lX[i];
                 if ((li>=lMin)&&(li<=lMax)&&((lStart-li)*(lEnd-li)<0))
                 {
                     // if li is between lStart and lEnd, then hi and ki will be between hStart, hEnd and kStart, kEnd
@@ -501,7 +562,9 @@ namespace MDAlgorithms
         }
 
         //sort intersections by momentum
-        std::stable_sort(intersections.begin(),intersections.end(),compareMomentum);
+        typedef std::vector<Mantid::Kernel::VMD>::iterator IterType;
+        std::stable_sort<IterType,bool (*)(const Mantid::Kernel::VMD&,const Mantid::Kernel::VMD&)>(intersections.begin(),intersections.end(),compareMomentum);
+
         return intersections;
   }
 
diff --git a/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDComponentsTest.h b/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDComponentsTest.h
index 6c1ca26e41140036fc2452925c932e863ed8f641..958d745759d7954e1b0103840f3f2312415bc926 100644
--- a/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDComponentsTest.h
+++ b/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDComponentsTest.h
@@ -124,6 +124,11 @@ public:
     TS_ASSERT_EQUALS(9,TableWS6->rowCount());
     TS_ASSERT_EQUALS(4,TableWS5->rowCount());
 
+    // Trow on  running the test again if the workspace does not have energy attached.
+    ws2DNew->mutableRun().removeProperty("Ei");
+    TSM_ASSERT_THROWS("WS has to have input energy for indirect methods despite the table workspace is already calculated",pAlg->preprocessDetectorsPositions(ws2DNew),std::invalid_argument);
+
+
 
   }
   void testUpdateMasksSkipped()
diff --git a/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDMinMaxLocalTest.h b/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDMinMaxLocalTest.h
index 5ca43c8ba0ae23f9cdbaede1b68fa601da806a4e..3f555afd1bde0d0bd55a1ff12f10976872fe3e16 100644
--- a/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDMinMaxLocalTest.h
+++ b/Code/Mantid/Framework/MDAlgorithms/test/ConvertToMDMinMaxLocalTest.h
@@ -137,6 +137,7 @@ public:
     Mantid::API::FrameworkManager::Instance();
     ConvertToMDMinMaxLocal alg;
     Mantid::API::MatrixWorkspace_sptr  ws=MakeWorkspace(-2.5,0.05,true,0,5);
+
     WorkspaceCreationHelper::storeWS(WSName,ws);
 
     TS_ASSERT_THROWS_NOTHING( alg.initialize() )
diff --git a/Code/Mantid/Framework/MDAlgorithms/test/EvaluateMDFunctionTest.h b/Code/Mantid/Framework/MDAlgorithms/test/EvaluateMDFunctionTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..f1fe2cbbc9cd60229a403ae30bc0df0240d80de9
--- /dev/null
+++ b/Code/Mantid/Framework/MDAlgorithms/test/EvaluateMDFunctionTest.h
@@ -0,0 +1,97 @@
+#ifndef MANTID_MDALGORITHMS_EVALUATEMDFUNCTIONTEST_H_
+#define MANTID_MDALGORITHMS_EVALUATEMDFUNCTIONTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidMDAlgorithms/EvaluateMDFunction.h"
+#include "MantidMDAlgorithms/CreateMDHistoWorkspace.h"
+
+using Mantid::MDAlgorithms::EvaluateMDFunction;
+using Mantid::MDAlgorithms::CreateMDHistoWorkspace;
+using namespace Mantid::API;
+
+class EvaluateMDFunctionTest : public CxxTest::TestSuite
+{
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static EvaluateMDFunctionTest *createSuite() { return new EvaluateMDFunctionTest(); }
+  static void destroySuite( EvaluateMDFunctionTest *suite ) { delete suite; }
+
+
+  void test_Init()
+  {
+    EvaluateMDFunction alg;
+    TS_ASSERT_THROWS_NOTHING( alg.initialize() )
+    TS_ASSERT( alg.isInitialized() )
+  }
+  
+  void test_exec()
+  {
+    // Name of the output workspace.
+    std::string outWSName("EvaluateMDFunctionTest_OutputWS");
+
+    const size_t nx = 3, ny = 4;
+    IMDHistoWorkspace_sptr inputWorkspace = createInputWorkspace(nx,ny);
+    TS_ASSERT( inputWorkspace );
+    std::string funcStr = "name=UserFunctionMD,Formula=x+y";
+  
+    EvaluateMDFunction alg;
+    TS_ASSERT_THROWS_NOTHING( alg.initialize() )
+    TS_ASSERT( alg.isInitialized() )
+    TS_ASSERT_THROWS_NOTHING( alg.setProperty("InputWorkspace", inputWorkspace) );
+    TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("Function", funcStr) );
+    TS_ASSERT_THROWS_NOTHING( alg.setPropertyValue("OutputWorkspace", outWSName) );
+    TS_ASSERT_THROWS_NOTHING( alg.execute(); );
+    TS_ASSERT( alg.isExecuted() );
+    
+    IMDHistoWorkspace_sptr ws;
+    TS_ASSERT_THROWS_NOTHING( ws = AnalysisDataService::Instance().retrieveWS<IMDHistoWorkspace>(outWSName) );
+    TS_ASSERT(ws);
+    if (!ws) return;
+    
+    for(size_t i = 0; i < nx; ++i)
+    for(size_t j = 0; j < ny; ++j)
+    {
+      size_t linearIndex = ws->getLinearIndex(i,j);
+      auto v = ws->getCenter(linearIndex);
+      auto x = v[0];
+      auto y = v[1];
+      auto f = ws->getSignalAt(linearIndex);
+      TS_ASSERT_DELTA( f, x + y, 1e-15 );
+    }
+    
+    // Remove workspace from the data service.
+    AnalysisDataService::Instance().remove(outWSName);
+  }
+  
+  IMDHistoWorkspace_sptr createInputWorkspace(size_t nx, size_t ny)
+  {
+
+    std::vector<double> values( nx * ny, 1.0 );
+    std::vector<int> dims(2);
+    dims[0] = static_cast<int>(nx);
+    dims[1] = static_cast<int>(ny);
+
+    CreateMDHistoWorkspace alg;
+    alg.initialize();
+    alg.setProperty("SignalInput", values);
+    alg.setProperty("ErrorInput", values);
+    alg.setProperty("Dimensionality", 2);
+    alg.setProperty("NumberOfBins", dims);
+    alg.setPropertyValue("Extents", "-1,1,-1,1");
+    alg.setPropertyValue("Names", "A,B");
+    alg.setPropertyValue("Units", "U,U");
+    alg.setPropertyValue("OutputWorkspace", "out");
+    alg.execute();
+    TS_ASSERT( alg.isExecuted() );
+
+    IMDHistoWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<IMDHistoWorkspace>("out");
+    AnalysisDataService::Instance().remove("out");
+    return ws;
+  }
+
+};
+
+
+#endif /* MANTID_MDALGORITHMS_EVALUATEMDFUNCTIONTEST_H_ */
diff --git a/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/FitMD.h b/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/FitMD.h
index 95a0ffc00ec12252a640ecce32ccdc29d93dab6a..fd9de1a6ede89d05c8c6fa94e637edc39d2684fd 100644
--- a/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/FitMD.h
+++ b/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/FitMD.h
@@ -14,6 +14,8 @@ namespace Mantid
     class FunctionDomain;
     class FunctionDomainMD;
     class IMDWorkspace;
+    class IMDEventWorkspace;
+    class IMDHistoWorkspace;
   }
 
   namespace MDEvents
@@ -82,6 +84,17 @@ namespace Mantid
     protected:
       /// Set all parameters
       void setParameters()const;
+      /// Create event output workspace
+      boost::shared_ptr<API::Workspace> createEventOutputWorkspace(const std::string& baseName,
+          const API::IMDEventWorkspace &inputWorkspace,
+          const API::FunctionValues &values,
+          const std::string& outputWorkspacePropertyName);
+      /// Create histo output workspace
+      boost::shared_ptr<API::Workspace> createHistoOutputWorkspace(const std::string& baseName,
+          API::IFunction_sptr function,
+          boost::shared_ptr<const API::IMDHistoWorkspace> inputWorkspace,
+          const std::string& outputWorkspacePropertyName);
+
       /// Store workspace property name
       std::string m_workspacePropertyName;
       /// Store maxSize property name
diff --git a/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDBox.h b/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDBox.h
index 347e37008629912fccddd3be5e2ae9f7d46f24f9..ea9bdc625d29d6ded262643283a367a553f1da11 100644
--- a/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDBox.h
+++ b/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDBox.h
@@ -68,6 +68,7 @@ namespace MDEvents
     //-----------------------------------------------------------------------------------------------
     virtual void saveAt(API::IBoxControllerIO *const /* */,  uint64_t /*position*/)const;
     virtual void loadAndAddFrom(API::IBoxControllerIO *const /* */, uint64_t /*position*/, size_t /* Size */);
+    virtual void reserveMemoryForLoad(uint64_t /* Size */);
     /**drop events data from memory but keep averages (and file-backed info) */
     void clearDataFromMemory();
     /** */
diff --git a/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDGridBox.h b/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDGridBox.h
index 0058be49fdf2e7f084f63dc6cb728ecf8aee1193..4d5f63be210c1b0e5b23e070599d37375c0f8e51 100644
--- a/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDGridBox.h
+++ b/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDGridBox.h
@@ -67,6 +67,8 @@ namespace MDEvents
     /**Load the box data of specified size from the disk location provided using the class, respoinsible for the file IO. */
     virtual void loadAndAddFrom(API::IBoxControllerIO *const /* */, uint64_t /*position*/, size_t /* Size */)
     {/*Not directly loadable */}
+    virtual void reserveMemoryForLoad(uint64_t /* Size */)
+    {/*Not directly loadable */}
     //-------------------------------------------------------------------------------------------------------
     
     /** Uses the cached value of points stored in the grid box  
diff --git a/Code/Mantid/Framework/MDEvents/src/FitMD.cpp b/Code/Mantid/Framework/MDEvents/src/FitMD.cpp
index d4ec3719ebe6fedb3b2d62585993df3c32b34744..0673b924ffe1e23bc77ee5570b1caaa761e477e2 100644
--- a/Code/Mantid/Framework/MDEvents/src/FitMD.cpp
+++ b/Code/Mantid/Framework/MDEvents/src/FitMD.cpp
@@ -10,6 +10,9 @@
 #include "MantidAPI/IFunctionMD.h"
 #include "MantidAPI/MemoryManager.h"
 #include "MantidAPI/WorkspaceProperty.h"
+#include "MantidAPI/AlgorithmFactory.h"
+#include "MantidAPI/Algorithm.h"
+
 #include "MantidGeometry/MDGeometry/MDHistoDimensionBuilder.h"
 #include "MantidMDEvents/MDEventFactory.h"
 
@@ -121,9 +124,13 @@ namespace Mantid
       while(iter)
       {
         values->setFitData(i,iter->getNormalizedSignal());
-        double err = iter->getNormalizedError();
-        if (err <= 0.0) err = 1.0;
-        values->setFitWeight(i,1/err);
+        // there is a problem with errors in md workspaces. Until it is solved
+        // set all weights to 1.0
+        // code commented out after the next line is the normal way of setting weights
+        values->setFitWeight(i,1.0);
+        //double err = iter->getNormalizedError();
+        //if (err <= 0.0) err = 1.0;
+        //values->setFitWeight(i,1/err);
         iter = dmd->getNextIterator();
         ++i;
       };
@@ -139,7 +146,7 @@ namespace Mantid
      * @param outputWorkspacePropertyName :: The property name
      */
     boost::shared_ptr<API::Workspace> FitMD::createOutputWorkspace(const std::string& baseName,
-      API::IFunction_sptr,
+      API::IFunction_sptr function,
       boost::shared_ptr<API::FunctionDomain> domain,
       boost::shared_ptr<API::FunctionValues> values,
       const std::string& outputWorkspacePropertyName)
@@ -154,12 +161,35 @@ namespace Mantid
         return boost::shared_ptr<API::Workspace>();
       }
       API::IMDWorkspace_const_sptr domainWS = functionMD->getWorkspace();
-      auto inputWS = boost::dynamic_pointer_cast<const API::IMDEventWorkspace>(domainWS);
-      if(!inputWS)
+
+      auto inputEventWS = boost::dynamic_pointer_cast<const API::IMDEventWorkspace>(domainWS);
+      if( inputEventWS )
       {
-        return boost::shared_ptr<API::Workspace>();
+        return createEventOutputWorkspace( baseName, *inputEventWS, *values, outputWorkspacePropertyName );
+      }
+
+      auto inputHistoWS = boost::dynamic_pointer_cast<const API::IMDHistoWorkspace>(domainWS);
+      if( inputHistoWS )
+      {
+        return createHistoOutputWorkspace( baseName, function, inputHistoWS, outputWorkspacePropertyName );
       }
-      auto outputWS = MDEventFactory::CreateMDWorkspace(inputWS->getNumDims(), "MDEvent");
+
+      return boost::shared_ptr<API::Workspace>();
+    }
+
+    /**
+     * Create an output event workspace filled with data simulated with the fitting function.
+     * @param baseName :: The base name for the workspace
+     * @param inputWorkspace :: The input workspace.
+     * @param values :: The calculated values
+     * @param outputWorkspacePropertyName :: The property name
+     */
+    boost::shared_ptr<API::Workspace> FitMD::createEventOutputWorkspace(const std::string& baseName,
+        const API::IMDEventWorkspace &inputWorkspace,
+        const API::FunctionValues &values,
+        const std::string& outputWorkspacePropertyName)
+    {
+      auto outputWS = MDEventFactory::CreateMDWorkspace(inputWorkspace.getNumDims(), "MDEvent");
       // Add events
       // TODO: Generalize to ND (the current framework is a bit limiting)
       auto mdWS = boost::dynamic_pointer_cast<MDEvents::MDEventWorkspace<MDEvents::MDEvent<4>,4> >(outputWS);
@@ -171,7 +201,7 @@ namespace Mantid
       // Bins extents and meta data
       for(size_t i = 0;i < 4; ++i)
       {
-        boost::shared_ptr<const Geometry::IMDDimension> inputDim = inputWS->getDimension(i);
+        boost::shared_ptr<const Geometry::IMDDimension> inputDim = inputWorkspace.getDimension(i);
         Geometry::MDHistoDimensionBuilder builder;
         builder.setName(inputDim->getName());
         builder.setId(inputDim->getDimensionId());
@@ -184,7 +214,7 @@ namespace Mantid
       }
 
       // Run information
-      outputWS->copyExperimentInfos(*inputWS);
+      outputWS->copyExperimentInfos(inputWorkspace);
       // Set sensible defaults for splitting behaviour
       BoxController_sptr bc = outputWS->getBoxController();
       bc->setSplitInto(3);
@@ -192,13 +222,13 @@ namespace Mantid
       outputWS->initialize();
       outputWS->splitBox();
 
-      auto inputIter = inputWS->createIterator();
+      auto inputIter = inputWorkspace.createIterator();
       size_t resultValueIndex(0);
       const float errorSq = 0.0;
       do
       {
         const size_t numEvents = inputIter->getNumEvents();
-        const float signal = static_cast<float>(values->getCalculated(resultValueIndex));
+        const float signal = static_cast<float>(values.getCalculated(resultValueIndex));
         for(size_t i = 0; i < numEvents; ++i)
         {
           coord_t centers[4] = { inputIter->getInnerPosition(i,0), inputIter->getInnerPosition(i,1),
@@ -235,6 +265,44 @@ namespace Mantid
       return outputWS;
     }
 
+    /**
+     * Create an output histo workspace filled with data simulated with the fitting function.
+     * @param baseName :: The base name for the workspace
+     * @param function :: The function used for the calculation
+     * @param inputWorkspace :: The input workspace
+     * @param outputWorkspacePropertyName :: The property name
+     */
+    boost::shared_ptr<API::Workspace> FitMD::createHistoOutputWorkspace(const std::string& baseName,
+        API::IFunction_sptr function,
+        API::IMDHistoWorkspace_const_sptr inputWorkspace,
+        const std::string& outputWorkspacePropertyName)
+    {
+      // have to cast const away to be able to pass the workspace to the algorithm
+      API::IMDHistoWorkspace_sptr nonConstInputWS = boost::const_pointer_cast<API::IMDHistoWorkspace,const API::IMDHistoWorkspace>( inputWorkspace );
+      // evaluate the function on the input workspace
+      auto alg = API::AlgorithmFactory::Instance().create("EvaluateMDFunction",-1);
+      alg->setChild( true );
+      alg->setRethrows( true );
+      alg->initialize();
+      alg->setProperty( "Function", function );
+      alg->setProperty( "InputWorkspace", nonConstInputWS );
+      alg->setProperty( "OutputWorkspace", "__FitMD_createHistoOutputWorkspace_outputWorkspace" );
+      alg->execute();
+
+      // get the result
+      API::IMDHistoWorkspace_sptr outputWorkspace = alg->getProperty( "OutputWorkspace" );
+      // Store it
+      if ( !outputWorkspacePropertyName.empty() )
+      {
+        declareProperty(new API::WorkspaceProperty<API::IMDHistoWorkspace>(outputWorkspacePropertyName,"",Direction::Output),
+          "Name of the output Workspace holding resulting simulated spectrum");
+        m_manager->setPropertyValue(outputWorkspacePropertyName,baseName+"Workspace");
+        m_manager->setProperty(outputWorkspacePropertyName,outputWorkspace);
+      }
+
+      return outputWorkspace;
+    }
+
     /**
      * Set all parameters
      */
diff --git a/Code/Mantid/Framework/MDEvents/src/MDBox.cpp b/Code/Mantid/Framework/MDEvents/src/MDBox.cpp
index 0860428cd616f90561ca5878e4ab1592cc30bd24..ece7dfc1309fe05be4fbed3f3f73fe07856f9a6e 100644
--- a/Code/Mantid/Framework/MDEvents/src/MDBox.cpp
+++ b/Code/Mantid/Framework/MDEvents/src/MDBox.cpp
@@ -900,9 +900,20 @@ namespace MDEvents
        FileSaver->saveBlock(TabledData,position);
 
    }
+
+   /**
+    * Reserve all the memory required for loading in one step.
+    *
+    * @param size -- number of events to reserve for
+    */
+   TMDE(
+   void MDBox)::reserveMemoryForLoad(uint64_t size)
+   {
+      this->data.reserve(size);
+   }
+
    /**Load the box data of specified size from the disk location provided using the class, respoinsible for the file IO and append them to exisiting events
-    * Clear events vector first if overwriting the exisitng events is necessary. The efficiency would be higher if jentle cleaning occurs (the size of event data vector 
-      is nullified but memory still allocated)
+    * Clear events vector first if overwriting the exisitng events is necessary.
     * 
    * @param FileSaver    -- the pointer to the class, responsible for file IO
    * @param filePosition -- the place in the direct access file, where necessary data are located
@@ -923,9 +934,6 @@ namespace MDEvents
        std::vector<coord_t> TableData;
        FileSaver->loadBlock(TableData,filePosition,nEvents);
 
-       // convert loaded events to data;
-       size_t nCurrentEvents = data.size();
-       this->data.reserve(nCurrentEvents+nEvents);
        // convert data to events appending new events to existing
        MDE::dataToEvents(TableData,data,false);
    
diff --git a/Code/Mantid/Framework/MDEvents/test/FitMDTest.h b/Code/Mantid/Framework/MDEvents/test/FitMDTest.h
index 5f15aeae0d799865307c870ab1caee57fbe60941..300fdf2bd4bec3a88fc69d13a67e768decbfecc5 100644
--- a/Code/Mantid/Framework/MDEvents/test/FitMDTest.h
+++ b/Code/Mantid/Framework/MDEvents/test/FitMDTest.h
@@ -9,6 +9,7 @@
 #include "MantidAPI/FrameworkManager.h"
 #include "MantidAPI/IMDIterator.h"
 #include "MantidAPI/ITableWorkspace.h"
+#include "MantidAPI/IMDHistoWorkspace.h"
 #include "MantidMDEvents/UserFunctionMD.h"
 
 #include <sstream>
@@ -212,10 +213,74 @@ public:
     TS_ASSERT_EQUALS(params->Double(2,2), 0.0);
 
     API::AnalysisDataService::Instance().clear();
-    //--------------------------------------------------//
 
   }
 
+  void test_output_histo_workspace()
+  {
+    auto inputWS = createHistoWorkspace(3,4, "name=UserFunctionMD,Formula=10 + y + (2 + 0.1*y) * x");
+
+    auto fit = API::AlgorithmManager::Instance().create("Fit");
+    fit->initialize();
+
+    fit->setProperty("Function","name=UserFunctionMD,Formula=h + y + (s + 0.1*y) * x, h = 0, s = 0");
+    fit->setProperty("InputWorkspace",inputWS);
+    fit->setPropertyValue("Output","out");
+    fit->execute();
+
+    IMDHistoWorkspace_sptr outputWS = AnalysisDataService::Instance().retrieveWS<IMDHistoWorkspace>( "out_Workspace" );
+    TS_ASSERT( outputWS );
+    if ( !outputWS ) return;
+
+    TS_ASSERT_EQUALS( inputWS->getNPoints(), outputWS->getNPoints() );
+
+    uint64_t n = outputWS->getNPoints();
+    coord_t invVolume = inputWS->getInverseVolume();
+    for( uint64_t i = 0; i < n; ++i )
+    {
+      TS_ASSERT_DELTA( outputWS->signalAt(i) / inputWS->signalAt(i) / invVolume, 1.0, 0.1 );
+    }
+
+    AnalysisDataService::Instance().clear();
+  }
+
+  // ---------------------------------------------------------- //
+  IMDHistoWorkspace_sptr createHistoWorkspace(size_t nx, size_t ny, const std::string& function)
+  {
+
+    std::vector<double> values( nx * ny, 1.0 );
+    std::vector<int> dims(2);
+    dims[0] = static_cast<int>(nx);
+    dims[1] = static_cast<int>(ny);
+
+    auto alg = AlgorithmManager::Instance().create("CreateMDHistoWorkspace");
+    alg->initialize();
+    alg->setProperty("SignalInput", values);
+    alg->setProperty("ErrorInput", values);
+    alg->setProperty("Dimensionality", 2);
+    alg->setProperty("NumberOfBins", dims);
+    alg->setPropertyValue("Extents", "-1,1,-1,1");
+    alg->setPropertyValue("Names", "A,B");
+    alg->setPropertyValue("Units", "U,U");
+    alg->setPropertyValue("OutputWorkspace", "out");
+    alg->execute();
+    TS_ASSERT( alg->isExecuted() );
+
+    IMDHistoWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<IMDHistoWorkspace>("out");
+
+    alg = AlgorithmManager::Instance().create("EvaluateMDFunction");
+    alg->initialize();
+    alg->setProperty("InputWorkspace", ws);
+    alg->setPropertyValue("Function",function);
+    alg->setPropertyValue("OutputWorkspace", "out");
+    alg->execute();
+
+    ws = AnalysisDataService::Instance().retrieveWS<IMDHistoWorkspace>("out");
+
+    AnalysisDataService::Instance().remove("out");
+    return ws;
+  }
+
 
 };
 
diff --git a/Code/Mantid/Framework/MDEvents/test/MDBoxBaseTest.h b/Code/Mantid/Framework/MDEvents/test/MDBoxBaseTest.h
index 14c4a60f1ac7923fae1645ed65385dfa2a0b5c9a..44733b33da4bba3eca1f3ad9cf477e91f12309f8 100644
--- a/Code/Mantid/Framework/MDEvents/test/MDBoxBaseTest.h
+++ b/Code/Mantid/Framework/MDEvents/test/MDBoxBaseTest.h
@@ -49,6 +49,7 @@ public:
   void setFileBacked(){};
   void saveAt(API::IBoxControllerIO *const /* */,  uint64_t /*position*/)const{/*Not saveable */};
   void loadAndAddFrom(API::IBoxControllerIO *const /* */, uint64_t /*position*/, size_t /* Size */){};
+  void reserveMemoryForLoad(uint64_t /* Size */){};
   // regardless of what is actually instantiated, base tester would call itself gridbox
   bool isBox()const{return false;}
 
diff --git a/Code/Mantid/Framework/MDEvents/test/MDBoxTest.h b/Code/Mantid/Framework/MDEvents/test/MDBoxTest.h
index 1cf9119bce53a99f090e268961d12419da7d2819..136448053eaadf53ded9e2492b388fcf9c3302bb 100644
--- a/Code/Mantid/Framework/MDEvents/test/MDBoxTest.h
+++ b/Code/Mantid/Framework/MDEvents/test/MDBoxTest.h
@@ -629,6 +629,15 @@ static void destroySuite(MDBoxTest * suite) { delete suite; }
     TS_ASSERT_THROWS_NOTHING(box.unmask());
     TSM_ASSERT("Should have been masked.", !box.getIsMasked());
   }
+
+  void test_reserve()
+  {
+    BoxController_sptr sc( new BoxController(2));
+    MDBox<MDLeanEvent<2>,2> b(sc.get());
+
+    b.reserveMemoryForLoad(3);
+    TS_ASSERT_EQUALS( b.getEvents().capacity(), 3);
+  }
 };
 
 
diff --git a/Code/Mantid/Framework/Properties/Mantid.properties.template b/Code/Mantid/Framework/Properties/Mantid.properties.template
index 5ff922301cbcc52803d48d339afe739b6df5e74d..745bb42bb970bf0b3e99876828d6121b51326a1d 100644
--- a/Code/Mantid/Framework/Properties/Mantid.properties.template
+++ b/Code/Mantid/Framework/Properties/Mantid.properties.template
@@ -37,9 +37,6 @@ python.plugins.directories = @PYTHONPLUGIN_DIRS@
 # Where to load instrument definition files from
 instrumentDefinition.directory = @MANTID_ROOT@/instrument
 
-# Where to load parameter definition files from
-parameterDefinition.directory = @MANTID_ROOT@/instrument
-
 # Where to load Grouping files (that are shipped with Mantid) from
 groupingFiles.directory = @MANTID_ROOT@/instrument/Grouping
 
diff --git a/Code/Mantid/Framework/PythonInterface/mantid/geometry/CMakeLists.txt b/Code/Mantid/Framework/PythonInterface/mantid/geometry/CMakeLists.txt
index 03831457f7fd88fd4a44b354ebe9143d7f703a00..7c79f4f4afa814550d10fb1030e58cb487c7bd06 100644
--- a/Code/Mantid/Framework/PythonInterface/mantid/geometry/CMakeLists.txt
+++ b/Code/Mantid/Framework/PythonInterface/mantid/geometry/CMakeLists.txt
@@ -26,6 +26,8 @@ set ( EXPORT_FILES
   src/Exports/Object.cpp
   src/Exports/PointGroup.cpp
   src/Exports/PointGroupFactory.cpp
+  src/Exports/SpaceGroup.cpp
+  src/Exports/SpaceGroupFactory.cpp
   src/Exports/SymmetryOperation.cpp
   src/Exports/SymmetryOperationFactory.cpp
 )  
diff --git a/Code/Mantid/Framework/PythonInterface/mantid/geometry/src/Exports/SpaceGroup.cpp b/Code/Mantid/Framework/PythonInterface/mantid/geometry/src/Exports/SpaceGroup.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..442a4783d4e00265e31b6004a6f26c8afc48c255
--- /dev/null
+++ b/Code/Mantid/Framework/PythonInterface/mantid/geometry/src/Exports/SpaceGroup.cpp
@@ -0,0 +1,58 @@
+
+#include "MantidGeometry/Crystal/SpaceGroup.h"
+#include "MantidPythonInterface/kernel/Converters/PyObjectToV3D.h"
+
+#include <boost/python/class.hpp>
+#include <boost/python/enum.hpp>
+#include <boost/python/scope.hpp>
+#include <boost/python/list.hpp>
+#include <boost/python/register_ptr_to_python.hpp>
+
+using Mantid::Geometry::SpaceGroup;
+using Mantid::Geometry::SymmetryOperation;
+
+using namespace boost::python;
+
+namespace //<unnamed>
+{
+  using namespace Mantid::PythonInterface;
+
+  boost::python::list getEquivalentPositions(SpaceGroup & self, const object& point)
+  {
+    const std::vector<Mantid::Kernel::V3D> &equivalents = self.getEquivalentPositions(Converters::PyObjectToV3D(point)());
+
+    boost::python::list pythonEquivalents;
+    for(auto it = equivalents.begin(); it != equivalents.end(); ++it) {
+        pythonEquivalents.append(*it);
+    }
+
+    return pythonEquivalents;
+  }
+
+  std::vector<std::string> getSymmetryOperationStrings(SpaceGroup & self)
+  {
+      const std::vector<SymmetryOperation> &symOps = self.getSymmetryOperations();
+
+      std::vector<std::string> pythonSymOps;
+      for(auto it = symOps.begin(); it != symOps.end(); ++it) {
+          pythonSymOps.push_back((*it).identifier());
+      }
+
+      return pythonSymOps;
+  }
+
+}
+
+void export_SpaceGroup()
+{
+  register_ptr_to_python<boost::shared_ptr<SpaceGroup> >();
+
+  class_<SpaceGroup, boost::noncopyable>("SpaceGroup", no_init)
+          .def("order", &SpaceGroup::order)
+          .def("getSymmetryOperationStrings", &getSymmetryOperationStrings)
+          .def("number", &SpaceGroup::number)
+          .def("hmSymbol", &SpaceGroup::hmSymbol)
+          .def("getEquivalentPositions", &getEquivalentPositions, "Returns an array with all symmetry equivalents of the supplied HKL.")
+          ;
+}
+
diff --git a/Code/Mantid/Framework/PythonInterface/mantid/geometry/src/Exports/SpaceGroupFactory.cpp b/Code/Mantid/Framework/PythonInterface/mantid/geometry/src/Exports/SpaceGroupFactory.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..de61f14cbef451f2255ea67b6051bdb5238acb17
--- /dev/null
+++ b/Code/Mantid/Framework/PythonInterface/mantid/geometry/src/Exports/SpaceGroupFactory.cpp
@@ -0,0 +1,57 @@
+#include "MantidGeometry/Crystal/SpaceGroupFactory.h"
+#include "MantidPythonInterface/kernel/PythonObjectInstantiator.h"
+
+#include <boost/python/class.hpp>
+
+using namespace Mantid::Geometry;
+using namespace boost::python;
+
+namespace
+{
+    using namespace Mantid::PythonInterface;
+
+    std::vector<std::string> allSpaceGroupSymbols(SpaceGroupFactoryImpl &self)
+    {
+        return self.subscribedSpaceGroupSymbols();
+    }
+
+    std::vector<std::string> spaceGroupSymbolsForNumber(SpaceGroupFactoryImpl &self, size_t number)
+    {
+        return self.subscribedSpaceGroupSymbols(number);
+    }
+
+    bool isSubscribedSymbol(SpaceGroupFactoryImpl &self, const std::string &symbol)
+    {
+        return self.isSubscribed(symbol);
+    }
+
+    bool isSubscribedNumber(SpaceGroupFactoryImpl &self, size_t number)
+    {
+        return self.isSubscribed(number);
+    }
+
+    SpaceGroup_sptr createSpaceGroup(SpaceGroupFactoryImpl &self, const std::string &symbol)
+    {
+        SpaceGroup_const_sptr spaceGroup = self.createSpaceGroup(symbol);
+
+        return boost::const_pointer_cast<SpaceGroup>(spaceGroup);
+    }
+
+}
+
+void export_SpaceGroupFactory()
+{
+
+    class_<SpaceGroupFactoryImpl,boost::noncopyable>("SpaceGroupFactoryImpl", no_init)
+            .def("isSubscribedSymbol", &isSubscribedSymbol)
+            .def("isSubscribedNumber", &isSubscribedNumber)
+            .def("createSpaceGroup", &createSpaceGroup)
+            .def("allSubscribedSpaceGroupSymbols", &allSpaceGroupSymbols)
+            .def("subscribedSpaceGroupSymbols", &spaceGroupSymbolsForNumber)
+            .def("subscribedSpaceGroupNumbers", &SpaceGroupFactoryImpl::subscribedSpaceGroupNumbers)
+            .def("Instance", &SpaceGroupFactory::Instance, return_value_policy<reference_existing_object>(),
+                 "Returns a reference to the SpaceGroupFactory singleton")
+            .staticmethod("Instance")
+            ;
+}
+
diff --git a/Code/Mantid/Framework/PythonInterface/mantid/kernel/src/Exports/ConfigService.cpp b/Code/Mantid/Framework/PythonInterface/mantid/kernel/src/Exports/ConfigService.cpp
index 7377bf3e03662e2c7a59c985ed950cf8a6806901..762f446435d56a3f2bad87ec96e4bccaf5a7481d 100644
--- a/Code/Mantid/Framework/PythonInterface/mantid/kernel/src/Exports/ConfigService.cpp
+++ b/Code/Mantid/Framework/PythonInterface/mantid/kernel/src/Exports/ConfigService.cpp
@@ -53,6 +53,9 @@ void export_ConfigService()
     .def("getInstrumentDirectory", &ConfigServiceImpl::getInstrumentDirectory,
          "Returns the directory used for the instrument definitions")
 
+	.def("getInstrumentDirectories", &ConfigServiceImpl::getInstrumentDirectories, return_value_policy<reference_existing_object>(), 
+         "Returns the list of directories searched for the instrument definitions")
+
     .def("getFacilityNames", &ConfigServiceImpl::getFacilityNames, "Returns the default facility")
 
     .def("getFacilities", &ConfigServiceImpl::getFacilities, "Returns the default facility")
diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportExperimentLog.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportExperimentLog.py
index f618c0848a3cf6387d7ba506bdb5bc0aee597f5a..c5ba13a1e7fcd12554de9b4a6ed5fc3f1b42d993 100644
--- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportExperimentLog.py
+++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/ExportExperimentLog.py
@@ -242,7 +242,10 @@ class ExportExperimentLog(PythonAlgorithm):
             logname = self._sampleLogNames[il]
             optype = self._sampleLogOperations[il]
             key = logname + "-" + optype
-            value = logvaluedict[key]
+            if key in logvaluedict.keys():
+                value = logvaluedict[key]
+            elif logname in logvaluedict.keys():
+                value = logvaluedict[logname]
             wbuf += "%s%s" % (str(value), self._valuesep)
         wbuf = wbuf[0:-1]
 
diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskBTP.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskBTP.py
index 17921a342437992be1e4d82cc5b1eaef54db56b5..3c4466cf2705179bfe951dbdbe09858950182603 100644
--- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskBTP.py
+++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/MaskBTP.py
@@ -24,8 +24,8 @@ class MaskBTP(mantid.api.PythonAlgorithm):
 
     def PyInit(self):
         self.declareProperty(mantid.api.WorkspaceProperty("Workspace", "",direction=mantid.kernel.Direction.InOut, optional = mantid.api.PropertyMode.Optional), "Input workspace (optional)")
-        allowedInstrumentList=mantid.kernel.StringListValidator(["","ARCS","CNCS","CORELLI","HYSPEC","NOMAD","POWGEN","SEQUOIA","SNAP","TOPAZ","WISH"])
-        self.declareProperty("Instrument","",validator=allowedInstrumentList,doc="One of the following instruments: ARCS, CNCS, CORELLI, HYSPEC, NOMAD, POWGEN, SNAP, SEQUOIA, TOPAZ, WISH")
+        allowedInstrumentList=mantid.kernel.StringListValidator(["","ARCS","CNCS","CORELLI","HYSPEC","NOMAD","POWGEN","SEQUOIA","SNAP","SXD","TOPAZ","WISH"])
+        self.declareProperty("Instrument","",validator=allowedInstrumentList,doc="One of the following instruments: ARCS, CNCS, CORELLI, HYSPEC, NOMAD, POWGEN, SNAP, SEQUOIA, SXD, TOPAZ, WISH")
         self.declareProperty("Bank","",doc="Bank(s) to be masked. If empty, will apply to all banks")
         self.declareProperty("Tube","",doc="Tube(s) to be masked. If empty, will apply to all tubes")
         self.declareProperty("Pixel","",doc="Pixel(s) to be masked. If empty, will apply to all pixels")
@@ -47,13 +47,13 @@ class MaskBTP(mantid.api.PythonAlgorithm):
             self.instrument = ws.getInstrument()
             self.instname = self.instrument.getName()
 
-        instrumentList=["ARCS","CNCS","CORELLI","HYSPEC","NOMAD","POWGEN","SEQUOIA","SNAP","TOPAZ","WISH"]
-        self.bankmin={"ARCS":1,"CNCS":1,"CORELLI":1,"HYSPEC":1,"NOMAD":1,"POWGEN":1,"SEQUOIA":38,"SNAP":1,"TOPAZ":10,"WISH":1}
-        self.bankmax={"ARCS":115,"CNCS":50,"CORELLI":91,"HYSPEC":20,"NOMAD":99,"POWGEN":300,"SEQUOIA":150,"SNAP":18,"TOPAZ":59,"WISH":10}
-        tubemin={"ARCS":1,"CNCS":1,"CORELLI":1,"HYSPEC":1,"NOMAD":1,"POWGEN":0,"SEQUOIA":1,"SNAP":0,"TOPAZ":0,"WISH":1}
-        tubemax={"ARCS":8,"CNCS":8,"CORELLI":16,"HYSPEC":8,"NOMAD":8,"POWGEN":153,"SEQUOIA":8,"SNAP":255,"TOPAZ":255,"WISH":152}
-        pixmin={"ARCS":1,"CNCS":1,"CORELLI":1,"HYSPEC":1,"NOMAD":1,"POWGEN":0,"SEQUOIA":1,"SNAP":0,"TOPAZ":0,"WISH":1}
-        pixmax={"ARCS":128,"CNCS":128,"CORELLI":256,"HYSPEC":128,"NOMAD":128,"POWGEN":6,"SEQUOIA":128,"SNAP":255,"TOPAZ":255,"WISH":512}
+        instrumentList=["ARCS","CNCS","CORELLI","HYSPEC","NOMAD","POWGEN","SEQUOIA","SNAP","SXD","TOPAZ","WISH"]
+        self.bankmin={"ARCS":1,"CNCS":1,"CORELLI":1,"HYSPEC":1,"NOMAD":1,"POWGEN":1,"SEQUOIA":38,"SNAP":1,"SXD":1,"TOPAZ":10,"WISH":1}
+        self.bankmax={"ARCS":115,"CNCS":50,"CORELLI":91,"HYSPEC":20,"NOMAD":99,"POWGEN":300,"SEQUOIA":150,"SNAP":18,"SXD":11,"TOPAZ":59,"WISH":10}
+        tubemin={"ARCS":1,"CNCS":1,"CORELLI":1,"HYSPEC":1,"NOMAD":1,"POWGEN":0,"SEQUOIA":1,"SNAP":0,"SXD":0,"TOPAZ":0,"WISH":1}
+        tubemax={"ARCS":8,"CNCS":8,"CORELLI":16,"HYSPEC":8,"NOMAD":8,"POWGEN":153,"SEQUOIA":8,"SNAP":255,"SXD":63,"TOPAZ":255,"WISH":152}
+        pixmin={"ARCS":1,"CNCS":1,"CORELLI":1,"HYSPEC":1,"NOMAD":1,"POWGEN":0,"SEQUOIA":1,"SNAP":0,"SXD":0,"TOPAZ":0,"WISH":1}
+        pixmax={"ARCS":128,"CNCS":128,"CORELLI":256,"HYSPEC":128,"NOMAD":128,"POWGEN":6,"SEQUOIA":128,"SNAP":255,"SXD":63,"TOPAZ":255,"WISH":512}
 
         try:
             instrumentList.index(self.instname)
diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PDDetermineCharacterizations.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PDDetermineCharacterizations.py
index bd271db0e2fbf20886786620c560cf3930769783..9bb2ba9ed9a7b3a11ea5ae22967a2960e353317e 100644
--- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PDDetermineCharacterizations.py
+++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PDDetermineCharacterizations.py
@@ -143,11 +143,14 @@ class PDDetermineCharacterizations(PythonAlgorithm):
             # Convert comma-delimited list to array, else return the original 
             # value.
             if type("") == type(val):
-                try: 
-                    val = [float(x) for x in val.split(',')]
-                except ValueError, err:
-                    self.log().error("Error to parse key = %s value = %s. " % (str(key), str(val)))
-                    raise NotImplementedError(str(err))
+                if (len(val)==0) and  (key in DEF_INFO.keys()):
+                    val = DEF_INFO[key]
+                else:
+                    try:
+                        val = [float(x) for x in val.split(',')]
+                    except ValueError, err:
+                        self.log().error("Error to parse key: '%s' value = '%s'. " % (str(key), str(val)))
+                        raise NotImplementedError(str(err))
 
             try:
                 prop_man[key] = val
diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiMerge.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiMerge.py
index 46eafcbd488656fa4db2162d551d58697583a2a5..612bd8ee0d8c9ea383b7917d3b700a5668c6fc48 100644
--- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiMerge.py
+++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/PoldiMerge.py
@@ -5,8 +5,12 @@ from mantid.api import *
 import numpy as np
 
 class PoldiMerge(PythonAlgorithm):
-    comparedPropertyNames = ["TablePositionX", "TablePositionY", "TablePositionZ", "ChopperSpeed"]
+    comparedPropertyNames = ["TablePositionX", "TablePositionY", "TablePositionZ"]
+    comparedInstrumentParameters = [("detector", "two_theta"),
+                                    ("chopper", "t0"),
+                                    ("chopper", "t0_const")]
     outputWorkspaceName = None
+    checkInstruments = True
 
     def category(self):
         return "SINQ\\Poldi"
@@ -27,38 +31,37 @@ class PoldiMerge(PythonAlgorithm):
                                                direction=Direction.Output),
                              doc="Workspace where all counts from the list workspaces have been added")
 
+        self.declareProperty("CheckInstruments", True, "If checked, only workspaces with equal instrument parameters are merged. Do not disable without a very good reason.")
+
     def PyExec(self):
+        self.checkInstruments = self.getProperty("CheckInstruments").value
+
         workspaceNames = self.getProperty("WorkspaceNames").value
         self.outputWorkspaceName = self.getProperty("OutputWorkspace").valueAsStr
 
         self.log().information("Workspaces to merge: %i" % (len(workspaceNames)))
 
-        if False in [AnalysisDataService.doesExist(x) for x in workspaceNames]:
-            raise KeyError("Not all strings in the input list are valid workspace names.")
-
-        workspaces = [AnalysisDataService.retrieve(x) for x in workspaceNames]
+        workspaces = []
 
-        # Create a target workspace for the summation. It inherits the log of
-        # the first workspace used in the summation.
-        output = WorkspaceFactory.create(workspaces[0])
+        for wsName in workspaceNames:
+            if not AnalysisDataService.doesExist(wsName):
+                raise KeyError("Not all strings in the input list are valid workspace names.")
 
-        xdata = workspaces[0].dataX(0)
-        ydata = np.zeros(len(xdata))
+            ws = AnalysisDataService.retrieve(wsName)
+            workspaces += self.getWorkspacesRecursive(ws)
 
-        for h in range(output.getNumberHistograms()):
-            output.setX(h, xdata)
-            output.setY(h, ydata)
 
-        AnalysisDataService.addOrReplace(self.outputWorkspaceName, output)
+        workspaceCount = len(workspaces)
 
-        while workspaces:
-            current = workspaces.pop(0)
+        for i in range(workspaceCount):
+            currentWorkspace = workspaces[i]
+            for j in range(i + 1, workspaceCount):
+                try:
+                    self.canMerge(currentWorkspace, workspaces[j])
+                except RuntimeError as error:
+                    self.handleError(error)
 
-            try:
-                if self.canMerge(output, current):
-                    output += current
-            except RuntimeError as error:
-                self.handleError(error)
+        output = MergeRuns(workspaceNames)
 
         self.setProperty("OutputWorkspace", output)
 
@@ -69,7 +72,10 @@ class PoldiMerge(PythonAlgorithm):
         leftRun = leftWorkspace.getRun()
         rightRun = rightWorkspace.getRun()
 
-        return self.propertiesMatch(leftRun, rightRun)
+        if not self.chopperSpeedsMatch(leftRun, rightRun):
+            raise RuntimeError("Chopper speeds do not match (" + '&'.join((leftWorkspace.getName(), rightWorkspace.getName())) + ")")
+
+        return self.propertiesMatch(leftRun, rightRun) and self.instrumentsMatch(leftWorkspace, rightWorkspace)
 
     def timingsMatch(self, leftXData, rightXData):
         leftDeltaX = leftXData[1] - leftXData[0]
@@ -77,9 +83,43 @@ class PoldiMerge(PythonAlgorithm):
 
         return abs(leftDeltaX - rightDeltaX) < 1e-4 and abs(rightXData[0] - leftXData[0]) < 1e-4
 
+    def chopperSpeedsMatch(self, leftRun, rightRun):
+        chopperSpeedLeft = self.makePlausibleChopperSpeed(self.getPropertyValue(leftRun.getProperty("ChopperSpeed")))
+        chopperSpeedRight = self.makePlausibleChopperSpeed(self.getPropertyValue(rightRun.getProperty("ChopperSpeed")))
+
+        return abs(chopperSpeedLeft - chopperSpeedRight) < 1e-4
+
+    def makePlausibleChopperSpeed(self, chopperSpeed):
+        # This is related to ticket #10090, where a new field in new data is used
+        # when that ticket is finished, new data files will not need this
+        # cleanup method anymore.
+        return np.floor((chopperSpeed + 250.0) / 500.0) * 500.0;
+
+    def instrumentsMatch(self, leftWorkspace, rightWorkspace):
+        leftInstrument = leftWorkspace.getInstrument()
+        rightInstrument = rightWorkspace.getInstrument()
+
+        return (not self.checkInstruments) or self.instrumentParametersMatch(leftInstrument, rightInstrument)
+
+    def instrumentParametersMatch(self, leftInstrument, rightInstrument):
+        if not (leftInstrument.getDetector(0).getPos() == rightInstrument.getDetector(0).getPos()):
+            raise RuntimeError("Detector positions are not equal")
+
+        for parameterTuple in self.comparedInstrumentParameters:
+            leftValue = self.getParameterValue(leftInstrument, parameterTuple)
+            rightValue = self.getParameterValue(rightInstrument, parameterTuple)
+
+            if abs(leftValue - rightValue) > 1e-12:
+                raise RuntimeError("Instrument parameter '%s'/'%s' does not match" % parameterTuple)
+
+        return True;
+
+    def getParameterValue(self, instrument, parameterTuple):
+        return instrument.getComponentByName(parameterTuple[0]).getNumberParameter(parameterTuple[1])[0]
+
     def propertiesMatch(self, leftRun, rightRun):
         for propertyName in self.comparedPropertyNames:
-            if abs(self.getPropertyValue(leftRun.getProperty(propertyName)) - self.getPropertyValue(rightRun.getProperty(propertyName))) > 1e-4:
+            if abs(self.getPropertyValue(leftRun.getProperty(propertyName)) - self.getPropertyValue(rightRun.getProperty(propertyName))) > 5e-3:
                 raise RuntimeError("Property '%s' does not match" % (propertyName))
 
         return True
@@ -96,4 +136,18 @@ class PoldiMerge(PythonAlgorithm):
 
         raise RuntimeError("Workspaces can not be merged. %s. Aborting." % (str(error)))
 
+    def getWorkspacesRecursive(self, workspace):
+      returnList = []
+      if isinstance(workspace, WorkspaceGroup):
+        for i in range(workspace.getNumberOfEntries()):
+          returnList += self.getWorkspacesRecursive(workspace.getItem(i))
+
+      elif isinstance(workspace, MatrixWorkspace):
+        returnList.append(workspace)
+
+      else:
+        raise RuntimeError("Can only merge MatrixWorkspaces, this is " + type(workspace))
+
+      return returnList
+
 AlgorithmFactory.subscribe(PoldiMerge)
diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefLReduction.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefLReduction.py
index 5ab7bc8c541e6c058e4cc21e7f268fb334f2bdf9..9c173170f685f0d5784f2d609a260d8e0de62848 100644
--- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefLReduction.py
+++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/RefLReduction.py
@@ -90,7 +90,6 @@ class RefLReduction(PythonAlgorithm):
             if _mt.find('_reflectivity') != -1:
                 DeleteWorkspace(_mt)
 
-
         # retrieve settings from GUI
         print '-> Retrieving settings from GUI'
 
@@ -131,7 +130,7 @@ class RefLReduction(PythonAlgorithm):
             TOFrange = [0, 200000]
         # TOF binning parameters
         binTOFrange = [0, 200000]
-        binTOFsteps = 50
+        binTOFsteps = 40
 
         # geometry correction
         geometryCorrectionFlag = self.getProperty("GeometryCorrectionFlag").value
@@ -144,10 +143,6 @@ class RefLReduction(PythonAlgorithm):
         # angle offset
         angleOffsetDeg = self.getProperty("AngleOffset").value
 
-        #dimension of the detector (256 by 304 pixels)
-        maxX = 304
-        maxY = 256
-
         h = 6.626e-34  #m^2 kg s^-1
         m = 1.675e-27     #kg
 
@@ -165,11 +160,23 @@ class RefLReduction(PythonAlgorithm):
         # load data
         ws_event_data = wks_utility.loadNeXus(dataRunNumbers, 'data')
 
+        is_nexus_detector_rotated_flag = wks_utility.isNexusTakeAfterRefDate(ws_event_data.getRun().getProperty('run_start').value)
+        print '-> is NeXus taken with new detector geometry: ' + str(is_nexus_detector_rotated_flag)
+
+        #dimension of the detector (256 by 304 pixels)
+        if is_nexus_detector_rotated_flag:
+            maxX = 256
+            maxY = 304
+        else:
+            maxX = 304
+            maxY = 256
+
         ## retrieve general informations
         # calculate the central pixel (using weighted average)
         print '-> retrieving general informations'
         data_central_pixel = wks_utility.getCentralPixel(ws_event_data,
-                                                         dataPeakRange)
+                                                         dataPeakRange,
+                                                         is_nexus_detector_rotated_flag)
         # get the distance moderator-detector and sample-detector
         [dMD, dSD] = wks_utility.getDistances(ws_event_data)
         # get theta
@@ -201,7 +208,8 @@ class RefLReduction(PythonAlgorithm):
         # integrate over low resolution range
         [data_tof_axis, data_y_axis, data_y_error_axis] = wks_utility.integrateOverLowResRange(ws_histo_data,
                                                             dataLowResRange,
-                                                            'data')
+                                                            'data',
+                                                            is_nexus_detector_rotated_flag)
 
 #        #DEBUG ONLY
 #        wks_utility.ouput_big_ascii_file('/mnt/hgfs/j35/Matlab/DebugMantid/Strange0ValuesToData/data_file_after_low_resolution_integration.txt',
@@ -256,7 +264,8 @@ class RefLReduction(PythonAlgorithm):
         # integrate over low resolution range
         [norm_tof_axis, norm_y_axis, norm_y_error_axis] = wks_utility.integrateOverLowResRange(ws_histo_norm,
                                                             normLowResRange,
-                                                            'normalization')
+                                                            'normalization',
+                                                            is_nexus_detector_rotated_flag)
 
         # substract background
         [norm_y_axis, norm_y_error_axis] = wks_utility.substractBackground(norm_tof_axis[0:-1],
@@ -321,7 +330,6 @@ class RefLReduction(PythonAlgorithm):
                                                                                      y_axis,
                                                                                      y_error_axis,
                                                                                      peak_range = dataPeakRange,
-                                                                                     central_pixel = data_central_pixel,
                                                                                      source_to_detector_distance = dMD,
                                                                                      sample_to_detector_distance = dSD,
                                                                                      theta = theta,
diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Symmetrise.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Symmetrise.py
new file mode 100644
index 0000000000000000000000000000000000000000..38f3aeb7b819d2d52be578cf0512fcbb65b53150
--- /dev/null
+++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/Symmetrise.py
@@ -0,0 +1,325 @@
+from mantid import logger, mtd
+from mantid.api import PythonAlgorithm, AlgorithmFactory, WorkspaceProperty, PropertyMode
+from mantid.kernel import Direction, IntArrayProperty
+from mantid.simpleapi import CreateWorkspace, CopyLogs, CopySample, CopyInstrumentParameters, SaveNexusProcessed, CreateEmptyTableWorkspace, RenameWorkspace
+
+import math
+import os.path
+import numpy as np
+
+
+class Symmetrise(PythonAlgorithm):
+
+    def category(self):
+        return 'Workflow\\MIDAS;PythonAlgorithms'
+
+
+    def summary(self):
+        return 'Takes an asymmetric S(Q,w) and makes it symmetric'
+
+
+    def PyInit(self):
+        self.declareProperty(WorkspaceProperty('Sample', '', Direction.Input),
+                             doc='Sample to run with')
+
+        self.declareProperty(IntArrayProperty(name='SpectraRange'),
+                             doc='Range of spectra to symmetrise (defaults to entire range if not set)')
+
+        self.declareProperty('XMin', 0.0, doc='X value marking lower limit of curve to copy')
+        self.declareProperty('XMax', 0.0, doc='X value marking upper limit of curve to copy')
+
+        self.declareProperty('Verbose', defaultValue=False,
+                             doc='Switch verbose output Off/On')
+        self.declareProperty('Plot', defaultValue=False,
+                             doc='Switch plotting Off/On')
+        self.declareProperty('Save', defaultValue=False,
+                             doc='Switch saving result to nxs file Off/On')
+
+        self.declareProperty(WorkspaceProperty('OutputWorkspace', '',
+                             Direction.Output), doc='Name to call the output workspace.')
+
+        self.declareProperty(WorkspaceProperty('OutputPropertiesTable', '',
+                             Direction.Output, PropertyMode.Optional), doc='Name to call the properties output table workspace.')
+
+
+    def PyExec(self):
+        from IndirectCommon import StartTime, EndTime
+
+        StartTime('Symmetrise')
+        self._setup()
+        temp_ws_name = '__symm_temp'
+
+        # The number of spectra that will actually be changed
+        num_symm_spectra = self._spectra_range[1] - self._spectra_range[0] + 1
+
+        # Find the smallest data array in the first spectra
+        len_x = len(mtd[self._sample].readX(0))
+        len_y = len(mtd[self._sample].readY(0))
+        len_e = len(mtd[self._sample].readE(0))
+        sample_array_len = min(len_x, len_y, len_e)
+
+        sample_x = mtd[self._sample].readX(0)
+
+        # Get slice bounds of array
+        try:
+            self._calculate_array_points(sample_x, sample_array_len)
+        except Exception as e:
+            raise RuntimeError('Failed to calculate array slice boundaries: %s' % e.message)
+
+        max_sample_index = sample_array_len - 1
+        centre_range_len = self._positive_min_index + self._negative_min_index
+        posiive_diff_range_len = max_sample_index - self._positive_max_index
+
+        output_cut_index = max_sample_index - self._positive_min_index - posiive_diff_range_len
+        new_array_len = 2 * max_sample_index - centre_range_len - 2 * posiive_diff_range_len
+
+        if self._verbose:
+            logger.notice('Sample array length = %d' % sample_array_len)
+
+            logger.notice('Positive X min at i=%d, x=%f'
+                          % (self._positive_min_index, sample_x[self._positive_min_index]))
+            logger.notice('Negative X min at i=%d, x=%f'
+                          % (self._negative_min_index, sample_x[self._negative_min_index]))
+
+            logger.notice('Positive X max at i=%d, x=%f'
+                          % (self._positive_max_index, sample_x[self._positive_max_index]))
+
+            logger.notice('New array length = %d' % new_array_len)
+            logger.notice('Output array LR split index = %d' % output_cut_index)
+
+        x_unit = mtd[self._sample].getAxis(0).getUnit().unitID()
+
+        # Create an empty workspace with enough storage for the new data
+        zeros = np.zeros(new_array_len * num_symm_spectra)
+        CreateWorkspace(OutputWorkspace=temp_ws_name,
+                        DataX=zeros, DataY=zeros, DataE=zeros,
+                        NSpec=int(num_symm_spectra),
+                        UnitX=x_unit)
+
+        # Copy logs and properties from sample workspace
+        CopyLogs(InputWorkspace=self._sample, OutputWorkspace=temp_ws_name)
+        CopyInstrumentParameters(InputWorkspace=self._sample, OutputWorkspace=temp_ws_name)
+
+        # For each spectrum copy positive values to the negative
+        output_spectrum_index = 0
+        for spectrum_no in range(self._spectra_range[0], self._spectra_range[1] + 1):
+            # Get index of original spectra
+            spectrum_index = mtd[self._sample].getIndexFromSpectrumNumber(spectrum_no)
+
+            # Strip any additional array cells
+            x_in = mtd[self._sample].readX(spectrum_index)[:sample_array_len]
+            y_in = mtd[self._sample].readY(spectrum_index)[:sample_array_len]
+            e_in = mtd[self._sample].readE(spectrum_index)[:sample_array_len]
+
+            # Get some zeroed data to overwrite with copies from sample
+            x_out = np.zeros(new_array_len)
+            y_out = np.zeros(new_array_len)
+            e_out = np.zeros(new_array_len)
+
+            # Left hand side (reflected)
+            x_out[:output_cut_index] = -x_in[self._positive_max_index:self._positive_min_index:-1]
+            y_out[:output_cut_index] = y_in[self._positive_max_index:self._positive_min_index:-1]
+            e_out[:output_cut_index] = e_in[self._positive_max_index:self._positive_min_index:-1]
+
+            # Right hand side (copied)
+            x_out[output_cut_index:] = x_in[self._negative_min_index:self._positive_max_index]
+            y_out[output_cut_index:] = y_in[self._negative_min_index:self._positive_max_index]
+            e_out[output_cut_index:] = e_in[self._negative_min_index:self._positive_max_index]
+
+            # Set output spectrum data
+            mtd[temp_ws_name].setX(output_spectrum_index, x_out)
+            mtd[temp_ws_name].setY(output_spectrum_index, y_out)
+            mtd[temp_ws_name].setE(output_spectrum_index, e_out)
+
+            # Set output spectrum number
+            mtd[temp_ws_name].getSpectrum(output_spectrum_index).setSpectrumNo(spectrum_no)
+            output_spectrum_index += 1
+
+            logger.information('Symmetrise spectrum %d' % spectrum_no)
+
+        RenameWorkspace(InputWorkspace=temp_ws_name, OutputWorkspace=self._output_workspace)
+
+        if self._save:
+            self._save_output()
+
+        if self._plot:
+            self._plot_output()
+
+        if self._props_output_workspace != '':
+            self._generate_props_table()
+
+        self.setProperty('OutputWorkspace', self._output_workspace)
+
+        EndTime('Symmetrise')
+
+
+    def validateInputs(self):
+        """
+        Checks for invalid input properties.
+        """
+        from IndirectCommon import CheckHistZero
+        issues = dict()
+
+        input_workspace_name = self.getPropertyValue('Sample')
+
+        # Validate spectra range
+        spectra_range = self.getProperty('SpectraRange').value
+        if len(spectra_range) != 0 and len(spectra_range) != 2:
+            issues['SpectraRange'] = 'Must be in format "spec_min,spec_max"'
+
+        if len(spectra_range) == 2:
+            spec_min = spectra_range[0]
+            spec_max = spectra_range[1]
+
+            num_sample_spectra, _ = CheckHistZero(input_workspace_name)
+            min_spectra_number = mtd[input_workspace_name].getSpectrum(0).getSpectrumNo()
+            max_spectra_number = mtd[input_workspace_name].getSpectrum(num_sample_spectra - 1).getSpectrumNo()
+
+            if spec_min < min_spectra_number:
+                issues['SpectraRange'] = 'Minimum spectra must be greater than or equal to %d' % min_spectra_number
+
+            if spec_max > max_spectra_number:
+                issues['SpectraRange'] = 'Maximum spectra must be less than or equal to %d' % max_spectra_number
+
+            if spec_max < spec_min:
+                issues['SpectraRange'] = 'Minimum spectra must be smaller than maximum spectra'
+
+        # Validate X range
+        x_min = self.getProperty('XMin').value
+        if x_min < -1e-5:
+            issues['XMin'] = 'XMin must be greater than or equal to zero'
+
+        x_max = self.getProperty('XMax').value
+        if x_max < 1e-5:
+            issues['XMax'] = 'XMax must be greater than zero'
+
+        if math.fabs(x_max - x_min) < 1e-5:
+            issues['XMin'] = 'X range is close to zero'
+            issues['XMax'] = 'X range is close to zero'
+
+        if x_max < x_min:
+            issues['XMin'] = 'XMin must be less than XMax'
+            issues['XMax'] = 'XMax must be greater than XMin'
+
+        # Valudate X range against workspace X range
+        sample_x = mtd[input_workspace_name].readX(0)
+
+        if x_max > sample_x[len(sample_x) - 1]:
+            issues['XMax'] = 'XMax value (%f) is greater than largest X value (%f)' % (x_max, sample_x[len(sample_x) - 1])
+
+        if -x_min < sample_x[0]:
+            issues['XMin'] = 'Negative XMin value (%f) is less than smallest X value (%f)' % (-x_min, sample_x[0])
+
+        return issues
+
+
+    def _setup(self):
+        """
+        Get the algorithm properties and validate them.
+        """
+        from IndirectCommon import CheckHistZero
+
+        self._sample = self.getPropertyValue('Sample')
+
+        self._x_min = math.fabs(self.getProperty('XMin').value)
+        self._x_max = math.fabs(self.getProperty('XMax').value)
+
+        self._verbose = self.getProperty('Verbose').value
+        self._plot = self.getProperty('Plot').value
+        self._save = self.getProperty('Save').value
+
+        self._spectra_range = self.getProperty('SpectraRange').value
+        # If the user did not enter a spectra range, use the spectra range of the workspace
+        if len(self._spectra_range) == 0:
+            num_sample_spectra, _ = CheckHistZero(self._sample)
+            min_spectra_number = mtd[self._sample].getSpectrum(0).getSpectrumNo()
+            max_spectra_number = mtd[self._sample].getSpectrum(num_sample_spectra - 1).getSpectrumNo()
+            self._spectra_range = [min_spectra_number, max_spectra_number]
+
+        self._output_workspace = self.getPropertyValue('OutputWorkspace')
+        self._props_output_workspace = self.getPropertyValue('OutputPropertiesTable')
+
+
+    def _calculate_array_points(self, sample_x, sample_array_len):
+        """
+        Finds the points in the array that match the cut points.
+
+        @param sample_x - Sample X axis data
+        @param sample_array_len - Lengh of data array for sample data
+        """
+        delta_x = sample_x[1] - sample_x[0]
+
+        # Find array index of negative XMin
+        negative_min_diff = np.absolute(sample_x + self._x_min)
+        self._negative_min_index = np.where(negative_min_diff < delta_x)[0][-1]
+        self._check_bounds(self._negative_min_index, sample_array_len, label='Negative')
+
+        # Find array index of positive XMin
+        positive_min_diff = np.absolute(sample_x + sample_x[self._negative_min_index])
+        self._positive_min_index = np.where(positive_min_diff < delta_x)[0][-1]
+        self._check_bounds(self._positive_min_index, sample_array_len, label='Positive')
+
+        # Find array index of positive XMax
+        positive_max_diff = np.absolute(sample_x - self._x_max)
+        self._positive_max_index = np.where(positive_max_diff < delta_x)[0][-1]
+        if self._positive_max_index == sample_array_len:
+            self._positive_max_index -= 1
+        self._check_bounds(self._positive_max_index, sample_array_len, label='Positive')
+
+
+    def _check_bounds(self, index, num_pts, label=''):
+        """
+        Check if the index falls within the bounds of the x range.
+        Throws a ValueError if the x point falls outside of the range.
+
+        @param index  - value of the index within the x range.
+        @param num_pts - total number of points in the range.
+        @param label - label to call the point if an error is thrown.
+        """
+        if index < 0:
+            raise ValueError('%s point %d < 0' % (label, index))
+        elif index >= num_pts:
+            raise ValueError('%s point %d > %d' % (label, index, num_pts))
+
+
+    def _generate_props_table(self):
+        """
+        Creates a table workspace with values calculated in algorithm.
+        """
+        props_table = CreateEmptyTableWorkspace(OutputWorkspace=self._props_output_workspace)
+
+        props_table.addColumn('int', 'NegativeXMinIndex')
+        props_table.addColumn('int', 'PositiveXMinIndex')
+        props_table.addColumn('int', 'PositiveXMaxIndex')
+
+        props_table.addRow([int(self._negative_min_index), int(self._positive_min_index), int(self._positive_max_index)])
+
+        self.setProperty('OutputPropertiesTable', self._props_output_workspace)
+
+
+    def _save_output(self):
+        """
+        Save the output workspace to the user's default working directory
+        """
+        from IndirectCommon import getDefaultWorkingDirectory
+        workdir = getDefaultWorkingDirectory()
+        file_path = os.path.join(workdir, self._output_workspace + '.nxs')
+        SaveNexusProcessed(InputWorkspace=self._output_workspace,
+                           Filename=file_path)
+
+        if self._verbose:
+            logger.notice('Output file : ' + file_path)
+
+
+    def _plot_output(self):
+        """
+        Plot the first spectrum of the input and output workspace together.
+        """
+        from IndirectImport import import_mantidplot
+        mtd_plot = import_mantidplot()
+
+        mtd_plot.plotSpectrum([self._sample, self._output_workspace], 0)
+
+
+# Register algorithm with Mantid
+AlgorithmFactory.subscribe(Symmetrise)
diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectResolution.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectResolution.py
new file mode 100644
index 0000000000000000000000000000000000000000..d521ad91d69e5e5cc091c27513f2a978d5417b35
--- /dev/null
+++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectResolution.py
@@ -0,0 +1,146 @@
+from mantid.simpleapi import *
+from mantid.api import *
+from mantid.kernel import *
+from mantid import config, logger
+
+
+class IndirectResolution(DataProcessorAlgorithm):
+
+    def category(self):
+        return 'Workflow\\Inelastic;PythonAlgorithms;Inelastic'
+
+    def summary(self):
+        return 'Creates a resolution workspace'
+
+    def PyInit(self):
+        self.declareProperty(StringArrayProperty(name='InputFiles'),
+                             doc='Comma seperated list if input files')
+
+        self.declareProperty(WorkspaceProperty('OutputWorkspace', '',
+                             optional=PropertyMode.Optional,
+                             direction=Direction.Output),
+                             doc='Output resolution workspace (if left blank a name will be gernerated automatically)')
+
+        self.declareProperty(name='Instrument', defaultValue='',
+                             validator=StringListValidator(['IRIS', 'OSIRIS', 'TOSCA']),
+                             doc='Instrument used during run')
+        self.declareProperty(name='Analyser', defaultValue='',
+                             validator=StringListValidator(['graphite', 'mica', 'fmica']),
+                             doc='Analyser used during run')
+        self.declareProperty(name='Reflection', defaultValue='',
+                             validator=StringListValidator(['002', '004', '006']),
+                             doc='Reflection used during run')
+
+        self.declareProperty(IntArrayProperty(name='DetectorRange', values=[0, 1]),
+                             doc='Range of detetcors to use in resolution calculation')
+        self.declareProperty(FloatArrayProperty(name='BackgroundRange', values=[0.0, 0.0]),
+                             doc='Energy range to use as background')
+
+        self.declareProperty(name='RebinParam', defaultValue='', doc='Rebinning parameters (min,width,max)')
+        self.declareProperty(name='ScaleFactor', defaultValue=1.0, doc='Factor to scale resolution curve by')
+        self.declareProperty(name='Smooth', defaultValue=False, doc='Apply WienerSmooth to resolution')
+
+        self.declareProperty(name='Verbose', defaultValue=False, doc='Print more information to results log')
+        self.declareProperty(name='Plot', defaultValue=False, doc='Plot resolution curve')
+        self.declareProperty(name='Save', defaultValue=False, doc='Save resolution workspace as a Nexus file')
+
+
+    def PyExec(self):
+        from IndirectCommon import StartTime, EndTime, getWSprefix
+        import inelastic_indirect_reducer
+
+        StartTime('IndirectResolution')
+        self._setup()
+
+        InelasticIndirectReduction(Instrument=self._instrument,
+                                   Analyser=self._analyser,
+                                   Reflection=self._reflection,
+                                   Grouping='All',
+                                   SumFiles=True,
+                                   InputFiles=self._input_files,
+                                   DetectorRange=self._detector_range,
+                                   OutputWorkspaceGroup='__icon_ws_group')
+
+        icon_ws = mtd['__icon_ws_group'].getItem(0).getName()
+
+        if self._out_ws == "":
+            self._out_ws = getWSprefix(icon_ws) + 'res'
+
+        if self._scale_factor != 1.0:
+            Scale(InputWorkspace=icon_ws, OutputWorkspace=icon_ws, Factor=self._scale_factor)
+
+        CalculateFlatBackground(InputWorkspace=icon_ws, OutputWorkspace=self._out_ws,
+                                StartX=self._background[0], EndX=self._background[1],
+                                Mode='Mean', OutputMode='Subtract Background')
+
+        Rebin(InputWorkspace=self._out_ws, OutputWorkspace=self._out_ws, Params=self._rebin_string)
+
+        if self._smooth:
+            WienerSmooth(InputWorkspace=self._out_ws, OutputWorkspace='__smooth_temp')
+            CopyLogs(InputWorkspace=self._out_ws, OutputWorkspace='__smooth_temp')
+            RenameWorkspace(InputWorkspace='__smooth_temp', OutputWorkspace=self._out_ws)
+
+        self._post_process()
+        self.setProperty('OutputWorkspace', self._out_ws)
+
+        EndTime('IndirectResolution')
+
+
+    def _setup(self):
+        """
+        Gets algorithm properties.
+        """
+
+        self._input_files = self.getProperty('InputFiles').value
+        self._out_ws = self.getPropertyValue('OutputWorkspace')
+
+        self._instrument = self.getProperty('Instrument').value
+        self._analyser = self.getProperty('Analyser').value
+        self._reflection = self.getProperty('Reflection').value
+
+        self._detector_range = self.getProperty('DetectorRange').value
+        self._background = self.getProperty('BackgroundRange').value
+        self._rebin_string = self.getProperty('RebinParam').value
+        self._scale_factor = self.getProperty('ScaleFactor').value
+        self._smooth = self.getProperty('Smooth').value
+
+        self._verbose = self.getProperty('Verbose').value
+        self._plot = self.getProperty('Plot').value
+        self._save = self.getProperty('Save').value
+
+
+    def _post_process(self):
+        """
+        Handles adding logs, saving and plotting.
+        """
+
+        use_scale_factor = self._scale_factor == 1.0
+        AddSampleLog(Workspace=self._out_ws, LogName='scale', LogType='String', LogText=str(use_scale_factor))
+        if use_scale_factor:
+            AddSampleLog(Workspace=self._out_ws, LogName='scale_factor', LogType='Number', LogText=str(self._scale_factor))
+
+        AddSampleLog(Workspace=self._out_ws, LogName='res_smoothing_applied', LogType='String', LogText=str(self._smooth))
+
+        AddSampleLog(Workspace=self._out_ws, LogName='back_start', LogType='Number', LogText=str(self._background[0]))
+        AddSampleLog(Workspace=self._out_ws, LogName='back_end', LogType='Number', LogText=str(self._background[1]))
+
+        rebin_params = self._rebin_string.split(',')
+        if len(rebin_params) == 3:
+            AddSampleLog(Workspace=self._out_ws, LogName='rebin_low', LogType='Number', LogText=rebin_params[0])
+            AddSampleLog(Workspace=self._out_ws, LogName='rebin_width', LogType='Number', LogText=rebin_params[1])
+            AddSampleLog(Workspace=self._out_ws, LogName='rebin_high', LogType='Number', LogText=rebin_params[2])
+
+        self.setProperty('OutputWorkspace', self._out_ws)
+
+        if self._save:
+            if self._verbose:
+                logger.notice("Resolution file saved to default save directory.")
+            SaveNexusProcessed(InputWorkspace=self._out_ws, Filename=self._out_ws + '.nxs')
+
+        if self._plot:
+            from IndirectImport import import_mantidplot
+            mtd_plot = import_mantidplot()
+            mtd_plot.plotSpectrum(self._out_ws, 0)
+
+
+AlgorithmFactory.subscribe(IndirectResolution)
diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/JumpFit.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/JumpFit.py
index eac83b7e2b43ff4eb03547eac66130f0dc07fa92..92a6ebdad78176aba11fa3fd9d3550c7282b2c25 100644
--- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/JumpFit.py
+++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/JumpFit.py
@@ -12,7 +12,7 @@ class JumpFit(PythonAlgorithm):
 
     def PyInit(self):
         self.declareProperty(WorkspaceProperty('InputWorkspace', '', direction=Direction.Input),
-                doc='Input workspace')
+                doc='Input workspace in HWHM')
 
         valid_functions = ['ChudleyElliot', 'HallRoss', 'FickDiffusion', 'TeixeiraWater']
         self.declareProperty(name='Function', defaultValue=valid_functions[0],
@@ -51,9 +51,6 @@ class JumpFit(PythonAlgorithm):
         spectrum_ws = "__" + self._in_ws
         ExtractSingleSpectrum(InputWorkspace=self._in_ws, OutputWorkspace=spectrum_ws, WorkspaceIndex=self._width)
 
-        # Convert to HWHM
-        Scale(InputWorkspace=spectrum_ws, Factor=0.5, OutputWorkspace=spectrum_ws)
-
         if self._verbose:
             logger.notice('Cropping from Q= ' + str(self._q_min) + ' to ' + str(self._q_max))
             in_run = mtd[self._in_ws].getRun()
@@ -105,7 +102,8 @@ class JumpFit(PythonAlgorithm):
 
         # Run fit function
         if self._out_name is "":
-            self._out_name = self._in_ws[:-10] + '_' + self._jump_function + 'fit'
+            ws_suffix_index = self._in_ws.rfind('_')
+            self._out_name = self._in_ws[:ws_suffix_index] + '_' + self._jump_function + '_fit'
 
         Fit(Function=function, InputWorkspace=spectrum_ws, CreateOutput=True, Output=self._out_name,
             StartX=self._q_min, EndX=self._q_max)
@@ -142,6 +140,7 @@ class JumpFit(PythonAlgorithm):
         self._plot = self.getProperty('Plot').value
         self._save = self.getProperty('Save').value
 
+
     def _process_output(self, workspace):
         if self._save:
             from mantid.simpleapi import SaveNexusProcessed
@@ -158,5 +157,6 @@ class JumpFit(PythonAlgorithm):
             mtd_plot = import_mantidplot()
             mtd_plot.plotSpectrum(workspace, [0, 1, 2], True)
 
+
 # Register algorithm with Mantid
 AlgorithmFactory.subscribe(JumpFit)
diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MSGDiffractionReduction.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MSGDiffractionReduction.py
new file mode 100644
index 0000000000000000000000000000000000000000..ed75174e90ee1c387ea4673b7263dfe97d86bd30
--- /dev/null
+++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MSGDiffractionReduction.py
@@ -0,0 +1,122 @@
+from mantid.simpleapi import *
+from mantid.api import *
+from mantid.kernel import *
+from mantid import config
+import os.path, math
+
+class MSGDiffractionReduction(PythonAlgorithm):
+
+    def category(self):
+        return 'Diffraction;PythonAlgorithms'
+
+    def summary(self):
+        return 'Calculates the scattering & transmission for Indirect Geometry spectrometers.'
+
+    def PyInit(self):
+        self.declareProperty(StringArrayProperty(name='InputFiles'),
+                             doc='Comma separated list of input files.')
+
+        self.declareProperty(name='SumFiles', defaultValue=False,
+                             doc='Enabled to sum spectra from each input file.')
+
+        self.declareProperty(name='IndividualGrouping', defaultValue=False,
+                             doc='Do not group results into a single spectra.')
+
+        self.declareProperty(name='Instrument', defaultValue='IRIS',
+                             validator=StringListValidator(['IRIS', 'OSIRIS', 'TOSCA', 'VESUVIO']),
+                             doc='Instrument used for run')
+
+        self.declareProperty(name='Mode', defaultValue='diffspec',
+                             validator=StringListValidator(['diffspec', 'diffonly']),
+                             doc='Diffraction mode used')
+
+        self.declareProperty(IntArrayProperty(name='DetectorRange'),
+                             doc='Range of detectors to use.')
+
+        self.declareProperty(name='RebinParam', defaultValue='',
+                             doc='Rebin parameters.')
+
+        self.declareProperty(WorkspaceGroupProperty('OutputWorkspaceGroup', '',
+                             direction=Direction.Output, optional=PropertyMode.Optional),
+                             doc='Optionally group the result workspaces.')
+
+        self.declareProperty(StringArrayProperty(name='SaveFormats'),
+                             doc='Save formats to save output in.')
+
+    def validateInputs(self):
+        """
+        Checks for issues with user input.
+        """
+        issues = dict()
+
+        # Validate input files
+        input_files = self.getProperty('InputFiles').value
+        if len(input_files) == 0:
+            issues['InputFiles'] = 'InputFiles must contain at least one filename'
+
+        # Validate detector range
+        detector_range = self.getProperty('DetectorRange').value
+        if len(detector_range) != 2:
+            issues['DetectorRange'] = 'DetectorRange must be an array of 2 values only'
+        else:
+            if detector_range[0] > detector_range[1]:
+                issues['DetectorRange'] = 'DetectorRange must be in format [lower_index,upper_index]'
+
+        # Validate save formats
+        save_formats = self.getProperty('SaveFormats').value
+        valid_formats = ['gss', 'nxs', 'ascii']
+        for s_format in save_formats:
+            if s_format not in valid_formats:
+                issues['SaveFormats'] = 'Contains invalid save formats'
+                break
+
+        return issues
+
+    def PyExec(self):
+        from IndirectCommon import StartTime, EndTime
+        from IndirectDiffractionReduction import MSGDiffractionReducer
+
+        StartTime('MSGDiffractionReduction')
+
+        input_files = self.getProperty('InputFiles').value
+        sum_files = self.getProperty('SumFiles').value
+        individual_grouping = self.getProperty('IndividualGrouping').value
+        instrument_name = self.getPropertyValue('Instrument')
+        mode = self.getPropertyValue('Mode')
+        detector_range = self.getProperty('DetectorRange').value
+        rebin_string = self.getPropertyValue('RebinParam')
+        output_ws_group = self.getPropertyValue('OutputWorkspaceGroup')
+        save_formats = self.getProperty('SaveFormats').value
+
+        ipf_filename = instrument_name + '_diffraction_' + mode + '_Parameters.xml'
+
+        reducer = MSGDiffractionReducer()
+        reducer.set_instrument_name(instrument_name)
+        reducer.set_detector_range(int(detector_range[0] - 1), int(detector_range[1] - 1))
+        reducer.set_parameter_file(ipf_filename)
+        reducer.set_sum_files(sum_files)
+        reducer.set_save_formats(save_formats)
+
+        if individual_grouping:
+            reducer.set_grouping_policy('Individual')
+
+        for in_file in input_files:
+            reducer.append_data_file(in_file)
+
+        if rebin_string != '':
+            reducer.set_rebin_string(rebin_string)
+
+        if instrument_name == 'VESUVIO':
+            reducer.append_load_option('Mode', 'FoilOut')
+
+        reducer.reduce()
+
+        if output_ws_group != '':
+            result_ws_list = reducer.get_result_workspaces()
+            GroupWorkspaces(InputWorkspaces=result_ws_list, OutputWorkspace=output_ws_group)
+            self.setProperty('OutputWorkspaceGroup', output_ws_group)
+
+        EndTime('MSGDiffractionReduction')
+
+
+AlgorithmFactory.subscribe(MSGDiffractionReduction)
diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MolDyn.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MolDyn.py
new file mode 100644
index 0000000000000000000000000000000000000000..b3b68ebf9d25cc697739c843a5edd503330296e6
--- /dev/null
+++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MolDyn.py
@@ -0,0 +1,591 @@
+from mantid.simpleapi import *
+from mantid.kernel import *
+from mantid.api import *
+
+import os
+import numpy as np
+import math
+
+
+def _split_line(a):
+    elements = a.split()  # split line on character
+    extracted = []
+    for n in elements:
+        extracted.append(float(n))
+    return extracted  # values as list
+
+def _find_starts(data, c, l1):
+    for l in range(l1, len(data)):
+        char = data[l]
+        if char.startswith(c):
+            line = l
+            break
+    return line
+
+def _find_tab_starts(data, c, l1):
+    for l in range(l1, len(data)):
+        char = data[l][1:]
+        if char.startswith(c):
+            line = l
+            break
+    return line
+
+def _find_ends(data, c, l1):
+    for l in range(l1, len(data)):
+        char = data[l]
+        if char.endswith(c):
+            line = l
+            break
+    return line
+
+def _find_char(data, c, l1):
+    for l in range(l1, len(data)):
+        char = data[l]
+        if char.find(c):
+            line = l
+            break
+    return line
+
+def _make_list(a, l1, l2):
+    data = ''
+    for m in range(l1, l2 + 1):
+        data += a[m]
+        alist = data.split(',')
+    return alist
+
+
+class MolDyn(PythonAlgorithm):
+
+    def category(self):
+        return 'Workflow\\Inelastic;PythonAlgorithms;Inelastic'
+
+    def summary(self):
+        return 'Imports nMOLDYN simulations from CDL and ASCII files.'
+
+    def PyInit(self):
+        self.declareProperty(FileProperty('Filename', '',
+                                          action=FileAction.OptionalLoad,
+                                          extensions=['.cdl', '.dat']),
+                                          doc='File path for data')
+
+        self.declareProperty(StringArrayProperty('Functions'),
+                             doc='The Function to use')
+
+        self.declareProperty(WorkspaceProperty('Resolution', '', Direction.Input, PropertyMode.Optional),
+                             doc='Resolution workspace')
+
+        self.declareProperty(name='MaxEnergy', defaultValue='',
+                             doc='Crop the result spectra at a given energy (leave blank for no crop)')
+
+        self.declareProperty(name='Plot', defaultValue='None',
+                             validator=StringListValidator(['None', 'Spectra', 'Contour', 'Both']),
+                             doc='Plot result workspace')
+
+        self.declareProperty(name='Verbose', defaultValue=False,
+                             doc='Output more verbose message to log')
+
+        self.declareProperty(name='Save', defaultValue=False,
+                             doc='Save result workspace to nexus file in the default save directory')
+
+        self.declareProperty(WorkspaceProperty('OutputWorkspace', '', Direction.Output),
+                             doc='Output workspace name')
+
+
+    def validateInputs(self):
+        issues = dict()
+
+        sample_filename = self.getPropertyValue('Filename')
+        function_list = self.getProperty('Functions').value
+        res_ws = self.getPropertyValue('Resolution')
+        e_max = self.getPropertyValue('MaxEnergy')
+
+        if len(function_list) == 0 and os.path.splitext(sample_filename)[1] == 'cdl':
+            issues['Functions'] = 'Must specify at least one function when loading a CDL file'
+
+        if len(function_list) > 0 and os.path.splitext(sample_filename)[1] == 'dat':
+            issues['Functions'] = 'Cannot specify functions when loading an ASCII file'
+
+        if res_ws is not '' and e_max is '':
+            issues['MaxEnergy'] = 'MaxEnergy must be set when convolving with an instrument resolution'
+
+        return issues
+
+
+    def PyExec(self):
+        from IndirectImport import import_mantidplot
+
+        self._mtd_plot = import_mantidplot()
+
+        # Do setup
+        self._setup()
+
+        # Load data file
+        data, name, ext = self._load_file()
+
+        # Run nMOLDYN import
+        if ext == 'cdl':
+            self._cdl_import(data, name)
+        elif ext == 'dat':
+            self._ascii_import(data, name)
+        else:
+            raise RuntimeError('Unrecognised file format: %s' % ext)
+
+        # Do convolution if given a resolution workspace
+        if self._res_ws is not '':
+            # Create a workspace with enough spectra for convolution
+            num_sample_hist = mtd[self._out_ws].getItem(0).getNumberHistograms()
+            resolution_ws = self._create_res_ws(num_sample_hist)
+
+            # Convolve all workspaces in output group
+            for ws_name in mtd[self._out_ws].getNames():
+                if ws_name.lower().find('sqw') != -1:
+                    self._convolve_with_res(resolution_ws, ws_name)
+                else:
+                    if self._verbose:
+                        logger.notice('Ignoring workspace %s in convolution step' % ws_name)
+
+            # Remove the generated resolution workspace
+            DeleteWorkspace(resolution_ws)
+
+        # Do energy crop
+        if self._emax is not None:
+            self._energy_crop()
+
+        # Save result workspace group
+        if self._save:
+            workdir = config['defaultsave.directory']
+            out_filename = os.path.join(workdir, self._out_ws + '.nxs')
+            if self._verbose:
+                logger.information('Creating file: %s' % out_filename)
+                SaveNexus(InputWorkspace=self._out_ws, Filename=out_filename)
+
+        # Set the output workspace
+        self.setProperty('OutputWorkspace', self._out_ws)
+
+        # Plot spectra plots
+        if self._plot == 'Spectra' or self._plot == 'Both':
+            if isinstance(mtd[self._out_ws], WorkspaceGroup):
+                for ws_name in mtd[self._out_ws].getNames():
+                    self._plot_spectra(ws_name)
+            else:
+                self._plot_spectra(self._out_ws)
+
+        # Plot contour plot
+        if self._plot == 'Contour' or self._plot == 'Both':
+            self._mtd_plot.plot2D(self._out_ws)
+
+
+    def _setup(self):
+        """
+        Gets algorithm properties.
+        """
+
+        self._verbose = self.getProperty('Verbose').value
+        self._plot = self.getProperty('Plot').value
+        self._save = self.getProperty('Save').value
+
+        self._sam_path = self.getPropertyValue('Filename')
+
+        raw_functions = self.getProperty('Functions').value
+        self._functions = [x.strip() for x in raw_functions]
+
+        emax_str = self.getPropertyValue('MaxEnergy')
+        self._emax = None
+        if emax_str != '':
+            self._emax = float(emax_str)
+
+        self._res_ws = self.getPropertyValue('Resolution')
+        self._out_ws = self.getPropertyValue('OutputWorkspace')
+
+
+    def _load_file(self):
+        """
+        Attempts to load the sample file.
+
+        @returns A tuple with the ASCII data, sample file name and file extension
+        """
+
+        # Get some data about the file
+        path = self._sam_path
+        base = os.path.basename(path)
+        name = os.path.splitext(base)[0]
+        ext = os.path.splitext(path)[1]
+
+        # Remove dot from extension
+        if len(ext) > 1:
+            ext = ext[1:]
+
+        if self._verbose:
+            logger.information('Base filename for %s is %s' % (self._sam_path, name))
+            logger.information('File type of %s is %s' % (self._sam_path, ext))
+
+        if not os.path.isfile(path):
+            path = FileFinder.getFullPath(path)
+
+        if self._verbose:
+            logger.information('Got file path for %s: %s' % (self._sam_path, path))
+
+        # Open file and get data
+        try:
+            handle = open(path, 'r')
+            data = []
+            for line in handle:
+                line = line.rstrip()
+                data.append(line)
+            handle.close()
+
+            return data, name, ext
+
+        except:
+            raise RuntimeError('Could not load file: %s' % path)
+
+
+    def _find_dimensions(self, data):
+        """
+        Gets the number of Q, time and frequency values in given raw data.
+
+        @param data Raw data to search
+        """
+
+        num_q_values = _find_tab_starts(data, 'NQVALUES', 0)
+        num_time_values = _find_tab_starts(data, 'NTIMES', 0)
+        num_freq_values = _find_tab_starts(data, 'NFREQUENCIES', 0)
+
+        q_el = data[num_q_values].split()
+        num_q = int(q_el[2])
+        t_el = data[num_time_values].split()
+        num_t = int(t_el[2])
+        f_el = data[num_freq_values].split()
+        num_f = int(f_el[2])
+
+        if self._verbose:
+            logger.debug(data[2][1:-1])
+            logger.debug(data[3][1:-1])
+            logger.debug(data[6][1:-1])
+
+        return num_q, num_t, num_f
+
+
+    def _cdl_import(self, data, name):
+        """
+        Import data from CDL file.
+
+        @param data Raw data
+        @param name Name of data file
+        """
+
+        if self._verbose:
+            logger.notice('Loading CDL file: %s' % name)
+
+        len_data = len(data)
+
+        # raw head
+        nQ, nT, nF = self._find_dimensions(data)
+        ldata = _find_starts(data, 'data:', 0)
+        lq1 = _find_starts(data, ' q =', ldata)  # start Q values
+        lq2 = _find_starts(data, ' q =', lq1 - 1)
+        Qlist = _make_list(data, lq1, lq2)
+        if nQ != len(Qlist):
+            raise RUntimeError('Error reading Q values')
+        Qf = Qlist[0].split()
+        Q = [float(Qf[2]) / 10.0]
+        for m in range(1, nQ - 1):
+            Q.append(float(Qlist[m]) / 10.0)
+
+        Q.append(float(Qlist[nQ - 1][:-1]) / 10.0)
+        if self._verbose:
+            logger.information('Q values = ' + str(Q))
+
+        lt1 = _find_starts(data, ' time =', lq2)  # start T values
+        lt2 = _find_ends(data, ';', lt1)
+        Tlist = _make_list(data, lt1, lt2)
+        if nT != len(Tlist):
+            raise RuntimeError('Error reading Time values')
+
+        Tf = Tlist[0].split()
+        T = [float(Tf[2])]
+        for m in range(1, nT - 1):
+            T.append(float(Tlist[m]))
+
+        T.append(float(Tlist[nT - 1][:-1]))
+        T.append(2 * T[nT - 1] - T[nT - 2])
+        if self._verbose:
+            logger.information('T values = ' + str(T[:2]) + ' to ' + str(T[-3:]))
+
+        lf1 = _find_starts(data, ' frequency =', lq2)  # start F values
+        lf2 = _find_ends(data, ';', lf1)
+        Flist = _make_list(data, lf1, lf2)
+        if nF != len(Flist):
+            raise RuntimeError('Error reading Freq values')
+
+        Ff = Flist[0].split()
+        F = [float(Ff[2])]
+        for m in range(1, nF - 1):
+            F.append(float(Flist[m]))
+
+        F.append(float(Flist[nF - 1][:-1]))
+        F.append(2 * F[nF - 1] - T[nF - 2])
+        if self._verbose:
+            logger.information('F values = ' + str(F[:2]) + ' to ' + str(F[-3:]))
+
+        # Function
+        output_ws_list = list()
+        for func in self._functions:
+            start = []
+            lstart = lt2
+            if func[:3] == 'Fqt':
+                nP = nT
+                xEn = np.array(T)
+                eZero = np.zeros(nT)
+                xUnit = 'TOF'
+            elif func[:3] == 'Sqw':
+                nP = nF
+                xEn = np.array(F)
+                eZero = np.zeros(nF)
+                xUnit = 'Energy'
+            else:
+                raise RuntimeError('Failed to parse function string ' + func)
+
+            for n in range(0, nQ):
+                for m in range(lstart, len_data):
+                    char = data[m]
+                    if char.startswith('  // ' + func):
+                        start.append(m)
+                        lstart = m + 1
+            lend = _find_ends(data, ';', lstart)
+            start.append(lend + 1)
+
+            # Throw error if we couldn't find the function
+            if len(start) < 2:
+                raise RuntimeError('Failed to parse function string ' + func)
+
+            Qaxis = ''
+            for n in range(0, nQ):
+                if self._verbose:
+                    logger.information(str(start))
+                    logger.information('Reading : ' + data[start[n]])
+
+                Slist = _make_list(data, start[n] + 1, start[n + 1] - 1)
+                if n == nQ - 1:
+                    Slist[nP - 1] = Slist[nP - 1][:-1]
+                S = []
+                for m in range(0, nP):
+                    S.append(float(Slist[m]))
+                if nP != len(S):
+                    raise RuntimeError('Error reading S values')
+                else:
+                    if self._verbose:
+                        logger.information('S values = ' + str(S[:2]) + ' to ' + str(S[-2:]))
+                if n == 0:
+                    Qaxis += str(Q[n])
+                    xDat = xEn
+                    yDat = np.array(S)
+                    eDat = eZero
+                else:
+                    Qaxis += ',' + str(Q[n])
+                    xDat = np.append(xDat, xEn)
+                    yDat = np.append(yDat, np.array(S))
+                    eDat = np.append(eDat, eZero)
+            outWS = name + '_' + func
+            CreateWorkspace(OutputWorkspace=outWS, DataX=xDat, DataY=yDat, DataE=eDat,
+                            Nspec=nQ, UnitX=xUnit, VerticalAxisUnit='MomentumTransfer', VerticalAxisValues=Qaxis)
+            output_ws_list.append(outWS)
+
+        GroupWorkspaces(InputWorkspaces=output_ws_list, OutputWorkspace=self._out_ws)
+
+
+    def _ascii_import(self, data, name):
+        """
+        Import ASCII data.
+
+        @param data Raw ASCII data
+        @param name Name of data file
+        """
+
+        from IndirectNeutron import ChangeAngles, InstrParas, RunParas
+
+        if self._verbose:
+            logger.notice('Loading ASCII data: %s' % name)
+
+        val = _split_line(data[3])
+        Q = []
+        for n in range(1, len(val)):
+            Q.append(val[n])
+
+        nQ = len(Q)
+        x = []
+        y = []
+        for n in range(4, len(data)):
+            val = _split_line(data[n])
+            x.append(val[0])
+            yval = val[1:]
+            y.append(yval)
+
+        nX = len(x)
+        if self._verbose:
+            logger.information('nQ = ' + str(nQ))
+            logger.information('nT = ' + str(nX))
+
+        xT = np.array(x)
+        eZero = np.zeros(nX)
+        Qaxis = ''
+        for m in range(0, nQ):
+            if self._verbose:
+                logger.information('Q[' + str(m + 1) + '] : ' + str(Q[m]))
+
+            S = []
+            for n in range(0, nX):
+                S.append(y[n][m])
+
+            if m == 0:
+                Qaxis += str(Q[m])
+                xDat = xT
+                yDat = np.array(S)
+                eDat = eZero
+            else:
+                Qaxis += ',' + str(Q[m])
+                xDat = np.append(xDat, xT)
+                yDat = np.append(yDat, np.array(S))
+                eDat = np.append(eDat, eZero)
+
+        CreateWorkspace(OutputWorkspace=self._out_ws, DataX=xDat, DataY=yDat, DataE=eDat,
+                        Nspec=nQ, UnitX='TOF')
+        Qmax = Q[nQ - 1]
+        instr = 'MolDyn'
+        ana = 'qmax'
+        if Qmax <= 2.0:
+            refl = '2'
+        else:
+            refl = '4'
+
+        InstrParas(self._out_ws, instr, ana, refl)
+        efixed = RunParas(self._out_ws, instr, name, name, self._verbose)
+        if self._verbose:
+            logger.information('Qmax = ' + str(Qmax) + ' ; efixed = ' + str(efixed))
+        pi4 = 4.0 * math.pi
+        wave = 1.8 * math.sqrt(25.2429 / efixed)
+        theta = []
+        for n in range(0, nQ):
+            qw = wave * Q[n] / pi4
+            ang = 2.0 * math.degrees(math.asin(qw))
+            theta.append(ang)
+
+        ChangeAngles(self._out_ws, instr, theta, self._verbose)
+
+
+    def _create_res_ws(self, num_sample_hist):
+        """
+        Creates a resolution workspace.
+
+        @param num_sample_hist Number of histgrams required in workspace
+        @returns The generated resolution workspace
+        """
+
+        num_res_hist = mtd[self._res_ws].getNumberHistograms()
+
+        if self._verbose:
+            logger.notice('Creating resolution workspace.')
+            logger.information('Sample has %d spectra\nResolution has %d spectra'
+                               % (num_sample_hist, num_res_hist))
+
+        # If the sample workspace has more spectra than the resolution then copy the first spectra
+        # to make a workspace with equal spectra count to sample
+        if num_sample_hist > num_res_hist:
+            if self._verbose:
+                logger.information('Copying first resolution spectra for convolution')
+
+            res_ws_list = []
+            for _ in range(0, num_sample_hist):
+                res_ws_list.append(self._res_ws)
+
+            res_ws_str_list = ','.join(res_ws_list)
+            resolution_ws = ConjoinSpectra(res_ws_str_list, 0)
+
+        # If sample has less spectra then crop the resolution to the same number of spectra as
+        # resolution
+        elif num_sample_hist < num_res_hist:
+            if self._verbose:
+                logger.information('Cropping resolution workspace to sample')
+
+            resolution_ws = CropWorkspace(InputWorkspace=self._res_ws, StartWorkspaceIndex=0,
+                                          EndWorkspaceIndex=num_sample_hist)
+
+        # If the spectra counts match then just use the resolution as it is
+        else:
+            if self._verbose:
+                logger.information('Using resolution workspace as is')
+
+            resolution_ws = CloneWorkspace(self._res_ws)
+
+        return resolution_ws
+
+
+    def _convolve_with_res(self, resolution_ws, function_ws_name):
+        """
+        Performs convolution with an instrument resolution workspace.
+
+        @param resolution_ws The resolution workspace to convolve with
+        @param function_ws_name The workspace name for the function to convolute
+        """
+
+        if self._verbose:
+            logger.notice('Convoluting sample %s with resolution %s'
+                          % (function_ws_name, resolution_ws))
+
+        # Symmetrise the sample WS in x=0 as nMOLDYN only gives positive energy values
+        Symmetrise(Sample=function_ws_name, XMin=0, XMax=self._emax,
+                   Verbose=self._verbose, Plot=False, Save=False,
+                   OutputWorkspace=function_ws_name)
+
+        # Convolve the symmetrised sample with the resolution
+        ConvolveWorkspaces(OutputWorkspace=function_ws_name,
+                           Workspace1=function_ws_name, Workspace2=resolution_ws)
+
+
+    def _energy_crop(self):
+        """
+        For each workspace in the result that has an X unit in Energy, apply
+        a crop to MaxEnergy
+        """
+
+        if self._verbose:
+            logger.notice('Cropping workspaces in energy to %f'
+                          % self._emax)
+
+        for ws_name in mtd[self._out_ws].getNames():
+            if mtd[ws_name].getAxis(0).getUnit().unitID() == 'Energy':
+                if self._verbose:
+                    logger.debug('Workspace %s has energy on X axis, will crop to %f'
+                                 % (ws_name, self._emax))
+
+                CropWorkspace(InputWorkspace=ws_name, OutputWorkspace=ws_name,
+                              XMax=self._emax)
+            else:
+                if self._verbose:
+                    logger.debug('Workspace %s does not have energy on X axis, will not crop.'
+                                 % ws_name)
+
+
+    def _plot_spectra(self, ws_name):
+        """
+        Plots up to the first 10 spectra from a workspace.
+
+        @param ws_name Name of workspace to plot
+        """
+
+        num_hist = mtd[ws_name].getNumberHistograms()
+
+        # Limit number of plotted histograms to 10
+        if num_hist > 10:
+            num_hist = 10
+
+        # Build plot list
+        plot_list = []
+        for i in range(0, num_hist):
+            plot_list.append(i)
+
+        self._mtd_plot.plotSpectrum(ws_name, plot_list)
+
+
+# Register algorithm with Mantid
+AlgorithmFactory.subscribe(MolDyn)
diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/Symmetrise.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/Symmetrise.py
deleted file mode 100644
index 94e8e682d7883a6223a07d0e141c81224a3b64f7..0000000000000000000000000000000000000000
--- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/Symmetrise.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Algorithm to start Symmetrise
-from mantid.api import PythonAlgorithm, AlgorithmFactory
-from mantid.kernel import StringListValidator, StringMandatoryValidator
-
-class Symmetrise(PythonAlgorithm):
-
-    def category(self):
-    	return "Workflow\\MIDAS;PythonAlgorithms"
-
-    def summary (self):
-    	return "Takes and asymmetric S(Q,w) and makes it symmetric"
-
-    def PyInit(self):
-    	self.declareProperty(name='InputType',defaultValue='File',validator=StringListValidator(['File','Workspace']), doc='Origin of data input - File (_red.nxs) or Workspace')
-    	self.declareProperty(name='Instrument',defaultValue='iris',validator=StringListValidator(['irs','iris','osi','osiris']), doc='Instrument')
-    	self.declareProperty(name='Analyser',defaultValue='graphite002',validator=StringListValidator(['graphite002','graphite004']), doc='Analyser & reflection')
-    	self.declareProperty(name='SamNumber',defaultValue='',validator=StringMandatoryValidator(), doc='Sample run number')
-    	self.declareProperty(name='Xcut',defaultValue='',validator=StringMandatoryValidator(), doc='X cutoff value')
-    	self.declareProperty('Verbose',defaultValue=True, doc='Switch Verbose Off/On')
-    	self.declareProperty('Plot',defaultValue=True, doc='Switch Plot Off/On')
-    	self.declareProperty('Save',defaultValue=False, doc='Switch Save result to nxs file Off/On')
-
-    def PyExec(self):
-
-    	self.log().information('Symmetrise')
-    	inType = self.getPropertyValue('InputType')
-    	prefix = self.getPropertyValue('Instrument')
-    	ana = self.getPropertyValue('Analyser')
-    	sn = self.getPropertyValue('SamNumber')
-    	sam = prefix+sn+'_'+ana+'_red'
-    	cut = self.getPropertyValue('Xcut')
-    	cut = float(cut)
-
-    	verbOp = self.getProperty('Verbose').value
-    	plotOp = self.getProperty('Plot').value
-    	saveOp = self.getProperty('Save').value
-        import IndirectSymm as Main
-    	Main.SymmStart(inType,sam,cut,verbOp,plotOp,saveOp)
-
-AlgorithmFactory.subscribe(Symmetrise)         # Register algorithm with Mantid
diff --git a/Code/Mantid/Framework/PythonInterface/test/python/mantid/geometry/CMakeLists.txt b/Code/Mantid/Framework/PythonInterface/test/python/mantid/geometry/CMakeLists.txt
index a6dc06eed663a32dade7f7d64ca2d2826c46fdcd..e62846514130ecdd91b5624e45f86f3b9b00c6e4 100644
--- a/Code/Mantid/Framework/PythonInterface/test/python/mantid/geometry/CMakeLists.txt
+++ b/Code/Mantid/Framework/PythonInterface/test/python/mantid/geometry/CMakeLists.txt
@@ -11,6 +11,7 @@ set ( TEST_PY_FILES
   ReferenceFrameTest.py
   UnitCellTest.py
   PointGroupTest.py
+  SpaceGroupTest.py
   SymmetryOperationTest.py
 )
 
diff --git a/Code/Mantid/Framework/PythonInterface/test/python/mantid/geometry/SpaceGroupTest.py b/Code/Mantid/Framework/PythonInterface/test/python/mantid/geometry/SpaceGroupTest.py
new file mode 100644
index 0000000000000000000000000000000000000000..db6e8a16261ded7748b7c43edc324ea0c16acbea
--- /dev/null
+++ b/Code/Mantid/Framework/PythonInterface/test/python/mantid/geometry/SpaceGroupTest.py
@@ -0,0 +1,31 @@
+import unittest
+from mantid.geometry import SpaceGroup, SpaceGroupFactoryImpl
+
+class SpaceGroupTest(unittest.TestCase):
+
+    def test_creation(self):
+        self.assertRaises(ValueError, SpaceGroupFactoryImpl.Instance().createSpaceGroup, "none")
+
+        SpaceGroupFactoryImpl.Instance().createSpaceGroup("I m -3 m")
+
+    def test_interface(self):
+        spaceGroup = SpaceGroupFactoryImpl.Instance().createSpaceGroup("P -1")
+        self.assertEquals(spaceGroup.hmSymbol(), "P -1")
+        self.assertEquals(spaceGroup.order(), 2)
+
+        symOpStrings = spaceGroup.getSymmetryOperationStrings()
+
+        self.assertEqual(len(symOpStrings), 2)
+        self.assertTrue("x,y,z" in symOpStrings)
+        self.assertTrue("-x,-y,-z" in symOpStrings)
+
+    def test_equivalentPositions(self):
+        spaceGroup = SpaceGroupFactoryImpl.Instance().createSpaceGroup("P -1")
+
+        position = [0.34, 0.3, 0.4]
+        equivalentPositions = spaceGroup.getEquivalentPositions(position)
+
+        self.assertEqual(len(equivalentPositions), 2)
+
+if __name__ == '__main__':
+    unittest.main()
\ No newline at end of file
diff --git a/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/CMakeLists.txt b/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/CMakeLists.txt
index efd69c9db01fd8503811fd5bac4a5f48083cba0e..582f2cc6ecd2a6925f0ed8e6ec1c6b6d708ef5a9 100644
--- a/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/CMakeLists.txt
+++ b/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/CMakeLists.txt
@@ -28,6 +28,7 @@ set ( TEST_PY_FILES
   MaskWorkspaceToCalFileTest.py
   MeanTest.py
   MergeCalFilesTest.py
+  MolDynTest.py
   PDDetermineCharacterizationsTest.py
   RetrieveRunInfoTest.py
   SANSWideAngleCorrectionTest.py
@@ -40,6 +41,7 @@ set ( TEST_PY_FILES
   Stitch1DManyTest.py
   SuggestTibCNCSTest.py
   SuggestTibHYSPECTest.py
+  SymmetriseTest.py
   UpdatePeakParameterTableValueTest.py
   SANSSubtractTest.py
   TimeSliceTest.py
diff --git a/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/MolDynTest.py b/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/MolDynTest.py
new file mode 100644
index 0000000000000000000000000000000000000000..3f85912fb21d3847c84f44783a109ba54e854446
--- /dev/null
+++ b/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/MolDynTest.py
@@ -0,0 +1,72 @@
+import unittest
+from mantid.simpleapi import *
+from mantid.api import *
+
+
+class MolDynTest(unittest.TestCase):
+
+    def test_loadFqt(self):
+        # Load an Fwt function from a nMOLDYN file
+        moldyn_group = MolDyn(Filename='NaF_DISF.cdl', Functions=['Fqt-total'])
+
+        # A workspace should exist in this name format
+        self.assertTrue(mtd.doesExist('NaF_DISF_Fqt-total'))
+
+        # X axis should be in TOF for an Fqt function
+        units = mtd['NaF_DISF_Fqt-total'].getAxis(0).getUnit().unitID()
+        self.assertEqual(units, 'TOF')
+
+
+    def test_loadSqw(self):
+        # Load an Sqw function from a nMOLDYN file
+        moldyn_group = MolDyn(Filename='NaF_DISF.cdl', Functions=['Sqw-total'])
+
+        # A workspace should exist in this name format
+        self.assertTrue(mtd.doesExist('NaF_DISF_Sqw-total'))
+
+        # X axis should be in Energy for an Sqw function
+        units = mtd['NaF_DISF_Sqw-total'].getAxis(0).getUnit().unitID()
+        self.assertEqual(units, 'Energy')
+
+
+    def test_loadSqwWithEMax(self):
+        # Load an Sqw function from a nMOLDYN file
+        moldyn_group = MolDyn(Filename='NaF_DISF.cdl', Functions=['Sqw-total'], MaxEnergy="1.0")
+
+        # A workspace should exist in this name format
+        self.assertTrue(mtd.doesExist('NaF_DISF_Sqw-total'))
+
+        # Get max enery from result workspace
+        x_data = mtd['NaF_DISF_Sqw-total'].dataX(0)
+        x_max = x_data[len(x_data) - 1]
+
+        # Check that it is less that what was passed to algorithm
+        self.assertTrue(x_max <= 1.0)
+
+
+    def test_loadSqwWithRes(self):
+        # Create a sample workspace thet looks like an instrument resolution
+        sample_res = CreateSampleWorkspace(NumBanks=1, BankPixelWidth=1, XUnit='Energy', XMin=-10, XMax=10, BinWidth=0.1)
+
+        # Load an Sqw function from a nMOLDYN file
+        moldyn_group = MolDyn(Filename='NaF_DISF.cdl', Functions=['Sqw-total'], MaxEnergy="1.0", Resolution=sample_res)
+
+        # A workspace should exist in this name format
+        self.assertTrue(mtd.doesExist('NaF_DISF_Sqw-total'))
+
+
+    def test_loadSqwWithResWithNoEMaxFails(self):
+        """
+        Tests that trying to use an instrument resolution without a Max Energy will fail.
+        """
+
+        # Create a sample workspace thet looks like an instrument resolution
+        sample_res = CreateSampleWorkspace(NumBanks=1, BankPixelWidth=1, XUnit='Energy', XMin=-10, XMax=10, BinWidth=0.1)
+
+        # Load an Sqw function from a nMOLDYN file
+        self.assertRaises(RuntimeError, MolDyn,
+                          Filename='NaF_DISF.cdl', Functions=['Sqw-total'], Resolution=sample_res, OutputWorkspace='moldyn_group')
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/PoldiMergeTest.py b/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/PoldiMergeTest.py
index 97fdde8f1946c1119983fedb1edd9445571d6a6a..d139c7d894b10b89e7142ee08ccfdddbace9a967 100644
--- a/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/PoldiMergeTest.py
+++ b/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/PoldiMergeTest.py
@@ -25,6 +25,8 @@ class PoldiMergeTest(unittest.TestCase):
         self.badTimingOffset = CreateWorkspace(rightDataBadOffset, ydata, OutputWorkspace="BadTimingOffset")
         self.badTimingDelta = CreateWorkspace(rightDataBadDelta, ydata, OutputWorkspace="BadTimingDelta")
 
+        self.groupGood = GroupWorkspaces(["Base", "GoodTiming"], OutputWorkspace="GoodGroup")
+
         goodProperty = 10.0
         badProperty = 20.0
 
@@ -37,7 +39,7 @@ class PoldiMergeTest(unittest.TestCase):
             self.goodTimingBadProperties.getRun().addProperty(p, badProperty, True)
 
     def __runMerge__(self, workspaceNames):
-        return PoldiMerge(WorkspaceNames=workspaceNames, OutputWorkspace="PoldiMergeOutput")
+        return PoldiMerge(WorkspaceNames=workspaceNames, OutputWorkspace="PoldiMergeOutput", CheckInstruments=False)
 
     def test_happyCase(self):
         output = self.__runMerge__("Base,GoodTiming")
@@ -56,6 +58,23 @@ class PoldiMergeTest(unittest.TestCase):
 
         DeleteWorkspace("PoldiMergeOutput")
 
+    def test_workspaceGroup(self):
+        output = self.__runMerge__("GoodGroup")
+
+        self.assertTrue(isinstance(output, MatrixWorkspace))
+
+        dataX = output.dataX(0)
+        self.assertEqual(dataX[0], 0.0)
+        self.assertEqual(dataX[-1], 3.0)
+        self.assertEqual(len(dataX), 4)
+
+        dataY = output.dataY(0)
+        self.assertEqual(dataY[0], 2.0)
+        self.assertEqual(dataY[1], 2.0)
+        self.assertEqual(len(dataY), 4)
+
+        DeleteWorkspace("PoldiMergeOutput")
+
     def test_timingDelta(self):
         self.assertRaises(RuntimeError, lambda: self.__runMerge__("Base,BadTimingDelta"))
         self.assertFalse(AnalysisDataService.doesExist("PoldiMergeOutput"))
diff --git a/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/SymmetriseTest.py b/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/SymmetriseTest.py
new file mode 100644
index 0000000000000000000000000000000000000000..fb1d14c7db1218a89d54062a6e9cd754cb259986
--- /dev/null
+++ b/Code/Mantid/Framework/PythonInterface/test/python/plugins/algorithms/SymmetriseTest.py
@@ -0,0 +1,90 @@
+import unittest
+import numpy as np
+from mantid.simpleapi import *
+from mantid.api import *
+
+
+def _rayleigh(x, sigma):
+    return (x / sigma ** 2) * np.exp(-x ** 2 / (2 * sigma ** 2))
+
+
+def _generate_sample_ws(ws_name):
+    data_x = np.arange(0, 10, 0.01)
+    data_y = _rayleigh(data_x, 1)
+
+    CreateWorkspace(DataX=data_x, DataY=data_y, OutputWorkspace=ws_name)
+    ScaleX(InputWorkspace=ws_name, Factor=-1, Operation="Add", OutputWorkspace=ws_name)  # centre the peak over 0
+
+    return mtd[ws_name]
+
+
+class SymmetriseTest(unittest.TestCase):
+
+    def setUp(self):
+        self._sample_ws = _generate_sample_ws('symm_test_sample_ws')
+
+    def test_basic(self):
+        """
+        Tests a very minimal execution.
+        """
+        symm_test_out_ws = Symmetrise(Sample=self._sample_ws,
+                                      XMin=0.05, XMax=0.2)
+
+    def test_with_spectra_range(self):
+        """
+        Tests running with a given spectra range.
+        """
+        symm_test_out_ws = Symmetrise(Sample=self._sample_ws,
+                                      XMin=0.05, XMax=0.2,
+                                      SpectraRange=[1, 1])
+
+    def test_failure_xmin_out_of_range(self):
+        """
+        Tests validation on entering an XMin value lower than the smallest value in the X range.
+        """
+        self.assertRaises(RuntimeError, Symmetrise,
+                          Sample=self._sample_ws,
+                          OutputWOrkspace='__Symmetrise_TestWS',
+                          XMin=-5, XMax=0.2)
+
+    def test_failure_xmax_out_of_range(self):
+        """
+        Tests validation on entering an XMax value greater than the largest value in the X range.
+        """
+        self.assertRaises(RuntimeError, Symmetrise,
+                          Sample=self._sample_ws,
+                          OutputWOrkspace='__Symmetrise_TestWS',
+                          XMin=0.05, XMax=15)
+
+    def test_failure_invalid_x_range(self):
+        """
+        Tests validation on entering an XMax value lower then XMin.
+        """
+        self.assertRaises(RuntimeError, Symmetrise,
+                          Sample=self._sample_ws,
+                          OutputWOrkspace='__Symmetrise_TestWS',
+                          XMin=0.2, XMax=0.1)
+
+    def test_failure_spectra_range_lower(self):
+        """
+        Tests validation on entering a minimum spectra number lower then that of the workspace.
+        """
+        self.assertRaises(RuntimeError, Symmetrise,
+                          Sample=self._sample_ws,
+                          OutputWOrkspace='__Symmetrise_TestWS',
+                          XMin=0.05, XMax=0.2,
+                          SpectraRange=[0, 1])
+
+    def test_failure_spectra_range_upper(self):
+        """
+        Tests validation on entering a maximum spectra number higher then that of the workspace.
+        """
+        self.assertRaises(RuntimeError, Symmetrise,
+                          Sample=self._sample_ws,
+                          OutputWOrkspace='__Symmetrise_TestWS',
+                          XMin=0.05, XMax=0.2,
+                          SpectraRange=[1, 2])
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Code/Mantid/Framework/SINQ/inc/MantidSINQ/PoldiUtilities/PoldiInstrumentAdapter.h b/Code/Mantid/Framework/SINQ/inc/MantidSINQ/PoldiUtilities/PoldiInstrumentAdapter.h
index 61ff7e428831b28c016b7911189364399e1db0d4..b602f307e4d045c258d9ec2ecf1d350e34a25229 100644
--- a/Code/Mantid/Framework/SINQ/inc/MantidSINQ/PoldiUtilities/PoldiInstrumentAdapter.h
+++ b/Code/Mantid/Framework/SINQ/inc/MantidSINQ/PoldiUtilities/PoldiInstrumentAdapter.h
@@ -42,16 +42,11 @@ namespace Poldi
 class AbstractDoubleValueExtractor
 {
 public:
-    AbstractDoubleValueExtractor(std::string doubleValueKey) :
-        m_doubleValueKey(doubleValueKey)
-    { }
+    AbstractDoubleValueExtractor() { }
 
     virtual ~AbstractDoubleValueExtractor() { }
 
-    virtual double operator()(const API::Run &runInformation) const = 0;
-
-protected:
-    std::string m_doubleValueKey;
+    virtual double operator()(const API::Run &runInformation, const std::string &propertyName) const = 0;
 };
 
 typedef boost::shared_ptr<AbstractDoubleValueExtractor> AbstractDoubleValueExtractor_sptr;
@@ -59,26 +54,39 @@ typedef boost::shared_ptr<AbstractDoubleValueExtractor> AbstractDoubleValueExtra
 class NumberDoubleValueExtractor : public AbstractDoubleValueExtractor
 {
 public:
-    NumberDoubleValueExtractor(std::string doubleValueKey) :
-        AbstractDoubleValueExtractor(doubleValueKey)
+    NumberDoubleValueExtractor() :
+        AbstractDoubleValueExtractor()
     { }
     virtual ~NumberDoubleValueExtractor() { }
 
-    virtual double operator()(const API::Run &runInformation) const {
-        return runInformation.getPropertyValueAsType<double>(m_doubleValueKey);
+    virtual double operator()(const API::Run &runInformation, const std::string &propertyName) const {
+        return runInformation.getPropertyValueAsType<double>(propertyName);
     }
 };
 
 class VectorDoubleValueExtractor : public AbstractDoubleValueExtractor
 {
 public:
-    VectorDoubleValueExtractor(std::string doubleValueKey) :
-        AbstractDoubleValueExtractor(doubleValueKey)
+    VectorDoubleValueExtractor() :
+        AbstractDoubleValueExtractor()
     { }
     virtual ~VectorDoubleValueExtractor() { }
 
-    virtual double operator()(const API::Run &runInformation) const {
-        return runInformation.getPropertyValueAsType<std::vector<double> >(m_doubleValueKey).front();
+    virtual double operator()(const API::Run &runInformation, const std::string &propertyName) const {
+        return runInformation.getPropertyValueAsType<std::vector<double> >(propertyName).front();
+    }
+};
+
+class VectorIntValueExtractor : public AbstractDoubleValueExtractor
+{
+public:
+    VectorIntValueExtractor() :
+        AbstractDoubleValueExtractor()
+    { }
+    virtual ~VectorIntValueExtractor() { }
+
+    virtual double operator()(const API::Run &runInformation, const std::string &propertyName) const {
+        return static_cast<double>(runInformation.getPropertyValueAsType<std::vector<int> >(propertyName).front());
     }
 };
 
@@ -92,26 +100,33 @@ public:
     PoldiAbstractChopper_sptr chopper() const;
     PoldiAbstractDetector_sptr detector() const;
     PoldiSourceSpectrum_sptr spectrum() const;
-    
-    static const std::string getChopperSpeedPropertyName();
-    
+
 protected:
     PoldiInstrumentAdapter() { }
 
     void initializeFromInstrumentAndRun(const Geometry::Instrument_const_sptr &mantidInstrument, const API::Run &runInformation);
 
     void setDetector(const Geometry::Instrument_const_sptr &mantidInstrument);
+
     void setChopper(const Geometry::Instrument_const_sptr &mantidInstrument, const API::Run &runInformation);
+    double getCleanChopperSpeed(double rawChopperSpeed) const;
+    double getChopperSpeedFromRun(const API::Run &runInformation) const;
+    double getChopperSpeedTargetFromRun(const API::Run &runInformation) const;
+    bool chopperSpeedMatchesTarget(const API::Run &runInformation, double chopperSpeed) const;
+
+    double extractPropertyFromRun(const API::Run &runInformation, const std::string &propertyName) const;
+    AbstractDoubleValueExtractor_sptr getExtractorForProperty(Kernel::Property *chopperSpeedProperty) const;
+
     void setSpectrum(const Geometry::Instrument_const_sptr &mantidInstrument);
 
-    double getChopperSpeedFromRun(const API::Run &runInformation);
-    AbstractDoubleValueExtractor_sptr getExtractorForProperty(Kernel::Property *chopperSpeedProperty);
 
     PoldiAbstractChopper_sptr m_chopper;
     PoldiAbstractDetector_sptr m_detector;
     PoldiSourceSpectrum_sptr m_spectrum;
     
     static const std::string m_chopperSpeedPropertyName;
+    static const std::string m_chopperSpeedTargetPropertyName;
+
     static std::map<std::string, AbstractDoubleValueExtractor_sptr> m_extractors;
 };
 
diff --git a/Code/Mantid/Framework/SINQ/src/PoldiTruncateData.cpp b/Code/Mantid/Framework/SINQ/src/PoldiTruncateData.cpp
index ed88e0fec6a65c1e3189e75c45ef3a42a247f836..ade09e2cc463d3d40d2964836c0a6b08219473ad 100644
--- a/Code/Mantid/Framework/SINQ/src/PoldiTruncateData.cpp
+++ b/Code/Mantid/Framework/SINQ/src/PoldiTruncateData.cpp
@@ -1,5 +1,5 @@
 #include "MantidSINQ/PoldiTruncateData.h"
-#include "MantidSINQ/PoldiUtilities/PoldiChopperFactory.h"
+#include "MantidSINQ/PoldiUtilities/PoldiInstrumentAdapter.h"
 
 namespace Mantid
 {
@@ -41,25 +41,8 @@ const std::string PoldiTruncateData::summary() const { return "Truncate POLDI ti
  */
 void PoldiTruncateData::setChopperFromWorkspace(MatrixWorkspace_const_sptr workspace)
 {
-    /* This stuff will be gone once the changes from ticket #9445 have been integrated (PoldiInstrumentAdapter). */
-    double chopperSpeed = 0.0;
-
-    try {
-        chopperSpeed = workspace->run().getPropertyValueAsType<std::vector<double> >("chopperspeed").front();
-    } catch(std::invalid_argument&) {
-        throw(std::runtime_error("Chopper speed could not be extracted from Workspace '" + workspace->name() + "'. Aborting."));
-    }
-
-    // Instrument definition
-    Instrument_const_sptr poldiInstrument = workspace->getInstrument();
-
-    // Chopper configuration
-    PoldiChopperFactory chopperFactory;
-    PoldiAbstractChopper_sptr chopper(chopperFactory.createChopper(std::string("default-chopper")));
-    chopper->loadConfiguration(poldiInstrument);
-    chopper->setRotationSpeed(chopperSpeed);
-
-    setChopper(chopper);
+    PoldiInstrumentAdapter poldiInstrument(workspace);
+    setChopper(poldiInstrument.chopper());
 }
 
 /** Sets the chopper used for the calculations.
diff --git a/Code/Mantid/Framework/SINQ/src/PoldiUtilities/PoldiInstrumentAdapter.cpp b/Code/Mantid/Framework/SINQ/src/PoldiUtilities/PoldiInstrumentAdapter.cpp
index 4c824bbf53c197c598c01d317556308f38ed5e46..0eb034d896ac811479c4be36e9cc64e14a3d4751 100644
--- a/Code/Mantid/Framework/SINQ/src/PoldiUtilities/PoldiInstrumentAdapter.cpp
+++ b/Code/Mantid/Framework/SINQ/src/PoldiUtilities/PoldiInstrumentAdapter.cpp
@@ -16,11 +16,13 @@ using namespace Mantid::API;
 
 // Initializing static variables for DoubleValueExtractors
 const std::string PoldiInstrumentAdapter::m_chopperSpeedPropertyName = "chopperspeed";
+const std::string PoldiInstrumentAdapter::m_chopperSpeedTargetPropertyName = "ChopperSpeedTarget";
 
 std::map<std::string, AbstractDoubleValueExtractor_sptr> PoldiInstrumentAdapter::m_extractors =
         boost::assign::map_list_of
-        ("dbl list", boost::static_pointer_cast<AbstractDoubleValueExtractor>(boost::make_shared<VectorDoubleValueExtractor>(PoldiInstrumentAdapter::m_chopperSpeedPropertyName)))
-        ("number", boost::static_pointer_cast<AbstractDoubleValueExtractor>(boost::make_shared<NumberDoubleValueExtractor>(PoldiInstrumentAdapter::m_chopperSpeedPropertyName)));
+        ("dbl list", boost::static_pointer_cast<AbstractDoubleValueExtractor>(boost::make_shared<VectorDoubleValueExtractor>()))
+        ("int list", boost::static_pointer_cast<AbstractDoubleValueExtractor>(boost::make_shared<VectorIntValueExtractor>()))
+        ("number", boost::static_pointer_cast<AbstractDoubleValueExtractor>(boost::make_shared<NumberDoubleValueExtractor>()));
 
 /** Constructor with workspace argument
   *
@@ -48,11 +50,6 @@ PoldiInstrumentAdapter::PoldiInstrumentAdapter(const Instrument_const_sptr &mant
 PoldiInstrumentAdapter::~PoldiInstrumentAdapter()
 {
 }
-
-    const std::string PoldiInstrumentAdapter::getChopperSpeedPropertyName()
-    {
-        return PoldiInstrumentAdapter::m_chopperSpeedPropertyName;
-    }
     
 /** Returns the chopper stored in the adapter
   *
@@ -127,7 +124,12 @@ void PoldiInstrumentAdapter::setDetector(const Instrument_const_sptr &mantidInst
   */
 void PoldiInstrumentAdapter::setChopper(const Instrument_const_sptr &mantidInstrument, const Run &runInformation)
 {
-    double chopperSpeed = getChopperSpeedFromRun(runInformation);
+    double rawChopperSpeed = getChopperSpeedFromRun(runInformation);
+    double chopperSpeed = getCleanChopperSpeed(rawChopperSpeed);
+
+    if(!chopperSpeedMatchesTarget(runInformation, chopperSpeed)) {
+        throw std::invalid_argument("Chopper speed deviates from target speed.");
+    }
 
     PoldiChopperFactory chopperFactory;
     m_chopper = PoldiAbstractChopper_sptr(chopperFactory.createChopper(std::string("default-chopper")));
@@ -135,30 +137,105 @@ void PoldiInstrumentAdapter::setChopper(const Instrument_const_sptr &mantidInstr
     m_chopper->setRotationSpeed(chopperSpeed);
 }
 
+/**
+ * Returns a plausible chopper speed
+ *
+ * Sometimes the measured chopper speed is off by a few ms, which is a result of
+ * the measuring method. Since only multiples of 500 are allowed, the speed is
+ * rounded to the next multiple of 500.
+ *
+ * @param rawChopperSpeed :: Raw chopper rotation speed as found in the HDF-file
+ * @return Next multiple of 500.
+ */
+double PoldiInstrumentAdapter::getCleanChopperSpeed(double rawChopperSpeed) const
+{
+    return floor((rawChopperSpeed + 250.0) / 500.0) * 500.0;
+}
+
 /**
  * Extracts the chopper speed from run information
  *
- * This method tries to extract the chopper rotation speed from the run information, using
- * an appropriate functor of type AbstractDoubleValueExtractor.
+ * This method tries to extract the chopper rotation speed from the run information,
+ * using extractPropertyFromRun with the correct property name.
  *
- * @param runInformation :: Run information that contains a "chopperspeed" property
+ * @param runInformation :: Run information that contains a property with the chopper speed.
  * @return Chopper speed as stored in run information
  */
-double PoldiInstrumentAdapter::getChopperSpeedFromRun(const Run &runInformation)
+double PoldiInstrumentAdapter::getChopperSpeedFromRun(const Run &runInformation) const
+{
+    return extractPropertyFromRun(runInformation, m_chopperSpeedPropertyName);
+}
+
+/**
+ * Extracts the target chopper speed from run information
+ *
+ * Tries to extract the target chopper speed from run information.
+ *
+ * @param runInformation :: Run information that contains a property with the target chopper speed.
+ * @return Target chopper speed as stored in run information
+ */
+double PoldiInstrumentAdapter::getChopperSpeedTargetFromRun(const Run &runInformation) const
+{
+    return extractPropertyFromRun(runInformation, m_chopperSpeedTargetPropertyName);
+}
+
+/**
+ * Checks if the chopper speed matches the target value
+ *
+ * If runInformation contains the chopper target speed, this method checks whether the actural speed
+ * agrees with the target.
+ *
+ * If the information is not present, it's most likely an older data file, where this information
+ * is not available. In this case it is not possible to compare anything, so the function returns
+ * true for any value of chopperSpeed.
+ *
+ * @param runInformation :: Run information that may or may not contain information about chopper target speed.
+ * @param chopperSpeed :: Chopper speed, "cleaned" by PoldiInstrumentAdapter::getCleanChopperSpeed.
+ * @return True if speed matches target or information is absent, false otherwise.
+ */
+bool PoldiInstrumentAdapter::chopperSpeedMatchesTarget(const Run &runInformation, double chopperSpeed) const
+{
+    try {
+        double targetChopperSpeed = getChopperSpeedTargetFromRun(runInformation);
+
+        if(fabs(targetChopperSpeed - chopperSpeed) > 1e-4) {
+            return false;
+        }
+
+        return true;
+    } catch(std::runtime_error) {
+        // Old data files don't have information on target chopper speed. Do nothing.
+        return true;
+    }
+}
+
+/**
+ * Extracts a property from run information
+ *
+ * This method extracts the property with the supplied name from the run information,
+ * using the appropriate AbstractDoubleValueExtractor. If the property is not found,
+ * an std::runtime_error exception is thrown. If there is no extractor for the requested
+ * data type, an std::invalid_argument exception is thrown.
+ *
+ * @param runInformation :: Run information that cotains the property with propertyName
+ * @param propertyName :: Property name that should be extracted
+ * @return Value of property as double
+ */
+double PoldiInstrumentAdapter::extractPropertyFromRun(const Run &runInformation, const std::string &propertyName) const
 {
-    if(!runInformation.hasProperty(m_chopperSpeedPropertyName)) {
-        throw std::runtime_error("Cannot construct instrument without " + m_chopperSpeedPropertyName + "property in log. Aborting.");
+    if(!runInformation.hasProperty(propertyName)) {
+        throw std::runtime_error("Cannot construct instrument without " + propertyName + "-property in log. Aborting.");
     }
 
-    Kernel::Property *chopperSpeedProperty = runInformation.getProperty(m_chopperSpeedPropertyName);
+    Kernel::Property *property = runInformation.getProperty(propertyName);
 
-    AbstractDoubleValueExtractor_sptr extractor = getExtractorForProperty(chopperSpeedProperty);
+    AbstractDoubleValueExtractor_sptr extractor = getExtractorForProperty(property);
 
     if(!extractor) {
         throw std::invalid_argument("Cannot extract chopper speed from run information.");
     }
 
-    return (*extractor)(runInformation);
+    return (*extractor)(runInformation, propertyName);
 }
 
 /**
@@ -170,7 +247,7 @@ double PoldiInstrumentAdapter::getChopperSpeedFromRun(const Run &runInformation)
  * @param chopperSpeedProperty :: Property containing the chopper speed
  * @return Functor of type AbstractDoubleValueExtractor
  */
-AbstractDoubleValueExtractor_sptr PoldiInstrumentAdapter::getExtractorForProperty(Kernel::Property *chopperSpeedProperty)
+AbstractDoubleValueExtractor_sptr PoldiInstrumentAdapter::getExtractorForProperty(Kernel::Property *chopperSpeedProperty) const
 {
     if(!chopperSpeedProperty) {
         throw std::invalid_argument("Cannot process null-Property.");
diff --git a/Code/Mantid/Framework/SINQ/test/PoldiInstrumentAdapterTest.h b/Code/Mantid/Framework/SINQ/test/PoldiInstrumentAdapterTest.h
index 60b8fdca1358d3b19b2ce6f06a23d8cb0db465b1..1f3201986a834b15405e6360f7d8c40fe447eab7 100644
--- a/Code/Mantid/Framework/SINQ/test/PoldiInstrumentAdapterTest.h
+++ b/Code/Mantid/Framework/SINQ/test/PoldiInstrumentAdapterTest.h
@@ -25,58 +25,124 @@ public:
 
     PoldiInstrumentAdapterTest()
     {
+        // Replace static member variables for property names by class members
+        m_testableChopperSpeedPropertyName = "ChopperSpeed";
+        m_testableChopperSpeedTargetPropertyName = "ChopperSpeedTarget";
+
         // special properties for testing AbstractDoubleValueExtractor
         m_run.addProperty<double>("chopperspeed_double", 10000.0);
 
         std::vector<double> chopperSpeed(1, 10000.0);
         m_run.addProperty<std::vector<double> >("chopperspeed_vector", chopperSpeed);
 
+        std::vector<int> chopperSpeedTargetsInt(1, 10000);
+        m_run.addProperty<std::vector<int> >("chopperspeed_target_int_vector", chopperSpeedTargetsInt);
+
         // add string property, for which there is no extractor
-        m_stringRun.addProperty<std::string>(PoldiInstrumentAdapter::getChopperSpeedPropertyName(), "10000.0");
+        m_stringRun.addProperty<std::string>(getChopperSpeedPropertyName(), "10000.0");
+        m_stringRun.addProperty<std::string>(getChopperSpeedTargetPropertyName(), "10000.0");
+
 
         // run with correct chopperspeed property
-        m_correctRun.addProperty<double>(PoldiInstrumentAdapter::getChopperSpeedPropertyName(), 10000.0);
+        m_correctRun.addProperty<double>(getChopperSpeedPropertyName(), 10000.0);
+        m_correctRun.addProperty<double>(getChopperSpeedTargetPropertyName(), 10000.0);
     }
 
     void testVectorDoubleValueExtractor()
     {
         // Extract vector value with vector value extractor - this should work.
-        AbstractDoubleValueExtractor_sptr extractorGood(new VectorDoubleValueExtractor("chopperspeed_vector"));
-        TS_ASSERT_THROWS_NOTHING((*extractorGood)(const_cast<const Run &>(m_run)));
+        AbstractDoubleValueExtractor_sptr extractorGood(new VectorDoubleValueExtractor);
+        TS_ASSERT_THROWS_NOTHING((*extractorGood)(const_cast<const Run &>(m_run), "chopperspeed_vector"));
+
+        // this should not work, because it's a "number" property (see constructor above)
+        AbstractDoubleValueExtractor_sptr extractorBad(new VectorDoubleValueExtractor);
+        TS_ASSERT_THROWS((*extractorBad)(const_cast<const Run &>(m_run), "chopperspeed_double"), std::invalid_argument);
+
+        // check that the value comes out correctly
+        TS_ASSERT_EQUALS((*extractorGood)(const_cast<const Run &>(m_run), "chopperspeed_vector"), 10000.0);
+    }
+
+    void testVectorIntValueExtractor()
+    {
+        // Extract vector value with vector value extractor - this should work.
+        AbstractDoubleValueExtractor_sptr extractorGood(new VectorIntValueExtractor);
+        TS_ASSERT_THROWS_NOTHING((*extractorGood)(const_cast<const Run &>(m_run), "chopperspeed_target_int_vector"));
 
         // this should not work, because it's a "number" property (see constructor above)
-        AbstractDoubleValueExtractor_sptr extractorBad(new VectorDoubleValueExtractor("chopperspeed_double"));
-        TS_ASSERT_THROWS((*extractorBad)(const_cast<const Run &>(m_run)), std::invalid_argument);
+        AbstractDoubleValueExtractor_sptr extractorBad(new VectorDoubleValueExtractor);
+        TS_ASSERT_THROWS((*extractorBad)(const_cast<const Run &>(m_run), "chopperspeed_double"), std::invalid_argument);
 
         // check that the value comes out correctly
-        TS_ASSERT_EQUALS((*extractorGood)(const_cast<const Run &>(m_run)), 10000.0);
+        TS_ASSERT_EQUALS((*extractorGood)(const_cast<const Run &>(m_run), "chopperspeed_target_int_vector"), 10000.0);
     }
 
     void testNumberDoubleValueExtractor()
     {
         // Same as above test
-        AbstractDoubleValueExtractor_sptr extractorGood(new NumberDoubleValueExtractor("chopperspeed_double"));
-        TS_ASSERT_THROWS_NOTHING((*extractorGood)(const_cast<const Run &>(m_run)));
+        AbstractDoubleValueExtractor_sptr extractorGood(new NumberDoubleValueExtractor);
+        TS_ASSERT_THROWS_NOTHING((*extractorGood)(const_cast<const Run &>(m_run), "chopperspeed_double"));
 
-        AbstractDoubleValueExtractor_sptr extractorBad(new NumberDoubleValueExtractor("chopperspeed_vector"));
-        TS_ASSERT_THROWS((*extractorBad)(const_cast<const Run &>(m_run)), std::invalid_argument);
+        AbstractDoubleValueExtractor_sptr extractorBad(new NumberDoubleValueExtractor);
+        TS_ASSERT_THROWS((*extractorBad)(const_cast<const Run &>(m_run), "chopperspeed_vector"), std::invalid_argument);
 
         // check that the value comes out correctly
-        TS_ASSERT_EQUALS((*extractorGood)(const_cast<const Run &>(m_run)), 10000.0);
+        TS_ASSERT_EQUALS((*extractorGood)(const_cast<const Run &>(m_run), "chopperspeed_double"), 10000.0);
     }
 
     void testGetChopperSpeedFromRun() {
         TestablePoldiInstrumentAdapter instrumentAdapter;
 
+        TS_ASSERT_EQUALS(instrumentAdapter.getChopperSpeedFromRun(m_correctRun), 10000.0);
+    }
+
+    void testGetChopperSpeedTargetFromRun()
+    {
+        TestablePoldiInstrumentAdapter instrumentAdapter;
+
+        TS_ASSERT_EQUALS(instrumentAdapter.getChopperSpeedTargetFromRun(m_correctRun), 10000.0);
+    }
+
+    void testExtractPropertyFromRun() {
+        TestablePoldiInstrumentAdapter instrumentAdapter;
+
         // Throws, because "chopperspeed" is missing
-        TS_ASSERT_THROWS(instrumentAdapter.getChopperSpeedFromRun(m_run), std::runtime_error);
+        TS_ASSERT_THROWS(instrumentAdapter.extractPropertyFromRun(m_run, "DOESNOTEXIST"), std::runtime_error);
 
         // Throws, because there is no extractor for supplied type
-        TS_ASSERT_THROWS(instrumentAdapter.getChopperSpeedFromRun(m_stringRun), std::invalid_argument);
+        const std::string propertyName = getChopperSpeedPropertyName();
+        TS_ASSERT_THROWS(instrumentAdapter.extractPropertyFromRun(m_stringRun, propertyName), std::invalid_argument);
 
         // Should be ok.
-        TS_ASSERT_THROWS_NOTHING(instrumentAdapter.getChopperSpeedFromRun(m_correctRun));
-        TS_ASSERT_EQUALS(instrumentAdapter.getChopperSpeedFromRun(m_correctRun), 10000.0);
+        TS_ASSERT_THROWS_NOTHING(instrumentAdapter.extractPropertyFromRun(m_correctRun, propertyName));
+        TS_ASSERT_EQUALS(instrumentAdapter.extractPropertyFromRun(m_correctRun, propertyName), 10000.0);
+    }
+
+    void testChopperSpeedMatchesTarget() {
+        TestablePoldiInstrumentAdapter instrumentAdapter;
+
+        // This throws, because there is no extractor and the exception is not caught in the method
+        TS_ASSERT_THROWS(instrumentAdapter.chopperSpeedMatchesTarget(m_stringRun, 10000.0), std::invalid_argument);
+
+        // If the property is not present, it is an old file and there can't be any comparison, so it's always true
+        TS_ASSERT_THROWS_NOTHING(instrumentAdapter.chopperSpeedMatchesTarget(m_run, 10000.0));
+        TS_ASSERT_EQUALS(instrumentAdapter.chopperSpeedMatchesTarget(m_run, 10000.0), true);
+        TS_ASSERT_EQUALS(instrumentAdapter.chopperSpeedMatchesTarget(m_run, 100.0), true);
+
+        // Otherwise, the values are compared with a tolerance of 1e-4
+        TS_ASSERT_EQUALS(instrumentAdapter.chopperSpeedMatchesTarget(m_correctRun, 10000.0), true);
+        TS_ASSERT_EQUALS(instrumentAdapter.chopperSpeedMatchesTarget(m_correctRun, 10000.00009), true);
+        TS_ASSERT_EQUALS(instrumentAdapter.chopperSpeedMatchesTarget(m_correctRun, 10000.0002), false);
+        TS_ASSERT_EQUALS(instrumentAdapter.chopperSpeedMatchesTarget(m_correctRun, 9000.0), false);
+    }
+
+    void testGetCleanChopperSpeed() {
+        TestablePoldiInstrumentAdapter instrumentAdapter;
+
+        TS_ASSERT_EQUALS(instrumentAdapter.getCleanChopperSpeed(4750.0), 5000.0);
+        TS_ASSERT_EQUALS(instrumentAdapter.getCleanChopperSpeed(4749.9), 4500.0);
+        TS_ASSERT_EQUALS(instrumentAdapter.getCleanChopperSpeed(4999.3), 5000.0);
+        TS_ASSERT_EQUALS(instrumentAdapter.getCleanChopperSpeed(5001.0), 5000.0);
+        TS_ASSERT_EQUALS(instrumentAdapter.getCleanChopperSpeed(12499.1), 12500.0);
     }
 
     void testGetExtractorForProperty() {
@@ -101,7 +167,7 @@ public:
         TS_ASSERT(!boost::dynamic_pointer_cast<NumberDoubleValueExtractor>(extractor));
 
         // unregistered property type - invalid extractor
-        extractor = instrumentAdapter.getExtractorForProperty(m_stringRun.getProperty(PoldiInstrumentAdapter::getChopperSpeedPropertyName()));
+        extractor = instrumentAdapter.getExtractorForProperty(m_stringRun.getProperty(getChopperSpeedPropertyName()));
         TS_ASSERT(!extractor);
     }
 
@@ -114,6 +180,20 @@ private:
     Run m_correctRun;
     Run m_stringRun;
 
+    std::string m_testableChopperSpeedPropertyName;
+    std::string m_testableChopperSpeedTargetPropertyName;
+
+
+    std::string getChopperSpeedPropertyName()
+    {
+        return m_testableChopperSpeedPropertyName;
+    }
+
+    std::string getChopperSpeedTargetPropertyName()
+    {
+        return m_testableChopperSpeedTargetPropertyName;
+    }
+
     class TestablePoldiInstrumentAdapter : public PoldiInstrumentAdapter
     {
         friend class PoldiInstrumentAdapterTest;
diff --git a/Code/Mantid/Framework/ScriptRepository/CMakeLists.txt b/Code/Mantid/Framework/ScriptRepository/CMakeLists.txt
index b60601fb48437c792a7c485c05489ac00d2211f6..5435dd1cb9bbb91e7d47bb2908a27135810a230d 100644
--- a/Code/Mantid/Framework/ScriptRepository/CMakeLists.txt
+++ b/Code/Mantid/Framework/ScriptRepository/CMakeLists.txt
@@ -1,15 +1,15 @@
 # Mantid source
-set ( SRC_FILES 
-  src/ScriptRepositoryImpl.cpp
+set ( SRC_FILES
+	src/ScriptRepositoryImpl.cpp
 )
 
-set ( INC_FILES inc/MantidScriptRepository/ScriptRepositoryImpl.h
+set ( INC_FILES
+	inc/MantidScriptRepository/ScriptRepositoryImpl.h
 )
 
-#
 set ( TEST_FILES
-	ScriptRepositoryTestImpl.h)
-#        ScriptRepositoryFactoryTest.h)
+	ScriptRepositoryTestImpl.h
+)
 
 
 # Add the target for this directory
@@ -22,10 +22,10 @@ set_target_properties ( ScriptRepository PROPERTIES OUTPUT_NAME MantidScriptRepo
 
 set_property (TARGET ScriptRepository PROPERTY FOLDER "MantidFramework")
 
-include_directories(inc)
 set ( LIBS ${MANTIDLIBS} )
+
+include_directories(inc)
+
 target_link_libraries(ScriptRepository ${LIBS})
-if ( MSVC )
-target_link_libraries(ScriptRepository Winhttp)
-endif()
+
 install (TARGETS ScriptRepository ${SYSTEM_PACKAGE_TARGET} DESTINATION ${PLUGINS_DIR} )
diff --git a/Code/Mantid/Framework/ScriptRepository/src/ScriptRepositoryImpl.cpp b/Code/Mantid/Framework/ScriptRepository/src/ScriptRepositoryImpl.cpp
index d4ae114396e2f8fd0429fdc7daec7e557acfbf5d..94e44bbca25b8c4b122baab8da78d4a9701a34f6 100644
--- a/Code/Mantid/Framework/ScriptRepository/src/ScriptRepositoryImpl.cpp
+++ b/Code/Mantid/Framework/ScriptRepository/src/ScriptRepositoryImpl.cpp
@@ -3,11 +3,15 @@
 #include "MantidAPI/ScriptRepositoryFactory.h"
 #include "MantidKernel/Logger.h"
 #include "MantidKernel/ConfigService.h"
+#include "MantidKernel/NetworkProxy.h"
+#include "MantidKernel/ProxyInfo.h"
 #include <utility>
 using Mantid::Kernel::DateAndTime;
 using Mantid::Kernel::Logger;
 using Mantid::Kernel::ConfigService;
-using Mantid::Kernel::ConfigServiceImpl; 
+using Mantid::Kernel::ConfigServiceImpl;
+using Mantid::Kernel::ProxyInfo;
+using Mantid::Kernel::NetworkProxy;
 
 // from poco
 #include <Poco/Path.h>
@@ -22,8 +26,7 @@ using Mantid::Kernel::ConfigServiceImpl;
 #include <Poco/Net/HTMLForm.h>
 #include "Poco/Net/FilePartSource.h"
 
-
-// Visual Studion compains with the inclusion of Poco/FileStream
+// Visual Studio complains with the inclusion of Poco/FileStream
 // disabling this warning.
 #if defined(_WIN32) || defined(_WIN64)
 #pragma warning( push )
@@ -54,38 +57,40 @@ using boost::property_tree::ptree;
 
 namespace Mantid
 {
-namespace API
-{
-  namespace
+  namespace API
   {
-    /// static logger
-    Kernel::Logger g_log("ScriptRepositoryImpl");
-  }
+    namespace
+    {
+      /// static logger
+      Kernel::Logger g_log("ScriptRepositoryImpl");
+    }
 
+    static ScriptRepoException pocoException(const std::string & info, Poco::Exception & ex)
+    {
+      std::stringstream ss;
+      if (dynamic_cast<Poco::FileAccessDeniedException*>(&ex))
+        ss << info << ", because you do not have access to write to this path :" << ex.message()
+            << std::ends;
+      else if (dynamic_cast<Poco::Net::HostNotFoundException*>(&ex))
+        ss << info
+            << ". The definition of the remote url is not correct. Please check the Mantid settings, the ScriptRepository entry. Current: "
+            << ex.message() << std::ends;
+      else
+      {
+        ss << info << " . Unknown:" << ex.displayText() << std::ends;
+      }
 
-  static ScriptRepoException pocoException(const std::string & info, 
-                                           Poco::Exception & ex){
-    std::stringstream ss;     
-    if (dynamic_cast<Poco::FileAccessDeniedException*>(&ex))
-      ss << info << ", because you do not have access to write to this path :"<< ex.message() << std::ends;     
-    else if (dynamic_cast<Poco::Net::HostNotFoundException*>(&ex))
-      ss << info << ". The definition of the remote url is not correct. Please check the Mantid settings, the ScriptRepository entry. Current: " << ex.message() << std::ends;
-    else{
-      ss << info << " . Unkown:" << ex.displayText() <<std::ends; 
+      return ScriptRepoException(ss.str(), ex.displayText());
     }
-      
-    return ScriptRepoException(ss.str(), ex.displayText()); 
-  }
-
-  const char * timeformat = "%Y-%b-%d %H:%M:%S"; 
 
-  const char * emptyURL = "The initialization failed because no URL was given that points "
-    "to the central repository.\nThis entry should be defined at the properties file, "
-    "at ScriptRepository";
+    const char * timeformat = "%Y-%b-%d %H:%M:%S";
 
+    const char * emptyURL = "The initialization failed because no URL was given that points "
+        "to the central repository.\nThis entry should be defined at the properties file, "
+        "at ScriptRepository";
 
-  DECLARE_SCRIPTREPOSITORY(ScriptRepositoryImpl)
-  /**
+    DECLARE_SCRIPTREPOSITORY(ScriptRepositoryImpl)
+    /**
      The main information that ScriptrepositoryImpl needs to be able 
      to operate are where the local repository is (or will be), and
      the url for the mantid web server. 
@@ -111,416 +116,446 @@ namespace API
      ScriptrepositoryImpl sharing("/tmp/gitrep", 
      "http://repository.mantidproject.com");      
      @endcode
-  */
-  ScriptRepositoryImpl::ScriptRepositoryImpl(const std::string & local_rep, 
-                                         const std::string & remote) :
-    valid(false)
-  {    
-    // get the local path and the remote path
-    std::string loc, rem; 
-    ConfigServiceImpl & config = ConfigService::Instance();
-    remote_upload = config.getString("UploaderWebServer"); 
-    if (local_rep.empty() || remote.empty()){
-      loc = config.getString("ScriptLocalRepository"); 
-      rem = config.getString("ScriptRepository");      
-    }else{
-      local_repository = local_rep; 
-      remote_url = remote; 
-    }
-    // the parameters given from the constructor have precedence
-    if (local_rep.empty())
-      local_repository = loc; 
-    else
-      local_repository = local_rep; 
-
-    if (remote.empty())
-      remote_url = rem; 
-    else
-      remote_url = remote;
-
-
-    // empty remote url is not allowed
-    if (remote_url.empty()){
-      g_log.error() << emptyURL<<std::endl; 
-      throw ScriptRepoException(emptyURL,"Constructor Failed: remote_url.empty");
-    }
+     */
+    ScriptRepositoryImpl::ScriptRepositoryImpl(const std::string & local_rep, const std::string & remote) :
+        valid(false)
+    {
+      // get the local path and the remote path
+      std::string loc, rem;
+      ConfigServiceImpl & config = ConfigService::Instance();
+      remote_upload = config.getString("UploaderWebServer");
+      if (local_rep.empty() || remote.empty())
+      {
+        loc = config.getString("ScriptLocalRepository");
+        rem = config.getString("ScriptRepository");
+      }
+      else
+      {
+        local_repository = local_rep;
+        remote_url = remote;
+      }
+      // the parameters given from the constructor have precedence
+      if (local_rep.empty())
+        local_repository = loc;
+      else
+        local_repository = local_rep;
 
-    if (remote_url[remote_url.size()-1] != '/')
-      remote_url.append("/");
+      if (remote.empty())
+        remote_url = rem;
+      else
+        remote_url = remote;
 
-    // if no folder is given, the repository is invalid.
-    if (local_repository.empty())
-      return;
-    
-    if (local_repository[local_repository.size()-1] != '/')
-      local_repository.append("/");
+      // empty remote url is not allowed
+      if (remote_url.empty())
+      {
+        g_log.error() << emptyURL << std::endl;
+        throw ScriptRepoException(emptyURL, "Constructor Failed: remote_url.empty");
+      }
 
+      if (remote_url[remote_url.size() - 1] != '/')
+        remote_url.append("/");
 
-    g_log.debug() << "ScriptRepository creation pointing to " 
-                  << local_repository << " and " << remote_url << "\n";
+      // if no folder is given, the repository is invalid.
+      if (local_repository.empty())
+        return;
 
+      if (local_repository[local_repository.size() - 1] != '/')
+        local_repository.append("/");
 
-    
-    // check if the repository is valid.
+      g_log.debug() << "ScriptRepository creation pointing to " << local_repository << " and "
+          << remote_url << "\n";
 
-    // parsing the ignore pattern
-    std::string ignore = ignorePatterns(); 
-    boost::replace_all(ignore,"/","\\/");
-    boost::replace_all(ignore,";","|");
-    boost::replace_all(ignore,".","\\.");
-    boost::replace_all(ignore,"*",".*");
-    ignoreregex = std::string("(").append(ignore).append(")");  
+      // check if the repository is valid.
 
+      // parsing the ignore pattern
+      std::string ignore = ignorePatterns();
+      boost::replace_all(ignore, "/", "\\/");
+      boost::replace_all(ignore, ";", "|");
+      boost::replace_all(ignore, ".", "\\.");
+      boost::replace_all(ignore, "*", ".*");
+      ignoreregex = std::string("(").append(ignore).append(")");
 
-    // A valid repository must pass 3 tests:
-    //  - An existing folder
-    //  - This folder must have the .repository.json file
-    //  - This folder must have the .local.json file
-    // These tests will be done with Poco library
+      // A valid repository must pass 3 tests:
+      //  - An existing folder
+      //  - This folder must have the .repository.json file
+      //  - This folder must have the .local.json file
+      // These tests will be done with Poco library
 
-      
-    Poco::Path local(local_repository); 
-    
-    std::string aux_local_rep;
-    if (local.isRelative()){
-      aux_local_rep = std::string(Poco::Path::current()).append(local_repository);
-      local_repository = aux_local_rep;
-    }
+      Poco::Path local(local_repository);
 
-    
-    try{// tests 1 and 2
+      std::string aux_local_rep;
+      if (local.isRelative())
       {
-        Poco::File local_rep_dir(local);
-        std::string repository_json = std::string(local_repository).append(".repository.json");
-        Poco::File rep_json(repository_json);
-        if (!local_rep_dir.exists() || !rep_json.exists()){
-          g_log.information() << "ScriptRepository was not installed at " << local_repository << std::endl; 
-          return; // this is an invalid repository, because it was not created (installed)
-        }
+        aux_local_rep = std::string(Poco::Path::current()).append(local_repository);
+        local_repository = aux_local_rep;
       }
-      // third test
-      {
-        std::string repository_json = std::string(local_repository).append(".local.json");
-        Poco::File rep_json(repository_json);      
-        if (!rep_json.exists()){
-          g_log.error() << "Corrupted ScriptRepository at "<< local_repository 
-                        << ". Please, remove this folder, and install ScriptRepository again" 
-                        << std::endl;
-          
+
+      try
+      {    // tests 1 and 2
+        {
+          Poco::File local_rep_dir(local);
+          std::string repository_json = std::string(local_repository).append(".repository.json");
+          Poco::File rep_json(repository_json);
+          if (!local_rep_dir.exists() || !rep_json.exists())
+          {
+            g_log.information() << "ScriptRepository was not installed at " << local_repository
+                << std::endl;
+            return; // this is an invalid repository, because it was not created (installed)
+          }
+        }
+        // third test
+        {
+          std::string repository_json = std::string(local_repository).append(".local.json");
+          Poco::File rep_json(repository_json);
+          if (!rep_json.exists())
+          {
+            g_log.error() << "Corrupted ScriptRepository at " << local_repository
+                << ". Please, remove this folder, and install ScriptRepository again" << std::endl;
+
+          }
         }
+      } catch (Poco::FileNotFoundException & /*ex*/)
+      {
+        g_log.error() << "Testing the existence of repository.json and local.json failed" << std::endl;
+        return;
       }
-    }catch(Poco::FileNotFoundException & /*ex*/){
-      g_log.error() << "Testing the existence of repository.json and local.json failed"<<std::endl; 
-      return;
+
+      // this is necessary because in windows, the absolute path is given with \ slash.
+      boost::replace_all(local_repository, "\\", "/");
+      if (local_repository[local_repository.size() - 1] != '/')
+        local_repository.append("/");
+
+      repo.clear();
+      valid = true;
     }
 
-    // this is necessary because in windows, the absolute path is given with \ slash.
-    boost::replace_all(local_repository,"\\","/");
-    if (local_repository[local_repository.size()-1] != '/')
-      local_repository.append("/");
+    ScriptRepositoryImpl::~ScriptRepositoryImpl() throw ()
+    {
 
-    repo.clear();
-    valid = true;
-  }
+    }
 
+    /**
+     Check the connection with the server through the ::doDownloadFile method.
+     @path server : The url that will be used to connect.
+     */
+    void ScriptRepositoryImpl::connect(const std::string & server)
+    {
+      doDownloadFile(server);
+    }
 
-  ScriptRepositoryImpl::~ScriptRepositoryImpl() throw() {
+    /** Implements the ScriptRepository::install method.
 
-  }
+     The instalation consists of:
 
+     - creation of the folder for the ScriptRepository (if it does not exists).
+     - download of the repository.json file (Make it hidden)
+     - creation of the local.json file. (Make if hidden)
 
-  /**
-     Check the connection with the server through the ::doDownloadFile method.
-     @path server : The url that will be used to connect.
-   */
-  void ScriptRepositoryImpl::connect(const std::string & server){
-    doDownloadFile(server);
-  }
+     The installation will also upate the ScriptLocalRepository setting, if necessary,
+     to match the given path.
 
-  /** Implements the ScriptRepository::install method. 
-      
-      The instalation consists of: 
-      
-        - creation of the folder for the ScriptRepository (if it does not exists).
-        - download of the repository.json file (Make it hidden)
-        - creation of the local.json file. (Make if hidden)
-        
-      The installation will also upate the ScriptLocalRepository setting, if necessary,
-      to match the given path. 
-        
-      If it success, it will change the status of the ScriptRepository as valid.
-      
-      @note Any directory may be given, from existing directories a new directory. 
-      If an existing directory is given, the installation will install the two necessary 
-      files to deal with this folder as a ScriptRepository.
-      
-
-      @param path : Path for a folder inside the local machine.
-      
-      
-   */
-  void ScriptRepositoryImpl::install(const std::string &  path){
-    using Poco::DirectoryIterator;
-    if (remote_url.empty())
+     If it success, it will change the status of the ScriptRepository as valid.
+
+     @note Any directory may be given, from existing directories a new directory.
+     If an existing directory is given, the installation will install the two necessary
+     files to deal with this folder as a ScriptRepository.
+
+
+     @param path : Path for a folder inside the local machine.
+
+
+     */
+    void ScriptRepositoryImpl::install(const std::string & path)
+    {
+      using Poco::DirectoryIterator;
+      if (remote_url.empty())
       {
-        std::stringstream ss; 
+        std::stringstream ss;
         ss << "ScriptRepository is configured to download from a invalid URL (empty URL)."
-           << "\nThis URL comes from the property file and it is called ScriptRepository.";     
+            << "\nThis URL comes from the property file and it is called ScriptRepository.";
         throw ScriptRepoException(ss.str());
       }
-    std::string folder = std::string(path); 
-    Poco::File repository_folder(folder); 
-    std::string rep_json_file = std::string(path).append("/.repository.json");
-    std::string local_json_file  = std::string(path).append("/.local.json");
-    if (!repository_folder.exists()){
-      repository_folder.createDirectories();
-    }
-      
-    // install the two files inside the given folder
-    g_log.debug() << "ScriptRepository attempt to doDownload file " << path << std::endl;
-    // download the repository json
-    doDownloadFile(std::string(remote_url).append("repository.json"),
-                   rep_json_file);
-    g_log.debug() << "ScriptRepository downloaded repository information" << std::endl; 
-    // creation of the instance of local_json file
-    Poco::File local(local_json_file); 
-    if (!local.exists()){
-      ptree pt; 
-      write_json(local_json_file,pt); 
-      g_log.debug() << "ScriptRepository created the local repository information"
-                    <<std::endl; 
-    }
-    
-    #if defined(_WIN32) ||  defined(_WIN64)
-    //set the .repository.json and .local.json hidden
-    SetFileAttributes( local_json_file.c_str(), FILE_ATTRIBUTE_HIDDEN); 
-    SetFileAttributes (rep_json_file.c_str(), FILE_ATTRIBUTE_HIDDEN);
-    #endif
-    
-    // save the path to the config service
-    //
-    ConfigServiceImpl & config = ConfigService::Instance();
-    std::string loc = config.getString("ScriptLocalRepository"); 
-    if (loc != path){
-      config.setString("ScriptLocalRepository", path); 
-      config.saveConfig(config.getUserFilename()); 
-    }
+      std::string folder = std::string(path);
+      Poco::File repository_folder(folder);
+      std::string rep_json_file = std::string(path).append("/.repository.json");
+      std::string local_json_file = std::string(path).append("/.local.json");
+      if (!repository_folder.exists())
+      {
+        repository_folder.createDirectories();
+      }
 
-    local_repository = path;
-    // this is necessary because in windows, the absolute path is given with \ slash.
-    boost::replace_all(local_repository,"\\","/");
-    if (local_repository[local_repository.size()-1] != '/')
-      local_repository.append("/");
+      // install the two files inside the given folder
+      g_log.debug() << "ScriptRepository attempt to doDownload file " << path << std::endl;
+      // download the repository json
+      doDownloadFile(std::string(remote_url).append("repository.json"), rep_json_file);
+      g_log.debug() << "ScriptRepository downloaded repository information" << std::endl;
+      // creation of the instance of local_json file
+      Poco::File local(local_json_file);
+      if (!local.exists())
+      {
+        ptree pt;
+        write_json(local_json_file, pt);
+        g_log.debug() << "ScriptRepository created the local repository information" << std::endl;
+      }
 
-    valid = true;
-  }
+#if defined(_WIN32) ||  defined(_WIN64)
+      //set the .repository.json and .local.json hidden
+      SetFileAttributes( local_json_file.c_str(), FILE_ATTRIBUTE_HIDDEN);
+      SetFileAttributes (rep_json_file.c_str(), FILE_ATTRIBUTE_HIDDEN);
+#endif
+
+      // save the path to the config service
+      //
+      ConfigServiceImpl & config = ConfigService::Instance();
+      std::string loc = config.getString("ScriptLocalRepository");
+      if (loc != path)
+      {
+        config.setString("ScriptLocalRepository", path);
+        config.saveConfig(config.getUserFilename());
+      }
+
+      local_repository = path;
+      // this is necessary because in windows, the absolute path is given with \ slash.
+      boost::replace_all(local_repository, "\\", "/");
+      if (local_repository[local_repository.size() - 1] != '/')
+        local_repository.append("/");
 
-  void ScriptRepositoryImpl::ensureValidRepository(){
-    if (!isValid()){
-      std::stringstream ss; 
-      ss << "ScriptRepository is not installed correctly. The current path for ScriptRepository is " 
-         << local_repository << " but some important files that are required are corrupted or not present."
-         << "\nPlease, re-install the ScriptRepository!\n"
-         << "Hint: if you have a proper installation in other path, check the property ScriptLocalRepository "
-         << "at the Mantid.user.properties and correct it if necessary."; 
-      throw ScriptRepoException(ss.str(),"CORRUPTED"); 
+      valid = true;
     }
-  }
 
-  /** Implements ScriptRepository::info
-
-      For each entry inside the repository, there are some usefull information, that are stored in 
-      a ::ScriptInfo struct. 
-      
-      Use this method, to get information about the description, last modified date, the auto update
-      flag and the author. 
-      
-      @param input_path: The path (relative or absolute) to the file/folder entry,
-      
-      @return ScriptInfo with the information of this file/folder.
-
-      @note: This method requires that ::listFiles was executed at least once.
-
-  */
-  ScriptInfo ScriptRepositoryImpl::info(const std::string & input_path) {
-    ensureValidRepository();
-    std::string path = convertPath(input_path);
-    ScriptInfo info; 
-    try{
-      RepositoryEntry & entry = repo.at(path); 
-      info.author = entry.author; 
-      info.pub_date = entry.pub_date;
-      info.auto_update = entry.auto_update;
-      info.directory = entry.directory; 
-    }catch(const std::out_of_range & ex){
-      std::stringstream ss; 
-      ss << "The file \""<< input_path << "\" was not found inside the repository!";            
-      throw ScriptRepoException(ss.str(), ex.what()); 
+    void ScriptRepositoryImpl::ensureValidRepository()
+    {
+      if (!isValid())
+      {
+        std::stringstream ss;
+        ss << "ScriptRepository is not installed correctly. The current path for ScriptRepository is "
+            << local_repository
+            << " but some important files that are required are corrupted or not present."
+            << "\nPlease, re-install the ScriptRepository!\n"
+            << "Hint: if you have a proper installation in other path, check the property ScriptLocalRepository "
+            << "at the Mantid.user.properties and correct it if necessary.";
+        throw ScriptRepoException(ss.str(), "CORRUPTED");
+      }
     }
-    return info; 
-  }
 
- const std::string& ScriptRepositoryImpl::description(const std::string & input_path){
-    ensureValidRepository();
-    std::string path = convertPath(input_path);
-    try{
-      RepositoryEntry & entry = repo.at(path); 
-      return entry.description; 
-    }catch(const std::out_of_range & ex){
-      std::stringstream ss; 
-      ss << "The file \""<< input_path << "\" was not found inside the repository!";            
-      throw ScriptRepoException(ss.str(), ex.what()); 
+    /** Implements ScriptRepository::info
+
+     For each entry inside the repository, there are some usefull information, that are stored in
+     a ::ScriptInfo struct.
+
+     Use this method, to get information about the description, last modified date, the auto update
+     flag and the author.
+
+     @param input_path: The path (relative or absolute) to the file/folder entry,
+
+     @return ScriptInfo with the information of this file/folder.
+
+     @note: This method requires that ::listFiles was executed at least once.
+
+     */
+    ScriptInfo ScriptRepositoryImpl::info(const std::string & input_path)
+    {
+      ensureValidRepository();
+      std::string path = convertPath(input_path);
+      ScriptInfo info;
+      try
+      {
+        RepositoryEntry & entry = repo.at(path);
+        info.author = entry.author;
+        info.pub_date = entry.pub_date;
+        info.auto_update = entry.auto_update;
+        info.directory = entry.directory;
+      } catch (const std::out_of_range & ex)
+      {
+        std::stringstream ss;
+        ss << "The file \"" << input_path << "\" was not found inside the repository!";
+        throw ScriptRepoException(ss.str(), ex.what());
+      }
+      return info;
     }
-  }
 
-  /** 
-      Implement the ScriptRepository::listFiles. 
-      
-      It will fill up the ScriptRepositoryImpl::Repository variable in order to provide
-      information about the status of the file as well.
-      
-      In order to list all the values from the repository, it uses three methods:
-
-       - ::parseCentralRepository
-       - ::parseDonwloadedEntries
-       - ::parseLocalRepository
-
-      After this, it will perform a reverse iteration on all the entries of the repository
-      in order to evaluate the status (::findStatus) of every file, and will also get the 
-      status of every directory, by accumulating the influency of every directory. 
-      
-      The listFiles will list:
-        - all files in the central repository
-        - all files in the local repository
-
-      @return It returns a list of all the files and directories (the relative path inside the repository).
-  */
-  std::vector<std::string> ScriptRepositoryImpl::listFiles() {
-    ensureValidRepository();
-    
-    repo.clear();
-    assert(repo.size() == 0);
-    try{
-      parseCentralRepository(repo); 
-      parseLocalRepository(repo);
-      parseDownloadedEntries(repo);
-      // it will not catch ScriptRepositoryExc, because, this means, that it was already processed.
-      // it will proceed in this situation.
-    }catch(Poco::Exception & ex){
-      g_log.error() << "ScriptRepository failed to list all entries inside the repository. Details: " << ex.className() << ":> " << ex.displayText() << std::endl;       
-    }catch(std::exception & ex){
-      g_log.error() << "ScriptRepository failed to list all entries inside the repository. Details: " << ex.what() << std::endl; 
+    const std::string& ScriptRepositoryImpl::description(const std::string & input_path)
+    {
+      ensureValidRepository();
+      std::string path = convertPath(input_path);
+      try
+      {
+        RepositoryEntry & entry = repo.at(path);
+        return entry.description;
+      } catch (const std::out_of_range & ex)
+      {
+        std::stringstream ss;
+        ss << "The file \"" << input_path << "\" was not found inside the repository!";
+        throw ScriptRepoException(ss.str(), ex.what());
+      }
     }
-    std::vector<std::string> out(repo.size());
-    size_t i = repo.size(); 
-
-    // evaluate the status for all entries
-    // and also fill up the output vector (in reverse order)
-    Mantid::API::SCRIPTSTATUS acc_status = Mantid::API::BOTH_UNCHANGED;
-    std::string last_directory = ""; 
-    for (Repository::reverse_iterator it = repo.rbegin();
-         it != repo.rend();
-           ++it){
-      // for every entry, it takes the path and RepositoryEntry
-      std::string entry_path = it->first; 
-      RepositoryEntry & entry = it->second;
-      //g_log.debug() << "Evaluating the status of " << entry_path << std::endl;
-      // fill up the output vector
-      out[--i] = it->first;
-      //g_log.debug() << "inserting file: " << it->first << std::endl; 
-
-      // for the directories, update the status of this directory
-      if (entry.directory){
-        entry.status = acc_status;
-        if (!entry.remote)
-          entry.status = Mantid::API::LOCAL_ONLY;
-        last_directory = entry_path;        
-      }else{
-        // for the files, it evaluates the status of this file
-        
-        if (entry.local && !entry.remote){
-          // entry local only
-          entry.status = LOCAL_ONLY;         
-        }else if (!entry.local && entry.remote){
-          // entry remote only
-          entry.status = REMOTE_ONLY;
-        }else{
-          // there is no way of not being remote nor local!
-          
-          // entry is local and is remote
-          // the following status are available: 
-          // BOTH_CHANGED, BOTH_UNCHANGED, REMOTE_CHANGED, LOCAL_CHANGED.
-          enum CHANGES{UNCH=0,REMO=0X1,LOC=0X2, BOTH=0X3};
-          int st = UNCH; 
-          // the file is local_changed, if the date of the current file is diferent
-          // from the downloaded one.
-          if (entry.current_date != entry.downloaded_date)
-            st |= LOC; 
-          // the file is remote_changed if the date of the pub_date file is 
-          // diferent from the local downloaded pubdate.
-          if (entry.pub_date > entry.downloaded_pubdate)
-            st |= REMO; 
-          
-          
-
-          switch(st){
-          case UNCH:
-            entry.status = BOTH_UNCHANGED; 
-            break;
-          case REMO:
-            entry.status = REMOTE_CHANGED;
-            break;
-          case LOC:
-            entry.status = LOCAL_CHANGED;
-            break;
-          case BOTH:
-          default:
-            entry.status = BOTH_CHANGED;
-            break;            
-          }// end switch
-
-        }// end evaluating the file status      
-
-      }// end dealing with files
-      
-      // is this entry a child of the last directory?
-      if (!last_directory.empty()){
-        if (entry_path.find(last_directory) == std::string::npos){
-          // no, this entry is not a child of the last directory
-          // restart the status
-          acc_status = Mantid::API::BOTH_UNCHANGED;
-        }
+
+    /**
+     Implement the ScriptRepository::listFiles.
+
+     It will fill up the ScriptRepositoryImpl::Repository variable in order to provide
+     information about the status of the file as well.
+
+     In order to list all the values from the repository, it uses three methods:
+
+     - ::parseCentralRepository
+     - ::parseDonwloadedEntries
+     - ::parseLocalRepository
+
+     After this, it will perform a reverse iteration on all the entries of the repository
+     in order to evaluate the status (::findStatus) of every file, and will also get the
+     status of every directory, by accumulating the influency of every directory.
+
+     The listFiles will list:
+     - all files in the central repository
+     - all files in the local repository
+
+     @return It returns a list of all the files and directories (the relative path inside the repository).
+     */
+    std::vector<std::string> ScriptRepositoryImpl::listFiles()
+    {
+      ensureValidRepository();
+
+      repo.clear();
+      assert(repo.size() == 0);
+      try
+      {
+        parseCentralRepository(repo);
+        parseLocalRepository(repo);
+        parseDownloadedEntries(repo);
+        // it will not catch ScriptRepositoryExc, because, this means, that it was already processed.
+        // it will proceed in this situation.
+      } catch (Poco::Exception & ex)
+      {
+        g_log.error() << "ScriptRepository failed to list all entries inside the repository. Details: "
+            << ex.className() << ":> " << ex.displayText() << std::endl;
+      } catch (std::exception & ex)
+      {
+        g_log.error() << "ScriptRepository failed to list all entries inside the repository. Details: "
+            << ex.what() << std::endl;
       }
-      
-      // update the status of the parent directory:
-      // the strategy here is to compare binary the current status with the acc_state
-      switch(acc_status | entry.status){
+      std::vector<std::string> out(repo.size());
+      size_t i = repo.size();
+
+      // evaluate the status for all entries
+      // and also fill up the output vector (in reverse order)
+      Mantid::API::SCRIPTSTATUS acc_status = Mantid::API::BOTH_UNCHANGED;
+      std::string last_directory = "";
+      for (Repository::reverse_iterator it = repo.rbegin(); it != repo.rend(); ++it)
+      {
+        // for every entry, it takes the path and RepositoryEntry
+        std::string entry_path = it->first;
+        RepositoryEntry & entry = it->second;
+        //g_log.debug() << "Evaluating the status of " << entry_path << std::endl;
+        // fill up the output vector
+        out[--i] = it->first;
+        //g_log.debug() << "inserting file: " << it->first << std::endl;
+
+        // for the directories, update the status of this directory
+        if (entry.directory)
+        {
+          entry.status = acc_status;
+          if (!entry.remote)
+            entry.status = Mantid::API::LOCAL_ONLY;
+          last_directory = entry_path;
+        }
+        else
+        {
+          // for the files, it evaluates the status of this file
+
+          if (entry.local && !entry.remote)
+          {
+            // entry local only
+            entry.status = LOCAL_ONLY;
+          }
+          else if (!entry.local && entry.remote)
+          {
+            // entry remote only
+            entry.status = REMOTE_ONLY;
+          }
+          else
+          {
+            // there is no way of not being remote nor local!
+
+            // entry is local and is remote
+            // the following status are available:
+            // BOTH_CHANGED, BOTH_UNCHANGED, REMOTE_CHANGED, LOCAL_CHANGED.
+            enum CHANGES
+            {
+              UNCH = 0, REMO = 0X1, LOC = 0X2, BOTH = 0X3
+            };
+            int st = UNCH;
+            // the file is local_changed, if the date of the current file is diferent
+            // from the downloaded one.
+            if (entry.current_date != entry.downloaded_date)
+              st |= LOC;
+            // the file is remote_changed if the date of the pub_date file is
+            // diferent from the local downloaded pubdate.
+            if (entry.pub_date > entry.downloaded_pubdate)
+              st |= REMO;
+
+            switch (st)
+            {
+            case UNCH:
+              entry.status = BOTH_UNCHANGED;
+              break;
+            case REMO:
+              entry.status = REMOTE_CHANGED;
+              break;
+            case LOC:
+              entry.status = LOCAL_CHANGED;
+              break;
+            case BOTH:
+            default:
+              entry.status = BOTH_CHANGED;
+              break;
+            }          // end switch
+
+          }          // end evaluating the file status
+
+        }          // end dealing with files
+
+        // is this entry a child of the last directory?
+        if (!last_directory.empty())
+        {
+          if (entry_path.find(last_directory) == std::string::npos)
+          {
+            // no, this entry is not a child of the last directory
+            // restart the status
+            acc_status = Mantid::API::BOTH_UNCHANGED;
+          }
+        }
+
+        // update the status of the parent directory:
+        // the strategy here is to compare binary the current status with the acc_state
+        switch (acc_status | entry.status)
+        {
         // pure matching, meaning that the matching is done with the same state
         // or with BOTH_UNCHANGED (neutral)
-      case BOTH_UNCHANGED: // BOTH_UNCHANGED IS 0, so only 0|0 match this option
-      case REMOTE_ONLY: // REMOTE_ONLY IS 0x01, so only 0|0x01 and 0x01|0x01 match this option
-      case LOCAL_ONLY:  
-      case LOCAL_CHANGED:
-      case REMOTE_CHANGED:
-        acc_status = (SCRIPTSTATUS)(acc_status | entry.status);
-        break;
-      case LOCAL_ONLY | LOCAL_CHANGED:
-        acc_status = LOCAL_CHANGED;
-        break;
-      case REMOTE_ONLY | REMOTE_CHANGED:
-        acc_status = REMOTE_CHANGED;
-        break;
-      default:
-        acc_status = BOTH_CHANGED;
-        break;        
-      }     
-      
-    }
+        case BOTH_UNCHANGED: // BOTH_UNCHANGED IS 0, so only 0|0 match this option
+        case REMOTE_ONLY: // REMOTE_ONLY IS 0x01, so only 0|0x01 and 0x01|0x01 match this option
+        case LOCAL_ONLY:
+        case LOCAL_CHANGED:
+        case REMOTE_CHANGED:
+          acc_status = (SCRIPTSTATUS) (acc_status | entry.status);
+          break;
+        case LOCAL_ONLY | LOCAL_CHANGED:
+          acc_status = LOCAL_CHANGED;
+          break;
+        case REMOTE_ONLY | REMOTE_CHANGED:
+          acc_status = REMOTE_CHANGED;
+          break;
+        default:
+          acc_status = BOTH_CHANGED;
+          break;
+        }
 
-    return out;
-  } 
+      }
 
-  /**
+      return out;
+    }
+
+    /**
      Implements the ScriptRepository::download. 
 
      @note Require that ::listFiles been called at least once. 
@@ -536,884 +571,937 @@ namespace API
      @note As a result of the download a new file, the local repository 
      information .local.repository will be changed.
      
-  */
-
-  void ScriptRepositoryImpl::download(const std::string & input_path){
-    ensureValidRepository();
-    std::string file_path = convertPath(input_path);
-    try{
-      RepositoryEntry & entry = repo.at(file_path); 
-      if (entry.directory)
-        download_directory(file_path);
-      else
-        download_file(file_path, entry);
-    }catch(const std::out_of_range & ex){
-      // fixme: readable exception
-      throw ScriptRepoException(ex.what()); 
-    }
+     */
 
-  }
+    void ScriptRepositoryImpl::download(const std::string & input_path)
+    {
+      ensureValidRepository();
+      std::string file_path = convertPath(input_path);
+      try
+      {
+        RepositoryEntry & entry = repo.at(file_path);
+        if (entry.directory)
+          download_directory(file_path);
+        else
+          download_file(file_path, entry);
+      } catch (const std::out_of_range & ex)
+      {
+        // fixme: readable exception
+        throw ScriptRepoException(ex.what());
+      }
 
+    }
 
-  /**
+    /**
      Go recursively to download all the children of an input directory. 
      
      @param directory_path : the path for the directory.
-   */
-  void ScriptRepositoryImpl::download_directory(const std::string & directory_path){
-    std::string directory_path_with_slash = std::string(directory_path).append("/");
-    bool found = false; 
-    for(Repository::iterator it = repo.begin();
-        it != repo.end(); ++it){
-      // skip all entries that are not children of directory_path
-      // the map will list the entries in alphabetical order, so, 
-      // when it first find the directory, it will list all the 
-      // childrens of this directory, and them, 
-      // it will list other things, so we can, break the loop
-      if (it->first.find(directory_path) != 0){
-        if (found) 
-          break; // for the sake of performance
-        else
-          continue;
-      }
-      found = true;
-      if (it->first != directory_path &&
-          it->first.find(directory_path_with_slash) != 0)
+     */
+    void ScriptRepositoryImpl::download_directory(const std::string & directory_path)
+    {
+      std::string directory_path_with_slash = std::string(directory_path).append("/");
+      bool found = false;
+      for (Repository::iterator it = repo.begin(); it != repo.end(); ++it)
+      {
+        // skip all entries that are not children of directory_path
+        // the map will list the entries in alphabetical order, so,
+        // when it first find the directory, it will list all the
+        // childrens of this directory, and them,
+        // it will list other things, so we can, break the loop
+        if (it->first.find(directory_path) != 0)
+        {
+          if (found)
+            break; // for the sake of performance
+          else
+            continue;
+        }
+        found = true;
+        if (it->first != directory_path && it->first.find(directory_path_with_slash) != 0)
         {
           // it is not a children of this entry, just similar. Example: 
           // TofConverter/README
           // TofConverter.py
           // these two pass the first test, but will not pass this one.
           found = false;
-          continue; 
+          continue;
         }
-      // now, we are dealing with the children of directory path
-      if (!it->second.directory)
-        download_file(it->first, it->second);
-      else{
-        // download the directory. 
-
-        // we will not download the directory, but create one with the
-        // same name, and update the local json
-        
-        Poco::File dir(std::string(local_repository).append(it->first));
-        dir.createDirectories();
-        
-        it->second.status = BOTH_UNCHANGED;         
-        it->second.downloaded_date = DateAndTime(
-             Poco::DateTimeFormatter::format(dir.getLastModified(),
-                                             timeformat));
-        it->second.downloaded_pubdate = it->second.pub_date;
-        updateLocalJson(it->first, it->second);
-      
-      }// end donwloading directory
-      // update the status
-      it->second.status = BOTH_UNCHANGED; // update this entry
-    }// end interaction with all entries
+        // now, we are dealing with the children of directory path
+        if (!it->second.directory)
+          download_file(it->first, it->second);
+        else
+        {
+          // download the directory.
 
-  }
+          // we will not download the directory, but create one with the
+          // same name, and update the local json
 
+          Poco::File dir(std::string(local_repository).append(it->first));
+          dir.createDirectories();
 
-  /**
+          it->second.status = BOTH_UNCHANGED;
+          it->second.downloaded_date = DateAndTime(
+              Poco::DateTimeFormatter::format(dir.getLastModified(), timeformat));
+          it->second.downloaded_pubdate = it->second.pub_date;
+          updateLocalJson(it->first, it->second);
+
+        }        // end donwloading directory
+                 // update the status
+        it->second.status = BOTH_UNCHANGED; // update this entry
+      } // end interaction with all entries
+
+    }
+
+    /**
      Download the real file from the remote_url.
      
      @todo describe better this method.
-   */
-  void ScriptRepositoryImpl::download_file(const std::string &file_path, RepositoryEntry & entry) {
-    SCRIPTSTATUS state = entry.status;
-    // if we have the state, this means that the entry is available
-    if (state == LOCAL_ONLY  || state == LOCAL_CHANGED){
-      std::stringstream ss; 
-      ss << "The file " << file_path << " can not be download because it has only local changes."
-         << " If you want, please, publish this file uploading it" ; 
-      throw ScriptRepoException(ss.str()); 
-    }
-    
-    if (state == BOTH_UNCHANGED)
-      // instead of throwing exception, silently assumes that the download was done.
-      return;
-           
-    // download the file
-    std::string url_path = std::string(remote_url).append(file_path); 
-    Poco::TemporaryFile tmpFile; 
-    doDownloadFile(url_path, tmpFile.path());
-
-    std::string local_path = std::string(local_repository).append(file_path); 
-    g_log.debug() << "ScriptRepository download url_path: " << url_path << " to " << local_path << std::endl;
-
-    std::string dir_path;
-
-    try{
-
-      if (state == BOTH_CHANGED){
-        // make a back up of the local version
-        Poco::File f(std::string(local_repository).append(file_path));
-        std::string bck = std::string(f.path()).append("_bck");
-        g_log.notice() << "The current file " << f.path() << " has some local changes"
-                       << " so, a back up copy will be created at " << bck << std::endl; 
-        f.copyTo(bck);         
+     */
+    void ScriptRepositoryImpl::download_file(const std::string &file_path, RepositoryEntry & entry)
+    {
+      SCRIPTSTATUS state = entry.status;
+      // if we have the state, this means that the entry is available
+      if (state == LOCAL_ONLY || state == LOCAL_CHANGED)
+      {
+        std::stringstream ss;
+        ss << "The file " << file_path << " can not be download because it has only local changes."
+            << " If you want, please, publish this file uploading it";
+        throw ScriptRepoException(ss.str());
       }
-      
-      // ensure that the path to the local_path exists    
-      size_t slash_pos = local_path.rfind('/');
-      Poco::File file_out(local_path);
-      if (slash_pos != std::string::npos){
-        dir_path = std::string(local_path.begin(),local_path.begin()+slash_pos);
-        if (!dir_path.empty()){
-          Poco::File dir_parent(dir_path);
-          if (!dir_parent.exists()){
-            dir_parent.createDirectories();
-          }
-        }// dir path is empty
+
+      if (state == BOTH_UNCHANGED)
+        // instead of throwing exception, silently assumes that the download was done.
+        return;
+
+      // download the file
+      std::string url_path = std::string(remote_url).append(file_path);
+      Poco::TemporaryFile tmpFile;
+      doDownloadFile(url_path, tmpFile.path());
+
+      std::string local_path = std::string(local_repository).append(file_path);
+      g_log.debug() << "ScriptRepository download url_path: " << url_path << " to " << local_path
+          << std::endl;
+
+      std::string dir_path;
+
+      try
+      {
+
+        if (state == BOTH_CHANGED)
+        {
+          // make a back up of the local version
+          Poco::File f(std::string(local_repository).append(file_path));
+          std::string bck = std::string(f.path()).append("_bck");
+          g_log.notice() << "The current file " << f.path() << " has some local changes"
+              << " so, a back up copy will be created at " << bck << std::endl;
+          f.copyTo(bck);
+        }
+
+        // ensure that the path to the local_path exists
+        size_t slash_pos = local_path.rfind('/');
+        Poco::File file_out(local_path);
+        if (slash_pos != std::string::npos)
+        {
+          dir_path = std::string(local_path.begin(), local_path.begin() + slash_pos);
+          if (!dir_path.empty())
+          {
+            Poco::File dir_parent(dir_path);
+            if (!dir_parent.exists())
+            {
+              dir_parent.createDirectories();
+            }
+          } // dir path is empty
+        }
+
+        if (!file_out.exists())
+          file_out.createFile();
+
+        tmpFile.copyTo(local_path);
+
+      } catch (Poco::FileAccessDeniedException &)
+      {
+        std::stringstream ss;
+        ss << "You cannot create file at " << local_path << ". Not downloading ...";
+        throw ScriptRepoException(ss.str());
+      }
+
+      {
+        Poco::File local(local_path);
+        entry.downloaded_date = DateAndTime(
+            Poco::DateTimeFormatter::format(local.getLastModified(), timeformat));
+        entry.downloaded_pubdate = entry.pub_date;
+        entry.status = BOTH_UNCHANGED;
       }
-      
-      if (!file_out.exists())
-        file_out.createFile();
-      
-      tmpFile.copyTo(local_path); 
-      
-    }catch(Poco::FileAccessDeniedException &){
-      std::stringstream ss; 
-      ss << "You cannot create file at " << local_path << ". Not downloading ..."; 
-      throw ScriptRepoException(ss.str());      
+
+      // Update pythonscripts.directories if necessary (TEST_DOWNLOAD_ADD_FOLDER_TO_PYTHON_SCRIPTS)
+      if (!dir_path.empty())
+      {
+        const char * python_sc_option = "pythonscripts.directories";
+        ConfigServiceImpl & config = ConfigService::Instance();
+        std::string python_dir = config.getString(python_sc_option);
+        if (python_dir.find(dir_path) == std::string::npos)
+        {
+          // this means that the directory is not inside the pythonscripts.directories
+          // add to the repository
+          python_dir.append(";").append(dir_path);
+          config.setString(python_sc_option, python_dir);
+          config.saveConfig(config.getUserFilename());
+
+          // the previous code make the path available for the following
+          // instances of Mantid, but, for the current one, it is necessary
+          // do add to the python path...
+        }
+      }
+
+      updateLocalJson(file_path, entry); ///FIXME: performance!
+      g_log.debug() << "ScriptRepository download " << local_path << " success!" << std::endl;
     }
 
+    /**
+     @todo Describe
+     */
+    SCRIPTSTATUS ScriptRepositoryImpl::fileStatus(const std::string & input_path)
     {
-      Poco::File local(local_path);
-      entry.downloaded_date = DateAndTime(Poco::DateTimeFormatter::format(local.getLastModified(),
-                                                                          timeformat));
-      entry.downloaded_pubdate = entry.pub_date;
-      entry.status = BOTH_UNCHANGED;      
-    }
-    
-    // Update pythonscripts.directories if necessary (TEST_DOWNLOAD_ADD_FOLDER_TO_PYTHON_SCRIPTS)
-    if (!dir_path.empty()){
-      const char * python_sc_option = "pythonscripts.directories";
-      ConfigServiceImpl & config = ConfigService::Instance(); 
-      std::string python_dir = config.getString(python_sc_option); 
-      if (python_dir.find(dir_path) == std::string::npos){
-        // this means that the directory is not inside the pythonscripts.directories
-        // add to the repository
-        python_dir.append(";").append(dir_path);
-        config.setString(python_sc_option,python_dir); 
-        config.saveConfig(config.getUserFilename());
-        
-        // the previous code make the path available for the following 
-        // instances of Mantid, but, for the current one, it is necessary 
-        // do add to the python path... 
+      /// @todo: implement the trigger method to know it we need to revised the
+      ///        directories trees.
+      ensureValidRepository();
+      std::string file_path = convertPath(input_path);
+      //g_log.debug() << "Attempt to ask for the status of "<< file_path << std::endl;
+      try
+      {
+        RepositoryEntry & entry = repo.at(file_path);
+        return entry.status;
+      } catch (const std::out_of_range & ex)
+      {
+        std::stringstream ss;
+        ss << "The file \"" << input_path << "\" was not found inside the repository!";
+        throw ScriptRepoException(ss.str(), ex.what());
       }
+      // this line will never be executed, just for avoid compiler warnings.
+      return BOTH_UNCHANGED;
     }
-    
-    updateLocalJson(file_path, entry); ///FIXME: performance!    
-    g_log.debug() << "ScriptRepository download " << local_path << " success!"<<std::endl; 
-  }
 
-  /**
-    @todo Describe
-  */
-  SCRIPTSTATUS ScriptRepositoryImpl::fileStatus(const std::string & input_path) {
-    /// @todo: implement the trigger method to know it we need to revised the 
-    ///        directories trees.    
-    ensureValidRepository();
-    std::string file_path = convertPath(input_path); 
-    //g_log.debug() << "Attempt to ask for the status of "<< file_path << std::endl;
-    try{
-      RepositoryEntry & entry = repo.at(file_path); 
-      return entry.status;
-    }catch(const std::out_of_range & ex){
-      std::stringstream ss; 
-      ss << "The file \""<< input_path << "\" was not found inside the repository!";            
-      throw ScriptRepoException(ss.str(), ex.what()); 
-    }
-    // this line will never be executed, just for avoid compiler warnings.
-    return BOTH_UNCHANGED;
-  }
+    /**
+     * Uploads one file to the ScriptRepository web server, pushing, indirectly, to the
+     * git repository. It will send in a POST method, the file and the following fields:
+     *  - author : Will identify the author of the change
+     *  - email:  Will identify the email of the author
+     *  - comment: Description of the nature of the file or of the update
+     *
+     * It will them upload to the URL pointed to UploaderWebServer. It will them receive a json file
+     * with some usefull information about the success or failure of the attempt to upload.
+     * In failure, it will be converted to an appropriated ScriptRepoException.
+     */
+    void ScriptRepositoryImpl::upload(const std::string & file_path, const std::string & comment,
+        const std::string & author, const std::string & email)
 
-  /**
-   * Uploads one file to the ScriptRepository web server, pushing, indirectly, to the 
-   * git repository. It will send in a POST method, the file and the following fields: 
-   *  - author : Will identify the author of the change
-   *  - email:  Will identify the email of the author
-   *  - comment: Description of the nature of the file or of the update
-   *  
-   * It will them upload to the URL pointed to UploaderWebServer. It will them receive a json file 
-   * with some usefull information about the success or failure of the attempt to upload. 
-   * In failure, it will be converted to an appropriated ScriptRepoException.
-  */
-  void ScriptRepositoryImpl::upload(const std::string & file_path, 
-                                    const std::string & comment,
-                                    const std::string & author, 
-                                    const std::string & email)
-    
-  {
-    using namespace Poco::Net;
-    try{
-      g_log.notice() << "ScriptRepository uploading " << file_path << " ..." << std::endl; 
-      Poco::URI uri(remote_upload); 
-      std::string path(uri.getPathAndQuery());
-      HTTPClientSession session(uri.getHost(), uri.getPort()); 
-
-      // configure proxy
-      std::string proxy_config; 
-      unsigned short proxy_port; 
-      if (getProxyConfig(proxy_config, proxy_port))
-        session.setProxy(proxy_config, proxy_port);
-      // proxy end
-
-      HTTPRequest req(HTTPRequest::HTTP_POST, path, 
-                      HTTPMessage::HTTP_1_0); 
-      HTMLForm form(HTMLForm::ENCODING_MULTIPART); 
-      
-      // add the fields author, email and comment
-      form.add("author",author); 
-      form.add("mail", email); 
-      form.add("comment",comment); 
-      
-      // deal with the folder
-      std::string relative_path = convertPath(file_path); 
-      std::string absolute_path = local_repository + relative_path; 
-      std::string folder = "./"; 
-      size_t pos = relative_path.rfind('/'); 
-      if (pos != std::string::npos)
-        folder += std::string(relative_path.begin(), relative_path.begin() + pos);
-      if (folder[folder.size()-1] != '/')
-        folder += "/";
-      g_log.information() << "Uploading to folder: " << folder << std::endl; 
-      form.add("path",folder); 
-      
-      // inserting the file
-      FilePartSource * m_file = new FilePartSource(absolute_path);
-      form.addPart("file",m_file); 
-      form.prepareSubmit(req);
-      
-      // get the size of everything
-      std::stringstream sst; 
-      form.write(sst); 
-      // move back to the begining of the file
-      m_file->stream().clear();
-      m_file->stream().seekg(0,std::ios::beg);  
-      // set the size
-      req.setContentLength((int)sst.str().size());
-      
-      std::ostream& ostr = session.sendRequest(req);
-      // send the request.
-      ostr << sst.str(); 
-      
-      HTTPResponse response;
-      std::istream & rs = session.receiveResponse(response);
-
-      g_log.information() << "ScriptRepository upload status: " 
-                          << response.getStatus() << " " << response.getReason() << std::endl;
-      std::stringstream answer; 
-      { // remove the status message from the end of the reply, in order not to get exception from the read_json parser
-        std::stringstream server_reply; 
-        std::string server_reply_str; 
-        Poco::StreamCopier::copyStream(rs, server_reply);
-        server_reply_str= server_reply.str(); 
-        size_t pos = server_reply_str.rfind("}");
+    {
+      using namespace Poco::Net;
+      try
+      {
+        g_log.notice() << "ScriptRepository uploading " << file_path << " ..." << std::endl;
+        Poco::URI uri(remote_upload);
+        std::string path(uri.getPathAndQuery());
+        HTTPClientSession session(uri.getHost(), uri.getPort());
+
+        // configure proxy
+        std::string proxy_config;
+        unsigned short proxy_port;
+        if (getProxyConfig(proxy_config, proxy_port))
+          session.setProxy(proxy_config, proxy_port);
+        // proxy end
+
+        HTTPRequest req(HTTPRequest::HTTP_POST, path, HTTPMessage::HTTP_1_0);
+        HTMLForm form(HTMLForm::ENCODING_MULTIPART);
+
+        // add the fields author, email and comment
+        form.add("author", author);
+        form.add("mail", email);
+        form.add("comment", comment);
+
+        // deal with the folder
+        std::string relative_path = convertPath(file_path);
+        std::string absolute_path = local_repository + relative_path;
+        std::string folder = "./";
+        size_t pos = relative_path.rfind('/');
         if (pos != std::string::npos)
-          answer << std::string(server_reply_str.begin() , server_reply_str.begin() + pos + 1); 
-        else
-          answer << server_reply_str; 
-      }
-      g_log.debug() << "Form Output: " << answer.str() << std::endl; 
-
-      std::string info; 
-      std::string detail;
-      std::string published_date;
-        
-      ptree pt; 
-      try{
-        read_json(answer, pt); 
-        info = pt.get<std::string>("message",""); 
-        detail = pt.get<std::string>("detail","");
-        published_date = pt.get<std::string>("pub_date","");
-        std::string cmd = pt.get<std::string>("shell",""); 
-        if (!cmd.empty())
-          detail.append("\nFrom Command: ").append(cmd);
-                
-      }catch (boost::property_tree::json_parser_error & ex){
-        throw ScriptRepoException("Bad answer from the Server",
-                                  ex.what()); 
-      }
+          folder += std::string(relative_path.begin(), relative_path.begin() + pos);
+        if (folder[folder.size() - 1] != '/')
+          folder += "/";
+        g_log.information() << "Uploading to folder: " << folder << std::endl;
+        form.add("path", folder);
+
+        // inserting the file
+        FilePartSource * m_file = new FilePartSource(absolute_path);
+        form.addPart("file", m_file);
+        form.prepareSubmit(req);
+
+        // get the size of everything
+        std::stringstream sst;
+        form.write(sst);
+        // move back to the begining of the file
+        m_file->stream().clear();
+        m_file->stream().seekg(0, std::ios::beg);
+        // set the size
+        req.setContentLength((int) sst.str().size());
+
+        std::ostream& ostr = session.sendRequest(req);
+        // send the request.
+        ostr << sst.str();
+
+        HTTPResponse response;
+        std::istream & rs = session.receiveResponse(response);
+
+        g_log.information() << "ScriptRepository upload status: " << response.getStatus() << " "
+            << response.getReason() << std::endl;
+        std::stringstream answer;
+        { // remove the status message from the end of the reply, in order not to get exception from the read_json parser
+          std::stringstream server_reply;
+          std::string server_reply_str;
+          Poco::StreamCopier::copyStream(rs, server_reply);
+          server_reply_str = server_reply.str();
+          size_t pos = server_reply_str.rfind("}");
+          if (pos != std::string::npos)
+            answer << std::string(server_reply_str.begin(), server_reply_str.begin() + pos + 1);
+          else
+            answer << server_reply_str;
+        }
+        g_log.debug() << "Form Output: " << answer.str() << std::endl;
 
-      if (info == "success"){
-        g_log.notice() << "ScriptRepository:" << file_path <<  " uploaded!"<< std::endl; 
-        
-        // update the file
-        RepositoryEntry & entry = repo.at(file_path);
+        std::string info;
+        std::string detail;
+        std::string published_date;
+
+        ptree pt;
+        try
         {
-          Poco::File local(absolute_path);
-          entry.downloaded_date = DateAndTime(Poco::DateTimeFormatter::format(local.getLastModified(),
-                                                                              timeformat));
-          // update the pub_date and downloaded_pubdate with the pub_date given by the upload. 
-          // this ensures that the status will be correctly defined.
-          if (!published_date.empty())
-            entry.pub_date = DateAndTime(published_date);
-          entry.downloaded_pubdate = entry.pub_date;
-          entry.status = BOTH_UNCHANGED;      
+          read_json(answer, pt);
+          info = pt.get<std::string>("message", "");
+          detail = pt.get<std::string>("detail", "");
+          published_date = pt.get<std::string>("pub_date", "");
+          std::string cmd = pt.get<std::string>("shell", "");
+          if (!cmd.empty())
+            detail.append("\nFrom Command: ").append(cmd);
+
+        } catch (boost::property_tree::json_parser_error & ex)
+        {
+          throw ScriptRepoException("Bad answer from the Server", ex.what());
         }
-        g_log.information() << "ScriptRepository update local json " << std::endl; 
-        updateLocalJson(file_path, entry); ///FIXME: performance! 
-        
-        
-      }else
-        throw ScriptRepoException(info, detail); 
-      
-    }catch(Poco::Exception & ex){
-      throw ScriptRepoException(ex.displayText(), ex.className()); 
-    }
-  }
 
- /**
-   * Delete one file from the local and the central ScriptRepository 
-   * It will send in a POST method, with the file path to find the path : 
-   *  - author : Will identify the author of the change
-   *  - email:  Will identify the email of the author
-   *  - comment: Description of the nature of the file or of the update
-   * 
-   * It will them send the request to the URL pointed to UploaderWebServer, changing the word
-   * publish to remove. For example: 
-   * 
-   * http://upload.mantidproject.org/scriptrepository/payload/remove
-   * 
-   * The server will them create a git commit deleting the file. And will reply with a json string
-   * with some usefull information about the success or failure of the attempt to delete. 
-   * In failure, it will be converted to an appropriated ScriptRepoException.
-   * 
-   * Requirements: in order to be allowed to delete files from the central repository, 
-   * it is required that the state of the file must be BOTH_UNCHANGED or LOCAL_CHANGED.
-   * 
-   * @param file_path: The path (relative to the repository) or absolute to identify the file to remove
-   * @param comment: justification to remove this file (will be used as git commit message)
-   * @param author: identification of the requester for deleting wich must be the author of the file as well
-   * @param email: email of the requester   
-   * 
-   * @exception ScriptRepoException justifying the reason to failure.
-   *
-   * @note only local files can be removed.
-  */
-  void ScriptRepositoryImpl::remove(const std::string & file_path, 
-                                              const std::string & comment,
-                                              const std::string & author, 
-                                    const std::string & email){
-    std::string relative_path = convertPath(file_path);
-   
-    // get the status, because only local files can be removed
-    SCRIPTSTATUS status = fileStatus(relative_path);
-    std::stringstream ss;
-    bool raise_exc = false; 
-    switch(status){
-    case REMOTE_ONLY:
-      ss << "You are not allowed to remove files from the repository that you have not installed and you are not the owner";
-      raise_exc = true;
-      break;
-    case REMOTE_CHANGED: 
-    case BOTH_CHANGED:
-      ss << "There is a new version of this file, so you can not remove it from the repository before checking it out. Please download the new version, and if you still wants to remove, do it afterwards"; 
-      raise_exc = true;
-      break; 
-    case LOCAL_ONLY:
-      ss << "This operation is to remove files from the central repository. "
-         << "\nTo delete files or folders from your local folder, please, do it through your operative system,"
-         << "using your local installation folder at " << local_repository ; 
-      raise_exc = true; 
-    default: 
-      break;
+        if (info == "success")
+        {
+          g_log.notice() << "ScriptRepository:" << file_path << " uploaded!" << std::endl;
+
+          // update the file
+          RepositoryEntry & entry = repo.at(file_path);
+          {
+            Poco::File local(absolute_path);
+            entry.downloaded_date = DateAndTime(
+                Poco::DateTimeFormatter::format(local.getLastModified(), timeformat));
+            // update the pub_date and downloaded_pubdate with the pub_date given by the upload.
+            // this ensures that the status will be correctly defined.
+            if (!published_date.empty())
+              entry.pub_date = DateAndTime(published_date);
+            entry.downloaded_pubdate = entry.pub_date;
+            entry.status = BOTH_UNCHANGED;
+          }
+          g_log.information() << "ScriptRepository update local json " << std::endl;
+          updateLocalJson(file_path, entry); ///FIXME: performance!
+
+        }
+        else
+          throw ScriptRepoException(info, detail);
+
+      } catch (Poco::Exception & ex)
+      {
+        throw ScriptRepoException(ex.displayText(), ex.className());
+      }
     }
-    if (raise_exc)
-      throw ScriptRepoException(ss.str()); 
 
-    g_log.information() << "ScriptRepository deleting " << file_path << " ..." << std::endl; 
-    
+    /**
+     * Delete one file from the local and the central ScriptRepository
+     * It will send in a POST method, with the file path to find the path :
+     *  - author : Will identify the author of the change
+     *  - email:  Will identify the email of the author
+     *  - comment: Description of the nature of the file or of the update
+     *
+     * It will them send the request to the URL pointed to UploaderWebServer, changing the word
+     * publish to remove. For example:
+     *
+     * http://upload.mantidproject.org/scriptrepository/payload/remove
+     *
+     * The server will them create a git commit deleting the file. And will reply with a json string
+     * with some usefull information about the success or failure of the attempt to delete.
+     * In failure, it will be converted to an appropriated ScriptRepoException.
+     *
+     * Requirements: in order to be allowed to delete files from the central repository,
+     * it is required that the state of the file must be BOTH_UNCHANGED or LOCAL_CHANGED.
+     *
+     * @param file_path: The path (relative to the repository) or absolute to identify the file to remove
+     * @param comment: justification to remove this file (will be used as git commit message)
+     * @param author: identification of the requester for deleting wich must be the author of the file as well
+     * @param email: email of the requester
+     *
+     * @exception ScriptRepoException justifying the reason to failure.
+     *
+     * @note only local files can be removed.
+     */
+    void ScriptRepositoryImpl::remove(const std::string & file_path, const std::string & comment,
+        const std::string & author, const std::string & email)
     {
-      // request to remove the file from the central repository
-
-      RepositoryEntry & entry = repo.at(relative_path);
-
-      if (entry.directory)
-        throw ScriptRepoException("You can not remove folders recursively from the central repository.");
-      
-      
-      // prepare the request, and call doDeleteRemoteFile to request the server to remove the file
-      std::string remote_delete = remote_upload; 
-      boost::replace_all(remote_delete, "publish", "remove");
-      std::stringstream answer; 
-      answer << doDeleteRemoteFile(remote_delete, file_path, author, email, comment);
-      g_log.debug() << "Answer from doDelete: " << answer.str() << std::endl; 
-
-      // analyze the answer from the server, to see if the file was removed or not. 
-      std::string info; 
-      std::string detail;    
-      ptree pt; 
-      try{
-        read_json(answer, pt); 
-        info = pt.get<std::string>("message",""); 
-        detail = pt.get<std::string>("detail","");
-        std::string cmd = pt.get<std::string>("shell",""); 
-        if (!cmd.empty())
-          detail.append("\nFrom Command: ").append(cmd);
-        
-      }catch (boost::property_tree::json_parser_error & ex){
-        // this should not occurr in production. The answer from the 
-        // server should always be a valid json file
-        g_log.debug() << "Bad answer: " << ex.what() << std::endl; 
-        throw ScriptRepoException("Bad answer from the Server",
-                                  ex.what()); 
-      }
+      std::string relative_path = convertPath(file_path);
 
-      g_log.debug() << "Checking if success info=" << info << std::endl; 
-      // check if the server removed the file from the central repository
-      if (info!= "success")
-        throw ScriptRepoException(info, detail); // no
+      // get the status, because only local files can be removed
+      SCRIPTSTATUS status = fileStatus(relative_path);
+      std::stringstream ss;
+      bool raise_exc = false;
+      switch (status)
+      {
+      case REMOTE_ONLY:
+        ss
+            << "You are not allowed to remove files from the repository that you have not installed and you are not the owner";
+        raise_exc = true;
+        break;
+      case REMOTE_CHANGED:
+      case BOTH_CHANGED:
+        ss
+            << "There is a new version of this file, so you can not remove it from the repository before checking it out. Please download the new version, and if you still wants to remove, do it afterwards";
+        raise_exc = true;
+        break;
+      case LOCAL_ONLY:
+        ss << "This operation is to remove files from the central repository. "
+            << "\nTo delete files or folders from your local folder, please, do it through your operative system,"
+            << "using your local installation folder at " << local_repository;
+        raise_exc = true;
+      default:
+        break;
+      }
+      if (raise_exc)
+        throw ScriptRepoException(ss.str());
 
-      
-      g_log.notice() << "ScriptRepository " << file_path <<  " removed from central repository"<< std::endl; 
+      g_log.information() << "ScriptRepository deleting " << file_path << " ..." << std::endl;
 
-      // delete the entry from the repository.json. In reality, the repository.json should change at the 
-      // remote repository, and we could only download the new one, but, practically, at the server, it will 
-      // take sometime to be really removed, so, for practical reasons, this is dealt with locally. 
-      // 
       {
-        ptree pt; 
-        std::string filename = std::string(local_repository).append(".repository.json"); 
-        try{
-          read_json(filename,pt);
-          pt.erase(relative_path);// remove the entry
+        // request to remove the file from the central repository
+
+        RepositoryEntry & entry = repo.at(relative_path);
+
+        if (entry.directory)
+          throw ScriptRepoException(
+              "You can not remove folders recursively from the central repository.");
+
+        // prepare the request, and call doDeleteRemoteFile to request the server to remove the file
+        std::string remote_delete = remote_upload;
+        boost::replace_all(remote_delete, "publish", "remove");
+        std::stringstream answer;
+        answer << doDeleteRemoteFile(remote_delete, file_path, author, email, comment);
+        g_log.debug() << "Answer from doDelete: " << answer.str() << std::endl;
+
+        // analyze the answer from the server, to see if the file was removed or not.
+        std::string info;
+        std::string detail;
+        ptree pt;
+        try
+        {
+          read_json(answer, pt);
+          info = pt.get<std::string>("message", "");
+          detail = pt.get<std::string>("detail", "");
+          std::string cmd = pt.get<std::string>("shell", "");
+          if (!cmd.empty())
+            detail.append("\nFrom Command: ").append(cmd);
+
+        } catch (boost::property_tree::json_parser_error & ex)
+        {
+          // this should not occurr in production. The answer from the
+          // server should always be a valid json file
+          g_log.debug() << "Bad answer: " << ex.what() << std::endl;
+          throw ScriptRepoException("Bad answer from the Server", ex.what());
+        }
+
+        g_log.debug() << "Checking if success info=" << info << std::endl;
+        // check if the server removed the file from the central repository
+        if (info != "success")
+          throw ScriptRepoException(info, detail); // no
+
+        g_log.notice() << "ScriptRepository " << file_path << " removed from central repository"
+            << std::endl;
+
+        // delete the entry from the repository.json. In reality, the repository.json should change at the
+        // remote repository, and we could only download the new one, but, practically, at the server, it will
+        // take sometime to be really removed, so, for practical reasons, this is dealt with locally.
+        //
+        {
+          ptree pt;
+          std::string filename = std::string(local_repository).append(".repository.json");
+          try
+          {
+            read_json(filename, pt);
+            pt.erase(relative_path);      // remove the entry
 #if defined(_WIN32) ||  defined(_WIN64)
-          //set the .repository.json and .local.json not hidden (to be able to edit it)
-          SetFileAttributes( filename.c_str(), FILE_ATTRIBUTE_NORMAL);     
+                //set the .repository.json and .local.json not hidden (to be able to edit it)
+                SetFileAttributes( filename.c_str(), FILE_ATTRIBUTE_NORMAL);
 #endif
-          write_json(filename,pt);
+            write_json(filename, pt);
 #if defined(_WIN32) ||  defined(_WIN64)
-          //set the .repository.json and .local.json hidden
-          SetFileAttributes( filename.c_str(), FILE_ATTRIBUTE_HIDDEN);     
+            //set the .repository.json and .local.json hidden
+            SetFileAttributes( filename.c_str(), FILE_ATTRIBUTE_HIDDEN);
 #endif
-        }catch (boost::property_tree::json_parser_error & ex){
-          std::stringstream ss;
-          ss << "corrupted central copy of database : " << filename; 
-          
-          g_log.error() << "ScriptRepository: " << ss.str() 
-                        << "\nDetails: deleting entries - json_parser_error: " << ex.what() << std::endl; 
-          throw ScriptRepoException(ss.str(), ex.what()); 
+          } catch (boost::property_tree::json_parser_error & ex)
+          {
+            std::stringstream ss;
+            ss << "corrupted central copy of database : " << filename;
+
+            g_log.error() << "ScriptRepository: " << ss.str()
+                << "\nDetails: deleting entries - json_parser_error: " << ex.what() << std::endl;
+            throw ScriptRepoException(ss.str(), ex.what());
+          }
         }
-      }
 
-      // update the repository list variable
-      // now, it is local_only and it is not inside remote. 
-      // this is necessary for the strange case, where removing locally may fail.
+        // update the repository list variable
+        // now, it is local_only and it is not inside remote.
+        // this is necessary for the strange case, where removing locally may fail.
 
-      entry.status = LOCAL_ONLY; 
-      entry.remote = false; 
-      
-    }// file removed on central repository
+        entry.status = LOCAL_ONLY;
+        entry.remote = false;
 
-  }
+      }      // file removed on central repository
+
+    }
+
+    /** Implements the request to the server to delete one file. It is created as a virtual protected member
+     * to allow creating unittest mocking the dependency on the internet connection. This method requires
+     * internet connection.
+     *
+     * @param url: url from the server that serves the request of removing entries
+     * @param file_path: relative path to the file inside the repository
+     * @param author: requester
+     * @param email: email from author
+     * @param comment: to be converted in git commit
+     * @return The answer from the server (json string)
+     *
+     * The server requires that the path, author, email and comment be given in order to create the commit
+     * for the git repository. Besides, it will ensure that the author and email are the same to the author
+     * and email for the last commit, in order not to allow deleting files that others are owner.
+     *
+     */
+    std::string ScriptRepositoryImpl::doDeleteRemoteFile(const std::string & url,
+        const std::string & file_path, const std::string & author, const std::string & email,
+        const std::string & comment)
+    {
+      using namespace Poco::Net;
+      std::stringstream answer;
+      try
+      {
+        // create the poco httprequest object
+        Poco::URI uri(url);
+        std::string path(uri.getPathAndQuery());
+        HTTPClientSession session(uri.getHost(), uri.getPort());
+        HTTPRequest req(HTTPRequest::HTTP_POST, path, HTTPMessage::HTTP_1_0);
+        g_log.debug() << "Receive request to delete file " << file_path << " using " << url << std::endl;
+
+        // configure proxy
+        std::string proxy_config;
+        unsigned short proxy_port;
+        if (getProxyConfig(proxy_config, proxy_port))
+          session.setProxy(proxy_config, proxy_port);
+        // proxy end
+
+        // fill up the form required from the server to delete one file, with the fields
+        // path, author, comment, email
+        HTMLForm form;
+        form.add("author", author);
+        form.add("mail", email);
+        form.add("comment", comment);
+        form.add("file_n", file_path);
+
+        // send the request to the server
+        form.prepareSubmit(req);
+        std::ostream& ostr = session.sendRequest(req);
+        form.write(ostr);
 
-  /** Implements the request to the server to delete one file. It is created as a virtual protected member
-   * to allow creating unittest mocking the dependency on the internet connection. This method requires 
-   * internet connection. 
-   * 
-   * @param url: url from the server that serves the request of removing entries
-   * @param file_path: relative path to the file inside the repository
-   * @param author: requester
-   * @param email: email from author
-   * @param comment: to be converted in git commit
-   * @return The answer from the server (json string)
-   *
-   * The server requires that the path, author, email and comment be given in order to create the commit
-   * for the git repository. Besides, it will ensure that the author and email are the same to the author
-   * and email for the last commit, in order not to allow deleting files that others are owner. 
-   * 
-   */
-  std::string ScriptRepositoryImpl::doDeleteRemoteFile(const std::string & url, const std::string & file_path, 
-                          const std::string & author, const std::string & email, 
-                          const std::string & comment){
-    using namespace Poco::Net;
-    std::stringstream answer;
-    try{
-      // create the poco httprequest object
-      Poco::URI uri(url); 
-      std::string path(uri.getPathAndQuery());
-      HTTPClientSession session(uri.getHost(), uri.getPort()); 
-      HTTPRequest req(HTTPRequest::HTTP_POST, path, 
-                      HTTPMessage::HTTP_1_0); 
-      g_log.debug() << "Receive request to delete file " << file_path << " using " << url << std::endl; 
-
-      // configure proxy
-      std::string proxy_config; 
-      unsigned short proxy_port; 
-      if (getProxyConfig(proxy_config, proxy_port))
-        session.setProxy(proxy_config, proxy_port);
-      // proxy end
-
-      // fill up the form required from the server to delete one file, with the fields 
-      // path, author, comment, email
-      HTMLForm form; 
-      form.add("author",author); 
-      form.add("mail", email); 
-      form.add("comment",comment);
-      form.add("file_n",file_path);       
-
-      // send the request to the server
-      form.prepareSubmit(req);
-      std::ostream& ostr = session.sendRequest(req);
-      form.write(ostr);
-      
-      // get the answer from the server
-      HTTPResponse response;
-      std::istream & rs = session.receiveResponse(response);
-      
-      g_log.debug() << "ScriptRepository delete status: " 
-                          << response.getStatus() << " " << response.getReason() << std::endl;
-
-      { 
         // get the answer from the server
-        std::stringstream server_reply; 
-        std::string server_reply_str; 
-        Poco::StreamCopier::copyStream(rs, server_reply);
-        server_reply_str= server_reply.str(); 
-        // remove the status message from the end of the reply, 
-        // in order not to get exception from the read_json parser
-        size_t pos = server_reply_str.rfind("}");
-        if (pos != std::string::npos)
-          answer << std::string(server_reply_str.begin() , server_reply_str.begin() + pos + 1); 
-        else
-          answer << server_reply_str; 
+        HTTPResponse response;
+        std::istream & rs = session.receiveResponse(response);
+
+        g_log.debug() << "ScriptRepository delete status: " << response.getStatus() << " "
+            << response.getReason() << std::endl;
+
+        {
+          // get the answer from the server
+          std::stringstream server_reply;
+          std::string server_reply_str;
+          Poco::StreamCopier::copyStream(rs, server_reply);
+          server_reply_str = server_reply.str();
+          // remove the status message from the end of the reply,
+          // in order not to get exception from the read_json parser
+          size_t pos = server_reply_str.rfind("}");
+          if (pos != std::string::npos)
+            answer << std::string(server_reply_str.begin(), server_reply_str.begin() + pos + 1);
+          else
+            answer << server_reply_str;
+        }
+        g_log.debug() << "Form Output: " << answer.str() << std::endl;
+      } catch (Poco::Exception & ex)
+      {
+        throw ScriptRepoException(ex.displayText(), ex.className());
       }
-      g_log.debug() << "Form Output: " << answer.str() << std::endl; 
-    }catch(Poco::Exception & ex){
-      throw ScriptRepoException(ex.displayText(), ex.className()); 
+      return answer.str();
     }
-    return answer.str(); 
-}
-                          
-
-  /** The ScriptRepositoryImpl is set to be valid when the local repository path
-      points to a valid folder that has also the .repository.json and .local.json files. 
-      
-      An invalid repository accepts only the ::install method. 
-   */
-  bool ScriptRepositoryImpl::isValid(void){
-    return valid;
-  }
 
-  /** 
-   * Implements ScriptRepository::check4Update. It downloads the file repository.json
-   * from the central repository and call the listFiles again in order to inspect the current 
-   * state of every entry inside the local repository. For the files marked as AutoUpdate, if there 
-   * is a new version of these files, it downloads the file. As output, it provides a list of
-   * all files that were downloaded automatically.
-   * 
-   *  @return List of all files automatically downloaded.
-  */
-  std::vector<std::string> ScriptRepositoryImpl::check4Update(void) 
-  {
-    g_log.debug() << "ScriptRepositoryImpl checking for update\n" ; 
-    // download the new repository json file
-    // download the repository json
-    std::string rep_json_file = std::string(local_repository).append(".repository.json");
-    std::string backup = std::string(rep_json_file).append("_backup");
-    { 
-      Poco::File f(rep_json_file);
-      f.moveTo(backup); 
-    }
-    try{
-      g_log.debug() << "Download information from the Central Repository status" << std::endl;
-      doDownloadFile(std::string(remote_url).append("repository.json"),
-                   rep_json_file);
-    }catch(...){
-      // restore file
-      Poco::File f(backup); 
-      f.moveTo(rep_json_file);
-      throw;
-    }
-    
-    // remote backup
+    /** The ScriptRepositoryImpl is set to be valid when the local repository path
+     points to a valid folder that has also the .repository.json and .local.json files.
+
+     An invalid repository accepts only the ::install method.
+     */
+    bool ScriptRepositoryImpl::isValid(void)
     {
-      Poco::File bak(backup);
-      bak.remove(); 
+      return valid;
     }
 
-    #if defined(_WIN32) ||  defined(_WIN64)
-    //set the .repository.json and .local.json hidden
-    SetFileAttributes (rep_json_file.c_str(), FILE_ATTRIBUTE_HIDDEN);
-    #endif
-
-    // re list the files
-    g_log.debug() << "Check the status of all files again" << std::endl;
-    listFiles(); 
-    std::vector<std::string> output_list;
-    // look for all the files in the list, to check those that 
-    // has the auto_update and check it they have changed.
-    for(Repository::iterator it = repo.begin(); 
-        it!= repo.end();
-        ++it){
-      if (it->second.auto_update){
-        // THE SAME AS it->status in (REMOTE_CHANGED, BOTH_CHANGED)
-        if (it->second.status & REMOTE_CHANGED){
-          download(it->first); 
-          output_list.push_back(it->first);
-          g_log.debug()  << "Update file " << it->first << " to more recently version available" << std::endl;
+    /**
+     * Implements ScriptRepository::check4Update. It downloads the file repository.json
+     * from the central repository and call the listFiles again in order to inspect the current
+     * state of every entry inside the local repository. For the files marked as AutoUpdate, if there
+     * is a new version of these files, it downloads the file. As output, it provides a list of
+     * all files that were downloaded automatically.
+     *
+     *  @return List of all files automatically downloaded.
+     */
+    std::vector<std::string> ScriptRepositoryImpl::check4Update(void)
+    {
+      g_log.debug() << "ScriptRepositoryImpl checking for update\n";
+      // download the new repository json file
+      // download the repository json
+      std::string rep_json_file = std::string(local_repository).append(".repository.json");
+      std::string backup = std::string(rep_json_file).append("_backup");
+      {
+        Poco::File f(rep_json_file);
+        f.moveTo(backup);
+      }
+      try
+      {
+        g_log.debug() << "Download information from the Central Repository status" << std::endl;
+        doDownloadFile(std::string(remote_url).append("repository.json"), rep_json_file);
+      } catch (...)
+      {
+        // restore file
+        Poco::File f(backup);
+        f.moveTo(rep_json_file);
+        throw;
+      }
+
+      // remote backup
+      {
+        Poco::File bak(backup);
+        bak.remove();
+      }
+
+#if defined(_WIN32) ||  defined(_WIN64)
+      //set the .repository.json and .local.json hidden
+      SetFileAttributes (rep_json_file.c_str(), FILE_ATTRIBUTE_HIDDEN);
+#endif
+
+      // re list the files
+      g_log.debug() << "Check the status of all files again" << std::endl;
+      listFiles();
+      std::vector<std::string> output_list;
+      // look for all the files in the list, to check those that
+      // has the auto_update and check it they have changed.
+      for (Repository::iterator it = repo.begin(); it != repo.end(); ++it)
+      {
+        if (it->second.auto_update)
+        {
+          // THE SAME AS it->status in (REMOTE_CHANGED, BOTH_CHANGED)
+          if (it->second.status & REMOTE_CHANGED)
+          {
+            download(it->first);
+            output_list.push_back(it->first);
+            g_log.debug() << "Update file " << it->first << " to more recently version available"
+                << std::endl;
+          }
         }
       }
+      g_log.debug() << "ScriptRepositoryImpl::checking for update finished\n";
+      return output_list;
     }
-    g_log.debug() << "ScriptRepositoryImpl::checking for update finished\n" ; 
-    return output_list;
-  }
 
-  /** 
-      @todo describe
-  */
-  void ScriptRepositoryImpl::setIgnorePatterns(const std::string & patterns){
-    ConfigServiceImpl & config = ConfigService::Instance();
-    std::string ignore = config.getString("ScriptRepositoryIgnore"); 
-    if (ignore != patterns){
-      config.setString("ScriptRepositoryIgnore", patterns); 
-      config.saveConfig(config.getUserFilename()); 
-      std::string newignore=patterns; 
-      boost::replace_all(ignore,"/","\\/");
-      boost::replace_all(newignore,";","|");      
-      boost::replace_all(newignore,".","\\.");
-      boost::replace_all(newignore,"*",".*");      
-      ignoreregex = std::string("(").append(newignore).append(")");
+    /**
+     @todo describe
+     */
+    void ScriptRepositoryImpl::setIgnorePatterns(const std::string & patterns)
+    {
+      ConfigServiceImpl & config = ConfigService::Instance();
+      std::string ignore = config.getString("ScriptRepositoryIgnore");
+      if (ignore != patterns)
+      {
+        config.setString("ScriptRepositoryIgnore", patterns);
+        config.saveConfig(config.getUserFilename());
+        std::string newignore = patterns;
+        boost::replace_all(ignore, "/", "\\/");
+        boost::replace_all(newignore, ";", "|");
+        boost::replace_all(newignore, ".", "\\.");
+        boost::replace_all(newignore, "*", ".*");
+        ignoreregex = std::string("(").append(newignore).append(")");
+      }
     }
-  };
-  /** 
-      @todo describe
-  */
-  std::string ScriptRepositoryImpl::ignorePatterns(void){    
-    ConfigServiceImpl & config = ConfigService::Instance();
-    std::string ignore_string = config.getString("ScriptRepositoryIgnore",""); 
-    return ignore_string;
-  }
-
-  /** 
-   * Configure the AutoUpdate, in order to be able to check if the user selected 
-   * to update this entry. 
-   * @param input_path : the path that identifies the entry
-   * @param option: true or false to indicate if it is set to auto update. 
-   *
-   * These configurations will be used at check4update, to download all entries that 
-   * are set to auto update.
-  */
-  int ScriptRepositoryImpl::setAutoUpdate(const std::string & input_path, bool option){
-    ensureValidRepository();
-    std::string path = convertPath(input_path);
-    std::vector<std::string> files_to_update;
-    for (Repository::reverse_iterator it = repo.rbegin();
-            it != repo.rend();
-              ++it){
-         // for every entry, it takes the path and RepositoryEntry
-         std::string entry_path = it->first;
-         RepositoryEntry & entry = it->second;
-         if (entry_path.find(path) == 0 && entry.status != REMOTE_ONLY  && entry.status != LOCAL_ONLY)
-        	 	files_to_update.push_back(entry_path);
+    ;
+    /**
+     @todo describe
+     */
+    std::string ScriptRepositoryImpl::ignorePatterns(void)
+    {
+      ConfigServiceImpl & config = ConfigService::Instance();
+      std::string ignore_string = config.getString("ScriptRepositoryIgnore", "");
+      return ignore_string;
     }
 
-    //g_log.debug() << "SetAutoUpdate... begin" << std::endl;
-    try
+    /**
+     * Configure the AutoUpdate, in order to be able to check if the user selected
+     * to update this entry.
+     * @param input_path : the path that identifies the entry
+     * @param option: true or false to indicate if it is set to auto update.
+     *
+     * These configurations will be used at check4update, to download all entries that
+     * are set to auto update.
+     */
+    int ScriptRepositoryImpl::setAutoUpdate(const std::string & input_path, bool option)
     {
-    	BOOST_FOREACH(auto & path, files_to_update){
-    		RepositoryEntry & entry = repo.at(path);
-    		entry.auto_update = option;
-    		updateLocalJson(path,entry); // TODO: update local json without opening and close file many times
-    	}
-    }catch(const std::out_of_range & ex)
+      ensureValidRepository();
+      std::string path = convertPath(input_path);
+      std::vector<std::string> files_to_update;
+      for (Repository::reverse_iterator it = repo.rbegin(); it != repo.rend(); ++it)
+      {
+        // for every entry, it takes the path and RepositoryEntry
+        std::string entry_path = it->first;
+        RepositoryEntry & entry = it->second;
+        if (entry_path.find(path) == 0 && entry.status != REMOTE_ONLY && entry.status != LOCAL_ONLY)
+          files_to_update.push_back(entry_path);
+      }
+
+      //g_log.debug() << "SetAutoUpdate... begin" << std::endl;
+      try
+      {
+        BOOST_FOREACH(auto & path, files_to_update){
+        RepositoryEntry & entry = repo.at(path);
+        entry.auto_update = option;
+        updateLocalJson(path,entry); // TODO: update local json without opening and close file many times
+      }
+    }
+    catch(const std::out_of_range & ex)
     {
-    	// fixme: readable exception
-    	throw ScriptRepoException(ex.what());
+      // fixme: readable exception
+      throw ScriptRepoException(ex.what());
     }
     //g_log.debug() << "SetAutoUpdate... end" << std::endl;
-    return (int)files_to_update.size();
-  }
-  
-
-/** Download a url and fetch it inside the local path given.
-      
-      Provide a clear separation between the logic behind the ScriptRepositoryImpl and 
-      the Mantid Web Service. This is the only method for the downloading and update
-      that performs a real connection to the Mantid Web Service. 
-      
-      This method was present at the Script Repository Design, as an strategy to perform 
-      unit tests, but also, helps the definition of a clear separation of the logic and 
-      organization of the ScriptRepository, from the conneciton to the Mantid Web service, 
-      making it more decoupled. 
-      
-      @param url_file: Define a valid URL for the file to be downloaded. Eventually, it may give
-      any valid http path. For example: 
-      
-      url_file = "http://www.google.com" 
-      
-      url_file = "http://mantidweb/repository/README.md"
-      
-      The result is to connect to the http server, and request the path given.
-      
-      The answer, will be inserted at the local_file_path. 
-      
-      @param local_file_path [optional] : Provide the destination of the file downloaded at the url_file. 
-      If an empty string is provided (default value), it will discard the result, but it will ensure that
-      the connection and the download was done correctly.
-      
-      @exception ScriptRepoException: For any unexpected behavior.      
-  */
-  void ScriptRepositoryImpl::doDownloadFile(const std::string & url_file, 
-                                            const std::string & local_file_path)
-  {
-    g_log.debug() << "DoDownloadFile : " << url_file << " to file: " << local_file_path << std::endl; 
-    // get the information from url_file
-    Poco::URI uri(url_file);
-    std::string path(uri.getPathAndQuery());
-    if (path.empty()) path = "/";
-    std::string given_path; 
-    if (path.find("/scriptrepository") != std::string::npos)
-      given_path = std::string(path.begin()+18, path.end());// remove the "/scriptrepository/" from the path
-    else
-      given_path = path; 
-    //Configure Poco HTTP Client Session
-    try{
-      Poco::Net::HTTPClientSession session(uri.getHost(), uri.getPort());
-      session.setTimeout(Poco::Timespan(2,0));// 2 secconds	
-
-      // configure proxy
-      std::string proxy_config; 
-      unsigned short proxy_port; 
-      if (getProxyConfig(proxy_config, proxy_port))
-        session.setProxy(proxy_config, proxy_port);
-      // proxy end
-
-      Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, path,
-                                     Poco::Net::HTTPMessage::HTTP_1_1);
-      Poco::Net::HTTPResponse response;
-
-      session.sendRequest(request); 
-
-      std::istream & rs = session.receiveResponse(response); 
-      g_log.debug() << "Answer from mantid web: " << response.getStatus() << " " 
-                    << response.getReason() << std::endl; 
-      if (response.getStatus() == Poco::Net::HTTPResponse::HTTP_OK ){
-        if (local_file_path.empty()){
-          // ignore the answer, trow it away
-          Poco::NullOutputStream null; 
-          Poco::StreamCopier::copyStream(rs,null); 
-          return;
-        }else{
-          // copy the file
-          Poco::FileStream _out(local_file_path); 
-          Poco::StreamCopier::copyStream(rs,_out); 
-          _out.close();           
+      return (int) files_to_update.size();
+    }
+
+    /** Download a url and fetch it inside the local path given.
+
+     Provide a clear separation between the logic behind the ScriptRepositoryImpl and
+     the Mantid Web Service. This is the only method for the downloading and update
+     that performs a real connection to the Mantid Web Service.
+
+     This method was present at the Script Repository Design, as an strategy to perform
+     unit tests, but also, helps the definition of a clear separation of the logic and
+     organization of the ScriptRepository, from the conneciton to the Mantid Web service,
+     making it more decoupled.
+
+     @param url_file: Define a valid URL for the file to be downloaded. Eventually, it may give
+     any valid http path. For example:
+
+     url_file = "http://www.google.com"
+
+     url_file = "http://mantidweb/repository/README.md"
+
+     The result is to connect to the http server, and request the path given.
+
+     The answer, will be inserted at the local_file_path.
+
+     @param local_file_path [optional] : Provide the destination of the file downloaded at the url_file.
+     If an empty string is provided (default value), it will discard the result, but it will ensure that
+     the connection and the download was done correctly.
+
+     @exception ScriptRepoException: For any unexpected behavior.
+     */
+    void ScriptRepositoryImpl::doDownloadFile(const std::string & url_file,
+        const std::string & local_file_path)
+    {
+      g_log.debug() << "DoDownloadFile : " << url_file << " to file: " << local_file_path << std::endl;
+      // get the information from url_file
+      Poco::URI uri(url_file);
+      std::string path(uri.getPathAndQuery());
+      if (path.empty())
+        path = "/";
+      std::string given_path;
+      if (path.find("/scriptrepository") != std::string::npos)
+        given_path = std::string(path.begin() + 18, path.end()); // remove the "/scriptrepository/" from the path
+      else
+        given_path = path;
+      //Configure Poco HTTP Client Session
+      try
+      {
+        Poco::Net::HTTPClientSession session(uri.getHost(), uri.getPort());
+        session.setTimeout(Poco::Timespan(3, 0)); // 3 secconds
+
+        // configure proxy
+        std::string proxy_config;
+        unsigned short proxy_port;
+        if (getProxyConfig(proxy_config, proxy_port))
+          session.setProxy(proxy_config, proxy_port);
+        // proxy end
+
+        Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, path,
+            Poco::Net::HTTPMessage::HTTP_1_1);
+        Poco::Net::HTTPResponse response;
+
+        session.sendRequest(request);
+
+        std::istream & rs = session.receiveResponse(response);
+        g_log.debug() << "Answer from mantid web: " << response.getStatus() << " "
+            << response.getReason() << std::endl;
+        if (response.getStatus() == Poco::Net::HTTPResponse::HTTP_OK)
+        {
+          if (local_file_path.empty())
+          {
+            // ignore the answer, trow it away
+            Poco::NullOutputStream null;
+            Poco::StreamCopier::copyStream(rs, null);
+            return;
+          }
+          else
+          {
+            // copy the file
+            Poco::FileStream _out(local_file_path);
+            Poco::StreamCopier::copyStream(rs, _out);
+            _out.close();
+          }
         }
-      }else{
-        std::stringstream info;
-        std::stringstream ss;
-        Poco::StreamCopier::copyStream(rs,ss);        
-        if (response.getStatus() == Poco::Net::HTTPResponse::HTTP_NOT_FOUND)
-          info << "Failed to download " << given_path 
-               << " because it failed to find this file at the link " 
-               << "<a href=\""
-               << url_file << "\">.\n"
-               << "Hint. Check that link is correct and points to the correct server "
-               << "which you can find at <a href=\"http://www.mantidproject.org/ScriptRepository\">"
-               << "Script Repository Help Page</a>"; 
-        else{          
-          // show the error
-          // fixme, process this error          
-          info << response.getReason();
-          info << ss.str();
+        else
+        {
+          std::stringstream info;
+          std::stringstream ss;
+          Poco::StreamCopier::copyStream(rs, ss);
+          if (response.getStatus() == Poco::Net::HTTPResponse::HTTP_NOT_FOUND)
+            info << "Failed to download " << given_path
+                << " because it failed to find this file at the link " << "<a href=\"" << url_file
+                << "\">.\n" << "Hint. Check that link is correct and points to the correct server "
+                << "which you can find at <a href=\"http://www.mantidproject.org/ScriptRepository\">"
+                << "Script Repository Help Page</a>";
+          else
+          {
+            // show the error
+            // fixme, process this error
+            info << response.getReason();
+            info << ss.str();
+          }
+          throw ScriptRepoException(info.str(), ss.str());
         }
-        throw ScriptRepoException(info.str(), ss.str()); 
+      } catch (Poco::Net::HostNotFoundException & ex)
+      {
+        // this exception occurrs when the pc is not connected to the internet
+        std::stringstream info;
+        info << "Failed to download " << given_path << " because there is no connection to the host "
+            << ex.message() << ".\nHint: Check your connection following this link: <a href=\""
+            << url_file << "\">" << given_path << "</a>";
+        throw ScriptRepoException(info.str(), ex.displayText(), __FILE__, __LINE__);
+
+      } catch (Poco::Exception & ex)
+      {
+        throw pocoException("Connection and request failed", ex);
       }
-    }catch(Poco::Net::HostNotFoundException & ex){
-      // this exception occurrs when the pc is not connected to the internet
-      std::stringstream info; 
-      info <<  "Failed to download " << given_path << " because there is no connection to the host "
-           << ex.message() << ".\nHint: Check your connection following this link: <a href=\""
-           << url_file << "\">" << given_path << "</a>";
-      throw ScriptRepoException(info.str(), ex.displayText(), __FILE__, __LINE__);
-    
-    }catch (Poco::Exception & ex){
-      throw pocoException("Connection and request failed", ex);
     }
-  }
 
-  /** 
-      @todo describe
-  */
-  void ScriptRepositoryImpl::parseCentralRepository(Repository & repo){    
-    ptree pt; 
-    std::string filename = std::string(local_repository).append(".repository.json");
-    try{
-      read_json(filename, pt);
-      
-      BOOST_FOREACH(ptree::value_type & file, pt){
+    /**
+     @todo describe
+     */
+    void ScriptRepositoryImpl::parseCentralRepository(Repository & repo)
+    {
+      ptree pt;
+      std::string filename = std::string(local_repository).append(".repository.json");
+      try
+      {
+        read_json(filename, pt);
+
+        BOOST_FOREACH(ptree::value_type & file, pt){
         if (!isEntryValid(file.first))
-          continue;
+        continue;
         //g_log.debug() << "Inserting : file.first " << file.first << std::endl;
         RepositoryEntry & entry = repo[file.first];
         entry.remote = true;
         entry.directory = file.second.get("directory",false);
         entry.pub_date = DateAndTime(file.second.get<std::string>("pub_date"));
-        entry.description = file.second.get("description",""); 
-        entry.author = file.second.get("author",""); 
+        entry.description = file.second.get("description","");
+        entry.author = file.second.get("author","");
         entry.status = BOTH_UNCHANGED;
       }
-      
-    }catch (boost::property_tree::json_parser_error & ex){
+
+    }
+    catch (boost::property_tree::json_parser_error & ex)
+    {
+      std::stringstream ss;
+      ss << "Corrupted database : " << filename;
+
+      g_log.error() << "ScriptRepository: " << ss.str()
+      << "\nDetails: json_parser_error: " << ex.what() << std::endl;
+      throw ScriptRepoException(ss.str(), ex.what());
+    }
+    catch(std::exception & ex)
+    {
       std::stringstream ss;
-      ss << "Corrupted database : " << filename; 
-      
-      g_log.error() << "ScriptRepository: " << ss.str() 
-                    << "\nDetails: json_parser_error: " << ex.what() << std::endl; 
-      throw ScriptRepoException(ss.str(), ex.what()); 
-    }catch(std::exception & ex){
-      std::stringstream ss; 
       ss << "RuntimeError: checking database >> " << ex.what();
       g_log.error() << "ScriptRepository: " << ss.str() << ". Input: " << filename << std::endl;
-      throw ScriptRepoException(ss.str(), filename); 
-    }catch(...){
+      throw ScriptRepoException(ss.str(), filename);
+    }
+    catch(...)
+    {
       g_log.error() << "FATAL Unknown error (checking database): " << filename << std::endl;
       throw;
     }
   }
+  /**
+   @todo describe
+   */
+    void ScriptRepositoryImpl::parseLocalRepository(Repository & repo)
+    {
+      recursiveParsingDirectories(local_repository, repo);
+    }
     /** 
-      @todo describe
-  */
-  void ScriptRepositoryImpl::parseLocalRepository(Repository & repo){
-    recursiveParsingDirectories(local_repository, repo); 
-  }
-  /** 
-      This method will parse through all the entries inside the local.json 
-      file to get the information about the downloaded date and the version 
-      of the downloaded file. This information will be used to extract the 
-      status of the file entry. 
-
-      All the entries should be already created before, because, if the entry 
-      was once downloaded, it should be already at the central repository, 
-      as well as in the local file system.
-
-      The parseDownloadedEntries is not expected to create any new entry.
-      If it finds that the entry is not set as local.
-      
-      The parseDownloadedEntries will remove all the entries that are not 
-      shown anymore inside the local file system or the central repository. 
-      This is usefull to understand that a file has been deleted. 
-
-      :param repo: Reference to the pointer so to update it with the information 
+     This method will parse through all the entries inside the local.json
+     file to get the information about the downloaded date and the version
+     of the downloaded file. This information will be used to extract the
+     status of the file entry.
+
+     All the entries should be already created before, because, if the entry
+     was once downloaded, it should be already at the central repository,
+     as well as in the local file system.
+
+     The parseDownloadedEntries is not expected to create any new entry.
+     If it finds that the entry is not set as local.
+
+     The parseDownloadedEntries will remove all the entries that are not
+     shown anymore inside the local file system or the central repository.
+     This is usefull to understand that a file has been deleted.
+
+     :param repo: Reference to the pointer so to update it with the information
      
-  */
-  void ScriptRepositoryImpl::parseDownloadedEntries(Repository & repo){
-    ptree pt; 
-    std::string filename = std::string(local_repository).append(".local.json");
-    std::vector<std::string> entries_to_delete;
-    Repository::iterator entry_it;
-    std::set<std::string> folders_of_deleted;
-    try{
-      read_json(filename, pt);
-      BOOST_FOREACH(ptree::value_type & file, pt){
-        entry_it = repo.find(file.first);        
-        if (entry_it != repo.end()){
+     */
+    void ScriptRepositoryImpl::parseDownloadedEntries(Repository & repo)
+    {
+      ptree pt;
+      std::string filename = std::string(local_repository).append(".local.json");
+      std::vector<std::string> entries_to_delete;
+      Repository::iterator entry_it;
+      std::set<std::string> folders_of_deleted;
+      try
+      {
+        read_json(filename, pt);
+        BOOST_FOREACH(ptree::value_type & file, pt){
+        entry_it = repo.find(file.first);
+        if (entry_it != repo.end())
+        {
           // entry found, so, lets update the entry
-          if (entry_it->second.local && entry_it->second.remote){
+          if (entry_it->second.local && entry_it->second.remote)
+          {
             // this is the normal condition, the downloaded entry
             // was found at the local file system and at the remote repository
 
@@ -1421,203 +1509,227 @@ namespace API
             entry_it->second.downloaded_date = DateAndTime(file.second.get<std::string>("downloaded_date"));
             entry_it->second.auto_update = (file.second.get<std::string>("auto_update",std::string()) == "true");
 
-          }else{
+          }
+          else
+          {
             // if the entry was not found locally or remotelly, this means 
             // that this entry was deleted (remotelly or locally), 
             // so it should not appear at local_repository json any more
             entries_to_delete.push_back(file.first);
             folders_of_deleted.insert(getParentFolder(file.first));
           }
-        }else{
+        }
+        else
+        {
           // this entry was never created before, so it should not
           // exist in local repository json
           entries_to_delete.push_back(file.first);
         }
-        
-      }// end loop FOREACH entry in local json
+
+      }          // end loop FOREACH entry in local json
 
       // delete the entries to be deleted in json file
-      if (entries_to_delete.size() > 0){
-        
-        // clear the auto_update flag from the folders if the user deleted files
-      	BOOST_FOREACH(const std::string & folder, folders_of_deleted){
-      		ptree::assoc_iterator pt_entry = pt.find(folder);
-      		if (pt_entry == pt.not_found())
-      			continue;
-
-      		entry_it = repo.find(folder);
-      		if (entry_it == repo.end())
-      			continue;
-
-      		if (entry_it->second.auto_update){
-      				entry_it->second.auto_update = false;
-      				entries_to_delete.push_back(folder);
-      		}
-      	}
+        if (entries_to_delete.size() > 0)
+        {
+
+          // clear the auto_update flag from the folders if the user deleted files
+          BOOST_FOREACH(const std::string & folder, folders_of_deleted){
+          ptree::assoc_iterator pt_entry = pt.find(folder);
+          if (pt_entry == pt.not_found())
+          continue;
+
+          entry_it = repo.find(folder);
+          if (entry_it == repo.end())
+          continue;
+
+          if (entry_it->second.auto_update)
+          {
+            entry_it->second.auto_update = false;
+            entries_to_delete.push_back(folder);
+          }
+        }
 
         for (std::vector<std::string>::iterator it = entries_to_delete.begin();
-             it != entries_to_delete.end();
-             ++it){
+            it != entries_to_delete.end();
+            ++it)
+        {
           // remove this entry
           pt.erase(*it);
         }
 #if defined(_WIN32) ||  defined(_WIN64)
         //set the .repository.json and .local.json not hidden (to be able to edit it)
-        SetFileAttributes( filename.c_str(), FILE_ATTRIBUTE_NORMAL);     
+        SetFileAttributes( filename.c_str(), FILE_ATTRIBUTE_NORMAL);
 #endif
         write_json(filename,pt);
 #if defined(_WIN32) ||  defined(_WIN64)
         //set the .repository.json and .local.json hidden
-        SetFileAttributes( filename.c_str(), FILE_ATTRIBUTE_HIDDEN);     
+        SetFileAttributes( filename.c_str(), FILE_ATTRIBUTE_HIDDEN);
 #endif
       }
-    }catch (boost::property_tree::json_parser_error & ex){
+    }
+    catch (boost::property_tree::json_parser_error & ex)
+    {
+      std::stringstream ss;
+      ss << "Corrupted local database : " << filename;
+
+      g_log.error() << "ScriptRepository: " << ss.str()
+      << "\nDetails: downloaded entries - json_parser_error: " << ex.what() << std::endl;
+      throw ScriptRepoException(ss.str(), ex.what());
+    }
+    catch(std::exception & ex)
+    {
       std::stringstream ss;
-      ss << "Corrupted local database : " << filename; 
-      
-      g_log.error() << "ScriptRepository: " << ss.str() 
-                    << "\nDetails: downloaded entries - json_parser_error: " << ex.what() << std::endl; 
-      throw ScriptRepoException(ss.str(), ex.what()); 
-    }catch(std::exception & ex){
-      std::stringstream ss; 
       ss << "RuntimeError: checking downloaded entries >> " << ex.what();
       g_log.error() << "ScriptRepository: " << ss.str() << ". Input: " << filename << std::endl;
-      throw ScriptRepoException(ss.str(), filename); 
-    }catch(...){
+      throw ScriptRepoException(ss.str(), filename);
+    }
+    catch(...)
+    {
       g_log.error() << "FATAL Unknown error (checking downloaded entries): " << filename << std::endl;
       throw;
-    }   
-  }
-  
-  void ScriptRepositoryImpl::updateLocalJson(const std::string & path, const RepositoryEntry & entry){
-    ptree local_json; 
-    std::string filename = std::string(local_repository).append(".local.json");
-    read_json(filename, local_json); 
-
-    ptree::const_assoc_iterator it = local_json.find(path);
-    if (it == local_json.not_found()){
-      boost::property_tree::ptree array;
-      array.put(std::string("downloaded_date"), entry.downloaded_date.toFormattedString());
-      array.put(std::string("downloaded_pubdate"), entry.downloaded_pubdate.toFormattedString());
-      //      array.push_back(std::make_pair("auto_update",entry.auto_update)));
-      local_json.push_back( std::pair<std::string, boost::property_tree::basic_ptree<std::string,std::string> >(path,array) );
-    }else{
-      local_json.put(
-                boost::property_tree::ptree::path_type( std::string(path).append("!downloaded_pubdate"), '!'), 
-                entry.downloaded_pubdate.toFormattedString().c_str());
-      local_json.put(
-                boost::property_tree::ptree::path_type( std::string(path).append("!downloaded_date"), '!'), 
-                entry.downloaded_date.toFormattedString().c_str());
-      std::string auto_update_op = (const char *)((entry.auto_update)?"true":"false");
-      std::string key = std::string(path).append("!auto_update");     
-      local_json.put(
-                     boost::property_tree::ptree::path_type(key,'!'),
-                     auto_update_op);
     }
-    //g_log.debug() << "Update LOCAL JSON FILE" << std::endl; 
-    #if defined(_WIN32) ||  defined(_WIN64)
-    //set the .repository.json and .local.json not hidden to be able to edit it
-    SetFileAttributes( filename.c_str(), FILE_ATTRIBUTE_NORMAL);     
-    #endif
-    write_json(filename, local_json); 
-    #if defined(_WIN32) ||  defined(_WIN64)
-    //set the .repository.json and .local.json hidden
-    SetFileAttributes( filename.c_str(), FILE_ATTRIBUTE_HIDDEN);     
-    #endif
   }
 
+    void ScriptRepositoryImpl::updateLocalJson(const std::string & path, const RepositoryEntry & entry)
+    {
+      ptree local_json;
+      std::string filename = std::string(local_repository).append(".local.json");
+      read_json(filename, local_json);
 
-  std::string ScriptRepositoryImpl::printStatus(SCRIPTSTATUS st){
-    switch(st){
-    case BOTH_UNCHANGED:
-      return "Unchanged"; 
-    case LOCAL_ONLY:
-      return "LocalOnly"; 
-    case LOCAL_CHANGED:
-      return "LocalChanged"; 
-    case REMOTE_ONLY:
-      return "RemoteOnly"; 
-    case REMOTE_CHANGED:
-      return "RemoteChanged";
-    case BOTH_CHANGED:
-      return "BothChanged";
-    default:
-      return "FAULT: INVALID STATUS";     
+      ptree::const_assoc_iterator it = local_json.find(path);
+      if (it == local_json.not_found())
+      {
+        boost::property_tree::ptree array;
+        array.put(std::string("downloaded_date"), entry.downloaded_date.toFormattedString());
+        array.put(std::string("downloaded_pubdate"), entry.downloaded_pubdate.toFormattedString());
+        //      array.push_back(std::make_pair("auto_update",entry.auto_update)));
+        local_json.push_back(
+            std::pair<std::string, boost::property_tree::basic_ptree<std::string, std::string> >(path,
+                array));
+      }
+      else
+      {
+        local_json.put(
+            boost::property_tree::ptree::path_type(std::string(path).append("!downloaded_pubdate"), '!'),
+            entry.downloaded_pubdate.toFormattedString().c_str());
+        local_json.put(
+            boost::property_tree::ptree::path_type(std::string(path).append("!downloaded_date"), '!'),
+            entry.downloaded_date.toFormattedString().c_str());
+        std::string auto_update_op = (const char *) ((entry.auto_update) ? "true" : "false");
+        std::string key = std::string(path).append("!auto_update");
+        local_json.put(boost::property_tree::ptree::path_type(key, '!'), auto_update_op);
+      }
+      //g_log.debug() << "Update LOCAL JSON FILE" << std::endl;
+#if defined(_WIN32) ||  defined(_WIN64)
+      //set the .repository.json and .local.json not hidden to be able to edit it
+      SetFileAttributes( filename.c_str(), FILE_ATTRIBUTE_NORMAL);
+#endif
+      write_json(filename, local_json);
+#if defined(_WIN32) ||  defined(_WIN64)
+      //set the .repository.json and .local.json hidden
+      SetFileAttributes( filename.c_str(), FILE_ATTRIBUTE_HIDDEN);
+#endif
     }
-      return "FAULT: INVALID STATUS";     
-  }
-  /** 
-      @todo describe
-  */
-  void ScriptRepositoryImpl::recursiveParsingDirectories(const std::string & path,
-                                                         Repository & repo){
-    using Poco::DirectoryIterator;
-    DirectoryIterator end;
-    try{
-      for (DirectoryIterator it(path); it != end; ++it){
-        std::string entry_path = convertPath(it->path()); 
-        
-        if (!isEntryValid(entry_path))
-          continue;
-        
-        
-        //g_log.debug() << "RecursiveParsing: insert : " << entry_path << std::endl; 
-        RepositoryEntry & entry = repo[entry_path]; 
-        entry.local = true; 
-        entry.current_date = DateAndTime(
-                                         Poco::DateTimeFormatter::format(it->getLastModified(),
-                                                                         timeformat)); 
-        entry.directory = it->isDirectory(); 
-        if (it->isDirectory())
-          recursiveParsingDirectories(it->path(),repo);
+
+    std::string ScriptRepositoryImpl::printStatus(SCRIPTSTATUS st)
+    {
+      switch (st)
+      {
+      case BOTH_UNCHANGED:
+        return "Unchanged";
+      case LOCAL_ONLY:
+        return "LocalOnly";
+      case LOCAL_CHANGED:
+        return "LocalChanged";
+      case REMOTE_ONLY:
+        return "RemoteOnly";
+      case REMOTE_CHANGED:
+        return "RemoteChanged";
+      case BOTH_CHANGED:
+        return "BothChanged";
+      default:
+        return "FAULT: INVALID STATUS";
       }
-    }catch(Poco::Exception & ex){
-      g_log.error() << "ScriptRepository: failed to parse the directory: " << path << " : "
-                    << ex.className() << " : " << ex.displayText() << std::endl; 
-      // silently ignore this exception.
-      // throw ScriptRepoException(ex.displayText()); 
-    }catch(std::exception & ex){
-      std::stringstream ss; 
-      ss << "unknown exception while checking local file system. " << ex.what() << ". Input = " << path ;
-      g_log.error() << "ScriptRepository: " << ss.str() << std::endl; 
-      throw ScriptRepoException(ss.str()); 
+      return "FAULT: INVALID STATUS";
     }
-  }
+    /**
+     @todo describe
+     */
+    void ScriptRepositoryImpl::recursiveParsingDirectories(const std::string & path, Repository & repo)
+    {
+      using Poco::DirectoryIterator;
+      DirectoryIterator end;
+      try
+      {
+        for (DirectoryIterator it(path); it != end; ++it)
+        {
+          std::string entry_path = convertPath(it->path());
+
+          if (!isEntryValid(entry_path))
+            continue;
+
+          //g_log.debug() << "RecursiveParsing: insert : " << entry_path << std::endl;
+          RepositoryEntry & entry = repo[entry_path];
+          entry.local = true;
+          entry.current_date = DateAndTime(
+              Poco::DateTimeFormatter::format(it->getLastModified(), timeformat));
+          entry.directory = it->isDirectory();
+          if (it->isDirectory())
+            recursiveParsingDirectories(it->path(), repo);
+        }
+      } catch (Poco::Exception & ex)
+      {
+        g_log.error() << "ScriptRepository: failed to parse the directory: " << path << " : "
+            << ex.className() << " : " << ex.displayText() << std::endl;
+        // silently ignore this exception.
+        // throw ScriptRepoException(ex.displayText());
+      } catch (std::exception & ex)
+      {
+        std::stringstream ss;
+        ss << "unknown exception while checking local file system. " << ex.what() << ". Input = "
+            << path;
+        g_log.error() << "ScriptRepository: " << ss.str() << std::endl;
+        throw ScriptRepoException(ss.str());
+      }
+    }
+
+    bool ScriptRepositoryImpl::isEntryValid(const std::string & path)
+    {
+      //g_log.debug() << "Is valid entry? " << path << std::endl;
+      if (path == ".repository.json")
+        return false;
+      if (path == ".local.json")
+        return false;
+      // hide everything under system folder
+      if (path == "system" || path.find("system/") == 0)
+        return false;
+
+      try
+      {
+        boost::regex re1(ignoreregex);
 
-  bool ScriptRepositoryImpl::isEntryValid(const std::string & path){
-    //g_log.debug() << "Is valid entry? " << path << std::endl; 
-    if (path == ".repository.json")
-      return false;
-    if (path == ".local.json")
-      return false;
-    // hide everything under system folder
-    if (path == "system" || path.find("system/") == 0)
-      return false; 
-
-    try{
-      boost::regex re1(ignoreregex);
-    
-      if (boost::regex_match(path,re1))
-      return false;
-    // TODO: apply the pattern ingore checking
-    }catch(std::exception & ex){
-      g_log.warning() << "Pattern exception : " << ignoreregex << ": "
-                      << ex.what() << std::endl; 
+        if (boost::regex_match(path, re1))
+          return false;
+        // TODO: apply the pattern ingore checking
+      } catch (std::exception & ex)
+      {
+        g_log.warning() << "Pattern exception : " << ignoreregex << ": " << ex.what() << std::endl;
+      }
+      return true;
     }
-    return true;
-  }
 
-  std::string ScriptRepositoryImpl::getParentFolder(const std::string & file){
-  	size_t pos = file.rfind("/");
-  	if (pos == file.npos)
-  	{
-  		return "";
-  	}
+    std::string ScriptRepositoryImpl::getParentFolder(const std::string & file)
+    {
+      size_t pos = file.rfind("/");
+      if (pos == file.npos)
+      {
+        return "";
+      }
 
-  	return std::string(file.begin(),file.begin()+pos);
-  }
+      return std::string(file.begin(), file.begin() + pos);
+    }
 
-  /**
+    /**
      Transform the file path in a path related to the local repository.
      Set the flag file_is_local to true if the file already exists inside
      the local machine.
@@ -1632,251 +1744,109 @@ namespace API
      // consider the local repository at c:\MantidInstall\scripts_repo
      convertPath("c:\MantidInstall\scripts_repo\README.md", flag)// returns README.md
      @endcode
-  */
-  std::string ScriptRepositoryImpl::convertPath(const std::string & path){
-    std::vector<std::string> lookAfter; 
-    using Poco::Path;
-    lookAfter.push_back(Path::current()); 
+     */
+    std::string ScriptRepositoryImpl::convertPath(const std::string & path)
+    {
+      std::vector<std::string> lookAfter;
+      using Poco::Path;
+      lookAfter.push_back(Path::current());
 //    lookAfter.push_back(Path::home()); 
-    lookAfter.push_back(local_repository); 
-  
-    Path pathFound; 
-    bool file_is_local;
-
-    // try to find the given path at one of the paths at lookAfter.
-    file_is_local = Path::find(lookAfter.begin(), lookAfter.end(), path, pathFound);
-    // get the absolute path: 
-    std::string absolute_path;
-    if (file_is_local)      
-      absolute_path = pathFound.absolute().toString(); 
-    else
-      absolute_path = path;
-    //g_log.debug() << "ConvertPath: Entered: " << path  << " and local_repository: " << local_repository << std::endl; 
-    // this is necessary because in windows, the absolute path is given with \ slash.
-    boost::replace_all(absolute_path,"\\","/");     
-    
-    //check it the path is inside the repository: 
-    size_t pos = absolute_path.find(local_repository); 
-
-    if (pos == std::string::npos){      
-      // the given file is not inside the local repository. It can not be converted.
-      return path; 
-    }else{
-      // the path is inside the local repository
-      // remove the repo_path from te absolute path 
-      // +1 to remove the slash /      
-      std::string retpath(absolute_path.begin() + pos + local_repository.size(), absolute_path.end()); 
-      //g_log.debug() << "ConvertPath: Entered: " << path << " return: " << retpath << std::endl; 
-      return retpath;
-    }
-    return path; 
-  }
+      lookAfter.push_back(local_repository);
 
-#if defined(_WIN32) || defined(_WIN64)
-bool get_proxy_configuration_win(const std::string & target_url, std::string &proxy_str, std::string & err_msg){
-HINTERNET  hSession = NULL;
-  std::wstring proxy;
-  std::wstring wtarget_url;
-  if (target_url.find("http://") == std::string::npos){
-    wtarget_url = L"http://";    
-  }
-  wtarget_url += std::wstring(target_url.begin(),target_url.end());  
-  bool fail = false; 
-  std::stringstream info;
-  WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ie_proxy;
-  WINHTTP_AUTOPROXY_OPTIONS proxy_options;
-  WINHTTP_PROXY_INFO proxy_info;
-  ZeroMemory( &proxy_options, sizeof(proxy_options)); 
-  ZeroMemory( &ie_proxy, sizeof(ie_proxy)); 
-  ZeroMemory( &proxy_info, sizeof(proxy_info));
-
-  // the loop is just to allow us to go out of this session whenever we want
-  while(true){
-    // Use WinHttpOpen to obtain a session handle.
-    hSession = WinHttpOpen( L"ScriptRepository FindingProxy/1.0",  
-                          WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
-                          WINHTTP_NO_PROXY_NAME, 
-                          WINHTTP_NO_PROXY_BYPASS, 0 );
-    if (!hSession)
-    {
-      fail = true;
-      info << "Failed to create the session (Error Code: " << GetLastError() << ").";
-      break;
-    }
-  // get the configuration of the web browser
-  if (!WinHttpGetIEProxyConfigForCurrentUser(&ie_proxy)){
-    fail = true;
-    info << "Could not find the proxy settings (Error code :" << GetLastError();    
-    break;
-  }
+      Path pathFound;
+      bool file_is_local;
 
-  if (ie_proxy.lpszProxy){
-    // the proxy was already given, 
-    // it is not necessary to query the system for the auto proxy
-    proxy = ie_proxy.lpszProxy; 
-    break;
-  }
-  
-  if (ie_proxy.fAutoDetect){
-    // if auto detect, than setup the proxy to auto detect
-    proxy_options.dwFlags |= WINHTTP_AUTOPROXY_AUTO_DETECT; 
-    proxy_options.dwAutoDetectFlags = WINHTTP_AUTO_DETECT_TYPE_DNS_A;
-  }
-  
-  if (ie_proxy.lpszAutoConfigUrl){
-    // configure to auto proxy
-    proxy_options.dwFlags |= WINHTTP_AUTOPROXY_CONFIG_URL; 
-    proxy_options.lpszAutoConfigUrl = ie_proxy.lpszAutoConfigUrl;   
-  }
-  
-  
-  if (!WinHttpGetProxyForUrl(hSession, wtarget_url.c_str(), &proxy_options, &proxy_info)){
-    info << "Could not find the proxy for this url (Error code :" << GetLastError() <<").";
-    fail = true;
-     break;
-  }
+      // try to find the given path at one of the paths at lookAfter.
+      file_is_local = Path::find(lookAfter.begin(), lookAfter.end(), path, pathFound);
+      // get the absolute path:
+      std::string absolute_path;
+      if (file_is_local)
+        absolute_path = pathFound.absolute().toString();
+      else
+        absolute_path = path;
+      //g_log.debug() << "ConvertPath: Entered: " << path  << " and local_repository: " << local_repository << std::endl;
+      // this is necessary because in windows, the absolute path is given with \ slash.
+      boost::replace_all(absolute_path, "\\", "/");
 
-  //std::cout << "get proxy for url passed" << std::endl;
-  if (proxy_info.dwAccessType == WINHTTP_ACCESS_TYPE_NO_PROXY){
-    // no proxy (return an empty proxy)
-    break;
-  }
+      //check it the path is inside the repository:
+      size_t pos = absolute_path.find(local_repository);
 
-  if (proxy_info.lpszProxy){
-    //proxy found. Get it.
-      proxy = proxy_info.lpszProxy;
-      break;
+      if (pos == std::string::npos)
+      {
+        // the given file is not inside the local repository. It can not be converted.
+        return path;
+      }
+      else
+      {
+        // the path is inside the local repository
+        // remove the repo_path from te absolute path
+        // +1 to remove the slash /
+        std::string retpath(absolute_path.begin() + pos + local_repository.size(), absolute_path.end());
+        //g_log.debug() << "ConvertPath: Entered: " << path << " return: " << retpath << std::endl;
+        return retpath;
+      }
+      return path;
     }
-  break; // loop finished
-  }
 
-  // free memory of all possibly allocated objects
-  // ie_proxy
-  if (ie_proxy.lpszAutoConfigUrl)
-    GlobalFree(ie_proxy.lpszAutoConfigUrl); 
-  if (ie_proxy.lpszProxy)
-    GlobalFree(ie_proxy.lpszProxy); 
-  if (ie_proxy.lpszProxyBypass)
-    GlobalFree(ie_proxy.lpszProxyBypass);
-  // proxy_info
-  if (proxy_info.lpszProxyBypass)
-      GlobalFree(proxy_info.lpszProxyBypass);
-  if (proxy_info.lpszProxy)
-    GlobalFree(proxy_info.lpszProxy); 
-
-  // hSession
-  if( hSession ) WinHttpCloseHandle( hSession );
-  
-  if (fail){
-    err_msg = info.str();    
-  }
-  proxy_str = std::string(proxy.begin(),proxy.end());  
-  return !fail;
-}
-#endif
-
-bool ScriptRepositoryImpl::getProxyConfig(std::string& proxy_server, unsigned short& proxy_port){
-  // these variables are made static, so, to not query the system for the proxy configuration 
-  // everytime this information is needed
-  static std::string PROXYSERVER=""; 
-  static unsigned short PROXYPORT=0;   
-  static bool firstTime = true;
-  
-  // the first time this function is called, PROXYXERVER will be empty.
-  if (firstTime){
-    // attempt to get the proxy configuration
-    // setup the proxy. The setup of the proxy will be dealt differently 
-    // from windows and linux and macs. 
-#if defined(_WIN32) || defined(_WIN64)
-    std::string errmsg, proxy_option;
-    g_log.debug() << "Attempt to get the proxy configuration for this connection" << std::endl; 
-    if(get_proxy_configuration_win(remote_url, proxy_option,errmsg))
+    bool ScriptRepositoryImpl::getProxyConfig(std::string& proxy_server, unsigned short& proxy_port)
     {
-      if (!proxy_option.empty()){
-        size_t pos = proxy_option.rfind(':');
-        if (pos != std::string::npos){
-          if (pos == 4 || pos == 5) // means it found http(s):
-          {
-            PROXYSERVER = proxy_option;
-            PROXYPORT = 8080; // default port for proxy
-          }else{
-          PROXYSERVER = std::string(proxy_option.begin(),proxy_option.begin()+pos);
-          std::stringstream port_str;
-          port_str << std::string(proxy_option.begin()+pos+1,proxy_option.end());
-          port_str >> PROXYPORT;
-          }
-        }else{
-          PROXYSERVER = proxy_option;
-          PROXYPORT = 8080;
-        }
-        g_log.information() << "ScriptRepository proxy found. Host: " << PROXYSERVER << " Port: " << PROXYPORT << std::endl; 
-        }
-      
-    }
-    else{
-    g_log.information() << "ScriptRepository failed to find the proxy information. It will attempt without proxy. " 
-              << errmsg << std::endl; 
-    }
-#else  // linux and mac
-    char * proxy_var = getenv("http_proxy"); 
-    if (proxy_var == 0)
-      proxy_var = getenv("HTTP_PROXY"); 
-    
-    if (proxy_var != 0){      
-      Poco::URI uri_p(proxy_var);
-      PROXYSERVER = uri_p.getHost(); 
-      PROXYPORT = uri_p.getPort();
-    }
-#endif 
-    if (!PROXYSERVER.empty()){
-      try{
-        // test if the proxy is valid for connecting to remote repository
-        Poco::URI uri(remote_url); 
-        Poco::Net::HTTPClientSession session(uri.getHost(), uri.getPort()); 
-        // setup a request to read the remote url
-        Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, "/",
-                                       Poco::Net::HTTPMessage::HTTP_1_1);
-        // through the proxy
-        session.setProxy(PROXYSERVER, PROXYPORT);        
-        session.sendRequest(request);  // if it fails, it will throw exception here.
-        
-        // clear the answer.
-        Poco::Net::HTTPResponse response; 
-        std::istream & rs = session.receiveResponse(response); 
-        Poco::NullOutputStream null; 
-        Poco::StreamCopier::copyStream(rs, null);
-        // report that the proxy was configured
-        g_log.information() << "ScriptRepository proxy found. Host: " << PROXYSERVER << " Port: " << PROXYPORT << std::endl; 
+      // these variables are made static, so, to not query the system for the proxy configuration
+      // everytime this information is needed
+
+      Mantid::Kernel::NetworkProxy proxyHelper;
+      ProxyInfo proxyInfo = proxyHelper.getHttpProxy(remote_url);
+      if (proxyInfo.emptyProxy())
+      {
+        g_log.information("ScriptRepository: No HTTP network proxy settings found. None used.");
       }
-      catch(Poco::Net::HostNotFoundException & ex){
-        g_log.information() << "ScriptRepository found that proxy can not be used for this connection.\n"
-                          << ex.displayText() << std::endl; 
-        PROXYSERVER = "";        
-      }catch(...){
-        g_log.warning() << "Unexpected error while looking for the proxy for ScriptRepository." << std::endl; 
-        PROXYSERVER = ""; 
+      else
+      {
+        g_log.information("ScriptRepository: HTTP System network proxy settings found.");
+        g_log.debug() << "ScriptRepository Host found: " << proxyInfo.host() << " Port found: " << proxyInfo.port() << std::endl;
       }
-    }
 
-  } // end of the configuration of the proxy
-  firstTime = false;
-  
-  bool ret_value; 
-  
-  // it means no proxy configured.
-  if (PROXYSERVER.empty())
-    ret_value =  false;
-  
-  else{
-    proxy_server = PROXYSERVER; 
-    proxy_port = PROXYPORT;
-    ret_value = true;
-  }
-  return ret_value;
-}
+      if (!proxyInfo.emptyProxy())
+      {
+        try
+        {
+          // test if the proxy is valid for connecting to remote repository
+          Poco::URI uri(remote_url);
+          Poco::Net::HTTPClientSession session(uri.getHost(), uri.getPort());
+          // setup a request to read the remote url
+          Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, "/",
+              Poco::Net::HTTPMessage::HTTP_1_1);
+          // through the proxy
+          session.setProxy(proxyInfo.host(), static_cast<Poco::UInt16>(proxyInfo.port()));
+          session.sendRequest(request);  // if it fails, it will throw exception here.
+
+          // clear the answer.
+          Poco::Net::HTTPResponse response;
+          std::istream & rs = session.receiveResponse(response);
+          Poco::NullOutputStream null;
+          Poco::StreamCopier::copyStream(rs, null);
+          // report that the proxy was configured
+          g_log.information() << "ScriptRepository proxy found. Host: " << proxyInfo.host() << " Port: "
+              << proxyInfo.port() << std::endl;
+          proxy_server = proxyInfo.host();
+          proxy_port = static_cast<unsigned short>(proxyInfo.port());
+        } catch (Poco::Net::HostNotFoundException & ex)
+        {
+          g_log.information()
+              << "ScriptRepository found that proxy can not be used for this connection.\n"
+              << ex.displayText() << std::endl;
+        } catch (...)
+        {
+          g_log.warning() << "Unexpected error while looking for the proxy for ScriptRepository."
+              << std::endl;
+        }
+      }
 
-}// END API
-}// END MANTID
 
 
+      return !proxyInfo.emptyProxy();;
+    }
+
+  }  // END API
+
+} // END MANTID
 
diff --git a/Code/Mantid/Framework/TestHelpers/inc/MantidTestHelpers/ComponentCreationHelper.h b/Code/Mantid/Framework/TestHelpers/inc/MantidTestHelpers/ComponentCreationHelper.h
index 04a7d5ce68b77e13c4610b424152a29cf97f6173..dd6ff48ac770909d4b1cdefcca3ad94e6ca2fb15 100644
--- a/Code/Mantid/Framework/TestHelpers/inc/MantidTestHelpers/ComponentCreationHelper.h
+++ b/Code/Mantid/Framework/TestHelpers/inc/MantidTestHelpers/ComponentCreationHelper.h
@@ -30,7 +30,7 @@ namespace Mantid
 namespace ComponentCreationHelper
 {
 
-  /** 
+  /**
   A set of helper functions for creating various component structures for the unit tests.
 
   Copyright &copy; 2010 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
@@ -59,8 +59,8 @@ namespace ComponentCreationHelper
   /**
    * Create a capped cylinder object
    */
-  Mantid::Geometry::Object_sptr 
-  createCappedCylinder(double radius, double height, const Mantid::Kernel::V3D & baseCentre, 
+  Mantid::Geometry::Object_sptr
+  createCappedCylinder(double radius, double height, const Mantid::Kernel::V3D & baseCentre,
                const Mantid::Kernel::V3D & axis, const std::string & id);
   /**
    * Return the XML for a sphere.
@@ -69,9 +69,11 @@ namespace ComponentCreationHelper
   /**
    * Create a sphere object
    */
-  Mantid::Geometry::Object_sptr createSphere(double radius, const Mantid::Kernel::V3D & centre, const std::string & id);
+  Mantid::Geometry::Object_sptr createSphere(double radius,
+                                             const Mantid::Kernel::V3D & centre = Mantid::Kernel::V3D(),
+                                             const std::string & id = "sp-1");
   /** Create a cuboid shape for your pixels */
-  Mantid::Geometry::Object_sptr createCuboid(double x_side_length, double y_side_length = -1.0, 
+  Mantid::Geometry::Object_sptr createCuboid(double x_side_length, double y_side_length = -1.0,
                                  double z_side_length = -1.0);
   /**
   * Create a component assembly at the origin made up of 4 cylindrical detectors
@@ -84,7 +86,7 @@ namespace ComponentCreationHelper
   /**
    * Create a hollow shell, i.e. the intersection of two spheres or radius r1 and r2
    */
-  Mantid::Geometry::Object_sptr createHollowShell(double innerRadius, double outerRadius, 
+  Mantid::Geometry::Object_sptr createHollowShell(double innerRadius, double outerRadius,
                         const Mantid::Kernel::V3D & centre = Mantid::Kernel::V3D());
   /**
    * Create a detector group containing 5 detectors
@@ -98,7 +100,7 @@ namespace ComponentCreationHelper
    * Create a detector group containing detectors ring
    * R_min -- min radius of the ring
    * R_max -- max radius of the ring, center has to be in 0 position,
-   * z     -- axial z-coordinate of the detectors position; 
+   * z     -- axial z-coordinate of the detectors position;
     The detectors are the cylinders with 1.5cm height and 0.5 cm radius
    */
   boost::shared_ptr<Mantid::Geometry::DetectorGroup> createRingOfCylindricalDetectors(const double R_min=4.5, const double R_max=5, const double z=4);
@@ -107,7 +109,7 @@ namespace ComponentCreationHelper
    */
   boost::shared_ptr<Mantid::Geometry::DetectorGroup> createGroupOfTwoMonitors();
   /** create instrument with cylindrical detectors located in specific angular positions */
-  Mantid::Geometry::Instrument_sptr 
+  Mantid::Geometry::Instrument_sptr
   createCylInstrumentWithDetInGivenPosisions(const std::vector<double>& L2, const std::vector<double>& polar, const std::vector<double>& azim);
   /**
    * Create an test instrument with n panels of 9 cylindrical detectors, a source and spherical sample shape.
diff --git a/Code/Mantid/MantidPlot/CMakeLists.txt b/Code/Mantid/MantidPlot/CMakeLists.txt
index 8a3b45f4a3d068da13488359f155d3c27d09bd86..c97542f923f43aca75bebda169a5fb02b2bb4d7a 100644
--- a/Code/Mantid/MantidPlot/CMakeLists.txt
+++ b/Code/Mantid/MantidPlot/CMakeLists.txt
@@ -916,16 +916,17 @@ endif( WIN32 )
 
 # List of .py files than must be run WITHIN MantidPlot.
 set ( MANTIDPLOT_TEST_PY_FILES
-    MantidPlotAlgorithmDialogTest.py
-    MantidPlotInstrumentViewTest.py
+        MantidPlotAlgorithmDialogTest.py
+        MantidPlotInstrumentViewTest.py
 	MantidPlotSliceViewerTest.py
 	MantidPlot1DPlotTest.py
-  MantidPlot2DPlotTest.py
-  MantidPlotProxiesTest.py
+        MantidPlot2DPlotTest.py
+        MantidPlotProxiesTest.py
 	MantidPlotPythonImportTest.py
 	MantidPlotFoldersTest.py 
 	MantidPlotMdiSubWindowTest.py 
 	MantidPlotTiledWindowTest.py 
+        MantidPlotInputArgsCheck.py
 )
 
 if ( 0 )
diff --git a/Code/Mantid/MantidPlot/mantidplot.py b/Code/Mantid/MantidPlot/mantidplot.py
index 994c5494975e35b7e3ef4b1eb466ae54c8c123bb..886e495e39c41db5342e116cbf1adf0a5e65c222 100644
--- a/Code/Mantid/MantidPlot/mantidplot.py
+++ b/Code/Mantid/MantidPlot/mantidplot.py
@@ -201,6 +201,7 @@ def plot(source, *args, **kwargs):
         return plotSpectrum(source, *args, **kwargs)
 
 #----------------------------------------------------------------------------------------------------
+
 def plotSpectrum(source, indices, error_bars = False, type = -1, window = None, clearWindow = False):
     """Open a 1D Plot of a spectrum in a workspace.
 
@@ -218,11 +219,20 @@ def plotSpectrum(source, indices, error_bars = False, type = -1, window = None,
         A handle to window if one was specified, otherwise a handle to the created one. None in case of error.
     """
     workspace_names = getWorkspaceNames(source)
+    __checkPlotWorkspaces(workspace_names)
+    # check spectrum indices
     index_list = __getWorkspaceIndices(indices)
-    if len(workspace_names) == 0:
-        raise ValueError("No workspace names given to plot")
     if len(index_list) == 0:
-        raise ValueError("No indices given to plot")
+        raise ValueError("No spectrum indices given")
+    for idx in index_list:
+        if idx < 0:
+            raise ValueError("Wrong spectrum index (<0): %d" % idx)
+    for name in workspace_names:
+        max_spec = workspace(name).getNumberHistograms() - 1
+        for idx in index_list:
+            if idx > max_spec:
+                raise ValueError("Wrong spectrum index for workspace '%s': %d, which is bigger than the"
+                                 " number of spectra in this workspace - 1 (%d)" % (name, idx, max_spec))
 
     # Unwrap the window object, if any specified
     if window != None:
@@ -294,16 +304,19 @@ def plotMD(source, plot_axis=-2, normalization = DEFAULT_MD_NORMALIZATION, error
         A handle to the matrix containing the image data.
     """
     workspace_names = getWorkspaceNames(source)
-    if len(workspace_names) == 0:
-        raise ValueError("No workspace names given to plotMD")
+    __checkPlotMDWorkspaces(workspace_names)
+
     for name in workspace_names:
-        if not mantid.api.mtd.doesExist(name):
-            raise ValueError("%s does not exist in the workspace list" % name)
-        if not isinstance(mantid.api.mtd[name], mantid.api.IMDWorkspace):
-            raise ValueError("%s is not an IMDWorkspace" % name)
         non_integrated_dims = mantid.api.mtd[name].getNonIntegratedDimensions()
         if not len(non_integrated_dims) == 1:
-            raise ValueError("%s must have a single non-integrated dimension in order to be rendered via plotMD" % name)
+            raise ValueError("'%s' must have a single non-integrated dimension in order to be rendered via plotMD" % name)
+
+    # check axis index
+    for name in workspace_names:
+        max_axis = workspace(name).axes()
+        # see choice in MantidQwtIMDWorkspaceData::setPlotAxisChoice, -2: auto, -1: distance
+        if plot_axis < -2 or plot_axis > max_axis:
+            raise ValueError("Incorrect axis index given for workspace '%s': %d, should be < %d" % (name, plot_axis, max_axis))
 
     # Unwrap the window object, if any specified
     if window != None:
@@ -341,12 +354,21 @@ def plotBin(source, indices, error_bars = False, type = -1, window = None, clear
     Returns:
         A handle to window if one was specified, otherwise a handle to the created one. None in case of error.
     """
+
     workspace_names = getWorkspaceNames(source)
+    __checkPlotWorkspaces(workspace_names)
     index_list = __getWorkspaceIndices(indices)
-    if len(workspace_names) == 0:
-        raise ValueError("No workspace names given to plot")
     if len(index_list) == 0:
-        raise ValueError("No indices given to plot")
+        raise ValueError("No indices given")
+    for idx in index_list:
+        if idx < 0:
+            raise ValueError("Wrong bin index (<0): %d" % idx)
+    for name in workspace_names:
+        max_bin = workspace(name).blocksize() - 1
+        for idx in index_list:
+            if idx > max_bin:
+                raise ValueError("Wrong bin index for workspace '%s': %d, which is bigger than the"
+                                 " number of bins in this workspace - 1 (%d)" % (name, idx, max_bin))
 
     # Unwrap the window object, if any specified
     if window != None:
@@ -577,7 +599,7 @@ def getInstrumentView(name, tab=InstrumentWindow.RENDER):
     """
     ads = _get_analysis_data_service()
     if name not in ads:
-        raise ValueError("Workspace %s does not exist" % name)
+        raise ValueError("Workspace '%s' does not exist" % name)
     return new_proxy(proxies.InstrumentWindow, _qti.app.mantidUI.getInstrumentView, name, tab)
 
 def importMatrixWorkspace(name, firstIndex=None, lastIndex=None, showDialog=False, visible=False):
@@ -969,4 +991,43 @@ def __getWorkspaceIndices(source):
         raise TypeError('Incorrect type passed as index argument "' + str(source) + '"')
     return index_list
 
+# Common checks for plotSpectrum, plotMD, and plotBin:
+def __checkPlotWorkspaces(workspace_names):
+    """Check that a list of workspaces is not empty and all the elements exist
+
+    Throws Python-level exceptions if the list is empty or any of the spaces don't exist.
+
+    Args:
+        workspace_names: list of names of workspace(s)
+
+    Returns:
+        Nothing, just throws exceptions in case of error/inconsistent inputs
+    """
+
+    if len(workspace_names) == 0:
+        raise ValueError("No workspace names given")
+    for name in workspace_names:
+        if not mantid.api.mtd.doesExist(name):
+            raise ValueError("Workspace '%s' does not exist in the workspace list" % name)
+        if not isinstance(mantid.api.mtd[name], mantid.api.IMDWorkspace):
+            raise ValueError("Workspace '%s' is not an IMDWorkspace" % name)
+
+def __checkPlotMDWorkspaces(workspace_names):
+    """Check that a list of workspaces is not empty AND all the elements exist AND they are
+    IMDWorkspace(s). First part of the check is done based on __checkPlotWorkspaces()
+
+    Throws Python-level exceptions if the list is empty or any of the spaces don't exist or
+    are not IMDWorkspace.
+
+    Args:
+        workspace_names: list of names of workspace(s)
+
+    Returns:
+        Nothing, just throws exceptions in case of error/inconsistent inputs
+    """
+    __checkPlotWorkspaces(workspace_names)
+    for name in workspace_names:
+        if not isinstance(mantid.api.mtd[name], mantid.api.IMDWorkspace):
+            raise ValueError("Workspace '%s' is not an IMDWorkspace" % name)
+
 #-----------------------------------------------------------------------------
diff --git a/Code/Mantid/MantidPlot/mantidplotpy/proxies.py b/Code/Mantid/MantidPlot/mantidplotpy/proxies.py
index f119951badc91c23f73116330b3ae9e4b588b706..8e9f3e3853af7032a9f82134d53467ff3392b3b2 100644
--- a/Code/Mantid/MantidPlot/mantidplotpy/proxies.py
+++ b/Code/Mantid/MantidPlot/mantidplotpy/proxies.py
@@ -748,7 +748,13 @@ def getWorkspaceNames(source):
         else:
             ws_names.append(wspace.getName())
     elif isinstance(source,str):
-        w = mantid.AnalysisDataService.Instance()[source]
+        w = None
+        try:
+            # for non-existent names this raises a KeyError
+            w = mantid.AnalysisDataService.Instance()[source]
+        except Exception, exc:
+            raise ValueError("Workspace '%s' not found!"%source)
+
         if w != None:
             names = getWorkspaceNames(w)
             for n in names:
diff --git a/Code/Mantid/MantidPlot/src/ApplicationWindow.cpp b/Code/Mantid/MantidPlot/src/ApplicationWindow.cpp
index 9bef2715e1ac9b6f4ffbb3aa064879244f01653c..b432b824fff60c3a9ec9e47e20d5fea5a4e893f3 100644
--- a/Code/Mantid/MantidPlot/src/ApplicationWindow.cpp
+++ b/Code/Mantid/MantidPlot/src/ApplicationWindow.cpp
@@ -551,7 +551,8 @@ void ApplicationWindow::init(bool factorySettings, const QStringList& args)
   connect(lv, SIGNAL(itemRenamed(Q3ListViewItem *, int, const QString &)),
       this, SLOT(renameWindow(Q3ListViewItem *, int, const QString &)));
 
-  connect(recent, SIGNAL(activated(int)), this, SLOT(openRecentProject(int)));
+  connect(recentProjectsMenu, SIGNAL(activated(int)), this, SLOT(openRecentProject(int)));
+  connect(recentFilesMenu, SIGNAL(activated(int)), this, SLOT(openRecentFile(int)));
 
   //apply user settings
   updateAppFonts();
@@ -827,6 +828,7 @@ void ApplicationWindow::initGlobalConstants()
   confirmClosePlot2D = false;
   confirmClosePlot3D = false;
   confirmCloseNotes = false;
+  d_inform_delete_workspace = true;
   d_inform_rename_table = false;
   confirmCloseInstrWindow=false;
 
@@ -1155,6 +1157,7 @@ void ApplicationWindow::insertTranslatedStrings()
   formatToolBar->setWindowTitle(tr("Format"));
 
   fileMenu->changeItem(recentMenuID, tr("&Recent Projects"));
+  fileMenu->changeItem(recentFilesMenuID, tr("R&ecent Files"));
 
   translateActionsStrings();
   customMenu(activeWindow());
@@ -1166,8 +1169,9 @@ void ApplicationWindow::initMainMenu()
   fileMenu->setObjectName("fileMenu");
   connect(fileMenu, SIGNAL(aboutToShow()), this, SLOT(fileMenuAboutToShow()));
 
-  recent = new QMenu(this);
   newMenu = new QMenu(this);
+  recentProjectsMenu = new QMenu(this);
+  recentFilesMenu = new QMenu(this);
   newMenu->setObjectName("newMenu");
   exportPlotMenu = new QMenu(this);
   exportPlotMenu->setObjectName("exportPlotMenu");
@@ -3090,6 +3094,11 @@ Table* ApplicationWindow::newTable(const QString& caption, int r, int c)
   return w;
 }
 
+bool ApplicationWindow::isDeleteWorkspacePromptEnabled()
+{
+  return d_inform_delete_workspace;
+}
+
 Table* ApplicationWindow::newTable(int r, int c, const QString& name, const QString& legend)
 {
   Table* w = new Table(scriptingEnv(), r, c, legend, this, 0);
@@ -3502,14 +3511,22 @@ void ApplicationWindow::convertTableToWorkspace()
 void ApplicationWindow::convertTableToMatrixWorkspace()
 {
   Table* t = dynamic_cast<Table*>(activeWindow(TableWindow));
-  if (!t) return;
-  if(auto *mt = dynamic_cast<MantidTable*>(t))
-  {
-    mt = convertTableToTableWorkspace(t);
-    QHash<QString,QString> params;
-    params["InputWorkspace"] = QString::fromStdString(mt->getWorkspaceName());
-    mantidUI->showAlgorithmDialog(QString("ConvertTableToMatrixWorkspace"),params);
-  }
+	if (!t) return;
+
+	// dynamic_cast is successful when converting MantidTable to MatrixWorkspace
+	auto *mt = dynamic_cast<MantidTable*>(t);
+
+	if (!mt){
+	// if dynamic_cast is unsuccessful, create MantidTable from which to create MatrixWorkspace
+		mt = convertTableToTableWorkspace(t);
+	}
+
+	if (mt){
+		QHash<QString,QString> params;
+		params["InputWorkspace"] = QString::fromStdString(mt->getWorkspaceName());
+		mantidUI->showAlgorithmDialog(QString("ConvertTableToMatrixWorkspace"),params);
+	}
+
 }
 
 /**
@@ -4461,9 +4478,30 @@ ApplicationWindow* ApplicationWindow::open(const QString& fn, bool factorySettin
   return app;
 }
 
+void ApplicationWindow::openRecentFile(int index)
+{
+  QString fn = recentFilesMenu->text(index);
+  int pos = fn.find(" ",0);
+  fn = fn.right(fn.length()-pos-1);
+
+  QFile f(fn);
+  if (!f.exists()){
+    QMessageBox::critical(this, tr("MantidPlot - File Open Error"),//Mantid
+                          tr("The file: <b> %1 </b> <p>is not there anymore!"
+                             "<p>It will be removed from the list of recent files.").arg(fn));
+
+    recentFiles.remove(fn);
+    updateRecentFilesList();
+    return;
+  }
+
+  loadDataFileByName(fn);
+  saveSettings();   // save new list of recent files
+}
+
 void ApplicationWindow::openRecentProject(int index)
 {
-  QString fn = recent->text(index);
+  QString fn = recentProjectsMenu->text(index);
   int pos = fn.find(" ",0);
   fn = fn.right(fn.length()-pos-1);
 
@@ -4471,7 +4509,7 @@ void ApplicationWindow::openRecentProject(int index)
   if (!f.exists()){
     QMessageBox::critical(this, tr("MantidPlot - File Open Error"),//Mantid
         tr("The file: <b> %1 </b> <p>does not exist anymore!"
-            "<p>It will be removed from the list.").arg(fn));
+            "<p>It will be removed from the list of recent projects.").arg(fn));
 
     recentProjects.remove(fn);
     updateRecentProjectsList();
@@ -4502,6 +4540,7 @@ void ApplicationWindow::openRecentProject(int index)
   }
 }
 
+
 ApplicationWindow* ApplicationWindow::openProject(const QString& fn, bool factorySettings, bool newProject)
 {
   ApplicationWindow *app = this;
@@ -5039,6 +5078,7 @@ void ApplicationWindow::readSettings()
   show_windows_policy = (ShowWindowsPolicy)settings.value("/ShowWindowsPolicy", ApplicationWindow::ActiveFolder).toInt();
 
   recentProjects = settings.value("/RecentProjects").toStringList();
+  recentFiles = settings.value("/RecentFiles").toStringList();
   //Follows an ugly hack added by Ion in order to fix Qt4 porting issues
   //(only needed on Windows due to a Qt bug?)
 #ifdef Q_OS_WIN
@@ -5049,9 +5089,18 @@ void ApplicationWindow::readSettings()
     if (s.remove(QRegExp("\\s")).isEmpty())
       recentProjects = QStringList();
   }
+
+  if (!recentFiles.isEmpty() && recentFiles[0].contains("^e"))
+    recentFiles = recentFiles[0].split("^e", QString::SkipEmptyParts);
+  else if (recentFiles.count() == 1){
+    QString s = recentFiles[0];
+    if (s.remove(QRegExp("\\s")).isEmpty())
+      recentFiles = QStringList();
+  }
 #endif
 
   updateRecentProjectsList();
+  updateRecentFilesList();
 
   changeAppStyle(settings.value("/Style", appStyle).toString());
   autoSave = settings.value("/AutoSave", false).toBool();
@@ -5168,6 +5217,7 @@ void ApplicationWindow::readSettings()
   confirmClosePlot2D = settings.value("/Plot2D", false).toBool();
   confirmClosePlot3D = settings.value("/Plot3D", false).toBool();
   confirmCloseNotes = settings.value("/Note", false).toBool();
+  d_inform_delete_workspace = settings.value("/DeleteWorkspace", true).toBool();
   d_inform_rename_table = settings.value("/RenameTable", false).toBool();
   confirmCloseInstrWindow=settings.value("/InstrumentWindow", false).toBool();
   settings.endGroup(); // Confirmations
@@ -5513,6 +5563,7 @@ void ApplicationWindow::saveSettings()
   settings.setValue("/Language", appLanguage);
   settings.setValue("/ShowWindowsPolicy", show_windows_policy);
   settings.setValue("/RecentProjects", recentProjects);
+  settings.setValue("/RecentFiles", recentFiles);
   settings.setValue("/Style", appStyle);
   settings.setValue("/AutoSave", autoSave);
   settings.setValue("/AutoSaveTime", autoSaveTime);
@@ -5589,6 +5640,7 @@ void ApplicationWindow::saveSettings()
   settings.setValue("/Plot2D", confirmClosePlot2D);
   settings.setValue("/Plot3D", confirmClosePlot3D);
   settings.setValue("/Note", confirmCloseNotes);
+  settings.setValue("/DeleteWorkspace",d_inform_delete_workspace);
   settings.setValue("/RenameTable", d_inform_rename_table);
   settings.value("/InstrumentWindow", confirmCloseInstrWindow).toBool();
   settings.endGroup(); // Confirmations
@@ -6209,7 +6261,7 @@ void ApplicationWindow::savetoNexusFile()
     savedatainNexusFormat(wsName,fileName.toStdString());
 
     MantidQt::API::AlgorithmInputHistory::Instance().setPreviousDirectory(QFileInfo(fileName).absoluteDir().path());
-
+    updateRecentFilesList(fileName);
   }
 }
 
@@ -6218,18 +6270,26 @@ void ApplicationWindow::loadDataFile()
   // Ask user for file
   QString fn = QFileDialog::getOpenFileName( 0, tr("Mantidplot - Open file to load"), AlgorithmInputHistory::Instance().getPreviousDirectory());
   if(fn != "") {
-     QFileInfo fnInfo(fn);
-     AlgorithmInputHistory::Instance().setPreviousDirectory(fnInfo.absoluteDir().path());
-     if( fnInfo.suffix() == "py")
-     { // We have a python file, just load it into script window
-       loadScript( fn, true );
-     }
-     else if(mantidUI)
-     {  // Run Load algorithm on file
-       QHash<QString,QString> params;
-       params["Filename"] = fn;
-       mantidUI->showAlgorithmDialog(QString("Load"),params);
-     }
+    loadDataFileByName(fn);
+  }
+  saveSettings();   // save new list of recent files
+}
+
+void ApplicationWindow::loadDataFileByName(QString fn)
+{
+  QFileInfo fnInfo(fn);
+  AlgorithmInputHistory::Instance().setPreviousDirectory(fnInfo.absoluteDir().path());
+  if( fnInfo.suffix() == "py")
+  {
+    // We have a python file, just load it into script window
+    loadScript( fn, true );
+  }
+  else if(mantidUI)
+  {
+    // Run Load algorithm on file
+    QHash<QString,QString> params;
+    params["Filename"] = fn;
+    mantidUI->showAlgorithmDialog(QString("Load"),params);
   }
 }
 
@@ -9280,7 +9340,9 @@ void ApplicationWindow::fileMenuAboutToShow()
   openMenu->addAction(actionOpenProj);
   openMenu->addAction(actionLoadFile);
 
-  recentMenuID = fileMenu->insertItem(tr("&Recent Projects"), recent);
+  recentMenuID = fileMenu->insertItem(tr("&Recent Projects"), recentProjectsMenu);
+
+  recentFilesMenuID = fileMenu->insertItem(tr("R&ecent Files"), recentFilesMenu);
 
   fileMenu->insertSeparator();
   fileMenu->addAction(actionManageDirs);
@@ -14438,10 +14500,24 @@ void ApplicationWindow::updateRecentProjectsList()
   while ((int)recentProjects.size() > MaxRecentProjects)
     recentProjects.pop_back();
 
-  recent->clear();
+  recentProjectsMenu->clear();
 
   for (int i = 0; i<(int)recentProjects.size(); i++ )
-    recent->insertItem("&" + QString::number(i+1) + " " + recentProjects[i]);
+    recentProjectsMenu->insertItem("&" + QString::number(i+1) + " " + recentProjects[i]);
+}
+
+void ApplicationWindow::updateRecentFilesList(QString fname)
+{
+  if (!fname.isEmpty()) {
+    recentFiles.remove(fname);
+    recentFiles.push_front(fname);
+  }
+  while ((int)recentFiles.size() > MaxRecentFiles)
+    recentFiles.pop_back();
+
+  recentFilesMenu->clear();
+  for (int i = 0; i<(int)recentFiles.size(); i++ )
+    recentFilesMenu->insertItem("&" + QString::number(i+1) + " " + recentFiles[i]);
 }
 
 void ApplicationWindow::translateCurveHor()
@@ -16373,7 +16449,7 @@ ApplicationWindow::~ApplicationWindow()
   }
   delete current_folder;
 
-  QApplication::clipboard()->clear(QClipboard::Clipboard);
+  
 
   btnPointer->setChecked(true);
   delete mantidUI;
diff --git a/Code/Mantid/MantidPlot/src/ApplicationWindow.h b/Code/Mantid/MantidPlot/src/ApplicationWindow.h
index 5de461c6140a469a75aa48ccf0b8250318c709a8..11aa20883421d39f1dab34992781ce38d6c5147f 100644
--- a/Code/Mantid/MantidPlot/src/ApplicationWindow.h
+++ b/Code/Mantid/MantidPlot/src/ApplicationWindow.h
@@ -199,6 +199,9 @@ public:
 
   int matrixUndoStackSize(){return d_matrix_undo_stack_size;};
   void setMatrixUndoStackSize(int size);
+    
+  // Check if delete workspace prompt is enabled
+  bool isDeleteWorkspacePromptEnabled();
 
   QString endOfLine();
   bool autoUpdateTableValues(){return d_auto_update_table_values;};
@@ -213,8 +216,13 @@ public slots:
   ApplicationWindow* open(const QString& fn, bool factorySettings = false, bool newProject = true);
   ApplicationWindow* openProject(const QString& fn, bool factorySettings = false, bool newProject = true);
   ApplicationWindow* importOPJ(const QString& fn, bool factorySettings = false, bool newProject = true);
-  /// Load mantid data files using generic load algorithm
+  /// Load mantid data files using generic load algorithm, opening user dialog
   void loadDataFile();
+  /// Load mantid data files (generic load algorithm)
+  void loadDataFileByName(QString fn);
+  /// Open from the list of recent files
+  void openRecentFile(int index);
+
   /**
   * \brief Create a new project from a data file.
   *
@@ -408,6 +416,7 @@ public slots:
   //@{
   //! Creates an empty table
   Table* newTable();
+
   //! Used when loading a table from a project file
   Table* newTable(const QString& caption,int r, int c);
   Table* newTable(int r, int c, const QString& name = QString(),const QString& legend = QString());
@@ -619,6 +628,7 @@ public slots:
   Graph3D* openSurfacePlot(ApplicationWindow* app, const QStringList &lst);
   Graph* openGraph(ApplicationWindow* app, MultiLayer *plot, const QStringList &list);
   void openRecentProject(int index);
+
   //@}
 
   //! \name Table Tools
@@ -852,8 +862,12 @@ public slots:
   void custom3DGrids(int grids);
   //@}
 
+  //! Updates the recent projects list and menu (but doesn't insert anything)
   void updateRecentProjectsList();
 
+  //! Inserts file name in the list of recent files (if fname not empty) and updates the "recent files" menu
+  void updateRecentFilesList(QString fname="");
+
   //!  connected to the done(bool) signal of the http object
   //void receivedVersionFile(bool error);
   //!  called when the user presses the actionCheckUpdates
@@ -1216,7 +1230,7 @@ public:
   QPoint d_script_win_pos;
   QSize d_script_win_size;
   bool d_script_win_arrow;
-  bool d_inform_rename_table;
+  bool d_inform_rename_table, d_inform_delete_workspace;
   QString d_export_col_separator;
   bool d_export_col_names, d_export_table_selection, d_export_col_comment;
 
@@ -1279,6 +1293,7 @@ public:
   //! Describes which windows are shown when the folder becomes the current folder
   ShowWindowsPolicy show_windows_policy;
   enum {MaxRecentProjects = 10};
+  enum {MaxRecentFiles = MaxRecentProjects};
   //! File version code used when opening project files (= maj * 100 + min * 10 + patch)
   int d_file_version;
 
@@ -1327,9 +1342,9 @@ public:
   QColor tableBkgdColor, tableTextColor, tableHeaderColor;
   QString projectname, columnSeparator, helpFilePath, appLanguage;
   QString configFilePath, fitPluginsPath, fitModelsPath, asciiDirPath, imagesDirPath, scriptsDirPath;
-  int ignoredLines, savingTimerId, plot3DResolution, recentMenuID;
+  int ignoredLines, savingTimerId, plot3DResolution, recentMenuID, recentFilesMenuID;
   bool renameColumns, strip_spaces, simplify_spaces;
-  QStringList recentProjects;
+  QStringList recentProjects, recentFiles;
   bool saved, showPlot3DProjection, showPlot3DLegend, orthogonal3DPlots, autoscale3DPlots;
   QStringList plot3DColors, locales;
   QStringList functions; //user-defined functions;
@@ -1413,7 +1428,8 @@ private:
 
   QWidget* catalogSearch;
 
-  QMenu *windowsMenu, *foldersMenu, *view, *graph, *fileMenu, *format, *edit, *recent, *interfaceMenu;
+  QMenu *windowsMenu, *foldersMenu, *view, *graph, *fileMenu, *format, *edit;
+  QMenu *recentProjectsMenu, *recentFilesMenu, *interfaceMenu;
   
   QMenu *help, *plot2DMenu, *analysisMenu, *multiPeakMenu, *icat;
   QMenu *matrixMenu, *plot3DMenu, *plotDataMenu, *tablesDepend, *scriptingMenu;
diff --git a/Code/Mantid/MantidPlot/src/ConfigDialog.cpp b/Code/Mantid/MantidPlot/src/ConfigDialog.cpp
index 1743a0b12c8e1068111a990fb59745a70a704b8f..86da482b1b32a66a56bdf7d146ec25405af505d0 100644
--- a/Code/Mantid/MantidPlot/src/ConfigDialog.cpp
+++ b/Code/Mantid/MantidPlot/src/ConfigDialog.cpp
@@ -718,12 +718,27 @@ void ConfigDialog::initMantidOptionsTab()
   widgetLayout->addWidget(frame);
   QGridLayout *grid = new QGridLayout(frame);
 
+  // if on, for example all plotSpectrum will go to the same window.
+  m_reusePlotInstances =  new QCheckBox("Re-use plot instances for different types of plots");
+  m_reusePlotInstances->setChecked(false);
+  grid->addWidget(m_reusePlotInstances,0,0);
+  QString setting = QString::fromStdString(Mantid::Kernel::ConfigService::Instance().getString("MantidOptions.ReusePlotInstances"));
+  if(!setting.compare("On"))
+  {
+    m_reusePlotInstances->setChecked(true);
+  }
+  else if(!setting.compare("Off"))
+  {
+    m_reusePlotInstances->setChecked(false);
+  }
+  m_reusePlotInstances->setToolTip("If on, the same plot instance will be re-used for every of the different plots available in the workspaces window (spectrum, slice, color fill, etc.)");
+
   //create a checkbox for invisible workspaces options
   m_invisibleWorkspaces = new QCheckBox("Show Invisible Workspaces");
   m_invisibleWorkspaces->setChecked(false);
-  grid->addWidget(m_invisibleWorkspaces,0,0);
+  grid->addWidget(m_invisibleWorkspaces,1,0);
 
-  QString setting = QString::fromStdString(Mantid::Kernel::ConfigService::Instance().getString("MantidOptions.InvisibleWorkspaces"));
+  setting = QString::fromStdString(Mantid::Kernel::ConfigService::Instance().getString("MantidOptions.InvisibleWorkspaces"));
   if(!setting.compare("1"))
   {
     m_invisibleWorkspaces->setChecked(true);
@@ -739,13 +754,13 @@ void ConfigDialog::initMantidOptionsTab()
   treeCategories->setSortingEnabled(false);
   treeCategories->setHeaderLabel("Show Algorithm Categories");
 
-  grid->addWidget(treeCategories,1,0);
+  grid->addWidget(treeCategories,2,0);
   refreshTreeCategories();
 
   // create a checkbox for the instrument view OpenGL option
   m_useOpenGL = new QCheckBox("Use OpenGL in Instrument View");
   m_useOpenGL->setChecked(true);
-  grid->addWidget(m_useOpenGL,3,0);
+  grid->addWidget(m_useOpenGL,4,0);
 
   setting = QString::fromStdString(Mantid::Kernel::ConfigService::Instance().
     getString("MantidOptions.InstrumentView.UseOpenGL")).toUpper();
@@ -1146,21 +1161,7 @@ void ConfigDialog::initDirSearchTab()
 
   connect( button, SIGNAL(clicked()), this, SLOT(addInstrumentDir()) );
 
-  /// parameterDefinition.directory
-  label = new QLabel(tr("Parameter definitions"));
-  grid->addWidget(label, 3, 0);
-
-  str = Mantid::Kernel::ConfigService::Instance().getString("parameterDefinition.directory");
-  leParameterDir = new QLineEdit();
-  leParameterDir->setText(QString::fromStdString(str));
-  grid->addWidget(leParameterDir, 3, 1);
-
-  button = new QPushButton();
-  button->setIcon(QIcon(getQPixmap("choose_folder_xpm")));
-  grid->addWidget(button, 3, 2);
-
-  connect( button, SIGNAL(clicked()), this, SLOT(addParameterDir()) );
-  grid->setRowStretch(4,1);
+  grid->setRowStretch(3,1);
 }
 
 void ConfigDialog::initCurveFittingTab()
@@ -1656,11 +1657,13 @@ void ConfigDialog::initConfirmationsPage()
   boxPromptRenameTables = new QCheckBox();
   boxPromptRenameTables->setChecked(app->d_inform_rename_table);
 
-
+  boxPromptDeleteWorkspace = new QCheckBox();
+  boxPromptDeleteWorkspace->setChecked(app->d_inform_delete_workspace);
 
 
   QVBoxLayout * confirmPageLayout = new QVBoxLayout( confirm );
   confirmPageLayout->addWidget(groupBoxConfirm);
+  confirmPageLayout->addWidget(boxPromptDeleteWorkspace);
   confirmPageLayout->addWidget(boxPromptRenameTables);
   confirmPageLayout->addStretch();
 }
@@ -1819,6 +1822,7 @@ void ConfigDialog::languageChange()
   buttonNumbersFont->setText( tr( "Axes &Numbers" ) );
   buttonLegendFont->setText( tr( "&Legend" ) );
   buttonTitleFont->setText( tr( "T&itle" ) );
+  boxPromptDeleteWorkspace->setText( tr( "Prompt when deleting Workspaces" ) );
   boxPromptRenameTables->setText( tr( "Prompt on &renaming tables when appending projects" ) );
   //application page
   appTabWidget->setTabText(appTabWidget->indexOf(application), tr("Application"));
@@ -2124,6 +2128,7 @@ void ConfigDialog::apply()
       QApplication::restoreOverrideCursor();
   }
   // general page: confirmations tab
+  app->d_inform_delete_workspace = boxPromptDeleteWorkspace->isChecked();
   app->d_inform_rename_table = boxPromptRenameTables->isChecked();
   app->confirmCloseFolder = boxFolders->isChecked();
   app->updateConfirmOptions(boxTables->isChecked(), boxMatrices->isChecked(),
@@ -2223,10 +2228,6 @@ void ConfigDialog::updateDirSearchSettings()
   setting.replace('\\','/');
   mantid_config.setString("instrumentDefinition.directory",setting.toStdString());
 
-  setting = leParameterDir->text();
-  setting.replace('\\','/');
-  mantid_config.setString("parameterDefinition.directory",setting.toStdString());
-
 }
 
 void ConfigDialog::updateCurveFitSettings()
@@ -2268,16 +2269,12 @@ void ConfigDialog::updateMantidOptionsTab()
 {
   Mantid::Kernel::ConfigServiceImpl& mantid_config = Mantid::Kernel::ConfigService::Instance();
 
+  // re-use plot instances (spectra, slice, color-fill, etc.)
+  QString reusePlotInst = m_reusePlotInstances->isChecked()? "On" : "Off";
+  mantid_config.setString("MantidOptions.ReusePlotInstances",reusePlotInst.toStdString());
+
   //invisible workspaces options
-  QString showinvisible_ws;
-  if(m_invisibleWorkspaces->isChecked())
-  {
-    showinvisible_ws="1";
-  }
-  else
-  {
-    showinvisible_ws="0";
-  }
+  QString showinvisible_ws = m_invisibleWorkspaces->isChecked()? "1" : "0";
   mantid_config.setString("MantidOptions.InvisibleWorkspaces",showinvisible_ws.toStdString());
 
   //OpenGL option
@@ -2630,13 +2627,4 @@ void ConfigDialog::addInstrumentDir()
   }
 }
 
-void ConfigDialog::addParameterDir()
-{
-  QString dir = QFileDialog::getExistingDirectory(this, tr("Select new parameter definition directory"),
-    "", 0);
-  if (!dir.isEmpty())
-  {
-    leParameterDir->setText(dir);
-  }
-}
 
diff --git a/Code/Mantid/MantidPlot/src/ConfigDialog.h b/Code/Mantid/MantidPlot/src/ConfigDialog.h
index c066b146b7dc79b2ec0d4c15d4021f4e0dbea302..319088297857048397c6a812d4fd3038475a519c 100644
--- a/Code/Mantid/MantidPlot/src/ConfigDialog.h
+++ b/Code/Mantid/MantidPlot/src/ConfigDialog.h
@@ -119,7 +119,6 @@ public:
     void addPythonScriptsDirs();
     void addPythonPluginDirs();
     void addInstrumentDir();
-    void addParameterDir();
     void enableButtons();
     void itemCheckedChanged(QTreeWidgetItem* item);
     void updateChildren(std::map<std::string, std::string> &programKeysAndDetails, QTreeWidgetItem* program);
@@ -187,7 +186,6 @@ private:
   QLineEdit* lePythonScriptsDirs;///< pythonscripts.directories
   QLineEdit* lePythonPluginsDirs;///< python plugins directories
   QLineEdit* leInstrumentDir;///< instrumentDefinition.directory
-  QLineEdit* leParameterDir;///< parameterDefinition.directory
   // Mantid curve fitting page
   QWidget *curveFittingPage;
   QComboBox *backgroundFunctions;
@@ -200,6 +198,7 @@ private:
   QWidget*  mantidOptionsPage;
   QWidget*  mantidSendToPage;
   QCheckBox *m_invisibleWorkspaces;
+  QCheckBox *m_reusePlotInstances;
   QCheckBox *m_useOpenGL;
   QCheckBox *m_sendToPrograms;
   QTreeWidget *treeCategories;
@@ -234,7 +233,7 @@ private:
   QLabel *lblScriptingLanguage, *lblInitWindow;
   QComboBox *boxScriptingLanguage, *boxInitWindow;
   QCheckBox *boxAntialiasing, *boxAutoscale3DPlots, *boxTableComments, *boxThousandsSeparator;
-  QCheckBox *boxPromptRenameTables, *boxBackupProject, *boxLabelsEditing;
+  QCheckBox *boxPromptRenameTables, *boxBackupProject, *boxLabelsEditing, *boxPromptDeleteWorkspace;
   QWidget *fileLocationsPage;
   QLabel *lblTranslationsPath, *lblHelpPath, *lblUndoStackSize, *lblEndOfLine;
   QLineEdit *translationsPathLine, *helpPathLine;
diff --git a/Code/Mantid/MantidPlot/src/LabelTool.cpp b/Code/Mantid/MantidPlot/src/LabelTool.cpp
index 06db0963ebc01595a64c8bba15206a52d8cf5340..48f7a4b2621c1b897af55de78386635b6c86809c 100644
--- a/Code/Mantid/MantidPlot/src/LabelTool.cpp
+++ b/Code/Mantid/MantidPlot/src/LabelTool.cpp
@@ -290,7 +290,9 @@ void LabelTool::blankRegionClicked()
 
   foreach(QString wsName, workspaceNames())
   {
-    workspaces->addAction(new QAction(tr(wsName), this));
+		QAction * qa = new QAction(tr(wsName),this);
+		workspaces->addAction(qa);
+		connect(qa,SIGNAL(triggered()),this,SLOT(insertLegend()));
   }
 
   // For viewing log values.
@@ -298,7 +300,9 @@ void LabelTool::blankRegionClicked()
 
   foreach(QString logProperty, logValues())
   {
-   logVals->addAction(new QAction(tr(logProperty), this));
+		QAction * qa = new QAction(tr(logProperty),this);
+		logVals->addAction(qa);
+		connect(qa,SIGNAL(triggered()),this,SLOT(insertLegend()));
   }
 
   clickMenu->exec(QCursor::pos());
@@ -330,42 +334,41 @@ void LabelTool::dataPointClicked()
  
   // For workspace information.
   QMenu * info = clickMenu->addMenu(tr("More info..."));
-  QMenu * workspaces = info->addMenu(tr("Workspace"));
-  
-  QAction * wsNameToDisplay = new QAction((tr(m_curveWsName)), this);
-  workspaces->addAction(wsNameToDisplay);
-
-  
-  /*
-
-  // Before final testing, make sure that when you select a datapoint, its respective Ws name is displayed
+  QMenu * workspaces = info->addMenu(tr("Workspaces"));
 
   foreach(QString wsName, workspaceNames())
   {
-    QAction * wsNameToDisplay = new QAction((tr(wsName)), this);
-    workspaces->addAction(wsNameToDisplay);
+		QAction * qa = new QAction(tr(wsName),this);
+		workspaces->addAction(qa);
+		connect(qa,SIGNAL(triggered()),this,SLOT(insertLegend()));
   }
 
-  
-  // For displaying workspace title.
-  Mantid::API::Workspace *name; 
-  std::string wsTitle = name->getTitle();
-  
-  QMenu * workspaceTitle = workspaces->addMenu(tr(wsTitle), this);
-  */
+	// For viewing log values.
+	QMenu * logVals = info->addMenu(tr("Log values"));
 
+	foreach(QString logProperty, logValues())
+	{
+		QAction * qa = new QAction(tr(logProperty),this);
+		logVals->addAction(qa);
+		connect(qa,SIGNAL(triggered()),this,SLOT(insertLegend()));
+	}
 
-  // For viewing log values.
-  QMenu * logVals = info->addMenu(tr("Log values"));
-
-  foreach(QString logProperty, logValues())
-  {
-   logVals->addAction(new QAction(tr(logProperty), this));
-  }
-  
   clickMenu->exec(QCursor::pos());
 }
 
+/// Creates a label with size equal to the axisFont size
+void LabelTool::insertLegend()
+{
+	QAction *action = qobject_cast<QAction *>(sender());
+	if (action)
+	{
+		LegendWidget *label = new LegendWidget(d_graph->plotWidget());
+		label->setOriginCoord(m_xPos,m_yPos);
+		label->setFont(d_graph->axisFont(0));
+		label->setText(action->text());
+	}
+}
+
 /// Displays a dialog box to input the contents of a label, then creates the label.
 void LabelTool::insertTextBox()
 {
diff --git a/Code/Mantid/MantidPlot/src/LabelTool.h b/Code/Mantid/MantidPlot/src/LabelTool.h
index 1ecc4848944f5299c2214a35b677be989a4b84a9..2a6134e969bc6a5a0205154f1f4bbddc054e16b6 100644
--- a/Code/Mantid/MantidPlot/src/LabelTool.h
+++ b/Code/Mantid/MantidPlot/src/LabelTool.h
@@ -92,7 +92,8 @@ private slots:
   void xAxisClicked(const QwtPolygon &);
   void yAxisClicked(const QwtPolygon &);
 
-  void insertTextBox();
+	void insertLegend();
+	void insertTextBox();
   void insertXCoord();
   void insertYCoord();
   void insertDataCoord();
diff --git a/Code/Mantid/MantidPlot/src/Mantid/MantidDock.cpp b/Code/Mantid/MantidPlot/src/Mantid/MantidDock.cpp
index 50e3fb85f3d61f7e0c881035e06be942bbb03852..c18c040073f2ff2422ffda667be53b49dc5dade5 100644
--- a/Code/Mantid/MantidPlot/src/Mantid/MantidDock.cpp
+++ b/Code/Mantid/MantidPlot/src/Mantid/MantidDock.cpp
@@ -45,6 +45,8 @@ MantidDockWidget::MantidDockWidget(MantidUI *mui, ApplicationWindow *parent) :
   setMinimumWidth(200);
   parent->addDockWidget( Qt::RightDockWidgetArea, this );
 
+  m_appParent = parent;
+
   QFrame *f = new QFrame(this);
   setWidget(f);
 
@@ -878,26 +880,53 @@ deleteWorkspaces
 void MantidDockWidget::deleteWorkspaces()
 {
   QList<QTreeWidgetItem*> items = m_tree->selectedItems();
-  if(items.empty())
+  MantidMatrix* m = dynamic_cast<MantidMatrix*>(m_mantidUI->appWindow()->activeWindow());
+   
+  bool deleteExplorer = false;
+  bool deleteActive = false;
+
+  if((m_deleteButton->hasFocus() || m_tree->hasFocus()) && !items.empty())
   {
-    MantidMatrix* m = dynamic_cast<MantidMatrix*>(m_mantidUI->appWindow()->activeWindow());
-    if (!m || !m->isA("MantidMatrix")) return;
-    if(m->workspaceName().isEmpty()) return;
+    deleteExplorer = true;
+  }
+  if((m && m->isA("MantidMatrix")) && (!m->workspaceName().isEmpty() && m_ads.doesExist(m->workspaceName().toStdString())))
+  {
+    deleteActive = true;
+  }
 
-    if(m_ads.doesExist(m->workspaceName().toStdString()))
-    {	
-      m_mantidUI->deleteWorkspace(m->workspaceName());
+  if(deleteActive || deleteExplorer)
+  {    
+    QMessageBox::StandardButton reply;
+    
+    if(m_appParent->isDeleteWorkspacePromptEnabled())
+    {
+      reply = QMessageBox::question(this, "Delete Workspaces", "Are you sure you want to delete the selected Workspaces?\n\nThis prompt can be disabled from:\nPreferences->General->Confirmations",
+                                    QMessageBox::Yes|QMessageBox::No);
+    }
+    else
+    {
+      reply = QMessageBox::Yes;
+    }
+
+    if (reply == QMessageBox::Yes)
+    {
+      if(deleteExplorer)
+      { 
+        //loop through multiple items selected from the mantid tree
+        QList<QTreeWidgetItem*>::iterator itr=items.begin();
+        for (itr = items.begin(); itr != items.end(); ++itr)
+        {
+          //Sometimes we try to delete a workspace that's already been deleted.
+          if(m_ads.doesExist((*itr)->text(0).toStdString()))
+            m_mantidUI->deleteWorkspace((*itr)->text(0));
+        }//end of for loop for selected items
+      }
+      else if(deleteActive)
+      {
+        m_mantidUI->deleteWorkspace(m->workspaceName());
+      }
     }
-    return;
   }
-  //loop through multiple items selected from the mantid tree
-  QList<QTreeWidgetItem*>::iterator itr=items.begin();
-  for (itr = items.begin(); itr != items.end(); ++itr)
-  {
-    //Sometimes we try to delete a workspace that's already been deleted.
-    if(m_ads.doesExist((*itr)->text(0).toStdString()))
-      m_mantidUI->deleteWorkspace((*itr)->text(0));
-  }//end of for loop for selected items
 }
 
 void MantidDockWidget::sortAscending()
diff --git a/Code/Mantid/MantidPlot/src/Mantid/MantidDock.h b/Code/Mantid/MantidPlot/src/Mantid/MantidDock.h
index 4253a657ec4d058df304a4d78e405e14fd7849be..f492d63f32931b892bf2a56224c1555b248823d4 100644
--- a/Code/Mantid/MantidPlot/src/Mantid/MantidDock.h
+++ b/Code/Mantid/MantidPlot/src/Mantid/MantidDock.h
@@ -141,6 +141,8 @@ private:
   *m_convertToMatrixWorkspace,
   *m_convertMDHistoToMatrixWorkspace,
   *m_clearUB;
+  
+  ApplicationWindow *m_appParent;
 
   QAtomicInt m_updateCount;
   bool m_treeUpdating;
diff --git a/Code/Mantid/MantidPlot/src/Mantid/MantidMatrix.cpp b/Code/Mantid/MantidPlot/src/Mantid/MantidMatrix.cpp
index 750b2bc5d40f932e0a43ba4f9cdf87272247de59..64557708ea181b1b90e72a8408925e57b029f8db 100644
--- a/Code/Mantid/MantidPlot/src/Mantid/MantidMatrix.cpp
+++ b/Code/Mantid/MantidPlot/src/Mantid/MantidMatrix.cpp
@@ -1366,7 +1366,7 @@ QVariant MantidMatrixModel::data(const QModelIndex &index, int role) const
 bool MantidMatrixModel::checkMonitorCache(int row) const
 {
   row += m_startRow; //correctly offset the row
-  if (m_workspace->getAxis(1)->isSpectra())
+  if (m_workspace->axes() > 1 && m_workspace->getAxis(1)->isSpectra())
   {
     bool isMon = false;
     if (m_monCache.contains(row))
diff --git a/Code/Mantid/MantidPlot/src/Mantid/MantidUI.cpp b/Code/Mantid/MantidPlot/src/Mantid/MantidUI.cpp
index 7c44182a9273ca48e6eb657d0d101cc63e25b0ba..3418004a11e01714f2216867990041ead3cd3247 100644
--- a/Code/Mantid/MantidPlot/src/Mantid/MantidUI.cpp
+++ b/Code/Mantid/MantidPlot/src/Mantid/MantidUI.cpp
@@ -107,7 +107,10 @@ MantidUI::MantidUI(ApplicationWindow *aw):
   m_ungroupworkspaceObserver(*this,&MantidUI::handleUnGroupWorkspace),
   m_workspaceGroupUpdateObserver(*this,&MantidUI::handleWorkspaceGroupUpdate),
   m_configServiceObserver(*this,&MantidUI::handleConfigServiceUpdate),
-  m_appWindow(aw), m_vatesSubWindow(NULL)//, m_spectrumViewWindow(NULL)
+  m_appWindow(aw),
+  m_lastShownInstrumentWin(NULL), m_lastShownSliceViewWin(NULL), m_lastShownSpectrumViewerWin(NULL), 
+  m_lastShownColorFillWin(NULL), m_lastShown1DPlotWin(NULL), 
+  m_vatesSubWindow(NULL)//, m_spectrumViewWindow(NULL)
 {
 
   // To be able to use them in queued signals they need to be registered
@@ -177,6 +180,9 @@ MantidUI::MantidUI(ApplicationWindow *aw):
   //connect(mantidMenu, SIGNAL(aboutToShow()), this, SLOT(mantidMenuAboutToShow()));
   mantidMenuAboutToShow();
 
+  QShortcut* sc = new QShortcut(QKeySequence(QKeySequence::Delete), m_appWindow);
+  connect(sc, SIGNAL(activated()), this, SLOT(deletePressEvent()));
+
   menuMantidMatrix = new QMenu(m_appWindow);
   connect(menuMantidMatrix, SIGNAL(aboutToShow()), this, SLOT(menuMantidMatrixAboutToShow()));
 
@@ -745,11 +751,35 @@ void MantidUI::showSpectrumViewer()
       AnalysisDataService::Instance().retrieve( wsName.toStdString()) );
     if ( wksp )
     {
-      MantidQt::SpectrumView::SpectrumView* viewer = new MantidQt::SpectrumView::SpectrumView(m_appWindow);
+      MantidQt::SpectrumView::SpectrumView* viewer;
+      try
+      {
+        viewer = new MantidQt::SpectrumView::SpectrumView(m_appWindow);
+      }
+      catch (std::runtime_error& e)
+      {
+        m_lastShownSpectrumViewerWin = NULL;
+        g_log.error() << "Could not create spectrum viewer: " << e.what() << "\n";
+        throw std::runtime_error(e);
+      }
       viewer->setAttribute(Qt::WA_DeleteOnClose, false);
       viewer->resize( 1050, 800 );
       connect(m_appWindow, SIGNAL(shutting_down()), viewer, SLOT(close()));
 
+      if (workspacesDockPlot1To1())
+      {
+        // only one at any given time
+        if (m_lastShownSpectrumViewerWin)
+        {
+          m_lastShownSpectrumViewerWin->close();
+          QPoint p = m_lastShownSpectrumViewerWin->pos();
+          delete m_lastShownSpectrumViewerWin;
+          viewer->move(p);
+        }
+
+      }
+      m_lastShownSpectrumViewerWin = viewer;
+
       viewer->show();
       viewer->renderWorkspace(wksp);
     }
@@ -785,8 +815,17 @@ void MantidUI::showSliceViewer()
   if (mdws)
   {
     // Create the slice viewer window
-    SliceViewerWindow * w = MantidQt::Factory::WidgetFactory::Instance()->
-      createSliceViewerWindow(wsName, "");
+    SliceViewerWindow * w;
+    try
+    {
+      w = MantidQt::Factory::WidgetFactory::Instance()->createSliceViewerWindow(wsName, "");
+    }
+    catch (std::runtime_error& e)
+    {
+      m_lastShownSliceViewWin = NULL;
+      g_log.error() << "Could not create slice viewer: " << e.what() << "\n";
+      throw std::runtime_error(e);
+    }
 
     // Special options for viewing MatrixWorkspaces
     if (mw)
@@ -797,6 +836,21 @@ void MantidUI::showSliceViewer()
     // Connect the MantidPlot close() event with the the window's close().
     QObject::connect(appWindow(), SIGNAL(destroyed()), w, SLOT(close()));
 
+    if (workspacesDockPlot1To1())
+    {
+      // only one at any given time
+      if (m_lastShownSliceViewWin)
+      {
+        m_lastShownSliceViewWin->close();
+        QPoint p = m_lastShownSliceViewWin->pos();
+        // the factory keeps a list of all opened slice viewers
+        MantidQt::Factory::WidgetFactory::Instance()->closeSliceViewerWindow(m_lastShownSliceViewWin);
+        delete m_lastShownSliceViewWin;
+        w->move(p);
+      }
+    }
+    m_lastShownSliceViewWin = w;
+
     // Pop up the window
     w->show();
     // And add it
@@ -1246,6 +1300,14 @@ Table* MantidUI::createDetectorTable(const QString & wsName, const Mantid::API::
   return t;
 }
 
+/**
+ * Triggered by a delete key press, and attempts to delete a workspace if it passes the focus checks 
+ */
+void MantidUI::deletePressEvent()
+{
+  m_exploreMantid->deleteWorkspaces();
+}
+
 /**
  * Check if drop event can be accepted
  */
@@ -1365,6 +1427,14 @@ void MantidUI::showAlgorithmDialog(const QString & algName, int version)
   Mantid::API::IAlgorithm_sptr alg = this->createAlgorithm(algName, version);
   if( !alg ) return;
   MantidQt::API::AlgorithmDialog* dlg = createAlgorithmDialog(alg);
+
+  if (algName == "Load")
+  {
+    // when loading files, we'll need to update the list of recent files
+    // hook up MantidUI::fileDialogAccept() to the LoadDialog dialog accepted() signal
+    connect(dlg, SIGNAL(accepted()), this, SLOT(loadFileDialogAccept()));
+  }
+
   dlg->show();
   dlg->raise();
   dlg->activateWindow();
@@ -1391,6 +1461,14 @@ void MantidUI::showAlgorithmDialog(QString algName, QHash<QString,QString> param
     alg->setPropertyValue(it.key().toStdString(),it.value().toStdString());
   }
   MantidQt::API::AlgorithmDialog* dlg = createAlgorithmDialog(alg);
+
+  if (algName == "Load") 
+  {
+    // when loading files, we'll need to update the list of recent files
+    // hook up MantidUI::fileDialogAccept() to the LoadDialog dialog accepted() signal
+    connect(dlg, SIGNAL(accepted()), this, SLOT(loadFileDialogAccept()));
+  }
+
   dlg->show();
   dlg->raise();
   dlg->activateWindow();
@@ -1759,6 +1837,21 @@ bool MantidUI::executeAlgorithmAsync(Mantid::API::IAlgorithm_sptr alg, const boo
   }
 }
 
+/**
+* Slot to update the recent files list (from main appWindow) when accepting LoadDialog dialogs
+*/
+void MantidUI::loadFileDialogAccept()
+{
+  QObject* sender = QObject::sender();
+  MantidQt::API::AlgorithmDialog* dlg = reinterpret_cast<MantidQt::API::AlgorithmDialog*>(sender);
+  if (!dlg)
+    return;  // should never happen
+
+  QString fn = MantidQt::API::AlgorithmInputHistory::Instance().previousInput("Load", "Filename");
+  appWindow()->updateRecentFilesList(fn);
+  // recent files list updated. After this point, the Qt signal handler will go to LoadDialog::accept()
+}
+
 void MantidUI::handleLoadDAEFinishedNotification(const Poco::AutoPtr<Algorithm::FinishedNotification>& pNf)
 {
   std::string wsNAme = pNf->algorithm()->getProperty("OutputWorkspace");
@@ -1926,8 +2019,23 @@ void MantidUI::showMantidInstrument(const QString& wsName)
   InstrumentWindow *insWin = getInstrumentView(wsName);
   if (!insWin)
   {
+    m_lastShownInstrumentWin = NULL;
     return;
   }
+
+  if (workspacesDockPlot1To1())
+  {
+    // replace last one
+    if (m_lastShownInstrumentWin)
+    {
+      m_lastShownInstrumentWin->close();
+      QPoint p = m_lastShownInstrumentWin->pos();
+      delete m_lastShownInstrumentWin;
+      insWin->move(p);
+    }
+  }
+  m_lastShownInstrumentWin = insWin;
+
   if (!insWin->isVisible())
   {
     insWin->show();
@@ -2943,8 +3051,18 @@ MultiLayer* MantidUI::plot1D(const QMultiMap<QString,int>& toPlot, bool spectrum
 
   const QString& firstWsName = toPlot.constBegin().key();
 
+  if(workspacesDockPlot1To1())
+  {
+    if (m_lastShown1DPlotWin)
+    {
+      plotWindow = m_lastShown1DPlotWin;
+      clearWindow = true;
+    }
+  }
   bool isGraphNew = false;
   MultiLayer* ml = appWindow()->prepareMultiLayer(isGraphNew, plotWindow, firstWsName, clearWindow);
+  ml->setName(appWindow()->generateUniqueName(firstWsName + "-"));
+  m_lastShown1DPlotWin = ml;
 
   Graph *g = ml->activeGraph();
 
@@ -3079,15 +3197,32 @@ MultiLayer* MantidUI::drawSingleColorFillPlot(const QString & wsName, Graph::Cur
   if(!workspace) return NULL;
 
   QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-  if(window == NULL)
+
+  bool reusePlots = workspacesDockPlot1To1();
+  if( (!reusePlots && NULL == window) ||
+      (reusePlots && !m_lastShownColorFillWin) ) // needs to create a new window
   {
-    window = appWindow()->multilayerPlot(appWindow()->generateUniqueName( wsName + "-"));
+    try
+    {
+      window = appWindow()->multilayerPlot(appWindow()->generateUniqueName( wsName + "-"));
+    }
+    catch(std::runtime_error& e)
+    {
+      m_lastShownColorFillWin = NULL;
+      g_log.error() << "Could not create color fill plot: " << e.what() << "\n";
+      throw std::runtime_error(e);
+    }
     window->setCloseOnEmpty(true);
-  }
-  else
-  {
+    m_lastShownColorFillWin = window;
+  } else {
+    if (NULL == window)
+    {
+      if (NULL == m_lastShownColorFillWin)
+        return NULL;
+      window = m_lastShownColorFillWin;
+    }
     // start fresh layer
-    window->setWindowTitle(appWindow()->generateUniqueName( wsName + "-"));
+    window->setName(appWindow()->generateUniqueName( wsName + "-"));
     window->setLayersNumber(0);
     window->addLayer();
   }
@@ -3295,6 +3430,11 @@ MantidMatrix* MantidUI::openMatrixWorkspace(ApplicationWindow* parent,const QStr
   return w;
 }
 
+bool MantidUI::workspacesDockPlot1To1()
+{
+  return "On" == Mantid::Kernel::ConfigService::Instance().getString("MantidOptions.ReusePlotInstances");
+}
+
 //=========================================================================
 //
 // This section defines some stuff that is only used on Windows
diff --git a/Code/Mantid/MantidPlot/src/Mantid/MantidUI.h b/Code/Mantid/MantidPlot/src/Mantid/MantidUI.h
index 5f7f9194029f43c4a9cd0463b53072e2167e696c..59c7b99cfa24f2c00232cf5e38879a24d5edc494 100644
--- a/Code/Mantid/MantidPlot/src/Mantid/MantidUI.h
+++ b/Code/Mantid/MantidPlot/src/Mantid/MantidUI.h
@@ -46,8 +46,15 @@ namespace MantidQt
   {
     class FitPropertyBrowser;
   }
+  namespace SliceViewer
+  {
+    class SliceViewerWindow;
+  }
+  namespace SpectrumView
+  {
+    class SpectrumView;
+  }
 }
-
 namespace Ui
 {
   class SequentialFitDialog;
@@ -243,7 +250,8 @@ public:
       const std::vector<int>& indices, bool include_data = false);
     /// Create a table of detectors from a PeaksWorkspace
     Table* createDetectorTable(const QString & wsName, const Mantid::API::IPeaksWorkspace_sptr & ws);
-
+    /// Triggers a workspace delete check
+    void deletePressEvent();
 
     // Determine whether the workspace has a UB matrix
     bool hasUB(const QString& wsName);
@@ -440,6 +448,10 @@ public:
   void memoryImage2();
 #endif
 
+private slots:
+
+  // slot for file open dialogs created from the main app menu, or the workspaces dock window
+  void loadFileDialogAccept();
 
 private:
 
@@ -495,6 +507,10 @@ private:
   ///extracts the files from a mimedata object that have a .py extension
   QStringList extractPyFiles(const QList<QUrl>& urlList) const;
 
+  // Whether new plots shoul re-use the same plot instance (for every different type of plot).
+  // The name comes from: these plots are normally opened from the context menu of the workspaces dock window
+  bool workspacesDockPlot1To1();
+
   // Private variables
 
   ApplicationWindow *m_appWindow;             // QtiPlot main ApplicationWindow
@@ -524,6 +540,14 @@ private:
   QMenu *menuMantidMatrix;             //  MantidMatrix specific menu
   AlgorithmMonitor *m_algMonitor;      //  Class for monitoring running algorithms
 
+  // keep track of the last shown, which will be refreshed or killed/rebuilt if showing only one inst. window
+  // QPointer handles when events, etc. destroy these windows
+  QPointer<InstrumentWindow> m_lastShownInstrumentWin;
+  QPointer<MantidQt::SliceViewer::SliceViewerWindow> m_lastShownSliceViewWin;
+  QPointer<MantidQt::SpectrumView::SpectrumView> m_lastShownSpectrumViewerWin;
+  QPointer<MultiLayer> m_lastShownColorFillWin;
+  QPointer<MultiLayer> m_lastShown1DPlotWin;
+
   // Map of <workspace_name,update_interval> pairs. Positive update_intervals mean
   // UpdateDAE must be launched after LoadDAE for this workspace
   QMap<std::string,int> m_DAE_map;
diff --git a/Code/Mantid/MantidPlot/src/Mantid/SetUpParaview.ui b/Code/Mantid/MantidPlot/src/Mantid/SetUpParaview.ui
index 29f26578aea03edade6e9612eeb41fd464bd27df..f2869504ea5c8c4b0345ff9bf084bf88b58bb60c 100644
--- a/Code/Mantid/MantidPlot/src/Mantid/SetUpParaview.ui
+++ b/Code/Mantid/MantidPlot/src/Mantid/SetUpParaview.ui
@@ -58,7 +58,7 @@
    <item>
     <widget class="QLabel" name="lbl_instructions">
      <property name="text">
-      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:x-large; font-weight:600;&quot;&gt;Your Mantid installation is nearly ready to use with 3D visualisation&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-size:large; font-weight:600;&quot;&gt;Not interested?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;If you don't want 3D visualisation at the present time, you may click KEEP IGNORING&lt;/span&gt;.You can enable it later via the help menu.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-size:large; font-weight:600;&quot;&gt;Interested?&lt;/span&gt;&lt;/p&gt;&lt;ol style=&quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;&quot;&gt;&lt;li style=&quot; margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Prerequisite: You must install ParaView from &lt;a href=&quot;http://download.mantidproject.org/VatesDownload.psp&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;here&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;The install location of ParaView must be set in Mantid ...&lt;/li&gt;&lt;/ol&gt;&lt;/body&gt;&lt;/html&gt;</string>
+      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:x-large; font-weight:600;&quot;&gt;Your Mantid installation is nearly ready to use with 3D visualisation&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-size:large; font-weight:600;&quot;&gt;Not interested?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;If you don't want 3D visualisation at the present time, you may click KEEP IGNORING&lt;/span&gt;.You can enable it later via the help menu.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-size:large; font-weight:600;&quot;&gt;Interested?&lt;/span&gt;&lt;/p&gt;&lt;ol style=&quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;&quot;&gt;&lt;li style=&quot; margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Prerequisite: You must install ParaView from &lt;a href=&quot;http://download.mantidproject.org&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;here&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;The install location of ParaView must be set in Mantid ...&lt;/li&gt;&lt;/ol&gt;&lt;/body&gt;&lt;/html&gt;</string>
      </property>
      <property name="wordWrap">
       <bool>true</bool>
diff --git a/Code/Mantid/MantidPlot/test/MantidPlot1DPlotTest.py b/Code/Mantid/MantidPlot/test/MantidPlot1DPlotTest.py
index 95dd84f3bbea39114d07159c309c773c5526e64d..829047a78158cfca329123c44022e2794a4d2764 100644
--- a/Code/Mantid/MantidPlot/test/MantidPlot1DPlotTest.py
+++ b/Code/Mantid/MantidPlot/test/MantidPlot1DPlotTest.py
@@ -97,8 +97,8 @@ class MantidPlot1DPlotTest(unittest.TestCase):
         self.assertTrue(g is not None)
         self.g = g
 
-    def test_plotBin_with_invalid_raises_RuntimeError(self):
-        self.assertRaises(RuntimeError, plotBin, "fake", 100)
+    def test_plotBin_with_invalid_raises_ValueError(self):
+        self.assertRaises(ValueError, plotBin, "fake", 100)
         self.g = None
 
     def test_plotBin_command_with_list(self):
diff --git a/Code/Mantid/MantidPlot/test/MantidPlotInputArgsCheck.py b/Code/Mantid/MantidPlot/test/MantidPlotInputArgsCheck.py
new file mode 100644
index 0000000000000000000000000000000000000000..01b2840dc021ddedc23b72036feab243a6b12c91
--- /dev/null
+++ b/Code/Mantid/MantidPlot/test/MantidPlotInputArgsCheck.py
@@ -0,0 +1,113 @@
+"""
+Test robust handling of input arguments to plotSpectrum, plotBin, and plotMD
+
+All these functions should throw a ValueError exception when, for example:
+ - the specified workspaces don't exist
+ - the index(es) of spectra, bin or dimension is wrong
+"""
+import mantidplottests
+from mantidplottests import *
+import time
+import numpy as np
+from PyQt4 import QtGui, QtCore
+
+# =============== Create a fake workspace to plot =======================
+X1 = np.linspace(0,10, 100)
+Y1 = 1000*(np.sin(X1)**2) + X1*10
+X1 = np.append(X1, 10.1)
+
+X2 = np.linspace(2,12, 100)
+Y2 = 500*(np.cos(X2/2.)**2) + 20
+X2 = np.append(X2, 12.10)
+
+X = np.append(X1, X2)
+Y = np.append(Y1, Y2)
+E = np.sqrt(Y)
+
+WorkspaceName2D = 'fake ws'
+CreateWorkspace(OutputWorkspace=WorkspaceName2D, DataX=list(X), DataY=list(Y), DataE=list(E), NSpec=2,
+                UnitX="TOF", YUnitLabel="Counts",  WorkspaceTitle="Faked data Workspace")
+
+MDWWorkspaceName = 'mdw'
+CreateMDWorkspace(Dimensions='3',Extents='0,10,0,10,0,10',Names='x,y,z',Units='m,m,m',SplitInto='5',MaxRecursionDepth='20',OutputWorkspace=MDWWorkspaceName)
+
+WrongWorkspaceName = 'foo inexistent'
+
+class MantidPlotInputArgsCheck(unittest.TestCase):
+
+    def setUp(self):
+        self.g = None
+
+    def tearDown(self):
+        """Clean up by closing the created window """
+        windows = self.g
+        if type(self.g) != list:
+            windows = [self.g]
+        
+        for window in windows:
+            if window != None:
+                window.confirmClose(False)
+                window.close()
+                QtCore.QCoreApplication.processEvents()
+
+    def test_plotSpectrum_ok(self):
+        self.g = plotSpectrum(WorkspaceName2D,0)
+        self.assertTrue(isinstance(self.g, proxies.Graph))
+
+        self.g = plotSpectrum(WorkspaceName2D,1)
+        self.assertTrue(isinstance(self.g, proxies.Graph))
+
+    def test_plotSpectrum_fail_WSName(self):
+        try:
+            self.assertRaises(ValueError, plotSpectrum(WrongWorkspaceName, 0), "wont see this tab")
+        except:
+            print "Failed, as it should"
+
+    def test_plotSpectrum_fail_spectrumNeg(self):
+        try:
+            self.assertRaises(ValueError, plotSpectrum(WrongWorkspaceName, -2), "wont see this tab")
+        except:
+            print "Failed, as it should"
+
+    def test_plotSpectrum_fail_spectrumTooBig(self):
+        try:
+            self.assertRaises(ValueError, plotSpectrum(WrongWorkspaceName, 3), "wont see this tab")
+        except:
+            print "Failed, as it should"
+
+    def test_plotBin_ok(self):
+        self.g = plotSpectrum(WorkspaceName2D, 0)
+        self.assertTrue(isinstance(self.g, proxies.Graph))
+
+    def test_plotBin_fail_WSName(self):
+        try:
+            self.assertRaises(ValueError, plotBin(WrongWorkspaceName, 0), "wont see this tab")
+        except:
+            print "Failed, as it should"
+
+    def test_plotBin_fail_indexNeg(self):
+        try:
+            self.assertRaises(ValueError, plotBin(WrongWorkspaceName, -5), "wont see this tab")
+        except:
+            print "Failed, as it should"
+
+    def test_plotBin_fail_indexTooBig(self):
+        try:
+            self.assertRaises(ValueError, plotBin(WrongWorkspaceName, 100), "wont see this tab")
+        except:
+            print "Failed, as it should"
+
+    def test_plotMD_fail_NonMD(self):
+        try:
+            self.assertRaises(ValueError, plotMD(WorkspaceName2D, 0), "wont see this tab")
+        except:
+            print "Failed, as it should"
+
+    def test_plotMD_fail_nonIntegrated(self):
+        try:
+            self.assertRaises(ValueError, plotMD(MDWWorkspaceName, 100), "wont see this tab")
+        except:
+            print "Failed, as it should"
+
+# Run the unit tests
+mantidplottests.runTests(MantidPlotInputArgsCheck)
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/CMakeLists.txt b/Code/Mantid/MantidQt/CustomInterfaces/CMakeLists.txt
index e1615af4d6e25a23c5030d4e42abfc1af60ec8aa..9a245f1e4e480fda7f7f3b1be3c82abf7e1c3658 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/CMakeLists.txt
+++ b/Code/Mantid/MantidQt/CustomInterfaces/CMakeLists.txt
@@ -4,7 +4,7 @@ set ( SRC_FILES
 	src/ConvFit.cpp
 	src/CreateMDWorkspace.cpp
 	src/CreateMDWorkspaceAlgDialog.cpp
-  src/DirectConvertToEnergy.cpp
+	src/DirectConvertToEnergy.cpp
 	src/Elwin.cpp
 	src/EventNexusFileMemento.cpp
 	src/Fury.cpp
@@ -13,12 +13,12 @@ set ( SRC_FILES
 	src/IDATab.cpp
 	src/IndirectBayes.cpp
 	src/IndirectBayesTab.cpp
-  src/IndirectCalibration.cpp
-  src/IndirectConvertToEnergy.cpp
+	src/IndirectCalibration.cpp
+	src/IndirectConvertToEnergy.cpp
 	src/IndirectDataAnalysis.cpp
-  src/IndirectDataReduction.cpp
-  src/IndirectDataReductionTab.cpp
-  src/IndirectDiagnostics.cpp
+	src/IndirectDataReduction.cpp
+	src/IndirectDataReductionTab.cpp
+	src/IndirectDiagnostics.cpp
 	src/IndirectDiffractionReduction.cpp
 	src/IndirectLoadAscii.cpp
 	src/IndirectLoadAsciiTab.cpp
@@ -28,6 +28,7 @@ set ( SRC_FILES
 	src/IndirectSimulation.cpp
 	src/IndirectSimulationTab.cpp
   src/IndirectSqw.cpp
+	src/IndirectSymmetrise.cpp
 	src/IndirectTab.cpp
   src/IndirectTransmission.cpp
 	src/JumpFit.cpp
@@ -52,14 +53,11 @@ set ( SRC_FILES
 	src/Muon/MuonAnalysisResultTableTab.cpp
 	src/QReflTableModel.cpp
 	src/QtReflMainView.cpp
+	src/QtReflOptionsDialog.cpp
 	src/QtWorkspaceMementoModel.cpp
 	src/Quasi.cpp
 	src/RawFileMemento.cpp
-	src/ReflBlankMainViewPresenter.cpp
-	src/ReflLoadedMainViewPresenter.cpp
-	src/ReflMainView.cpp
 	src/ReflMainViewPresenter.cpp
-	src/ReflNullMainViewPresenter.cpp
 	src/ResNorm.cpp
 	src/SANSAddFiles.cpp
 	src/SANSDiagnostics.cpp
@@ -83,7 +81,7 @@ set ( INC_FILES
 	inc/MantidQtCustomInterfaces/ConvFit.h
 	inc/MantidQtCustomInterfaces/CreateMDWorkspace.h
 	inc/MantidQtCustomInterfaces/CreateMDWorkspaceAlgDialog.h
-  inc/MantidQtCustomInterfaces/DirectConvertToEnergy.h
+	inc/MantidQtCustomInterfaces/DirectConvertToEnergy.h
 	inc/MantidQtCustomInterfaces/DllConfig.h
 	inc/MantidQtCustomInterfaces/Elwin.h
 	inc/MantidQtCustomInterfaces/EventNexusFileMemento.h
@@ -93,11 +91,11 @@ set ( INC_FILES
 	inc/MantidQtCustomInterfaces/IDATab.h
 	inc/MantidQtCustomInterfaces/IndirectBayes.h
 	inc/MantidQtCustomInterfaces/IndirectBayesTab.h
-  inc/MantidQtCustomInterfaces/IndirectCalibration.h
-  inc/MantidQtCustomInterfaces/IndirectConvertToEnergy.h
+	inc/MantidQtCustomInterfaces/IndirectCalibration.h
+	inc/MantidQtCustomInterfaces/IndirectConvertToEnergy.h
 	inc/MantidQtCustomInterfaces/IndirectDataAnalysis.h
-  inc/MantidQtCustomInterfaces/IndirectDataReduction.h
-  inc/MantidQtCustomInterfaces/IndirectDataReductionTab.h
+	inc/MantidQtCustomInterfaces/IndirectDataReduction.h
+ 	inc/MantidQtCustomInterfaces/IndirectDataReductionTab.h
 	inc/MantidQtCustomInterfaces/IndirectDiagnostics.h
 	inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.h
 	inc/MantidQtCustomInterfaces/IndirectLoadAscii.h
@@ -108,6 +106,7 @@ set ( INC_FILES
 	inc/MantidQtCustomInterfaces/IndirectSimulation.h
 	inc/MantidQtCustomInterfaces/IndirectSimulationTab.h
 	inc/MantidQtCustomInterfaces/IndirectSqw.h
+	inc/MantidQtCustomInterfaces/IndirectSymmetrise.h
   inc/MantidQtCustomInterfaces/IndirectTransmission.h
   inc/MantidQtCustomInterfaces/IndirectTab.h
 	inc/MantidQtCustomInterfaces/IReflPresenter.h
@@ -136,13 +135,11 @@ set ( INC_FILES
 	inc/MantidQtCustomInterfaces/Muon/MuonAnalysisHelper.h
 	inc/MantidQtCustomInterfaces/Muon/MuonAnalysisOptionTab.h
 	inc/MantidQtCustomInterfaces/Muon/MuonAnalysisResultTableTab.h
-	inc/MantidQtCustomInterfaces/ReflBlankMainViewPresenter.h
-	inc/MantidQtCustomInterfaces/ReflLoadedMainViewPresenter.h
 	inc/MantidQtCustomInterfaces/ReflMainView.h
 	inc/MantidQtCustomInterfaces/ReflMainViewPresenter.h
-	inc/MantidQtCustomInterfaces/ReflNullMainViewPresenter.h
 	inc/MantidQtCustomInterfaces/QReflTableModel.h
 	inc/MantidQtCustomInterfaces/QtReflMainView.h
+	inc/MantidQtCustomInterfaces/QtReflOptionsDialog.h
 	inc/MantidQtCustomInterfaces/QtWorkspaceMementoModel.h
 	inc/MantidQtCustomInterfaces/Quasi.h
 	inc/MantidQtCustomInterfaces/RawFileMemento.h
@@ -192,6 +189,7 @@ set ( MOC_FILES inc/MantidQtCustomInterfaces/Background.h
                 inc/MantidQtCustomInterfaces/IndirectSimulation.h
                 inc/MantidQtCustomInterfaces/IndirectSimulationTab.h
                 inc/MantidQtCustomInterfaces/IndirectSqw.h
+                inc/MantidQtCustomInterfaces/IndirectSymmetrise.h
                 inc/MantidQtCustomInterfaces/IndirectTransmission.h
                 inc/MantidQtCustomInterfaces/IndirectTab.h
                 inc/MantidQtCustomInterfaces/JumpFit.h
@@ -213,6 +211,7 @@ set ( MOC_FILES inc/MantidQtCustomInterfaces/Background.h
                 inc/MantidQtCustomInterfaces/Muon/MuonAnalysisResultTableTab.h
                 inc/MantidQtCustomInterfaces/QReflTableModel.h
                 inc/MantidQtCustomInterfaces/QtReflMainView.h
+                inc/MantidQtCustomInterfaces/QtReflOptionsDialog.h
                 inc/MantidQtCustomInterfaces/Quasi.h
                 inc/MantidQtCustomInterfaces/ResNorm.h
                 inc/MantidQtCustomInterfaces/SANSAddFiles.h
@@ -244,6 +243,7 @@ set ( UI_FILES inc/MantidQtCustomInterfaces/CreateMDWorkspace.ui
                inc/MantidQtCustomInterfaces/Muon/MuonAnalysis.ui
                inc/MantidQtCustomInterfaces/Quasi.ui
                inc/MantidQtCustomInterfaces/ReflMainWidget.ui
+               inc/MantidQtCustomInterfaces/ReflOptionsDialog.ui
                inc/MantidQtCustomInterfaces/ReflWindow.ui
                inc/MantidQtCustomInterfaces/ResNorm.ui
                inc/MantidQtCustomInterfaces/SANSPlotSpecial.ui
@@ -264,8 +264,7 @@ set ( TEST_FILES
 	IO_MuonGroupingTest.h
 	MuonAnalysisHelperTest.h
 	RawFileMementoTest.h
-	ReflBlankMainViewPresenterTest.h
-	ReflLoadedMainViewPresenterTest.h
+	ReflMainViewPresenterTest.h
 	WorkspaceInADSTest.h
 	WorkspaceMementoTest.h
 )
@@ -317,10 +316,3 @@ add_subdirectory ( test )
 ###########################################################################
 
 install ( TARGETS CustomInterfaces ${SYSTEM_PACKAGE_TARGET} DESTINATION ${PLUGINS_DIR}/qtplugins/mantid )
-
-set ( TEST_FILES
-	QReflTableModelTest.h
-	QtReflMainViewTest.h
-	ReflBlankMainViewPresenterTest.h
-	ReflLoadedMainViewPresenterTest.h
-)
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IReflPresenter.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IReflPresenter.h
index f561c8168c485ec05a3087e44f329cf5efe125ff..b3285e69101a874d92ea6d8d935215a15430cb27 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IReflPresenter.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IReflPresenter.h
@@ -1,7 +1,13 @@
 #ifndef MANTID_CUSTOMINTERFACES_IREFLPRESENTER_H
 #define MANTID_CUSTOMINTERFACES_IREFLPRESENTER_H
 
+#include <map>
+#include <string>
+
 #include "MantidKernel/System.h"
+
+#include <QVariant>
+
 namespace MantidQt
 {
   namespace CustomInterfaces
@@ -34,10 +40,31 @@ namespace MantidQt
     {
     public:
       virtual ~IReflPresenter() {};
-      //Tell the presenter something happened
-      virtual void notify(int flag) = 0;
-    private:
 
+      enum Flag
+      {
+        SaveFlag,
+        SaveAsFlag,
+        AppendRowFlag,
+        PrependRowFlag,
+        DeleteRowFlag,
+        ProcessFlag,
+        GroupRowsFlag,
+        OpenTableFlag,
+        NewTableFlag,
+        TableUpdatedFlag,
+        ExpandSelectionFlag,
+        OptionsDialogFlag,
+        ClearSelectedFlag,
+        CopySelectedFlag,
+        CutSelectedFlag,
+        PasteSelectedFlag,
+      };
+
+      //Tell the presenter something happened
+      virtual void notify(IReflPresenter::Flag flag) = 0;
+      virtual const std::map<std::string,QVariant>& options() const = 0;
+      virtual void setOptions(const std::map<std::string,QVariant>& options) = 0;
     };
   }
 }
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectCalibration.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectCalibration.h
index dfeb4496c2bcdb5a62754c35196ae0b6aeeca903..3d035e9c605a106a6ff880335ebcd447b2760c87 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectCalibration.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectCalibration.h
@@ -59,10 +59,15 @@ namespace CustomInterfaces
     void intensityScaleMultiplierCheck(bool state); /// Toggle the intensity scale multiplier box
     void calibValidateIntensity(const QString & text); /// Check that the scale multiplier is valid
     void setDefaultInstDetails();
+    void pbRunEditing();  //< Called when a user starts to type / edit the runs to load.
+    void pbRunFinding();  //< Called when the FileFinder starts finding the files.
+    void pbRunFinished(); //< Called when the FileFinder has finished finding the files.
 
   private:
     void createRESfile(const QString& file);
 
+    QString m_lastCalPlotFilename;
+
   };
 } // namespace CustomInterfaces
 } // namespace Mantid
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectConvertToEnergy.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectConvertToEnergy.h
index 58cbc6ddfe5eded62d4e1ee5d1f98b012a9c4363..9d25528c6e79011a586ff0996d0aa81a604fcd88 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectConvertToEnergy.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectConvertToEnergy.h
@@ -47,12 +47,8 @@ namespace CustomInterfaces
     virtual void run();
     virtual bool validate();
 
-    void setIDFValues(const QString & prefix);
-
   private slots:
-    void clearReflectionInfo(); ///< clear various line edit boxes
-    void analyserSelected(int index); ///< set up cbReflection based on Analyser selection
-    void reflectionSelected(int index); ///< set up parameter file values based on reflection
+    void setInstrumentDefault(); ///< Sets default parameters for current instrument
     void mappingOptionSelected(const QString& groupType); ///< change ui to display appropriate options
     void backgroundClicked(); ///< handles showing and hiding m_backgroundDialog
     void backgroundRemoval(); ///< handles data from BG
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.h
index d772b475a2589349ed92c7e37783a277cb267d6d..94b72fd8e572e042f4508f3959c1577bfc030a11 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.h
@@ -22,10 +22,10 @@ namespace MantidQt
     //-------------------------------------------
     class IndirectDataReductionTab;
 
-    /** 
+    /**
     This class defines the IndirectDataReduction interface. It handles the overall instrument settings
     and sets up the appropriate interface depending on the deltaE mode of the instrument. The deltaE
-    mode is defined in the instrument definition file using the "deltaE-mode".    
+    mode is defined in the instrument definition file using the "deltaE-mode".
 
     @author Martyn Gigg, Tessella Support Services plc
     @author Michael Whitty
@@ -48,7 +48,7 @@ namespace MantidQt
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
     File change history is stored at: <https://github.com/mantidproject/mantid>
-    Code Documentation is available at: <http://doxygen.mantidproject.org>    
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
     */
 
     class IndirectDataReduction : public MantidQt::API::UserSubWindow
@@ -67,54 +67,68 @@ namespace MantidQt
 
       /// Initialize the layout
       virtual void initLayout();
-      /// run Python-based initialisation commands
+      /// Run Python-based initialisation commands
       virtual void initLocalPython();
-      /// gather necessary information from Instument Definition Files
-      virtual void setIDFValues(const QString & prefix);
-      /// perform any instrument-specific changes to layout
-      void performInstSpecific();
 
-      void handleDirectoryChange(Mantid::Kernel::ConfigValChangeNotification_ptr pNf); ///< handle POCO event
+      /// Handled configuration changes
+      void handleDirectoryChange(Mantid::Kernel::ConfigValChangeNotification_ptr pNf);
+
+      Mantid::API::MatrixWorkspace_sptr loadInstrumentIfNotExist(std::string instrumentName,
+          std::string analyser = "", std::string reflection = "");
+
+      std::vector<std::pair<std::string, std::vector<std::string> > > getInstrumentModes();
+
+    signals:
+      /// Emitted when the instrument setup is changed
+      void newInstrumentConfiguration();
 
     private slots:
+      /// Opens the help page for the current tab
       void helpClicked();
+      /// Runs the current tab
       void runClicked();
+      /// Opens the manage directory dialog
+      void openDirectoryDialog();
+
+      /// Shows a information dialog box
+      void showMessageBox(const QString& message);
+      /// Updates the state of the Run button
+      void updateRunButton(bool enabled = true, QString message = "Run", QString tooltip = "");
+
+      /// Called when the load instrument algorithms complete
       void instrumentLoadingDone(bool error);
 
-      void userSelectInstrument(const QString& name);
-      void openDirectoryDialog();
-      void showMessageBox(const QString& message); /// Slot showing a message box to the user
+      /// Called when an instrument is selected from the combo box
+      void instrumentSelected(const QString& prefix);
+      /// Called when an analyser is selected form the combo box
+      void analyserSelected(int index);
+      /// Called when the instrument setup has been changed
+      void instrumentSetupChanged();
 
     private:
-      void loadSettings();
+      void updateAnalyserList();
+
       void readSettings();
       void saveSettings();
-      void setDefaultInstrument(const QString & name);
-      void instrumentSelectChanged(const QString& name);
-      ///// Find path to instrument's _Definition.xml file (and check there is a parameter file).
-      //QString getIDFPath(const QString& prefix);
-      /// set and show an instrument-specific widget
+
+      /// Set and show an instrument-specific widget
       void setInstSpecificWidget(const std::string & parameterName, QCheckBox * checkBox, QCheckBox::ToggleState defaultState);
       virtual void closeEvent(QCloseEvent* close);
 
       /// The .ui form generated by Qt Designer
       Ui::IndirectDataReduction m_uiForm;
       /// Instrument the interface is currently set for.
-      QString m_curInterfaceSetup;
+      QString m_instrument;
       /// The settings group
       QString m_settingsGroup;
       /// Runner for insturment load algorithm
       MantidQt::API::AlgorithmRunner* m_algRunner;
 
-      //All indirect tabs
-      IndirectDataReductionTab* m_tab_convert_to_energy;
-      IndirectDataReductionTab* m_tab_sqw;
-      IndirectDataReductionTab* m_tab_diagnostics;
-      IndirectDataReductionTab* m_tab_calibration;
-      IndirectDataReductionTab* m_tab_trans;
-      IndirectDataReductionTab* m_tab_moments;
+      // All indirect tabs
+      std::map<QString, IndirectDataReductionTab*> m_tabs;
 
-      Poco::NObserver<IndirectDataReduction, Mantid::Kernel::ConfigValChangeNotification> m_changeObserver; ///< Poco observer for changes in user directory settings
+      /// Poco observer for changes in user directory settings
+      Poco::NObserver<IndirectDataReduction, Mantid::Kernel::ConfigValChangeNotification> m_changeObserver;
       QString m_dataDir; ///< default data search directory
       QString m_saveDir; ///< default data save directory
     };
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.ui b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.ui
index 7a86b9c45bfff5cc7c0649e9241ca50e6fe9ec37..19eb96c0647a5b738cd0dd9941bcb9b778c8f015 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.ui
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.ui
@@ -18,6 +18,80 @@
    <property name="topMargin">
     <number>9</number>
    </property>
+   <item>
+    <widget class="QGroupBox" name="gbC2EInstrument">
+     <property name="title">
+      <string>Instrument</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_27">
+      <property name="topMargin">
+       <number>1</number>
+      </property>
+      <item>
+       <widget class="MantidQt::MantidWidgets::InstrumentSelector" name="cbInst">
+        <property name="techniques" stdset="0">
+         <stringlist>
+          <string>TOF Indirect Geometry Spectroscopy</string>
+         </stringlist>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <spacer name="horizontalSpacer_2">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item>
+       <widget class="QLabel" name="lbAnalyser">
+        <property name="text">
+         <string>Analyser</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QComboBox" name="cbAnalyser">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="toolTip">
+         <string>Select Analyser bank to use.</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLabel" name="lbReflection">
+        <property name="text">
+         <string>Reflection</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QComboBox" name="cbReflection">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="toolTip">
+         <string>Select Reflection used for experiment(s).</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
    <item>
     <widget class="QTabWidget" name="tabWidget">
      <property name="sizePolicy">
@@ -43,80 +117,6 @@
        <string>Energy Transfer</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_2">
-       <item>
-        <widget class="QGroupBox" name="gbC2EInstrument">
-         <property name="title">
-          <string>Instrument</string>
-         </property>
-         <layout class="QHBoxLayout" name="horizontalLayout_27">
-          <property name="topMargin">
-           <number>1</number>
-          </property>
-          <item>
-           <widget class="MantidQt::MantidWidgets::InstrumentSelector" name="cbInst">
-            <property name="techniques" stdset="0">
-             <stringlist>
-              <string>TOF Indirect Geometry Spectroscopy</string>
-             </stringlist>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <spacer name="horizontalSpacer_2">
-            <property name="orientation">
-             <enum>Qt::Horizontal</enum>
-            </property>
-            <property name="sizeHint" stdset="0">
-             <size>
-              <width>40</width>
-              <height>20</height>
-             </size>
-            </property>
-           </spacer>
-          </item>
-          <item>
-           <widget class="QLabel" name="lbAnalyser">
-            <property name="text">
-             <string>Analyser</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QComboBox" name="cbAnalyser">
-            <property name="sizePolicy">
-             <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
-            </property>
-            <property name="toolTip">
-             <string>Select Analyser bank to use.</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QLabel" name="lbReflection">
-            <property name="text">
-             <string>Reflection</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QComboBox" name="cbReflection">
-            <property name="sizePolicy">
-             <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
-            </property>
-            <property name="toolTip">
-             <string>Select Reflection used for experiment(s).</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-       </item>
        <item>
         <widget class="QGroupBox" name="gbConvertToEnergyInput">
          <property name="title">
@@ -921,6 +921,19 @@ p, li { white-space: pre-wrap; }
          </widget>
         </widget>
        </item>
+       <item>
+         <spacer name="etLayoutSpacer">
+          <property name="orientation">
+           <enum>Qt::Vertical</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>40</height>
+           </size>
+          </property>
+         </spacer>
+       </item>
        <item>
         <widget class="QGroupBox" name="gbSave">
          <property name="title">
@@ -1285,7 +1298,7 @@ Later steps in the process (saving, renaming) will not be done.</string>
            <layout class="QVBoxLayout" name="cal_treeRes">
             <item>
              <layout class="QGridLayout" name="gridLayout_5">
-              <item row="1" column="0">
+              <item row="2" column="0">
                <widget class="QCheckBox" name="cal_ckResScale">
                 <property name="enabled">
                  <bool>false</bool>
@@ -1295,7 +1308,7 @@ Later steps in the process (saving, renaming) will not be done.</string>
                 </property>
                </widget>
               </item>
-              <item row="1" column="1">
+              <item row="2" column="1">
                <widget class="QLineEdit" name="cal_leResScale">
                 <property name="enabled">
                  <bool>false</bool>
@@ -1324,6 +1337,16 @@ Later steps in the process (saving, renaming) will not be done.</string>
                 </property>
                </widget>
               </item>
+              <item row="1" column="0" colspan="2">
+               <widget class="QCheckBox" name="cal_ckSmooth">
+                <property name="toolTip">
+                 <string>Apply WienerSmooth algorithm to resolution</string>
+                </property>
+                <property name="text">
+                 <string>Smooth RES</string>
+                </property>
+               </widget>
+              </item>
              </layout>
             </item>
            </layout>
@@ -1505,32 +1528,27 @@ Later steps in the process (saving, renaming) will not be done.</string>
          <property name="title">
           <string>Time Slice</string>
          </property>
-         <layout class="QVBoxLayout" name="verticalLayout_26">
+         <layout class="QHBoxLayout" name="horizontalLayout_2">
           <item>
-           <layout class="QHBoxLayout" name="loTimeSlice">
-            <item>
-             <layout class="QVBoxLayout" name="slice_properties"/>
-            </item>
-            <item>
-             <layout class="QHBoxLayout" name="slice_plot"/>
-            </item>
-           </layout>
+           <layout class="QVBoxLayout" name="slice_properties"/>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="slice_plot"/>
           </item>
          </layout>
         </widget>
        </item>
        <item>
-        <spacer name="verticalSpacer_5">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>40</height>
-          </size>
+        <widget class="QGroupBox" name="slice_gbPreview">
+         <property name="title">
+          <string>Preview</string>
          </property>
-        </spacer>
+         <layout class="QVBoxLayout" name="verticalLayout_15">
+          <item>
+           <layout class="QVBoxLayout" name="slice_plotPreview"/>
+          </item>
+         </layout>
+        </widget>
        </item>
        <item>
         <widget class="QGroupBox" name="gbDiagnosticsOutput">
@@ -1684,7 +1702,7 @@ Later steps in the process (saving, renaming) will not be done.</string>
          <property name="title">
           <string>Preview</string>
          </property>
-         <layout class="QVBoxLayout" name="verticalLayout_15">
+         <layout class="QVBoxLayout" name="verticalLayout_18">
           <item>
            <layout class="QVBoxLayout" name="trans_plotPreview">
             <property name="sizeConstraint">
@@ -1763,6 +1781,160 @@ Later steps in the process (saving, renaming) will not be done.</string>
        </item>
       </layout>
      </widget>
+     <widget class="QWidget" name="tabSymmertrise">
+      <attribute name="title">
+       <string>Symmetrise</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_15">
+       <item>
+        <widget class="QGroupBox" name="gbSymmInput">
+         <property name="title">
+          <string>Input</string>
+         </property>
+         <layout class="QVBoxLayout" name="verticalLayout_21">
+          <item>
+           <widget class="MantidQt::MantidWidgets::DataSelector" name="symm_dsInput" native="true">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="showLoad" stdset="0">
+             <bool>false</bool>
+            </property>
+            <property name="workspaceSuffixes" stdset="0">
+             <string>_red</string>
+            </property>
+            <property name="fileBrowserSuffixes" stdset="0">
+             <string>_red.nxs</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item>
+        <widget class="QGroupBox" name="symm_gbOptions">
+         <property name="title">
+          <string>Symmetrise</string>
+         </property>
+         <layout class="QHBoxLayout" name="horizontalLayout_3">
+          <property name="topMargin">
+           <number>6</number>
+          </property>
+          <item>
+           <layout class="QVBoxLayout" name="symm_properties"/>
+          </item>
+          <item>
+           <layout class="QVBoxLayout" name="symm_plot"/>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item>
+        <widget class="QGroupBox" name="symm_gbPreview">
+         <property name="title">
+          <string>Preview</string>
+         </property>
+         <layout class="QHBoxLayout" name="horizontalLayout_14">
+          <item>
+           <layout class="QVBoxLayout" name="verticalLayout_22">
+            <item>
+             <widget class="QPushButton" name="symm_previewButton">
+              <property name="text">
+               <string>Preview</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <layout class="QVBoxLayout" name="symm_previewProperties"/>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QVBoxLayout" name="symm_previewPlot"/>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item>
+        <spacer name="vsSymm">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>40</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <widget class="QGroupBox" name="gbSymmOutput">
+         <property name="title">
+          <string>Output</string>
+         </property>
+         <layout class="QHBoxLayout" name="horizontalLayout">
+          <property name="margin">
+           <number>6</number>
+          </property>
+          <item>
+           <widget class="QCheckBox" name="symm_ckVerbose">
+            <property name="enabled">
+             <bool>true</bool>
+            </property>
+            <property name="text">
+             <string>Verbose</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <spacer name="horizontalSpacer_24">
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>165</width>
+              <height>20</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+          <item>
+           <widget class="QCheckBox" name="symm_ckPlot">
+            <property name="text">
+             <string>Plot Result</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <spacer name="horizontalSpacer_22">
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>164</width>
+              <height>20</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+          <item>
+           <widget class="QCheckBox" name="symm_ckSave">
+            <property name="text">
+             <string>Save Result</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+      </layout>
+     </widget>
      <widget class="QWidget" name="tabSofQW">
       <attribute name="title">
        <string>S(Q, w)</string>
@@ -1789,7 +1961,7 @@ Later steps in the process (saving, renaming) will not be done.</string>
              </sizepolicy>
             </property>
             <property name="autoLoad" stdset="0">
-             <bool>false</bool>
+             <bool>true</bool>
             </property>
             <property name="loadLabelText" stdset="0">
              <string>Plot Input</string>
@@ -2364,7 +2536,7 @@ Later steps in the process (saving, renaming) will not be done.</string>
         <property name="title">
          <string>Preview</string>
         </property>
-        <layout class="QHBoxLayout" name="horizontalLayout">
+        <layout class="QHBoxLayout" name="horizontalLayout_1">
          <property name="margin">
           <number>6</number>
          </property>
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReductionTab.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReductionTab.h
index 8d7dcf61945e40fb4235cd24e9cc8b88d98f59eb..1d9a5208d410287fdd7931743156b3f1994a1540 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReductionTab.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReductionTab.h
@@ -77,16 +77,32 @@ namespace CustomInterfaces
     IndirectDataReductionTab(Ui::IndirectDataReduction& uiForm, QObject * parent = 0);
     virtual ~IndirectDataReductionTab();
 
+  public slots:
+    void runTab();
+
   protected:
     Mantid::API::MatrixWorkspace_sptr loadInstrumentIfNotExist(std::string instrumentName, std::string analyser="", std::string reflection="");
-    /// Get information about the operation modes of an indirect instrument
-    std::vector<std::pair<std::string, std::vector<std::string> > > getInstrumentModes(std::string instrumentName);
     /// Function to get details about the instrument configuration defined on C2E tab
     std::map<QString, QString> getInstrumentDetails();
 
-  protected:
+    std::map<std::string, double> getRangesFromInstrument(QString instName = "", QString analyser = "", QString reflection = "");
+
     Ui::IndirectDataReduction m_uiForm;
 
+  signals:
+    /// Update the Run button on the IDR main window
+    void updateRunButton(bool enabled = true, QString message = "Run", QString tooltip = "");
+    /// Emitted when the instrument setup is changed
+    void newInstrumentConfiguration();
+
+  private:
+    bool m_tabRunning;
+
+    QString getInstrumentParameterFrom(Mantid::Geometry::IComponent_const_sptr comp, std::string param);
+
+  private slots:
+    void tabExecutionComplete(bool error);
+
   };
 } // namespace CustomInterfaces
 } // namespace Mantid
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiagnostics.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiagnostics.h
index 6e502e6ddeb98bd26a697cd2fe1b6fe064ee1f76..decaea8f79e03a81afd7b6052ea09b984401cbb2 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiagnostics.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiagnostics.h
@@ -69,10 +69,17 @@ namespace CustomInterfaces
     void slicePlotRaw();
     void sliceTwoRanges(QtProperty*, bool);
     void sliceCalib(bool state);
-    void sliceMinChanged(double val);
-    void sliceMaxChanged(double val);
+    void rangeSelectorDropped(double, double);
     void sliceUpdateRS(QtProperty*, double);
     void setDefaultInstDetails();
+    void updatePreviewPlot();
+    void sliceAlgDone(bool error);
+    void pbRunEditing();  //< Called when a user starts to type / edit the runs to load.
+    void pbRunFinding();  //< Called when the FileFinder starts finding the files.
+    void pbRunFinished(); //< Called when the FileFinder has finished finding the files.
+
+  private:
+    QString m_lastDiagFilename;
 
   };
 } // namespace CustomInterfaces
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.h
index fd6934e7e3a6b4dca8ee440172858f323bd11a41..2631379786e760a448911465e25bda4f6836af30 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.h
@@ -5,6 +5,8 @@
 // Includes
 //----------------------
 #include "ui_IndirectDiffractionReduction.h"
+
+#include "MantidQtAPI/BatchAlgorithmRunner.h"
 #include "MantidQtAPI/UserSubWindow.h"
 
 namespace MantidQt
@@ -27,28 +29,40 @@ public:
   ~IndirectDiffractionReduction();
 
 public slots:
-  void demonRun();  
+  void demonRun();
   void instrumentSelected(int);
   void reflectionSelected(int);
   void openDirectoryDialog();
   void help();
+  void plotResults(bool error);
+  void runFilesChanged();
+  void runFilesFinding();
+  void runFilesFound();
+  void individualGroupingToggled(int state);
 
 private:
-  /// Initialize the layout
   virtual void initLayout();
   void initLocalPython();
+
   void loadSettings();
   void saveSettings();
 
-  bool validateDemon();
+  bool validateRebin();
+  bool validateVanCal();
+
+  Mantid::API::MatrixWorkspace_sptr loadInstrument(std::string instrumentName,
+      std::string reflection = "");
+
+  void runGenericReduction(QString instName, QString mode);
+  void runOSIRISdiffonlyReduction();
 
 private:
-  /// The form generated using Qt Designer
-  Ui::IndirectDiffractionReduction m_uiForm;
+  Ui::IndirectDiffractionReduction m_uiForm;  /// The form generated using Qt Designer
   QIntValidator * m_valInt;
   QDoubleValidator * m_valDbl;
-  /// The settings group
-  QString m_settingsGroup;
+  QString m_settingsGroup;                    /// The settings group
+  MantidQt::API::BatchAlgorithmRunner *m_batchAlgoRunner;
+  QStringList m_plotWorkspaces;
 
 };
 
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.ui b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.ui
index 47e56854cbac6432a571b8ddcaf5ade4e38b1965..c439e8803cf6ae666e7da834397ea1356f7e4580 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.ui
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDiffractionReduction.ui
@@ -7,401 +7,456 @@
     <x>0</x>
     <y>0</y>
     <width>495</width>
-    <height>351</height>
+    <height>433</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>Indirect Diffraction</string>
   </property>
   <widget class="QWidget" name="centralwidget">
-  <layout class="QVBoxLayout" name="verticalLayout_2">
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_6">
-     <item>
-      <widget class="QLabel" name="set_lbInst">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="text">
-        <string>Instrument</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="MantidQt::MantidWidgets::InstrumentSelector" name="cbInst">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="techniques" stdset="0">
-        <stringlist>
-         <string>TOF Indirect Geometry Spectroscopy</string>
-         <string>TOF Indirect Geometry Diffraction</string>
-        </stringlist>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QLabel" name="set_lbReflection">
-       <property name="text">
-        <string>Reflection</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QComboBox" name="cbReflection">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer name="horizontalSpacer">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_2">
-     <item>
-      <widget class="MantidQt::MantidWidgets::MWRunFiles" name="dem_rawFiles" native="true">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-         <horstretch>0</horstretch>
-         <verstretch>41</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="label" stdset="0">
-        <string>Run Numbers</string>
-       </property>
-       <property name="multipleFiles" stdset="0">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QCheckBox" name="dem_ckSumFiles">
-       <property name="text">
-        <string>Sum Files</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_11">
-     <item>
-      <widget class="QLabel" name="label">
-       <property name="text">
-        <string>Spectra Min</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QLineEdit" name="set_leSpecMin"/>
-     </item>
-     <item>
-      <widget class="QLabel" name="label_2">
-       <property name="text">
-        <string>Spectra Max</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QLineEdit" name="set_leSpecMax"/>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <widget class="QStackedWidget" name="swVanadium">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="currentIndex">
-      <number>1</number>
-     </property>
-     <widget class="QWidget" name="page">
-      <property name="sizePolicy">
-       <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
-        <horstretch>0</horstretch>
-        <verstretch>0</verstretch>
-       </sizepolicy>
+   <layout class="QVBoxLayout" name="verticalLayout_2">
+    <item>
+     <widget class="QGroupBox" name="gbInstrument">
+      <property name="title">
+       <string>Instrument</string>
       </property>
-      <layout class="QVBoxLayout" name="verticalLayout_3">
-       <property name="margin">
-        <number>0</number>
-       </property>
+      <layout class="QHBoxLayout" name="horizontalLayout_6">
        <item>
-        <widget class="MantidQt::MantidWidgets::MWRunFiles" name="dem_calFile" native="true">
+        <widget class="MantidQt::MantidWidgets::InstrumentSelector" name="cbInst">
          <property name="sizePolicy">
-          <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+          <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
            <horstretch>0</horstretch>
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
-         <property name="label" stdset="0">
-          <string>Cal File</string>
-         </property>
-         <property name="multipleFiles" stdset="0">
-          <bool>false</bool>
-         </property>
-         <property name="optional" stdset="0">
-          <bool>false</bool>
-         </property>
-         <property name="fileExtensions" stdset="0">
+         <property name="techniques" stdset="0">
           <stringlist>
-           <string>.cal</string>
+           <string>TOF Indirect Geometry Spectroscopy</string>
+           <string>TOF Indirect Geometry Diffraction</string>
           </stringlist>
          </property>
         </widget>
        </item>
        <item>
-        <widget class="MantidQt::MantidWidgets::MWRunFiles" name="dem_vanadiumFile" native="true">
-         <property name="enabled">
-          <bool>true</bool>
+        <spacer name="horizontalSpacer">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>40</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <widget class="QLabel" name="set_lbReflection">
+         <property name="text">
+          <string>Reflection</string>
          </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QComboBox" name="cbReflection">
          <property name="sizePolicy">
-          <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+          <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
            <horstretch>0</horstretch>
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
-         <property name="label" stdset="0">
-          <string>Vanadium Runs</string>
-         </property>
-         <property name="multipleFiles" stdset="0">
-          <bool>true</bool>
-         </property>
         </widget>
        </item>
       </layout>
      </widget>
-     <widget class="QWidget" name="page_2">
+    </item>
+    <item>
+     <widget class="QGroupBox" name="gbInput">
+      <property name="title">
+       <string>Input</string>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout_4">
+       <property name="margin">
+        <number>6</number>
+       </property>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
+         <item>
+          <widget class="MantidQt::MantidWidgets::MWRunFiles" name="dem_rawFiles" native="true">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+             <horstretch>0</horstretch>
+             <verstretch>41</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="label" stdset="0">
+            <string>Run Numbers</string>
+           </property>
+           <property name="multipleFiles" stdset="0">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QCheckBox" name="dem_ckSumFiles">
+           <property name="text">
+            <string>Sum Files</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_11">
+         <item>
+          <widget class="QLabel" name="label">
+           <property name="text">
+            <string>Spectra Min</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="set_leSpecMin"/>
+         </item>
+         <item>
+          <widget class="QLabel" name="label_2">
+           <property name="text">
+            <string>Spectra Max</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="set_leSpecMax"/>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item>
+     <widget class="QStackedWidget" name="swVanadium">
       <property name="sizePolicy">
-       <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
+       <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
         <horstretch>0</horstretch>
         <verstretch>0</verstretch>
        </sizepolicy>
       </property>
-      <layout class="QHBoxLayout" name="horizontalLayout_4">
+      <property name="currentIndex">
+       <number>0</number>
+      </property>
+      <widget class="QWidget" name="page">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <layout class="QVBoxLayout" name="verticalLayout_3">
+        <property name="margin">
+         <number>0</number>
+        </property>
+        <item>
+         <widget class="QGroupBox" name="gbCalibration">
+          <property name="title">
+           <string>Calibration</string>
+          </property>
+          <layout class="QVBoxLayout" name="verticalLayout">
+           <property name="margin">
+            <number>6</number>
+           </property>
+           <item>
+            <widget class="MantidQt::MantidWidgets::MWRunFiles" name="dem_calFile" native="true">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="label" stdset="0">
+              <string>Cal File</string>
+             </property>
+             <property name="multipleFiles" stdset="0">
+              <bool>false</bool>
+             </property>
+             <property name="optional" stdset="0">
+              <bool>false</bool>
+             </property>
+             <property name="fileExtensions" stdset="0">
+              <stringlist>
+               <string>.cal</string>
+              </stringlist>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="MantidQt::MantidWidgets::MWRunFiles" name="dem_vanadiumFile" native="true">
+             <property name="enabled">
+              <bool>true</bool>
+             </property>
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="label" stdset="0">
+              <string>Vanadium Runs</string>
+             </property>
+             <property name="multipleFiles" stdset="0">
+              <bool>true</bool>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+      <widget class="QWidget" name="page_2">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <layout class="QHBoxLayout" name="horizontalLayout_4">
+        <property name="margin">
+         <number>0</number>
+        </property>
+        <item>
+         <widget class="QGroupBox" name="gbRebin">
+          <property name="title">
+           <string>Rebin in D-Spacing (optional)</string>
+          </property>
+          <layout class="QHBoxLayout" name="horizontalLayout_7">
+           <property name="spacing">
+            <number>6</number>
+           </property>
+           <property name="margin">
+            <number>6</number>
+           </property>
+           <item>
+            <widget class="QLabel" name="lbRebinStart">
+             <property name="text">
+              <string>Start:</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLineEdit" name="leRebinStart"/>
+           </item>
+           <item>
+            <widget class="QLabel" name="valRebinStart">
+             <property name="styleSheet">
+              <string notr="true">color: rgb(170, 0, 0);</string>
+             </property>
+             <property name="text">
+              <string>*</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLabel" name="lbRebinWidth">
+             <property name="text">
+              <string>Width:</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLineEdit" name="leRebinWidth"/>
+           </item>
+           <item>
+            <widget class="QLabel" name="valRebinWidth">
+             <property name="styleSheet">
+              <string notr="true">color: rgb(170, 0, 0);</string>
+             </property>
+             <property name="text">
+              <string>*</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLabel" name="lbRebinEnd">
+             <property name="text">
+              <string>End:</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLineEdit" name="leRebinEnd"/>
+           </item>
+           <item>
+            <widget class="QLabel" name="valRebinEnd">
+             <property name="styleSheet">
+              <string notr="true">color: rgb(170, 0, 0);</string>
+             </property>
+             <property name="text">
+              <string>*</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </widget>
+    </item>
+    <item>
+     <widget class="QGroupBox" name="gbGeneralOptions">
+      <property name="title">
+       <string>Options</string>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout_6">
        <item>
-        <widget class="QGroupBox" name="gbRebin">
-         <property name="title">
-          <string>Rebin in D-Spacing (optional)</string>
+        <widget class="QCheckBox" name="ckIndividualGrouping">
+         <property name="toolTip">
+          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;When enabled spectra are not grouped and the output workspace will contain one spectrum per detector.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+         </property>
+         <property name="text">
+          <string>Use Individual Grouping</string>
          </property>
-         <layout class="QHBoxLayout" name="horizontalLayout_7">
-          <item>
-           <widget class="QLabel" name="lbRebinStart">
-            <property name="text">
-             <string>Start:</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QLineEdit" name="leRebinStart"/>
-          </item>
-          <item>
-           <widget class="QLabel" name="valRebinStart">
-            <property name="styleSheet">
-             <string notr="true">color: rgb(170, 0, 0);</string>
-            </property>
-            <property name="text">
-             <string>*</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QLabel" name="lbRebinWidth">
-            <property name="text">
-             <string>Width:</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QLineEdit" name="leRebinWidth"/>
-          </item>
-          <item>
-           <widget class="QLabel" name="valRebinWidth">
-            <property name="styleSheet">
-             <string notr="true">color: rgb(170, 0, 0);</string>
-            </property>
-            <property name="text">
-             <string>*</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QLabel" name="lbRebinEnd">
-            <property name="text">
-             <string>End:</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QLineEdit" name="leRebinEnd"/>
-          </item>
-          <item>
-           <widget class="QLabel" name="valRebinEnd">
-            <property name="styleSheet">
-             <string notr="true">color: rgb(170, 0, 0);</string>
-            </property>
-            <property name="text">
-             <string>*</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
         </widget>
        </item>
       </layout>
      </widget>
-    </widget>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout">
-     <item>
-      <widget class="QLabel" name="lbPlotType">
-       <property name="text">
-        <string>Plot Type:</string>
+    </item>
+    <item>
+     <widget class="QGroupBox" name="gbOutput">
+      <property name="title">
+       <string>Output</string>
+      </property>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <property name="margin">
+        <number>6</number>
        </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QComboBox" name="cbPlotType">
        <item>
-        <property name="text">
-         <string>None</string>
-        </property>
+        <widget class="QLabel" name="lbPlotType">
+         <property name="text">
+          <string>Plot Type:</string>
+         </property>
+        </widget>
        </item>
        <item>
-        <property name="text">
-         <string>Spectra</string>
-        </property>
+        <widget class="QComboBox" name="cbPlotType">
+         <item>
+          <property name="text">
+           <string>None</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>Spectra</string>
+          </property>
+         </item>
+        </widget>
        </item>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <widget class="QGroupBox" name="gbSave">
-     <property name="toolTip">
-      <string>Select which file formats the data should be saved in.</string>
-     </property>
-     <property name="title">
-      <string>Save Formats</string>
-     </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_3">
+      </layout>
+     </widget>
+    </item>
+    <item>
+     <widget class="QGroupBox" name="gbSave">
+      <property name="toolTip">
+       <string>Select which file formats the data should be saved in.</string>
+      </property>
+      <property name="title">
+       <string>Save Formats</string>
+      </property>
+      <layout class="QHBoxLayout" name="horizontalLayout_3">
+       <property name="margin">
+        <number>6</number>
+       </property>
+       <item>
+        <widget class="QCheckBox" name="ckGSS">
+         <property name="text">
+          <string>GSS</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="ckNexus">
+         <property name="text">
+          <string>Nexus</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="ckAscii">
+         <property name="text">
+          <string>ASCII (DAT)</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item>
+     <layout class="QHBoxLayout" name="horizontalLayout_10">
       <item>
-       <widget class="QCheckBox" name="ckGSS">
+       <widget class="QPushButton" name="pbHelp">
+        <property name="enabled">
+         <bool>true</bool>
+        </property>
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>20</width>
+          <height>20</height>
+         </size>
+        </property>
         <property name="text">
-         <string>GSS</string>
+         <string>?</string>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="ckNexus">
+       <spacer name="horizontalSpacer_14">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item>
+       <widget class="QPushButton" name="pbRun">
         <property name="text">
-         <string>Nexus</string>
+         <string>Run</string>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="ckAscii">
+       <spacer name="horizontalSpacer_11">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item>
+       <widget class="QPushButton" name="pbManageDirs">
         <property name="text">
-         <string>ASCII (DAT)</string>
+         <string>Manage Directories</string>
         </property>
        </widget>
       </item>
      </layout>
-    </widget>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_10">
-     <item>
-      <widget class="QPushButton" name="pbHelp">
-       <property name="enabled">
-        <bool>true</bool>
-       </property>
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="maximumSize">
-        <size>
-         <width>20</width>
-         <height>20</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>?</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer name="horizontalSpacer_14">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item>
-      <widget class="QPushButton" name="pbRun">
-       <property name="text">
-        <string>Run</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer name="horizontalSpacer_11">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item>
-      <widget class="QPushButton" name="pbManageDirs">
-       <property name="text">
-        <string>Manage Directories</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-  </layout>
+    </item>
+   </layout>
   </widget>
  </widget>
  <customwidgets>
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectMolDyn.ui b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectMolDyn.ui
index 89f9584b2279f4c61d235ff3668d5f76a246a919..d6f6ce99e94cf2c7c6e7584481e7e831149cb17c 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectMolDyn.ui
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectMolDyn.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>444</width>
-    <height>155</height>
+    <width>445</width>
+    <height>450</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -15,50 +15,189 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="1" column="0">
-      <widget class="QLabel" name="lblFunctionNames">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="text">
-        <string>Function Names:</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="1">
-      <widget class="QLineEdit" name="leFunctionNames"/>
-     </item>
-     <item row="0" column="1">
-      <widget class="MantidQt::MantidWidgets::MWRunFiles" name="mwRun">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="label" stdset="0">
-        <string/>
-       </property>
-       <property name="fileExtensions">
-        <stringlist>
-         <string>.dat</string>
-         <string>.cdl</string>
-        </stringlist>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="0">
-      <widget class="QLabel" name="lblSample">
-       <property name="text">
-        <string>Sample Run:</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
+    <widget class="QGroupBox" name="gbSimulation">
+     <property name="title">
+      <string>nMOLDYN</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_2">
+      <item row="0" column="0">
+       <widget class="QLabel" name="lblSample">
+        <property name="text">
+         <string>Sample Run:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="MantidQt::MantidWidgets::MWRunFiles" name="mwRun" native="true">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="toolTip">
+         <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Simulation filename.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        </property>
+        <property name="label" stdset="0">
+         <string/>
+        </property>
+        <property name="fileExtensions" stdset="0">
+         <stringlist>
+          <string>.dat</string>
+          <string>.cdl</string>
+         </stringlist>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="lblFunctionNames">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Function Names:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QLineEdit" name="leFunctionNames">
+        <property name="toolTip">
+         <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Comma separated list of functions to load from the input file.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="gbOptions">
+     <property name="title">
+      <string>Options</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_3">
+      <item row="1" column="1">
+       <layout class="QHBoxLayout" name="horizontalLayout_2">
+        <item>
+         <widget class="QCheckBox" name="ckCropEnergy">
+          <property name="text">
+           <string>Crop Max Energy</string>
+          </property>
+          <property name="checked">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <widget class="QDoubleSpinBox" name="dspMaxEnergy">
+          <property name="minimumSize">
+           <size>
+            <width>150</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="toolTip">
+           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Crop the upper energy range of any workspaces with energy as the X unit (e.g. S(Q,w)).&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+          </property>
+          <property name="suffix">
+           <string> meV</string>
+          </property>
+          <property name="maximum">
+           <double>1000.000000000000000</double>
+          </property>
+          <property name="value">
+           <double>10.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="gbInstRes">
+     <property name="title">
+      <string>Instrument Resolution</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="1" column="0">
+       <widget class="QLabel" name="lblResolution">
+        <property name="text">
+         <string>Resolution:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="MantidQt::MantidWidgets::DataSelector" name="dsResolution" native="true">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="toolTip">
+         <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Instrument resolution file or workspace.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        </property>
+        <property name="autoLoad" stdset="0">
+         <bool>true</bool>
+        </property>
+        <property name="loadLabelText" stdset="0">
+         <string/>
+        </property>
+        <property name="workspaceSuffixes" stdset="0">
+         <stringlist>
+          <string>_red</string>
+          <string>_res</string>
+         </stringlist>
+        </property>
+        <property name="fileBrowserSuffixes" stdset="0">
+         <stringlist>
+          <string>_red.nxs</string>
+          <string>_res.nxs</string>
+         </stringlist>
+        </property>
+        <property name="showLoad" stdset="0">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0" colspan="2">
+       <widget class="QCheckBox" name="ckResolution">
+        <property name="enabled">
+         <bool>true</bool>
+        </property>
+        <property name="toolTip">
+         <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Convolve suitable workspaces with an instrument resolution.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        </property>
+        <property name="text">
+         <string>Use Instrument Resolution</string>
+        </property>
+        <property name="checked">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
    </item>
    <item>
     <spacer name="verticalSpacer">
@@ -86,7 +225,7 @@
      </property>
      <layout class="QHBoxLayout" name="horizontalLayout">
       <item>
-       <widget class="QCheckBox" name="chkVerbose">
+       <widget class="QCheckBox" name="ckVerbose">
         <property name="enabled">
          <bool>true</bool>
         </property>
@@ -124,7 +263,7 @@
         </item>
         <item>
          <property name="text">
-          <string>Spectrum</string>
+          <string>Spectra</string>
          </property>
         </item>
         <item>
@@ -153,7 +292,7 @@
        </spacer>
       </item>
       <item>
-       <widget class="QCheckBox" name="chkSave">
+       <widget class="QCheckBox" name="ckSave">
         <property name="text">
          <string>Save Result</string>
         </property>
@@ -165,12 +304,28 @@
   </layout>
  </widget>
  <customwidgets>
+  <customwidget>
+   <class>MantidQt::MantidWidgets::DataSelector</class>
+   <extends>QWidget</extends>
+   <header>MantidQtMantidWidgets/DataSelector.h</header>
+  </customwidget>
   <customwidget>
    <class>MantidQt::MantidWidgets::MWRunFiles</class>
    <extends>QWidget</extends>
    <header>MantidQtMantidWidgets/MWRunFiles.h</header>
   </customwidget>
  </customwidgets>
+ <tabstops>
+  <tabstop>mwRun</tabstop>
+  <tabstop>leFunctionNames</tabstop>
+  <tabstop>ckCropEnergy</tabstop>
+  <tabstop>dspMaxEnergy</tabstop>
+  <tabstop>ckResolution</tabstop>
+  <tabstop>dsResolution</tabstop>
+  <tabstop>ckVerbose</tabstop>
+  <tabstop>cbPlot</tabstop>
+  <tabstop>ckSave</tabstop>
+ </tabstops>
  <resources/>
  <connections/>
 </ui>
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSimulation.ui b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSimulation.ui
index d063d28f8dc87964fde320aabeb07614e8f7cd2f..9ec082cac946c28a1edd4e64e2a3260d61422efc 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSimulation.ui
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSimulation.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>504</width>
-    <height>277</height>
+    <width>445</width>
+    <height>450</height>
    </rect>
   </property>
   <property name="windowTitle">
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSimulationTab.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSimulationTab.h
index 7665376b8177e8b455fe553b118e03fa678e5ef0..da6aae25aa45dd0460f272dc9386805949f404ad 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSimulationTab.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSimulationTab.h
@@ -2,6 +2,7 @@
 #define MANTID_CUSTOMINTERFACES_INDIRECTSIMULATIONTAB_H_
 
 #include "MantidKernel/System.h"
+#include "MantidQtAPI/AlgorithmRunner.h"
 #include <QSettings>
 #include <QWidget>
 
@@ -16,6 +17,8 @@ namespace MantidQt
     
 			@author Samuel Jackson, STFC
 
+      TODO: Make this inherit from IndirectTab (#10277)
+
 			Copyright &copy; 2013 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
 
 			This file is part of Mantid.
@@ -62,9 +65,13 @@ namespace MantidQt
 
 		protected:
 			void runPythonScript(const QString& pyInput);
+      void runAlgorithm(const Mantid::API::IAlgorithm_sptr alg);
+
+    private:
+      MantidQt::API::AlgorithmRunner m_algoRunner;
 
 		};
 	} // namespace CustomInterfaces
 } // namespace Mantid
 
-#endif
\ No newline at end of file
+#endif
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSqw.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSqw.h
index ad26ef5efddfb734edbf97b3fbc9df5b91a068c8..e616371e5669d291e430091d36006dc775777dd6 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSqw.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSqw.h
@@ -47,8 +47,13 @@ namespace CustomInterfaces
     virtual bool validate();
 
   private slots:
-    void sOfQwRebinE(bool state);
-    void sOfQwPlotInput();
+    void energyRebinToggle(bool state);
+    void plotContour();
+    void sqwAlgDone(bool error);
+
+  private:
+    bool validateQRebin();
+    bool validateEnergyRebin();
 
   };
 } // namespace CustomInterfaces
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSymmetrise.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSymmetrise.h
new file mode 100644
index 0000000000000000000000000000000000000000..10a9ad3b6c629333a95ddf67be69388f75f0ac3d
--- /dev/null
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectSymmetrise.h
@@ -0,0 +1,83 @@
+#ifndef MANTIDQTCUSTOMINTERFACES_INDIRECTSYMMETRISE_H_
+#define MANTIDQTCUSTOMINTERFACES_INDIRECTSYMMETRISE_H_
+
+#include "MantidQtCustomInterfaces/IndirectDataReductionTab.h"
+
+#include "MantidAPI/MatrixWorkspace.h"
+#include "MantidKernel/System.h"
+
+// Suppress a warning coming out of code that isn't ours
+#if defined(__INTEL_COMPILER)
+  #pragma warning disable 1125
+#elif defined(__GNUC__)
+  #if (__GNUC__ >= 4 && __GNUC_MINOR__ >= 6 )
+    #pragma GCC diagnostic push
+  #endif
+  #pragma GCC diagnostic ignored "-Woverloaded-virtual"
+#endif
+#include <QtCheckBoxFactory>
+#if defined(__INTEL_COMPILER)
+  #pragma warning enable 1125
+#elif defined(__GNUC__)
+  #if (__GNUC__ >= 4 && __GNUC_MINOR__ >= 6 )
+    #pragma GCC diagnostic pop
+  #endif
+#endif
+
+namespace MantidQt
+{
+namespace CustomInterfaces
+{
+  /** IndirectSymmetrise
+
+    @author Dan Nixon
+    @date 23/07/2014
+
+    Copyright &copy; 2013 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+  */
+  class DLLExport IndirectSymmetrise : public IndirectDataReductionTab
+  {
+    Q_OBJECT
+
+  public:
+    IndirectSymmetrise(Ui::IndirectDataReduction& uiForm, QWidget * parent = 0);
+    virtual ~IndirectSymmetrise();
+
+    virtual void setup();
+    virtual void run();
+    virtual bool validate();
+
+  private slots:
+    void plotRawInput(const QString &workspaceName);
+    void updateMiniPlots();
+    void replotNewSpectrum(QtProperty *prop, double value);
+    void verifyERange(QtProperty *prop, double value);
+    void updateRangeSelectors(QtProperty *prop, double value);
+    void preview();
+    void previewAlgDone(bool error);
+    void xRangeMaxChanged(double value);
+    void xRangeMinChanged(double value);
+
+  };
+} // namespace CustomInterfaces
+} // namespace Mantid
+
+#endif //MANTIDQTCUSTOMINTERFACES_INDIRECTSYMMETRISE_H_
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectTab.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectTab.h
index c52a1eb1ddf3495e2c080c04eefda20126a7a284..d7593a1d4d7f4ce24966f0f92a0cfa2eeadb4b7e 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectTab.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectTab.h
@@ -156,7 +156,7 @@ namespace CustomInterfaces
     /// Send signal to parent window to execute python script
     void executePythonScript(const QString& pyInput, bool output);
 
-  private:
+  protected:
     /// Overidden by child class.
     virtual void setup() = 0;
     /// Overidden by child class.
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/JumpFit.ui b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/JumpFit.ui
index 7ba4749fa6f7e16bc1e7512d9d81106aa197c8ef..ae6a514a585d3e26b879fd5a2a5b36122b63173a 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/JumpFit.ui
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/JumpFit.ui
@@ -24,7 +24,7 @@
       </widget>
      </item>
      <item row="0" column="1" colspan="3">
-      <widget class="MantidQt::MantidWidgets::DataSelector" name="dsSample">
+      <widget class="MantidQt::MantidWidgets::DataSelector" name="dsSample" native="true">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
          <horstretch>0</horstretch>
@@ -110,7 +110,55 @@
       <layout class="QVBoxLayout" name="treeSpace"/>
      </item>
      <item>
-      <layout class="QVBoxLayout" name="plotSpace"/>
+      <layout class="QVBoxLayout" name="plotArea">
+       <item>
+        <layout class="QVBoxLayout" name="plotSpace"/>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="plotLegend">
+         <item>
+          <spacer name="legendSpacer">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <widget class="QLabel" name="legendRaw">
+           <property name="text">
+            <string>Data</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLabel" name="legendFit">
+           <property name="styleSheet">
+            <string notr="true">color: rgb(255, 0, 0);</string>
+           </property>
+           <property name="text">
+            <string>Fit</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLabel" name="legendDiff">
+           <property name="styleSheet">
+            <string notr="true">color: rgb(0, 255, 0);</string>
+           </property>
+           <property name="text">
+            <string>Diff</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
      </item>
     </layout>
    </item>
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QReflTableModel.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QReflTableModel.h
index 13a72471440529d5eaab7a64d9435cac41773dd8..3e66f90a96f870d650b86fca788da6a0b62198c2 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QReflTableModel.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QReflTableModel.h
@@ -44,16 +44,20 @@ namespace MantidQt
       //emit a signal saying things have changed
       void update();
       //row and column counts
-      int rowCount(const QModelIndex &parent) const;
-      int columnCount(const QModelIndex &parent) const;
+      int rowCount(const QModelIndex &parent = QModelIndex()) const;
+      int columnCount(const QModelIndex &parent = QModelIndex()) const;
       //get data fro a cell
-      QVariant data(const QModelIndex &index, int role) const;
+      QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
       //get header data for the table
       QVariant headerData(int section, Qt::Orientation orientation, int role) const;
       //get flags for a cell
       Qt::ItemFlags flags(const QModelIndex &index) const;
-      //chage or add data to the model
-      bool setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole );
+      //change or add data to the model
+      bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
+      //add new rows to the model
+      bool insertRows(int row, int count, const QModelIndex& parent = QModelIndex());
+      //remove rows from the model
+      bool removeRows(int row, int count, const QModelIndex& parent = QModelIndex());
     private:
 
       typedef QString ColumnNameType;
@@ -119,6 +123,8 @@ namespace MantidQt
       ColumnIndexNameMap m_columnNameMap;
     };
 
+    /// Typedef for a shared pointer to \c QReflTableModel
+    typedef boost::shared_ptr<QReflTableModel> QReflTableModel_sptr;
 
   } // namespace CustomInterfaces
 } // namespace Mantid
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QtReflMainView.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QtReflMainView.h
index 87f14d6ceedd91ff4add58a50d3b7c0b979abb1f..23e541383db2dab68dd4151577aaa2182347c577 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QtReflMainView.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QtReflMainView.h
@@ -5,7 +5,9 @@
 #include "MantidQtAPI/UserSubWindow.h"
 #include "MantidQtCustomInterfaces/ReflMainView.h"
 #include "MantidQtCustomInterfaces/IReflPresenter.h"
+#include "MantidQtCustomInterfaces/QReflTableModel.h"
 #include <boost/scoped_ptr.hpp>
+#include <QSignalMapper>
 #include "ui_ReflMainWidget.h"
 
 namespace MantidQt
@@ -48,7 +50,7 @@ namespace MantidQt
       static QString categoryInfo() { return "Reflectometry"; }
 
       //Connect the model
-      virtual void showTable(Mantid::API::ITableWorkspace_sptr model);
+      virtual void showTable(QReflTableModel_sptr model);
 
       //Dialog/Prompt methods
       virtual std::string askUserString(const std::string& prompt, const std::string& title, const std::string& defaultValue);
@@ -61,29 +63,54 @@ namespace MantidQt
       virtual void setProgressRange(int min, int max);
       virtual void setProgress(int progress);
 
+      //Settor methods
+      virtual void setSelection(const std::set<int>& rows);
+      virtual void setTableList(const std::set<std::string>& tables);
+      virtual void setInstrumentList(const std::vector<std::string>& instruments, const std::string& defaultInstrument);
+      virtual void setOptionsHintStrategy(MantidQt::MantidWidgets::HintStrategy* hintStrategy);
+      virtual void setClipboard(const std::string& text);
+
       //Accessor methods
-      virtual std::vector<size_t> getSelectedRowIndexes() const;
+      virtual std::set<int> getSelectedRows() const;
       virtual std::string getSearchInstrument() const;
       virtual std::string getProcessInstrument() const;
+      virtual std::string getWorkspaceToOpen() const;
+      virtual std::string getClipboard() const;
+
+      virtual boost::shared_ptr<IReflPresenter> getPresenter() const;
 
     private:
       //initialise the interface
       virtual void initLayout();
-      virtual void setInstrumentList(const std::vector<std::string>& instruments);
       //the presenter
-      boost::scoped_ptr<IReflPresenter> m_presenter;
+      boost::shared_ptr<IReflPresenter> m_presenter;
+      //the model
+      QReflTableModel_sptr m_model;
       //the interface
       Ui::reflMainWidget ui;
+      //the workspace the user selected to open
+      std::string m_toOpen;
+      QSignalMapper* m_openMap;
 
     private slots:
+      void on_actionNewTable_triggered();
+      void on_actionSaveTable_triggered();
+      void on_actionSaveTableAs_triggered();
+      void on_actionAppendRow_triggered();
+      void on_actionPrependRow_triggered();
+      void on_actionDeleteRow_triggered();
+      void on_actionProcess_triggered();
+      void on_actionGroupRows_triggered();
+      void on_actionClearSelected_triggered();
+      void on_actionCopySelected_triggered();
+      void on_actionCutSelected_triggered();
+      void on_actionPasteSelected_triggered();
+      void on_actionExpandSelection_triggered();
+      void on_actionOptionsDialog_triggered();
+
       void setModel(QString name);
-      void setNew();
-      void actionSave();
-      void actionSaveAs();
-      void actionAddRow();
-      void actionDeleteRow();
-      void actionProcess();
-      void actionGroupRows();
+      void tableUpdated(const QModelIndex& topLeft, const QModelIndex& bottomRight);
+      void showContextMenu(const QPoint& pos);
     };
 
 
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflBlankMainViewPresenter.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QtReflOptionsDialog.h
similarity index 54%
rename from Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflBlankMainViewPresenter.h
rename to Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QtReflOptionsDialog.h
index f2870504ff7bb14e26f5b5e61a1fe361a0213f51..670f779475766fdd9e4bab5d8fb6241e48d0810c 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflBlankMainViewPresenter.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/QtReflOptionsDialog.h
@@ -1,18 +1,20 @@
-#ifndef MANTID_CUSTOMINTERFACES_REFLBLANKMAINVIEWPRESENTER_H_
-#define MANTID_CUSTOMINTERFACES_REFLBLANKMAINVIEWPRESENTER_H_
+#ifndef MANTID_CUSTOMINTERFACES_QTREFLOPTIONSDIALOG_H
+#define MANTID_CUSTOMINTERFACES_QTREFLOPTIONSDIALOG_H
 
 #include "MantidKernel/System.h"
-#include "MantidQtCustomInterfaces/ReflMainViewPresenter.h"
-#include "MantidAPI/ITableWorkspace.h"
+#include "MantidQtCustomInterfaces/IReflPresenter.h"
 #include "MantidQtCustomInterfaces/ReflMainView.h"
 
+#include <QDialog>
+
+#include "ui_ReflOptionsDialog.h"
+
 namespace MantidQt
 {
   namespace CustomInterfaces
   {
 
-    /** ReflBlankMainViewPresenter : Handles presentation logic for the reflectometry interface
-    when a table workspace has not been loaded or selected.
+    /** QtReflOptionsDialog : Provides a dialog for setting Reflectometry UI options.
 
     Copyright &copy; 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
 
@@ -34,21 +36,29 @@ namespace MantidQt
     File change history is stored at: <https://github.com/mantidproject/mantid>
     Code Documentation is available at: <http://doxygen.mantidproject.org>
     */
-    class DLLExport ReflBlankMainViewPresenter: public ReflMainViewPresenter
+
+    class DLLExport QtReflOptionsDialog : public QDialog
     {
+    Q_OBJECT
     public:
-
-      ReflBlankMainViewPresenter(ReflMainView* view);
-      virtual ~ReflBlankMainViewPresenter();
+      QtReflOptionsDialog(ReflMainView* view, boost::shared_ptr<IReflPresenter> presenter);
+      virtual ~QtReflOptionsDialog();
+    protected:
+      void initLayout();
+      void initBindings();
+    protected slots:
+      void saveOptions();
+      void loadOptions();
     protected:
-      //press changes to a previously saved-to item in the ADS, or ask for a name if never given one
-      virtual void save();
-      //press changes to a new item in the ADS
-      virtual void saveAs();
+      //the interface
+      Ui::reflOptionsDialog ui;
+      //the presenter
+      boost::shared_ptr<IReflPresenter> m_presenter;
+      //maps option names to widget names
+      std::map<std::string,QString> m_bindings;
     };
 
+  } //CustomInterfaces
+} //MantidQt
 
-  } // namespace CustomInterfaces
-} // namespace Mantid
-
-#endif  /* MANTID_CUSTOMINTERFACES_REFLBLANKMAINVIEWPRESENTER_H_ */
+#endif /* MANTID_CUSTOMINTERFACES_QTREFLOPTIONSDIALOG_H */
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflLoadedMainViewPresenter.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflLoadedMainViewPresenter.h
deleted file mode 100644
index b7572cc5cf750e2b84b3e5cf13ef7ff76048139a..0000000000000000000000000000000000000000
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflLoadedMainViewPresenter.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef MANTID_CUSTOMINTERFACES_REFLLOADEDMAINVIEWPRESENTER_H_
-#define MANTID_CUSTOMINTERFACES_REFLLOADEDMAINVIEWPRESENTER_H_
-
-#include "MantidKernel/System.h"
-#include "MantidQtCustomInterfaces/ReflMainViewPresenter.h"
-#include "MantidAPI/ITableWorkspace.h"
-#include "MantidQtCustomInterfaces/ReflMainView.h"
-
-namespace MantidQt
-{
-  namespace CustomInterfaces
-  {
-
-    /** ReflLoadedMainViewPresenter : Handles presentation logic for the reflectometry interface
-    when a table workspace is loaded as the active table.
-
-    Copyright &copy; 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
-
-    This file is part of Mantid.
-
-    Mantid is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 3 of the License, or
-    (at your option) any later version.
-
-    Mantid 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 General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-    File change history is stored at: <https://github.com/mantidproject/mantid>
-    Code Documentation is available at: <http://doxygen.mantidproject.org>
-    */
-    class DLLExport ReflLoadedMainViewPresenter: public ReflMainViewPresenter
-    {
-    public:
-      ReflLoadedMainViewPresenter(Mantid::API::ITableWorkspace_sptr model, ReflMainView* view);
-      ReflLoadedMainViewPresenter(std::string model, ReflMainView* view);
-      virtual ~ReflLoadedMainViewPresenter();
-    protected:
-      //press changes to the same item in the ADS
-      virtual void save();
-      //press changes to a new item in the ADS
-      virtual void saveAs();
-    };
-
-
-  } // namespace CustomInterfaces
-} // namespace Mantid
-
-#endif  /* MANTID_CUSTOMINTERFACES_REFLLOADEDMAINVIEWPRESENTER_H_ */
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainView.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainView.h
index ea08c1f214f523bd4a067ea0236839d89ef62671..a442a9eebf855866a244b262ddb35fe1bab7113c 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainView.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainView.h
@@ -2,7 +2,9 @@
 #define MANTID_CUSTOMINTERFACES_REFLMAINVIEW_H
 
 #include "MantidKernel/System.h"
-#include "MantidAPI/ITableWorkspace.h"
+#include "MantidQtCustomInterfaces/IReflPresenter.h"
+#include "MantidQtCustomInterfaces/QReflTableModel.h"
+#include "MantidQtMantidWidgets/HintStrategy.h"
 
 namespace MantidQt
 {
@@ -36,11 +38,11 @@ namespace MantidQt
     class DLLExport ReflMainView
     {
     public:
-      ReflMainView();
-      virtual ~ReflMainView() = 0;
+      ReflMainView() {};
+      virtual ~ReflMainView() {};
 
       //Connect the model
-      virtual void showTable(Mantid::API::ITableWorkspace_sptr model) = 0;
+      virtual void showTable(QReflTableModel_sptr model) = 0;
 
       //Dialog/Prompt methods
       virtual std::string askUserString(const std::string& prompt, const std::string& title, const std::string& defaultValue) = 0;
@@ -53,18 +55,21 @@ namespace MantidQt
       virtual void setProgressRange(int min, int max) = 0;
       virtual void setProgress(int progress) = 0;
 
+      //Settor methods
+      virtual void setSelection(const std::set<int>& rows) = 0;
+      virtual void setTableList(const std::set<std::string>& tables) = 0;
+      virtual void setInstrumentList(const std::vector<std::string>& instruments, const std::string& defaultInstrument) = 0;
+      virtual void setOptionsHintStrategy(MantidQt::MantidWidgets::HintStrategy* hintStrategy) = 0;
+      virtual void setClipboard(const std::string& text) = 0;
+
       //Accessor methods
-      virtual std::vector<size_t> getSelectedRowIndexes() const = 0;
+      virtual std::set<int> getSelectedRows() const = 0;
       virtual std::string getSearchInstrument() const = 0;
       virtual std::string getProcessInstrument() const = 0;
+      virtual std::string getWorkspaceToOpen() const = 0;
+      virtual std::string getClipboard() const = 0;
 
-      static const int NoFlags       = 0;
-      static const int SaveFlag      = 1;
-      static const int SaveAsFlag    = 2;
-      static const int AddRowFlag    = 3;
-      static const int DeleteRowFlag = 4;
-      static const int ProcessFlag   = 5;
-      static const int GroupRowsFlag = 6;
+      virtual boost::shared_ptr<IReflPresenter> getPresenter() const = 0;
     };
   }
 }
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainViewPresenter.h b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainViewPresenter.h
index aecf450fd7a0f4335c7e9a02b9c1d33485bd0c7d..d87822a8b85bfee834045fc79547311868ae897e 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainViewPresenter.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainViewPresenter.h
@@ -1,11 +1,17 @@
 #ifndef MANTID_CUSTOMINTERFACES_REFLMAINVIEWPRESENTER_H
 #define MANTID_CUSTOMINTERFACES_REFLMAINVIEWPRESENTER_H
 
-#include "MantidKernel/System.h"
+#include "MantidAPI/AnalysisDataService.h"
 #include "MantidAPI/ITableWorkspace.h"
 #include "MantidAPI/MatrixWorkspace.h"
-#include "MantidQtCustomInterfaces/ReflMainView.h"
+#include "MantidKernel/System.h"
 #include "MantidQtCustomInterfaces/IReflPresenter.h"
+#include "MantidQtCustomInterfaces/ReflMainView.h"
+#include "MantidQtCustomInterfaces/QReflTableModel.h"
+
+#include <Poco/AutoPtr.h>
+#include <Poco/NObserver.h>
+
 namespace MantidQt
 {
   namespace CustomInterfaces
@@ -37,47 +43,92 @@ namespace MantidQt
     class DLLExport ReflMainViewPresenter: public IReflPresenter
     {
     public:
-      ReflMainViewPresenter(Mantid::API::ITableWorkspace_sptr model, ReflMainView* view);
       ReflMainViewPresenter(ReflMainView* view);
-      virtual ~ReflMainViewPresenter() = 0;
-      virtual void notify(int flag);
+      virtual ~ReflMainViewPresenter();
+      virtual void notify(IReflPresenter::Flag flag);
+      virtual const std::map<std::string,QVariant>& options() const;
+      virtual void setOptions(const std::map<std::string,QVariant>& options);
+      //Public for the purposes of unit testing
+      static std::map<std::string,std::string> parseKeyValueString(const std::string& str);
     protected:
-      //The model and backup copy of the original model
-      Mantid::API::ITableWorkspace_sptr m_model;
-      Mantid::API::ITableWorkspace_sptr m_cache;
-      std::string m_cache_name;
-      //the view
+      //the workspace the model is currently representing
+      Mantid::API::ITableWorkspace_sptr m_ws;
+      //the model the table is currently representing
+      QReflTableModel_sptr m_model;
+      //the name of the workspace/table/model in the ADS, blank if unsaved
+      std::string m_wsName;
+      //the view we're managing
       ReflMainView* m_view;
+      //stores whether or not the table has changed since it was last saved
+      bool m_tableDirty;
+      //stores the user options for the presenter
+      std::map<std::string,QVariant> m_options;
 
-      //Load the model into the view
-      virtual void load();
       //process selected rows
       virtual void process();
+      //Reduce a row
+      void reduceRow(int rowNo);
       //load a run into the ADS, or re-use one in the ADS if possible
       Mantid::API::Workspace_sptr loadRun(const std::string& run, const std::string& instrument);
       //get the run number of a TOF workspace
       std::string getRunNumber(const Mantid::API::Workspace_sptr& ws);
+      //get an unused group id
+      int getUnusedGroup(std::set<int> ignoredRows = std::set<int>()) const;
       //make a transmission workspace
       Mantid::API::MatrixWorkspace_sptr makeTransWS(const std::string& transString);
       //Validate a row
-      void validateRow(size_t rowNo) const;
+      void validateRow(int rowNo) const;
       //Autofill a row with sensible values
-      void autofillRow(size_t rowNo);
+      void autofillRow(int rowNo);
       //calculates qmin and qmax
-      static std::vector<double> calcQRange(Mantid::API::MatrixWorkspace_sptr ws, double theta);
-      //Process a row
-      void processRow(size_t rowNo);
+      std::vector<double> calcQRange(Mantid::API::MatrixWorkspace_sptr ws, double theta);
+      //get the number of rows in a group
+      size_t numRowsInGroup(int groupId) const;
       //Stitch some rows
-      void stitchRows(std::vector<size_t> rows);
+      void stitchRows(std::set<int> rows);
+      //insert a row in the model before the given index
+      virtual void insertRow(int index);
       //add row(s) to the model
-      virtual void addRow();
+      virtual void appendRow();
+      virtual void prependRow();
       //delete row(s) from the model
       virtual void deleteRow();
+      //clear selected row(s) in the model
+      virtual void clearSelected();
+      //copy selected rows to clipboard
+      virtual void copySelected();
+      //copy selected rows to clipboard and then delete them
+      virtual void cutSelected();
+      //paste clipboard into selected rows
+      virtual void pasteSelected();
       //group selected rows together
       virtual void groupRows();
-      //virtual save methods
-      virtual void save() = 0;
-      virtual void saveAs() = 0;
+      //expand selection to group
+      virtual void expandSelection();
+      //table io methods
+      virtual void newTable();
+      virtual void openTable();
+      virtual void saveTable();
+      virtual void saveTableAs();
+      //options
+      void showOptionsDialog();
+      void initOptions();
+
+      //List of workspaces the user can open
+      std::set<std::string> m_workspaceList;
+
+      //To maintain a list of workspaces the user may open, we observe the ADS
+      Poco::NObserver<ReflMainViewPresenter, Mantid::API::WorkspaceAddNotification> m_addObserver;
+      Poco::NObserver<ReflMainViewPresenter, Mantid::API::WorkspacePostDeleteNotification> m_remObserver;
+      Poco::NObserver<ReflMainViewPresenter, Mantid::API::ClearADSNotification> m_clearObserver;
+      Poco::NObserver<ReflMainViewPresenter, Mantid::API::WorkspaceRenameNotification> m_renameObserver;
+      Poco::NObserver<ReflMainViewPresenter, Mantid::API::WorkspaceAfterReplaceNotification> m_replaceObserver;
+
+      void handleAddEvent(Mantid::API::WorkspaceAddNotification_ptr pNf);
+      void handleRemEvent(Mantid::API::WorkspacePostDeleteNotification_ptr pNf);
+      void handleClearEvent(Mantid::API::ClearADSNotification_ptr pNf);
+      void handleRenameEvent(Mantid::API::WorkspaceRenameNotification_ptr pNf);
+      void handleReplaceEvent(Mantid::API::WorkspaceAfterReplaceNotification_ptr pNf);
 
     public:
       static const int COL_RUNS         = 0;
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainWidget.ui b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainWidget.ui
index 920cdab16dbe9aff881905ea9b9ad74123cf6044..5e71674b7306f6fa130264bcebe487387673a29c 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainWidget.ui
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflMainWidget.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>875</width>
-    <height>425</height>
+    <width>825</width>
+    <height>275</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -48,7 +48,7 @@
        <enum>Qt::Horizontal</enum>
       </property>
       <property name="childrenCollapsible">
-       <bool>false</bool>
+       <bool>true</bool>
       </property>
       <widget class="QGroupBox" name="groupSearchPane">
        <property name="title">
@@ -232,82 +232,21 @@
            <number>1</number>
           </property>
           <item>
-           <layout class="QHBoxLayout" name="layoutTableButtons">
-            <item>
-             <widget class="QPushButton" name="buttonNew">
-              <property name="toolTip">
-               <string>Start a new table</string>
-              </property>
-              <property name="text">
-               <string>New Table</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QPushButton" name="buttonSave">
-              <property name="toolTip">
-               <string>Save the current table as a Table Workspace</string>
-              </property>
-              <property name="text">
-               <string>Save Table</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QPushButton" name="buttonSaveAs">
-              <property name="toolTip">
-               <string>Save the current table as a Table Workspace</string>
-              </property>
-              <property name="text">
-               <string>Save Table As</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <spacer name="spacerTableButtons">
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
-              </property>
-              <property name="sizeHint" stdset="0">
-               <size>
-                <width>40</width>
-                <height>20</height>
-               </size>
-              </property>
-             </spacer>
-            </item>
-            <item>
-             <widget class="QLabel" name="labelWorkspaceSelector">
-              <property name="text">
-               <string>Table:</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="MantidQt::MantidWidgets::WorkspaceSelector" name="workspaceSelector">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="minimumSize">
-               <size>
-                <width>150</width>
-                <height>0</height>
-               </size>
-              </property>
-              <property name="toolTip">
-               <string>Select the Table Workspace to display</string>
-              </property>
-              <property name="WorkspaceTypes" stdset="0">
-               <stringlist>
-                <string>TableWorkspace</string>
-               </stringlist>
-              </property>
-             </widget>
-            </item>
-           </layout>
+           <widget class="QToolBar" name="rowToolBar">
+            <property name="styleSheet">
+             <string>QToolBar{border: none;}</string>
+            </property>
+            <addaction name="actionExpandSelection"/>
+            <addaction name="separator"/>
+            <addaction name="actionAppendRow"/>
+            <addaction name="actionDeleteRow"/>
+            <addaction name="separator"/>
+            <addaction name="actionGroupRows"/>
+            <addaction name="actionCopySelected"/>
+            <addaction name="actionCutSelected"/>
+            <addaction name="actionPasteSelected"/>
+            <addaction name="actionClearSelected"/>
+           </widget>
           </item>
           <item>
            <widget class="QTableView" name="viewTable">
@@ -317,8 +256,8 @@
               <verstretch>0</verstretch>
              </sizepolicy>
             </property>
-            <property name="toolTip">
-             <string>Runs to process</string>
+            <property name="contextMenuPolicy">
+             <enum>Qt::CustomContextMenu</enum>
             </property>
             <property name="editTriggers">
              <set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked</set>
@@ -327,7 +266,10 @@
              <bool>true</bool>
             </property>
             <property name="selectionMode">
-             <enum>QAbstractItemView::ContiguousSelection</enum>
+             <enum>QAbstractItemView::ExtendedSelection</enum>
+            </property>
+            <property name="selectionBehavior">
+             <enum>QAbstractItemView::SelectRows</enum>
             </property>
             <attribute name="horizontalHeaderDefaultSectionSize">
              <number>60</number>
@@ -335,6 +277,9 @@
             <attribute name="horizontalHeaderMinimumSectionSize">
              <number>20</number>
             </attribute>
+            <attribute name="horizontalHeaderStretchLastSection">
+             <bool>true</bool>
+            </attribute>
             <attribute name="verticalHeaderDefaultSectionSize">
              <number>20</number>
             </attribute>
@@ -346,35 +291,12 @@
              <number>1</number>
             </property>
             <item>
-             <widget class="QPushButton" name="buttonAddRow">
-              <property name="toolTip">
-               <string>Add a row beneath the selected row(s)</string>
-              </property>
-              <property name="text">
-               <string>Add Row</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QPushButton" name="buttonDeleteRow">
-              <property name="toolTip">
-               <string>Delete selected row(s) from the table</string>
-              </property>
-              <property name="text">
-               <string>Delete Row</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QPushButton" name="buttonGroupRows">
-              <property name="text">
-               <string>Group Rows</string>
+             <widget class="QProgressBar" name="progressBar">
+              <property name="value">
+               <number>0</number>
               </property>
              </widget>
             </item>
-            <item>
-             <widget class="QProgressBar" name="progressBar"/>
-            </item>
             <item>
              <widget class="QLabel" name="labelProcessInstrument">
               <property name="text">
@@ -384,31 +306,28 @@
             </item>
             <item>
              <widget class="QComboBox" name="comboProcessInstrument">
-              <property name="toolTip">
-               <string>Select the instrument to assume for fetching runs</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QPushButton" name="buttonProcess">
               <property name="sizePolicy">
-               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+               <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
                 <horstretch>0</horstretch>
                 <verstretch>0</verstretch>
                </sizepolicy>
               </property>
-              <property name="minimumSize">
-               <size>
-                <width>0</width>
-                <height>0</height>
-               </size>
-              </property>
               <property name="toolTip">
-               <string>Process the selected rows</string>
+               <string>Select the instrument to assume for fetching runs</string>
               </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QToolButton" name="buttonProcess">
               <property name="text">
                <string>Process</string>
               </property>
+              <property name="toolButtonStyle">
+               <enum>Qt::ToolButtonTextBesideIcon</enum>
+              </property>
+              <property name="arrowType">
+               <enum>Qt::NoArrow</enum>
+              </property>
              </widget>
             </item>
            </layout>
@@ -421,98 +340,214 @@
     </item>
    </layout>
   </widget>
+  <widget class="QMenuBar" name="menuBar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>825</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="nativeMenuBar">
+    <bool>false</bool>
+   </property>
+   <widget class="QMenu" name="menuTable">
+    <property name="title">
+     <string>Table</string>
+    </property>
+    <widget class="QMenu" name="menuOpenTable">
+     <property name="title">
+      <string>Open Table</string>
+     </property>
+     <property name="icon">
+      <iconset resource="../../../../MantidPlot/icons/icons.qrc">
+       <normaloff>:/multiload.png</normaloff>:/multiload.png</iconset>
+     </property>
+    </widget>
+    <addaction name="menuOpenTable"/>
+    <addaction name="actionNewTable"/>
+    <addaction name="actionSaveTable"/>
+    <addaction name="actionSaveTableAs"/>
+    <addaction name="separator"/>
+    <addaction name="actionOptionsDialog"/>
+   </widget>
+   <widget class="QMenu" name="menuRows">
+    <property name="title">
+     <string>Row</string>
+    </property>
+    <addaction name="actionProcess"/>
+    <addaction name="actionExpandSelection"/>
+    <addaction name="separator"/>
+    <addaction name="actionPrependRow"/>
+    <addaction name="actionAppendRow"/>
+    <addaction name="separator"/>
+    <addaction name="actionGroupRows"/>
+    <addaction name="actionCopySelected"/>
+    <addaction name="actionCutSelected"/>
+    <addaction name="actionPasteSelected"/>
+    <addaction name="actionClearSelected"/>
+    <addaction name="separator"/>
+    <addaction name="actionDeleteRow"/>
+   </widget>
+   <addaction name="menuTable"/>
+   <addaction name="menuRows"/>
+  </widget>
   <action name="actionNewTable">
+   <property name="icon">
+    <iconset resource="../../../../MantidPlot/icons/icons.qrc">
+     <normaloff>:/new.png</normaloff>:/new.png</iconset>
+   </property>
    <property name="text">
     <string>New Table</string>
    </property>
   </action>
   <action name="actionSaveTable">
+   <property name="icon">
+    <iconset resource="../../../../MantidPlot/icons/icons.qrc">
+     <normaloff>:/filesave.png</normaloff>:/filesave.png</iconset>
+   </property>
    <property name="text">
     <string>Save Table</string>
    </property>
   </action>
   <action name="actionSaveTableAs">
+   <property name="icon">
+    <iconset resource="../../../../MantidPlot/icons/icons.qrc">
+     <normaloff>:/filesaveas.png</normaloff>:/filesaveas.png</iconset>
+   </property>
    <property name="text">
     <string>Save Table As</string>
    </property>
   </action>
-  <action name="actionAddRow">
+  <action name="actionAppendRow">
+   <property name="icon">
+    <iconset resource="../../../../MantidPlot/icons/icons.qrc">
+     <normaloff>:/insert_row.png</normaloff>:/insert_row.png</iconset>
+   </property>
+   <property name="text">
+    <string>Insert Row After</string>
+   </property>
+   <property name="toolTip">
+    <string>Insert Row After</string>
+   </property>
+  </action>
+  <action name="actionPrependRow">
+   <property name="icon">
+    <iconset resource="../../../../MantidPlot/icons/icons.qrc">
+     <normaloff>:/insert_row.png</normaloff>:/insert_row.png</iconset>
+   </property>
    <property name="text">
-    <string>Add Row</string>
+    <string>Insert Row Before</string>
+   </property>
+   <property name="toolTip">
+    <string>Insert Row Before</string>
    </property>
   </action>
   <action name="actionDeleteRow">
+   <property name="icon">
+    <iconset resource="../../../../MantidPlot/icons/icons.qrc">
+     <normaloff>:/delete_row.png</normaloff>:/delete_row.png</iconset>
+   </property>
    <property name="text">
     <string>Delete Row</string>
    </property>
   </action>
   <action name="actionGroupRows">
+   <property name="icon">
+    <iconset resource="../../../../MantidPlot/icons/icons.qrc">
+     <normaloff>:/drag_curves.png</normaloff>:/drag_curves.png</iconset>
+   </property>
    <property name="text">
-    <string>Group Rows</string>
+    <string>Group Selected</string>
    </property>
   </action>
   <action name="actionProcess">
+   <property name="icon">
+    <iconset resource="../../../../MantidPlot/icons/icons.qrc">
+     <normaloff>:/stat_rows.png</normaloff>:/stat_rows.png</iconset>
+   </property>
    <property name="text">
     <string>Process</string>
    </property>
   </action>
+  <action name="actionExpandSelection">
+   <property name="icon">
+    <iconset resource="../../../../MantidPlot/icons/icons.qrc">
+     <normaloff>:/fit_frame.png</normaloff>:/fit_frame.png</iconset>
+   </property>
+   <property name="text">
+    <string>Expand Selection</string>
+   </property>
+   <property name="toolTip">
+    <string>Select an entire group</string>
+   </property>
+  </action>
+  <action name="actionOptionsDialog">
+   <property name="icon">
+    <iconset resource="../../../../MantidPlot/icons/icons.qrc">
+     <normaloff>:/configure.png</normaloff>:/configure.png</iconset>
+   </property>
+   <property name="text">
+    <string>Options...</string>
+   </property>
+   <property name="toolTip">
+    <string>Set options for the Reflectometry UI</string>
+   </property>
+  </action>
+  <action name="actionClearSelected">
+   <property name="icon">
+    <iconset resource="../../../../MantidPlot/icons/icons.qrc">
+     <normaloff>:/erase.png</normaloff>:/erase.png</iconset>
+   </property>
+   <property name="text">
+    <string>Clear Selected</string>
+   </property>
+  </action>
+  <action name="actionCopySelected">
+   <property name="icon">
+    <iconset resource="../../../../MantidPlot/icons/icons.qrc">
+     <normaloff>:/copy.png</normaloff>:/copy.png</iconset>
+   </property>
+   <property name="text">
+    <string>Copy Selected</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+C</string>
+   </property>
+  </action>
+  <action name="actionPasteSelected">
+   <property name="icon">
+    <iconset resource="../../../../MantidPlot/icons/icons.qrc">
+     <normaloff>:/paste.png</normaloff>:/paste.png</iconset>
+   </property>
+   <property name="text">
+    <string>Paste Selected</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+V</string>
+   </property>
+  </action>
+  <action name="actionCutSelected">
+   <property name="icon">
+    <iconset resource="../../../../MantidPlot/icons/icons.qrc">
+     <normaloff>:/cut.png</normaloff>:/cut.png</iconset>
+   </property>
+   <property name="text">
+    <string>Cut Selected</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+X</string>
+   </property>
+  </action>
  </widget>
- <customwidgets>
-  <customwidget>
-   <class>MantidQt::MantidWidgets::WorkspaceSelector</class>
-   <extends>QComboBox</extends>
-   <header>MantidQtMantidWidgets/WorkspaceSelector.h</header>
-  </customwidget>
- </customwidgets>
  <tabstops>
   <tabstop>comboSearchInstrument</tabstop>
   <tabstop>tableRuns</tabstop>
   <tabstop>viewTable</tabstop>
-  <tabstop>buttonProcess</tabstop>
  </tabstops>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonNew</sender>
-   <signal>clicked()</signal>
-   <receiver>actionNewTable</receiver>
-   <slot>trigger()</slot>
-  </connection>
-  <connection>
-   <sender>buttonAddRow</sender>
-   <signal>clicked()</signal>
-   <receiver>actionAddRow</receiver>
-   <slot>trigger()</slot>
-  </connection>
-  <connection>
-   <sender>buttonDeleteRow</sender>
-   <signal>clicked()</signal>
-   <receiver>actionDeleteRow</receiver>
-   <slot>trigger()</slot>
-  </connection>
-  <connection>
-   <sender>buttonGroupRows</sender>
-   <signal>clicked()</signal>
-   <receiver>actionGroupRows</receiver>
-   <slot>trigger()</slot>
-  </connection>
-  <connection>
-   <sender>buttonProcess</sender>
-   <signal>clicked()</signal>
-   <receiver>actionProcess</receiver>
-   <slot>trigger()</slot>
-  </connection>
-  <connection>
-   <sender>buttonSave</sender>
-   <signal>clicked()</signal>
-   <receiver>actionSaveTable</receiver>
-   <slot>trigger()</slot>
-  </connection>
-  <connection>
-   <sender>buttonSaveAs</sender>
-   <signal>clicked()</signal>
-   <receiver>actionSaveTableAs</receiver>
-   <slot>trigger()</slot>
-  </connection>
- </connections>
+ <resources>
+  <include location="../../../../MantidPlot/icons/icons.qrc"/>
+ </resources>
+ <connections/>
 </ui>
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflOptionsDialog.ui b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflOptionsDialog.ui
new file mode 100644
index 0000000000000000000000000000000000000000..d436410bd92a23f3e920b770ec9378dd794357c2
--- /dev/null
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflOptionsDialog.ui
@@ -0,0 +1,293 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>reflOptionsDialog</class>
+ <widget class="QDialog" name="reflOptionsDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>372</width>
+    <height>222</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>Reflectometry UI Options</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QTabWidget" name="tabWidget">
+     <property name="currentIndex">
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="tabWarnings">
+      <attribute name="title">
+       <string>Warnings</string>
+      </attribute>
+      <layout class="QFormLayout" name="formLayout">
+       <item row="0" column="0">
+        <widget class="QCheckBox" name="checkWarnProcessAll">
+         <property name="text">
+          <string>Warn when processing all rows</string>
+         </property>
+         <property name="reflOptionName" stdset="0">
+          <string>WarnProcessAll</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0">
+        <widget class="QCheckBox" name="checkWarnDiscardChanges">
+         <property name="text">
+          <string>Warn when discarding unsaved changes</string>
+         </property>
+         <property name="reflOptionName" stdset="0">
+          <string>WarnDiscardChanges</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QCheckBox" name="checkWarnProcessPartialGroup">
+         <property name="text">
+          <string>Warn when processing only part of a group</string>
+         </property>
+         <property name="reflOptionName" stdset="0">
+          <string>WarnProcessPartialGroup</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="tabRounding">
+      <attribute name="title">
+       <string>Rounding</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout">
+       <item row="2" column="0">
+        <widget class="QCheckBox" name="checkRoundQMax">
+         <property name="text">
+          <string>Round q_max column to</string>
+         </property>
+         <property name="reflOptionName" stdset="0">
+          <string>RoundQMax</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
+        <widget class="QSpinBox" name="spinQMinPrecision">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="reflOptionName" stdset="0">
+          <string>RoundQMinPrecision</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="1">
+        <widget class="QSpinBox" name="spinQMaxPrecision">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="reflOptionName" stdset="0">
+          <string>RoundQMaxPrecision</string>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="1">
+        <widget class="QSpinBox" name="spinDQQPrecision">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="reflOptionName" stdset="0">
+          <string>RoundDQQPrecision</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QCheckBox" name="checkRoundQMin">
+         <property name="text">
+          <string>Round q_min column to</string>
+         </property>
+         <property name="reflOptionName" stdset="0">
+          <string>RoundQMin</string>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="0">
+        <widget class="QCheckBox" name="checkRoundDQQ">
+         <property name="text">
+          <string>Round dq/q column to</string>
+         </property>
+         <property name="reflOptionName" stdset="0">
+          <string>RoundDQQ</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="0">
+        <widget class="QCheckBox" name="checkRoundAngle">
+         <property name="text">
+          <string>Round Angle column to</string>
+         </property>
+         <property name="reflOptionName" stdset="0">
+          <string>RoundAngle</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QSpinBox" name="spinAnglePrecision">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="reflOptionName" stdset="0">
+          <string>RoundAnglePrecision</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="2">
+        <widget class="QLabel" name="labelAnglePlaces">
+         <property name="text">
+          <string>decimal places</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="2">
+        <widget class="QLabel" name="labelQMinPlaces">
+         <property name="text">
+          <string>decimal places</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="2">
+        <widget class="QLabel" name="labelQMaxPlaces">
+         <property name="text">
+          <string>decimal places</string>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="2">
+        <widget class="QLabel" name="labelDQQPlaces">
+         <property name="text">
+          <string>decimal places</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>reflOptionsDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>reflOptionsDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>checkRoundAngle</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>spinAnglePrecision</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>106</x>
+     <y>53</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>226</x>
+     <y>53</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>checkRoundQMin</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>spinQMinPrecision</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>106</x>
+     <y>84</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>226</x>
+     <y>84</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>checkRoundQMax</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>spinQMaxPrecision</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>106</x>
+     <y>115</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>226</x>
+     <y>115</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>checkRoundDQQ</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>spinDQQPrecision</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>106</x>
+     <y>146</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>226</x>
+     <y>146</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/ConvFit.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/ConvFit.cpp
index 8ec941bea686fee455f7929ab08e7148f540c7aa..c2c8e331363389df49b029ca314b2f7785163752 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/ConvFit.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/ConvFit.cpp
@@ -64,6 +64,12 @@ namespace IDA
     m_rangeSelectors["ConvFitHWHM"]->setColour(Qt::red);
 
     // Populate Property Widget
+
+    // Option to convolve members
+    m_cfProp["Convolve"] = m_blnManager->addProperty("Convolve");
+    m_cfTree->addProperty(m_properties["Convolve"]);
+    m_blnManager->setValue(m_properties["Convolve"], true);
+
     m_properties["FitRange"] = m_grpManager->addProperty("Fitting Range");
     m_properties["StartX"] = m_dblManager->addProperty("StartX");
     m_dblManager->setDecimals(m_properties["StartX"], NUM_DECIMALS);
@@ -176,6 +182,9 @@ namespace IDA
 
     pyInput += uiForm().confit_ckSaveSeq->isChecked() ? "True\n" : "False\n";
 
+    if ( m_cfBlnMng->value(m_cfProp["Convolve"]) ) pyInput += "convolve = True\n";
+    else pyInput += "convolve = False\n";
+
     if ( uiForm().confit_ckVerbose->isChecked() ) pyInput += "verbose = True\n";
     else pyInput += "verbose = False\n";
 
@@ -193,7 +202,7 @@ namespace IDA
     pyInput +=    
       "bg = '" + bg + "'\n"
       "ftype = '" + ftype + "'\n"
-      "confitSeq(input, func, startx, endx, ftype, bg, temp, specMin, specMax, Verbose=verbose, Plot=plot, Save=save)\n";
+      "confitSeq(input, func, startx, endx, ftype, bg, temp, specMin, specMax, convolve, Verbose=verbose, Plot=plot, Save=save)\n";
 
     QString pyOutput = runPythonCode(pyInput);
   }
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectCalibration.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectCalibration.cpp
index 8d75e3cf25a6818773bd14f9ed678911e49213ad..51b186d669fd8f4cde07ab39fab8686c00464f79 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectCalibration.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectCalibration.cpp
@@ -4,11 +4,16 @@
 
 #include <QFileInfo>
 
+using namespace Mantid::API;
+
 namespace
 {
   Mantid::Kernel::Logger g_log("IndirectCalibration");
 }
 
+using namespace Mantid::API;
+using MantidQt::API::BatchAlgorithmRunner;
+
 namespace MantidQt
 {
 namespace CustomInterfaces
@@ -17,7 +22,7 @@ namespace CustomInterfaces
   /** Constructor
    */
   IndirectCalibration::IndirectCalibration(Ui::IndirectDataReduction& uiForm, QWidget * parent) :
-      IndirectDataReductionTab(uiForm, parent)
+      IndirectDataReductionTab(uiForm, parent), m_lastCalPlotFilename("")
   {
     DoubleEditorFactory *doubleEditorFactory = new DoubleEditorFactory();
 
@@ -115,6 +120,9 @@ namespace CustomInterfaces
     m_uiForm.cal_valIntensityScaleMultiplier->setText(" ");
 
     // SIGNAL/SLOT CONNECTIONS
+    // Update instrument information when a new instrument config is selected
+    connect(this, SIGNAL(newInstrumentConfiguration()), this, SLOT(setDefaultInstDetails()));
+
     connect(m_rangeSelectors["ResPeak"], SIGNAL(rangeChanged(double, double)), m_rangeSelectors["ResBackground"], SLOT(setRange(double, double)));
 
     // Update property map when a range seclector is moved
@@ -134,8 +142,6 @@ namespace CustomInterfaces
     connect(m_uiForm.cal_pbPlot, SIGNAL(clicked()), this, SLOT(calPlotRaw()));
     // Toggle RES file options when user toggles Create RES File checkbox
     connect(m_uiForm.cal_ckRES, SIGNAL(toggled(bool)), this, SLOT(resCheck(bool)));
-    // Toggle RES range selector when user toggles Create RES File checkbox
-    connect(m_uiForm.cal_ckRES, SIGNAL(toggled(bool)), m_uiForm.cal_ckResScale, SLOT(setEnabled(bool)));
     // Enable/disable RES scaling option when user toggles Scale RES checkbox
     connect(m_uiForm.cal_ckResScale, SIGNAL(toggled(bool)), m_uiForm.cal_leResScale, SLOT(setEnabled(bool)));
     // Enable/dosable scale factor option when user toggles Intensity Scale Factor checkbox
@@ -143,6 +149,13 @@ namespace CustomInterfaces
     // Validate the value entered in scale factor option whenever it changes
     connect(m_uiForm.cal_leIntensityScaleMultiplier, SIGNAL(textChanged(const QString &)), this, SLOT(calibValidateIntensity(const QString &)));
 
+    // Shows message on run buton when user is inputting a run number
+    connect(m_uiForm.cal_leRunNo, SIGNAL(fileTextChanged(const QString &)), this, SLOT(pbRunEditing()));
+    // Shows message on run button when Mantid is finding the file for a given run number
+    connect(m_uiForm.cal_leRunNo, SIGNAL(findingFiles()), this, SLOT(pbRunFinding()));
+    // Reverts run button back to normal when file finding has finished
+    connect(m_uiForm.cal_leRunNo, SIGNAL(fileFindingFinished()), this, SLOT(pbRunFinished()));
+
     // Nudge resCheck to ensure res range selectors are only shown when Create RES file is checked
     resCheck(m_uiForm.cal_ckRES->isChecked());
   }
@@ -162,14 +175,13 @@ namespace CustomInterfaces
   {
     connect(m_batchAlgoRunner, SIGNAL(batchComplete(bool)), this, SLOT(algorithmsComplete(bool)));
 
-    using namespace Mantid::API;
-    using MantidQt::API::BatchAlgorithmRunner;
-
     // Get properties
     QString firstFile = m_uiForm.cal_leRunNo->getFirstFilename();
     QString filenames = m_uiForm.cal_leRunNo->getFilenames().join(",");
 
-    QString detectorRange = m_uiForm.leSpectraMin->text() + "," + m_uiForm.leSpectraMax->text();
+    auto instDetails = getInstrumentDetails();
+    QString detectorRange = instDetails["spectra-min"] + "," + instDetails["spectra-max"];
+
     QString peakRange = m_properties["CalPeakMin"]->valueText() + "," + m_properties["CalPeakMax"]->valueText();
     QString backgroundRange = m_properties["CalBackMin"]->valueText() + "," + m_properties["CalBackMax"]->valueText();
 
@@ -222,7 +234,7 @@ namespace CustomInterfaces
 
     if(m_uiForm.cal_ckRES->isChecked())
     {
-      QString filenames = "['" + m_uiForm.cal_leRunNo->getFilenames().join("','") + "']";
+      QString filenames = m_uiForm.cal_leRunNo->getFilenames().join(",");
       createRESfile(filenames);
     }
 
@@ -277,7 +289,7 @@ namespace CustomInterfaces
   }
 
   /**
-   * Sets default spectra, peak and background ranges
+   * Sets default spectra, peak and background ranges.
    */
   void IndirectCalibration::setDefaultInstDetails()
   {
@@ -288,14 +300,14 @@ namespace CustomInterfaces
     m_dblManager->setValue(m_properties["ResSpecMin"], instDetails["spectra-min"].toDouble());
     m_dblManager->setValue(m_properties["ResSpecMax"], instDetails["spectra-max"].toDouble());
 
-    //Set pean and background ranges
-    if(instDetails.size() >= 8)
-    {
-      setMiniPlotGuides("CalPeak", m_properties["CalPeakMin"], m_properties["CalPeakMax"],
-          std::pair<double, double>(instDetails["peak-start"].toDouble(), instDetails["peak-end"].toDouble()));
-      setMiniPlotGuides("CalBackground", m_properties["CalBackMin"], m_properties["CalBackMax"],
-          std::pair<double, double>(instDetails["back-start"].toDouble(), instDetails["back-end"].toDouble()));
-    }
+    //Set peak and background ranges
+    std::map<std::string, double> ranges = getRangesFromInstrument();
+
+    std::pair<double, double> peakRange(ranges["peak-start-tof"], ranges["peak-end-tof"]);
+    std::pair<double, double> backgroundRange(ranges["back-start-tof"], ranges["back-end-tof"]);
+
+    setMiniPlotGuides("CalPeak", m_properties["CalPeakMin"], m_properties["CalPeakMax"], peakRange);
+    setMiniPlotGuides("CalBackground", m_properties["CalBackMin"], m_properties["CalBackMax"], backgroundRange);
   }
 
   /**
@@ -307,6 +319,12 @@ namespace CustomInterfaces
 
     QString filename = m_uiForm.cal_leRunNo->getFirstFilename();
 
+    // Don't do anything if the file we would plot has not changed
+    if(filename == m_lastCalPlotFilename)
+      return;
+
+    m_lastCalPlotFilename = filename;
+
     if ( filename.isEmpty() )
     {
       emit showMessageBox("Cannot plot raw data without filename");
@@ -316,7 +334,11 @@ namespace CustomInterfaces
     QFileInfo fi(filename);
     QString wsname = fi.baseName();
 
-    if(!loadFile(filename, wsname, m_uiForm.leSpectraMin->text().toInt(), m_uiForm.leSpectraMax->text().toInt()))
+    auto instDetails = getInstrumentDetails();
+    int specMin = instDetails["spectra-min"].toInt();
+    int specMax = instDetails["spectra-max"].toInt();
+
+    if(!loadFile(filename, wsname, specMin, specMax))
     {
       emit showMessageBox("Unable to load file.\nCheck whether your file exists and matches the selected instrument in the Energy Transfer tab.");
       return;
@@ -351,28 +373,26 @@ namespace CustomInterfaces
       return;
     }
 
-    QString files = "[r'" + m_uiForm.cal_leRunNo->getFilenames().join("', r'") + "']";
-    QString pyInput =
-      "from IndirectEnergyConversion import resolution\n"
-      "iconOpt = { 'first': " +QString::number(m_dblManager->value(m_properties["ResSpecMin"]))+
-      ", 'last': " +QString::number(m_dblManager->value(m_properties["ResSpecMax"]))+ "}\n"
-      "instrument = '" + m_uiForm.cbInst->currentText() + "'\n"
-      "analyser = '" + m_uiForm.cbAnalyser->currentText() + "'\n"
-      "reflection = '" + m_uiForm.cbReflection->currentText() + "'\n"
-      "files = " + files + "\n"
-      "outWS = resolution(files, iconOpt, '', '', instrument, analyser, reflection, Res=False)\n"
-      "print outWS\n";
-    QString pyOutput = m_pythonRunner.runPythonCode(pyInput).trimmed();
-
-    //Something went wrong in the Python
-    if(pyOutput == "None")
-    {
-      emit showMessageBox("Failed to convert to energy. See log for details.");
-      return;
-    }
+    QString files = m_uiForm.cal_leRunNo->getFilenames().join(",");
+
+    QFileInfo fi(m_uiForm.cal_leRunNo->getFirstFilename());
+    QString outWS = fi.baseName() + "_" + m_uiForm.cbAnalyser->currentText() +
+        m_uiForm.cbReflection->currentText() + "_red";
+
+    QString detRange = QString::number(m_dblManager->value(m_properties["ResSpecMin"])) + ","
+        + QString::number(m_dblManager->value(m_properties["ResSpecMax"]));
+
+    IAlgorithm_sptr reductionAlg = AlgorithmManager::Instance().create("InelasticIndirectReduction");
+    reductionAlg->initialize();
+    reductionAlg->setProperty("Instrument", m_uiForm.cbInst->currentText().toStdString());
+    reductionAlg->setProperty("Analyser", m_uiForm.cbAnalyser->currentText().toStdString());
+    reductionAlg->setProperty("Reflection", m_uiForm.cbReflection->currentText().toStdString());
+    reductionAlg->setProperty("InputFiles", files.toStdString());
+    reductionAlg->setProperty("DetectorRange", detRange.toStdString());
+    reductionAlg->execute();
 
     Mantid::API::MatrixWorkspace_sptr input = boost::dynamic_pointer_cast<Mantid::API::MatrixWorkspace>(
-        Mantid::API::AnalysisDataService::Instance().retrieve(pyOutput.toStdString()));
+        Mantid::API::AnalysisDataService::Instance().retrieve(outWS.toStdString()));
 
     const Mantid::MantidVec & dataX = input->readX(0);
     std::pair<double, double> range(dataX.front(), dataX.back());
@@ -504,6 +524,11 @@ namespace CustomInterfaces
   {
     m_rangeSelectors["ResPeak"]->setVisible(state);
     m_rangeSelectors["ResBackground"]->setVisible(state);
+
+    // Toggle scale and smooth options
+    m_uiForm.cal_ckResScale->setEnabled(state);
+    m_uiForm.cal_ckResScale->setChecked(false);
+    m_uiForm.cal_ckSmooth->setEnabled(state);
   }
 
   /**
@@ -522,57 +547,48 @@ namespace CustomInterfaces
       }
     }
 
-    QString pyInput =
-      "from IndirectEnergyConversion import resolution\n"
-      "iconOpt = { 'first': " +QString::number(m_dblManager->value(m_properties["ResSpecMin"]))+
-      ", 'last': " +QString::number(m_dblManager->value(m_properties["ResSpecMax"]))+"}\n"
+    QFileInfo fi(file);
+    QString outWS = fi.baseName() + "_" + m_uiForm.cbAnalyser->currentText() +
+        m_uiForm.cbReflection->currentText() + "_res";
+    /* outWS = outWS.toLower(); */
+
+    QString detRange = QString::number(m_dblManager->value(m_properties["ResSpecMin"])) + ","
+        + QString::number(m_dblManager->value(m_properties["ResSpecMax"]));
 
-      "instrument = '" + m_uiForm.cbInst->currentText() + "'\n"
-      "analyser = '" + m_uiForm.cbAnalyser->currentText() + "'\n"
-      "reflection = '" + m_uiForm.cbReflection->currentText() + "'\n";
+    QString rebinString = QString::number(m_dblManager->value(m_properties["ResELow"])) + "," +
+      QString::number(m_dblManager->value(m_properties["ResEWidth"])) + "," +
+      QString::number(m_dblManager->value(m_properties["ResEHigh"]));
 
-    if ( m_uiForm.cal_ckPlotResult->isChecked() ) { pyInput +=	"plot = True\n"; }
-    else { pyInput += "plot = False\n"; }
+    QString background = QString::number(m_dblManager->value(m_properties["ResStart"])) + ","
+        + QString::number(m_dblManager->value(m_properties["ResEnd"]));
 
-    if ( m_uiForm.cal_ckVerbose->isChecked() ) { pyInput +=  "verbose = True\n"; }
-    else { pyInput += "verbose = False\n"; }
+    Mantid::API::IAlgorithm_sptr resAlg = Mantid::API::AlgorithmManager::Instance().create("IndirectResolution", -1);
+    resAlg->initialize();
 
-    if ( m_uiForm.cal_ckSave->isChecked() ) { pyInput +=  "save = True\n"; }
-    else { pyInput += "save = False\n"; }
+    resAlg->setProperty("InputFiles", file.toStdString());
+    resAlg->setProperty("OutputWorkspace", outWS.toStdString());
 
-    QString rebinParam = QString::number(m_dblManager->value(m_properties["ResELow"])) + "," +
-      QString::number(m_dblManager->value(m_properties["ResEWidth"])) + "," +
-      QString::number(m_dblManager->value(m_properties["ResEHigh"]));
+    resAlg->setProperty("Instrument", m_uiForm.cbInst->currentText().toStdString());
+    resAlg->setProperty("Analyser", m_uiForm.cbAnalyser->currentText().toStdString());
+    resAlg->setProperty("Reflection", m_uiForm.cbReflection->currentText().toStdString());
 
-    QString background = "[ " +QString::number(m_dblManager->value(m_properties["ResStart"]))+ ", " +QString::number(m_dblManager->value(m_properties["ResEnd"]))+"]";
-
-    QString scaled = m_uiForm.cal_ckIntensityScaleMultiplier->isChecked() ? "True" : "False";
-    pyInput +=
-      "background = " + background + "\n"
-      "rebinParam = '" + rebinParam + "'\n"
-      "file = " + file + "\n"
-      "ws = resolution(file, iconOpt, rebinParam, background, instrument, analyser, reflection, Verbose=verbose, Plot=plot, Save=save, factor="+scaleFactor+")\n"
-      "scaled = "+ scaled +"\n"
-      "scaleFactor = "+m_uiForm.cal_leIntensityScaleMultiplier->text()+"\n"
-      "backStart = "+QString::number(m_dblManager->value(m_properties["CalBackMin"]))+"\n"
-      "backEnd = "+QString::number(m_dblManager->value(m_properties["CalBackMax"]))+"\n"
-      "rebinLow = "+QString::number(m_dblManager->value(m_properties["ResELow"]))+"\n"
-      "rebinWidth = "+QString::number(m_dblManager->value(m_properties["ResEWidth"]))+"\n"
-      "rebinHigh = "+QString::number(m_dblManager->value(m_properties["ResEHigh"]))+"\n"
-      "AddSampleLog(Workspace=ws, LogName='scale', LogType='String', LogText=str(scaled))\n"
-      "if scaled:"
-      "  AddSampleLog(Workspace=ws, LogName='scale_factor', LogType='Number', LogText=str(scaleFactor))\n"
-      "AddSampleLog(Workspace=ws, LogName='back_start', LogType='Number', LogText=str(backStart))\n"
-      "AddSampleLog(Workspace=ws, LogName='back_end', LogType='Number', LogText=str(backEnd))\n"
-      "AddSampleLog(Workspace=ws, LogName='rebin_low', LogType='Number', LogText=str(rebinLow))\n"
-      "AddSampleLog(Workspace=ws, LogName='rebin_width', LogType='Number', LogText=str(rebinWidth))\n"
-      "AddSampleLog(Workspace=ws, LogName='rebin_high', LogType='Number', LogText=str(rebinHigh))\n";
-
-    QString pyOutput = m_pythonRunner.runPythonCode(pyInput).trimmed();
-
-    if ( pyOutput != "" )
+    resAlg->setProperty("RebinParam", rebinString.toStdString());
+
+    resAlg->setProperty("DetectorRange", detRange.toStdString());
+    resAlg->setProperty("BackgroundRange", background.toStdString());
+
+    resAlg->setProperty("ScaleFactor", m_uiForm.cal_leIntensityScaleMultiplier->text().toDouble());
+    resAlg->setProperty("Smooth", m_uiForm.cal_ckSmooth->isChecked());
+
+    resAlg->setProperty("Verbose", m_uiForm.cal_ckVerbose->isChecked());
+    resAlg->setProperty("Plot", m_uiForm.cal_ckPlotResult->isChecked());
+    resAlg->setProperty("Save", m_uiForm.cal_ckSave->isChecked());
+
+    resAlg->execute();
+
+    if(!resAlg->isExecuted())
     {
-      emit showMessageBox("Unable to create RES file: \n" + pyOutput);
+      emit showMessageBox("Unable to create RES file");
     }
   }
 
@@ -605,5 +621,39 @@ namespace CustomInterfaces
     }
   }
 
+  /**
+   * Called when a user starts to type / edit the runs to load.
+   */
+  void IndirectCalibration::pbRunEditing()
+  {
+    emit updateRunButton(false, "Editing...", "Run numbers are curently being edited.");
+  }
+
+  /**
+   * Called when the FileFinder starts finding the files.
+   */
+  void IndirectCalibration::pbRunFinding()
+  {
+    emit updateRunButton(false, "Finding files...", "Searchig for data files for the run numbers entered...");
+    m_uiForm.cal_leRunNo->setEnabled(false);
+  }
+
+  /**
+   * Called when the FileFinder has finished finding the files.
+   */
+  void IndirectCalibration::pbRunFinished()
+  {
+    if(!m_uiForm.cal_leRunNo->isValid())
+    {
+      emit updateRunButton(false, "Invalid Run(s)", "Cannot find data files for some of the run numbers enetered.");
+    }
+    else
+    {
+      emit updateRunButton();
+    }
+
+    m_uiForm.cal_leRunNo->setEnabled(true);
+  }
+
 } // namespace CustomInterfaces
 } // namespace Mantid
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectConvertToEnergy.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectConvertToEnergy.cpp
index a98585c4673a569ff096f7960428215b7c32ae52..9718efca4d08de2df20cb3775aaab597f9ab6553 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectConvertToEnergy.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectConvertToEnergy.cpp
@@ -28,10 +28,8 @@ namespace CustomInterfaces
     m_uiForm.entryRebinHigh->setValidator(m_valDbl);
 
     // SIGNAL/SLOT CONNECTIONS
-    // Updates current analyser when analyser is selected from drop down
-    connect(m_uiForm.cbAnalyser, SIGNAL(activated(int)), this, SLOT(analyserSelected(int)));
-    // Updates current reflection when reflection is selected from drop down
-    connect(m_uiForm.cbReflection, SIGNAL(activated(int)), this, SLOT(reflectionSelected(int)));
+    // Update instrument information when a new instrument config is selected
+    connect(this, SIGNAL(newInstrumentConfiguration()), this, SLOT(setInstrumentDefault()));
     // Shows required mapping option UI widgets when a new mapping option is selected from drop down
     connect(m_uiForm.cbMappingOptions, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(mappingOptionSelected(const QString&)));
     // Shows background removal dialog when user clicks Background Removal
@@ -82,6 +80,11 @@ namespace CustomInterfaces
 
   void IndirectConvertToEnergy::setup()
   {
+    detailedBalanceCheck(m_uiForm.ckDetailedBalance->isChecked());
+    scaleMultiplierCheck(m_uiForm.ckScaleMultiplier->isChecked());
+
+    // Load the default instrument parameters
+    setInstrumentDefault();
   }
 
   void IndirectConvertToEnergy::run()
@@ -318,48 +321,15 @@ namespace CustomInterfaces
     return valid;
   }
 
-  /**
-   * This function is called when the user selects an analyser from the cbAnalyser QComboBox
-   * object. It's main purpose is to initialise the values for the Reflection ComboBox.
-   * @param index :: Index of the value selected in the combo box.
-   */
-  void IndirectConvertToEnergy::analyserSelected(int index)
-  {
-    // populate Reflection combobox with correct values for Analyser selected.
-    m_uiForm.cbReflection->clear();
-    clearReflectionInfo();
-
-    QVariant currentData = m_uiForm.cbAnalyser->itemData(index);
-    if ( currentData == QVariant::Invalid )
-    {
-      m_uiForm.lbReflection->setEnabled(false);
-      m_uiForm.cbReflection->setEnabled(false);
-      return;
-    }
-    else
-    {
-      m_uiForm.lbReflection->setEnabled(true);
-      m_uiForm.cbReflection->setEnabled(true);
-      QStringList reflections = currentData.toStringList();
-      for ( int i = 0; i < reflections.count(); i++ )
-      {
-        m_uiForm.cbReflection->addItem(reflections[i]);
-      }
-    }
-
-    reflectionSelected(m_uiForm.cbReflection->currentIndex());
-  }
 
   /**
-   * This function is called when the user selects a reflection from the cbReflection QComboBox
-   * object.
-   * @param index :: Index of the value selected in the combo box.
+   * Called when the instrument has changed, used to update default values.
    */
-  void IndirectConvertToEnergy::reflectionSelected(int index)
+  void IndirectConvertToEnergy::setInstrumentDefault()
   {
-    UNUSED_ARG(index);
-    // first, clear values in assosciated boxes:
-    clearReflectionInfo();
+    m_uiForm.leSpectraMin->clear();
+    m_uiForm.leSpectraMax->clear();
+    m_uiForm.leEfixed->clear();
 
     std::map<QString, QString> instDetails = getInstrumentDetails();
 
@@ -456,65 +426,6 @@ namespace CustomInterfaces
       m_uiForm.pbBack_2->setText("Background Removal (Off)");
   }
 
-  /**
-   * This function holds any steps that must be performed on the selection of an instrument,
-   * for example loading values from the Instrument Definition File (IDF).
-   * @param prefix :: The selected instruments prefix in Mantid.
-   */
-  void IndirectConvertToEnergy::setIDFValues(const QString & prefix)
-  {
-    UNUSED_ARG(prefix);
-
-    // empty ComboBoxes, LineEdits,etc of previous values
-    m_uiForm.cbAnalyser->clear();
-    m_uiForm.cbReflection->clear();
-    clearReflectionInfo();
-
-    rebinEntryToggle(m_uiForm.rebin_ckDNR->isChecked());
-    detailedBalanceCheck(m_uiForm.ckDetailedBalance->isChecked());
-    /* resCheck(m_uiForm.cal_ckRES->isChecked()); */
-
-    scaleMultiplierCheck(m_uiForm.ckScaleMultiplier->isChecked());
-
-    QString instName = m_uiForm.cbInst->currentText();
-    auto instModes = getInstrumentModes(instName.toStdString());
-
-    for(auto modesIt = instModes.begin(); modesIt != instModes.end(); ++modesIt)
-    {
-      QString analyser = QString::fromStdString(modesIt->first);
-      std::vector<std::string> reflections = modesIt->second;
-
-      if(analyser != "diffraction") // Do not put diffraction into the analyser list
-      {
-        if(reflections.size() > 0)
-        {
-          QStringList reflectionsList;
-          for(auto reflIt = reflections.begin(); reflIt != reflections.end(); ++reflIt)
-            reflectionsList.push_back(QString::fromStdString(*reflIt));
-          QVariant data = QVariant(reflectionsList);
-          m_uiForm.cbAnalyser->addItem(analyser, data);
-        }
-        else
-        {
-          m_uiForm.cbAnalyser->addItem(analyser);
-        }
-      }
-    }
-
-    analyserSelected(m_uiForm.cbAnalyser->currentIndex());
-  }
-
-  /**
-   * This function clears the values of the QLineEdit objec  ts used to hold Reflection-specific
-   * information.
-   */
-  void IndirectConvertToEnergy::clearReflectionInfo()
-  {
-    m_uiForm.leSpectraMin->clear();
-    m_uiForm.leSpectraMax->clear();
-    m_uiForm.leEfixed->clear();
-  }
-
   /**
    * This function will disable the necessary elements of the interface when the user selects "Do Not Rebin"
    * and enable them again when this is de-selected.
@@ -778,8 +689,7 @@ namespace CustomInterfaces
    */
   void IndirectConvertToEnergy::pbRunEditing()
   {
-    m_uiForm.pbRun->setEnabled(false);
-    m_uiForm.pbRun->setText("Editing...");
+    emit updateRunButton(false, "Editing...", "Run numbers are curently being edited.");
   }
 
   /**
@@ -787,7 +697,7 @@ namespace CustomInterfaces
    */
   void IndirectConvertToEnergy::pbRunFinding()
   {
-    m_uiForm.pbRun->setText("Finding files...");
+    emit updateRunButton(false, "Finding files...", "Searchig for data files for the run numbers entered...");
     m_uiForm.ind_runFiles->setEnabled(false);
   }
 
@@ -798,13 +708,13 @@ namespace CustomInterfaces
   {
     if(!m_uiForm.ind_runFiles->isValid())
     {
-      m_uiForm.pbRun->setText("Invalid Run");
+      emit updateRunButton(false, "Invalid Run(s)", "Cannot find data files for some of the run numbers enetered.");
     }
     else
     {
-      m_uiForm.pbRun->setText("Run");
-      m_uiForm.pbRun->setEnabled(true);
+      emit updateRunButton();
     }
+
     m_uiForm.ind_runFiles->setEnabled(true);
   }
 
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDataReduction.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDataReduction.cpp
index 0a764f46cb547a984a0316da8f5d58a7095287d4..f94a2a9d6f9c39f4bde430f52c8914c7a592a5de 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDataReduction.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDataReduction.cpp
@@ -13,6 +13,7 @@
 #include "MantidQtCustomInterfaces/IndirectDiagnostics.h"
 #include "MantidQtCustomInterfaces/IndirectMoments.h"
 #include "MantidQtCustomInterfaces/IndirectSqw.h"
+#include "MantidQtCustomInterfaces/IndirectSymmetrise.h"
 #include "MantidQtCustomInterfaces/IndirectTransmission.h"
 
 #include <QDesktopServices>
@@ -20,6 +21,7 @@
 #include <QMessageBox>
 #include <QUrl>
 
+
 //Add this class to the list of specialised dialogs in this namespace
 namespace MantidQt
 {
@@ -29,16 +31,18 @@ namespace MantidQt
   }
 }
 
+
 namespace
 {
   Mantid::Kernel::Logger g_log("IndirectDataReduction");
 }
 
+
+using namespace Mantid::API;
+using namespace Mantid::Geometry;
 using namespace MantidQt::CustomInterfaces;
 using namespace MantidQt;
-//----------------------
-// Public member functions
-//----------------------
+
 
 /**
  * Default constructor for class. Initialises interface pointers to NULL values.
@@ -46,26 +50,28 @@ using namespace MantidQt;
  */
 IndirectDataReduction::IndirectDataReduction(QWidget *parent) :
   UserSubWindow(parent),
-  m_curInterfaceSetup(""),
+  m_instrument(""),
   m_settingsGroup("CustomInterfaces/IndirectDataReduction"),
   m_algRunner(new MantidQt::API::AlgorithmRunner(this)),
   m_changeObserver(*this, &IndirectDataReduction::handleDirectoryChange)
 {
-  //Signals to report load instrument algo result
+  // Signals to report load instrument algo result
   connect(m_algRunner, SIGNAL(algorithmComplete(bool)), this, SLOT(instrumentLoadingDone(bool)));
 }
 
+
 /**
  * Destructor
  */
 IndirectDataReduction::~IndirectDataReduction()
 {
-  //Make sure no algos are sunning after the window has been closed
+  // Make sure no algos are running after the window has been closed
   m_algRunner->cancelRunningAlgorithm();
 
   saveSettings();
 }
 
+
 /**
  * On user clicking the "help" button on the interface, directs their request to the relevant
  * interface's helpClicked() function.
@@ -75,22 +81,28 @@ void IndirectDataReduction::helpClicked()
 
   QString tabName = m_uiForm.tabWidget->tabText(
       m_uiForm.tabWidget->currentIndex());
+
   QString url = "http://www.mantidproject.org/Indirect:";
+
   if ( tabName == "Energy Transfer" )
     url += "EnergyTransfer";
   else if ( tabName == "Calibration" )
     url += "Calibration";
   else if ( tabName == "Diagnostics" )
     url += "Diagnostics";
+  else if (tabName == "Symmetrise")
+    url += "Symmetrise";
   else if ( tabName == "S(Q, w)" )
     url += "SofQW";
   else if (tabName == "Transmission")
     url += "Transmission";
   else if (tabName == "Moments")
     url += "Moments";
+
   QDesktopServices::openUrl(QUrl(url));
 }
 
+
 /**
  * This is the function called when the "Run" button is clicked. It will call the relevent function
  * in the subclass.
@@ -98,74 +110,61 @@ void IndirectDataReduction::helpClicked()
 void IndirectDataReduction::runClicked()
 {
   QString tabName = m_uiForm.tabWidget->tabText(m_uiForm.tabWidget->currentIndex());
-  if ( tabName == "Energy Transfer" )
-    m_tab_convert_to_energy->runTab();
-  else if ( tabName == "Calibration" )
-    m_tab_calibration->runTab();
-  else if ( tabName == "Diagnostics" )
-    m_tab_diagnostics->runTab();
-  else if ( tabName == "S(Q, w)" )
-    m_tab_sqw->runTab();
-  else if (tabName == "Transmission")
-    m_tab_trans->runTab();
-  else if(tabName == "Moments")
-    m_tab_moments->runTab();
+  m_tabs[tabName]->runTab();
 }
 
+
 /**
- * Sets up Qt UI file and connects signals, slots. 
+ * Sets up Qt UI file and connects signals, slots.
  */
 void IndirectDataReduction::initLayout()
 {
   m_uiForm.setupUi(this);
 
-  m_tab_convert_to_energy = new IndirectConvertToEnergy(m_uiForm, this);
-  m_tab_sqw = new IndirectSqw(m_uiForm, this);
-  m_tab_diagnostics = new IndirectDiagnostics(m_uiForm, this);
-  m_tab_calibration = new IndirectCalibration(m_uiForm, this);
-  m_tab_trans = new IndirectTransmission(m_uiForm, this);
-  m_tab_moments = new IndirectMoments(m_uiForm, this);
-
-  // Assume we get a incompatiable instrument to start with
-  m_uiForm.pbRun->setEnabled(false);
-
-  // Signal / Slot Connections Set Up Here
-
-  // signal/slot connections to respond to changes in instrument selection combo boxes
-  connect(m_uiForm.cbInst, SIGNAL(instrumentSelectionChanged(const QString&)), this, SLOT(userSelectInstrument(const QString&)));
-
-  // connect "?" (Help) Button
+  // Do not allow running until setup  and instrument laoding are done
+  updateRunButton(false, "Loading UI", "Initialising user interface components...");
+
+  if(m_instrument == "")
+    instrumentSelected(m_uiForm.cbInst->currentText());
+
+  // Create the tabs
+  m_tabs["Energy Transfer"] = new IndirectConvertToEnergy(m_uiForm, this);
+  m_tabs["Calibration"] = new IndirectCalibration(m_uiForm, this);
+  m_tabs["Diagnostics"] = new IndirectDiagnostics(m_uiForm, this);
+  m_tabs["Transmission"] = new IndirectTransmission(m_uiForm, this);
+  m_tabs["Symmetrise"] = new IndirectSymmetrise(m_uiForm, this);
+  m_tabs["S(Q, w)"] = new IndirectSqw(m_uiForm, this);
+  m_tabs["Moments"] = new IndirectMoments(m_uiForm, this);
+
+  // Handle the instrument being changed
+  connect(m_uiForm.cbInst, SIGNAL(instrumentSelectionChanged(const QString&)), this, SLOT(instrumentSelected(const QString&)));
+  // Handle the analyser being changed
+  connect(m_uiForm.cbAnalyser, SIGNAL(currentIndexChanged(int)), this, SLOT(analyserSelected(int)));
+  // Handle the reflection being changed
+  connect(m_uiForm.cbReflection, SIGNAL(currentIndexChanged(int)), this, SLOT(instrumentSetupChanged()));
+
+  // Connect "?" (Help) Button
   connect(m_uiForm.pbHelp, SIGNAL(clicked()), this, SLOT(helpClicked()));
-  // connect the "Run" button
+  // Connect the "Run" button
   connect(m_uiForm.pbRun, SIGNAL(clicked()), this, SLOT(runClicked()));
-  // connect the "Manage User Directories" Button
+  // Connect the "Manage User Directories" Button
   connect(m_uiForm.pbManageDirectories, SIGNAL(clicked()), this, SLOT(openDirectoryDialog()));
 
-  // ignals for tabs running Python
-  connect(m_tab_convert_to_energy, SIGNAL(runAsPythonScript(const QString&, bool)), this, SIGNAL(runAsPythonScript(const QString&, bool)));
-  connect(m_tab_sqw, SIGNAL(runAsPythonScript(const QString&, bool)), this, SIGNAL(runAsPythonScript(const QString&, bool)));
-  connect(m_tab_calibration, SIGNAL(runAsPythonScript(const QString&, bool)), this, SIGNAL(runAsPythonScript(const QString&, bool)));
-  connect(m_tab_diagnostics, SIGNAL(runAsPythonScript(const QString&, bool)), this, SIGNAL(runAsPythonScript(const QString&, bool)));
-  connect(m_tab_trans, SIGNAL(runAsPythonScript(const QString&, bool)), this, SIGNAL(runAsPythonScript(const QString&, bool)));
-  connect(m_tab_moments, SIGNAL(runAsPythonScript(const QString&, bool)), this, SIGNAL(runAsPythonScript(const QString&, bool)));
-
-  // ignals for tabs showing mesage boxes
-  connect(m_tab_convert_to_energy, SIGNAL(showMessageBox(const QString&)), this, SLOT(showMessageBox(const QString&)));
-  connect(m_tab_sqw, SIGNAL(showMessageBox(const QString&)), this, SLOT(showMessageBox(const QString&)));
-  connect(m_tab_calibration, SIGNAL(showMessageBox(const QString&)), this, SLOT(showMessageBox(const QString&)));
-  connect(m_tab_diagnostics, SIGNAL(showMessageBox(const QString&)), this, SLOT(showMessageBox(const QString&)));
-  connect(m_tab_trans, SIGNAL(showMessageBox(const QString&)), this, SLOT(showMessageBox(const QString&)));
-  connect(m_tab_moments, SIGNAL(showMessageBox(const QString&)), this, SLOT(showMessageBox(const QString&)));
-
-  // Run any tab setup code
-  m_tab_convert_to_energy->setupTab();
-  m_tab_sqw->setupTab();
-  m_tab_diagnostics->setupTab();
-  m_tab_calibration->setupTab();
-  m_tab_trans->setupTab();
-  m_tab_moments->setupTab();
+  // Reset the Run button state when the tab is changed
+  connect(m_uiForm.tabWidget, SIGNAL(currentChanged(int)), this, SLOT(updateRunButton()));
+
+  // Connect tab signals and run any setup code
+  for(auto it = m_tabs.begin(); it != m_tabs.end(); ++it)
+  {
+    connect(it->second, SIGNAL(runAsPythonScript(const QString&, bool)), this, SIGNAL(runAsPythonScript(const QString&, bool)));
+    connect(it->second, SIGNAL(showMessageBox(const QString&)), this, SLOT(showMessageBox(const QString&)));
+    connect(it->second, SIGNAL(updateRunButton(bool, QString, QString)), this, SLOT(updateRunButton(bool, QString, QString)));
+    connect(this, SIGNAL(newInstrumentConfiguration()), it->second, SIGNAL(newInstrumentConfiguration())),
+    it->second->setupTab();
+  }
 }
 
+
 /**
  * This function is ran after initLayout(), and runPythonCode is unavailable before this function
  * has run (because of the setup of the base class). For this reason, "setup" functions that require
@@ -175,89 +174,138 @@ void IndirectDataReduction::initLocalPython()
 {
   // select starting instrument
   readSettings();
-
-  if ( m_curInterfaceSetup == "" )
-  {
-    userSelectInstrument(m_uiForm.cbInst->currentText());
-  }
 }
 
+
 /**
- * Read settings from the persistent store
+ * Called when any of the instrument configuration options are changed.
+ *
+ * Used to notify tabs that rely on the instrument config when the config changes.
  */
-void IndirectDataReduction::readSettings()
+void IndirectDataReduction::instrumentSetupChanged()
 {
-  QSettings settings;
-  settings.beginGroup(m_settingsGroup);
-  QString instrName = settings.value("instrument-name", "").toString();
-  settings.endGroup();
+  QString instrumentName = m_uiForm.cbInst->currentText();
+  QString analyser = m_uiForm.cbAnalyser->currentText();
+  QString reflection = m_uiForm.cbReflection->currentText();
 
-  setDefaultInstrument(instrName);
+  if(instrumentName != "" && analyser != "" && reflection != "")
+  {
+    loadInstrumentIfNotExist(instrumentName.toStdString(), analyser.toStdString(), reflection.toStdString());
+    emit newInstrumentConfiguration();
+  }
 }
 
+
 /**
- * Save settings to a persistent storage
+ * Loads an empty instrument into a workspace (__empty_INST) unless the workspace already exists.
+ *
+ * If an analyser and reflection are supplied then the corresponding IPF is also loaded.
+ *
+ * @param instrumentName Name of the instrument to load
+ * @param analyser Analyser being used (optional)
+ * @param reflection Relection being used (optional)
+ * @returns Pointer to instrument workspace
  */
-void IndirectDataReduction::saveSettings()
+Mantid::API::MatrixWorkspace_sptr IndirectDataReduction::loadInstrumentIfNotExist(std::string instrumentName,
+    std::string analyser, std::string reflection)
 {
-  QSettings settings;
-  settings.beginGroup(m_settingsGroup);
-  QString instrName;
+  std::string instWorkspaceName = "__empty_" + instrumentName;
+  std::string idfDirectory = Mantid::Kernel::ConfigService::Instance().getString("instrumentDefinition.directory");
 
-  instrName = m_uiForm.cbInst->currentText();
+  // If the workspace does not exist in ADS then load an empty instrument
+  if(!AnalysisDataService::Instance().doesExist(instWorkspaceName))
+  {
+    std::string parameterFilename = idfDirectory + instrumentName + "_Definition.xml";
+    IAlgorithm_sptr loadAlg = AlgorithmManager::Instance().create("LoadEmptyInstrument");
+    loadAlg->initialize();
+    loadAlg->setProperty("Filename", parameterFilename);
+    loadAlg->setProperty("OutputWorkspace", instWorkspaceName);
+    loadAlg->execute();
+  }
 
-  settings.setValue("instrument-name", instrName);
-  settings.endGroup();
+  // Load the IPF if given an analyser and reflection
+  if(!analyser.empty() && !reflection.empty())
+  {
+    std::string ipfFilename = idfDirectory + instrumentName + "_" + analyser + "_" + reflection + "_Parameters.xml";
+    IAlgorithm_sptr loadParamAlg = AlgorithmManager::Instance().create("LoadParameterFile");
+    loadParamAlg->initialize();
+    loadParamAlg->setProperty("Filename", ipfFilename);
+    loadParamAlg->setProperty("Workspace", instWorkspaceName);
+    loadParamAlg->execute();
+  }
+
+  // Get the workspace, which should exist now
+  MatrixWorkspace_sptr instWorkspace = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(instWorkspaceName);
+
+  return instWorkspace;
 }
 
+
 /**
- * Sets up the initial instrument for the interface. This value is taken from the users'
- * settings in the menu View -> Preferences -> Mantid -> Instrument
- * @param name :: The name of the default instrument
+ * Gets the operation modes for the current instrument as defined in it's parameter file.
+ *
+ * @returns A list of analysers and a vector of reflections that can be used with each
  */
-void IndirectDataReduction::setDefaultInstrument(const QString & name)
+std::vector<std::pair<std::string, std::vector<std::string> > > IndirectDataReduction::getInstrumentModes()
 {
-  if( name.isEmpty() ) return;
+  std::vector<std::pair<std::string, std::vector<std::string> > > modes;
+  MatrixWorkspace_sptr instWorkspace = loadInstrumentIfNotExist(m_instrument.toStdString());
+  Instrument_const_sptr instrument = instWorkspace->getInstrument();
 
-  int index = m_uiForm.cbInst->findText(name);
-  if( index >= 0 )
+  std::vector<std::string> analysers;
+  boost::split(analysers, instrument->getStringParameter("analysers")[0], boost::is_any_of(","));
+
+  for(auto it = analysers.begin(); it != analysers.end(); ++it)
   {
-    m_uiForm.cbInst->setCurrentIndex(index);
+    std::string analyser = *it;
+    std::string ipfReflections = instrument->getStringParameter("refl-" + analyser)[0];
+
+    std::vector<std::string> reflections;
+    boost::split(reflections, ipfReflections, boost::is_any_of(","), boost::token_compress_on);
+
+    std::pair<std::string, std::vector<std::string> > data(analyser, reflections);
+    modes.push_back(data);
   }
+
+  return modes;
 }
 
+
 /**
- * This function: 1. loads the instrument and gets the value of deltaE-mode parameter
- *				 2. Based on this value, makes the necessary changes to the form setup (direct or indirect).
- * @param name :: name of the instrument from the QComboBox
+ * Updated the list of analysers based on the current instrument.
  */
-void IndirectDataReduction::instrumentSelectChanged(const QString& name)
+void IndirectDataReduction::updateAnalyserList()
 {
-  QString defFile = (Mantid::API::ExperimentInfo::getInstrumentFilename(name.toStdString())).c_str();
-  if((defFile == "") || !m_uiForm.cbInst->isVisible())
-  {
-    g_log.error("Instument loading failed!");
-    m_uiForm.cbInst->setEnabled(true);
-    m_uiForm.pbRun->setEnabled(true);
-    return;
-  }
+  auto instModes = getInstrumentModes();
 
-  QString outWS = "__empty_" + m_uiForm.cbInst->currentText();
+  m_uiForm.cbAnalyser->clear();
 
-  m_curInterfaceSetup = name;
+  for(auto modesIt = instModes.begin(); modesIt != instModes.end(); ++modesIt)
+  {
+    QString analyser = QString::fromStdString(modesIt->first);
+    std::vector<std::string> reflections = modesIt->second;
 
-  //Load the empty instrument into the workspace __empty_[name]
-  //This used to be done in Python
-  Mantid::API::IAlgorithm_sptr instLoader = Mantid::API::AlgorithmManager::Instance().create("LoadEmptyInstrument", -1);
-  instLoader->initialize();
-  instLoader->setProperty("Filename", defFile.toStdString());
-  instLoader->setProperty("OutputWorkspace", outWS.toStdString());
+    if(analyser != "diffraction") // Do not put diffraction into the analyser list
+    {
+      if(reflections.size() > 0)
+      {
+        QStringList reflectionsList;
+        for(auto reflIt = reflections.begin(); reflIt != reflections.end(); ++reflIt)
+          reflectionsList.push_back(QString::fromStdString(*reflIt));
+        QVariant data = QVariant(reflectionsList);
+        m_uiForm.cbAnalyser->addItem(analyser, data);
+      }
+      else
+      {
+        m_uiForm.cbAnalyser->addItem(analyser);
+      }
+    }
+  }
 
-  //Ensure no other algorithm is running
-  m_algRunner->cancelRunningAlgorithm();
-  m_algRunner->startAlgorithm(instLoader);
+  analyserSelected(m_uiForm.cbAnalyser->currentIndex());
 }
 
+
 /**
  * Tasks to be carried out after an empty instument has finished loading
  */
@@ -268,127 +316,112 @@ void IndirectDataReduction::instrumentLoadingDone(bool error)
   {
     g_log.error("Instument loading failed! (this can be caused by having both direct and indirect interfaces open)");
     m_uiForm.cbInst->setEnabled(true);
-    m_uiForm.pbRun->setEnabled(true);
+    updateRunButton(false, "No Instrument", "No instrument is currently loaded.");
     return;
   }
 
-  performInstSpecific();
-  setIDFValues(curInstPrefix);
-
-  m_uiForm.pbRun->setEnabled(true);
+  updateAnalyserList();
+  updateRunButton();
   m_uiForm.cbInst->setEnabled(true);
 }
 
+
 /**
- * If the instrument selection has changed, calls instrumentSelectChanged
- * @param prefix :: instrument name from QComboBox object
+ * Handled loading thebase instrument when it is selected form the instrument combo box.
+ *
+ * @param instName Instrument name from QComboBox object
  */
-void IndirectDataReduction::userSelectInstrument(const QString& prefix) 
+void IndirectDataReduction::instrumentSelected(const QString& instName)
 {
-  if ( prefix != m_curInterfaceSetup )
+  if(instName != m_instrument)
   {
     // Remove the old empty instrument workspace if it is there
-    std::string ws_name = "__empty_" + m_curInterfaceSetup.toStdString();
+    std::string wsName = "__empty_" + m_instrument.toStdString();
     Mantid::API::AnalysisDataServiceImpl& dataStore = Mantid::API::AnalysisDataService::Instance();
-    if( dataStore.doesExist(ws_name) )
-    {
-      dataStore.remove(ws_name);
-    }
+    if(dataStore.doesExist(wsName))
+      dataStore.remove(wsName);
 
-    m_uiForm.pbRun->setEnabled(false);
+    updateRunButton(false, "Loading Inst.", "Loading the selected instrument...");
     m_uiForm.cbInst->setEnabled(false);
-    instrumentSelectChanged(prefix);
-  }
-}
+    loadInstrumentIfNotExist(instName.toStdString());
+    m_instrument = instName;
 
-void IndirectDataReduction::openDirectoryDialog()
-{
-  MantidQt::API::ManageUserDirectories *ad = new MantidQt::API::ManageUserDirectories(this);
-  ad->show();
-  ad->setFocus();
+    //TODO
+    instrumentLoadingDone(false);
+  }
 }
 
-/**
-* This function holds any steps that must be performed on the selection of an instrument,
-* for example loading values from the Instrument Definition File (IDF).
-* @param prefix :: The selected instruments prefix in Mantid.
-*/
-void IndirectDataReduction::setIDFValues(const QString & prefix)
-{
-  dynamic_cast<IndirectConvertToEnergy *>(m_tab_convert_to_energy)->setIDFValues(prefix);
-}
 
 /**
-* This function holds any steps that must be performed on the layout that are specific
-* to the currently selected instrument.
-*/
-void IndirectDataReduction::performInstSpecific()
+ * Updates the list of reflections in the reflection combo box when the analyser is changed.
+ *
+ * @param index Index of analyser in combo box
+ */
+void IndirectDataReduction::analyserSelected(int index)
 {
-  setInstSpecificWidget("cm-1-convert-choice", m_uiForm.ckCm1Units, QCheckBox::Off);
-  setInstSpecificWidget("save-aclimax-choice", m_uiForm.save_ckAclimax, QCheckBox::Off);
-}
+  // Populate Reflection combobox with correct values for Analyser selected.
+  m_uiForm.cbReflection->clear();
 
-/**
-* This function either shows or hides the given QCheckBox, based on the named property
-* inside the instrument param file.  When hidden, the default state will be used to
-* reset to the "unused" state of the checkbox.
-*
-* @param parameterName :: The name of the property to look for inside the current inst param file.
-* @param checkBox :: The checkbox to set the state of, and to either hide or show based on the current inst.
-* @param defaultState :: The state to which the checkbox will be set upon hiding it.
-*/
-void IndirectDataReduction::setInstSpecificWidget(const std::string & parameterName, QCheckBox * checkBox, QCheckBox::ToggleState defaultState)
-{
-  // Get access to instrument specific parameters via the loaded empty workspace.
-  std::string instName = m_uiForm.cbInst->currentText().toStdString();
-  Mantid::API::MatrixWorkspace_sptr input = boost::dynamic_pointer_cast<Mantid::API::MatrixWorkspace>(Mantid::API::AnalysisDataService::Instance().retrieve("__empty_" + instName));
-  if(input == NULL)
+  QVariant currentData = m_uiForm.cbAnalyser->itemData(index);
+  if ( currentData == QVariant::Invalid )
+  {
+    m_uiForm.lbReflection->setEnabled(false);
+    m_uiForm.cbReflection->setEnabled(false);
     return;
-
-  Mantid::Geometry::Instrument_const_sptr instr = input->getInstrument();
-
-  // See if the instrument params file requests that the checkbox be shown to the user.
-  std::vector<std::string> showParams = instr->getStringParameter(parameterName);
-  
-  std::string show = "";
-  if(!showParams.empty())
-    show = showParams[0];
-  
-  if(show == "Show")
-    checkBox->setHidden(false);
+  }
   else
   {
-    checkBox->setHidden(true);
-    checkBox->setState(defaultState);
+    m_uiForm.lbReflection->setEnabled(true);
+    m_uiForm.cbReflection->setEnabled(true);
+    QStringList reflections = currentData.toStringList();
+    for ( int i = 0; i < reflections.count(); i++ )
+    {
+      m_uiForm.cbReflection->addItem(reflections[i]);
+    }
   }
+
+  emit instrumentSetupChanged();
 }
 
+
+/**
+ * Remove the Poco observer on the config service when the interfaces is closed.
+ *
+ * @param close CLose event (unused)
+ */
 void IndirectDataReduction::closeEvent(QCloseEvent* close)
 {
-  (void) close;
+  UNUSED_ARG(close);
   Mantid::Kernel::ConfigService::Instance().removeObserver(m_changeObserver);
 }
 
+
+/**
+ * Reloads settings if the default sata search or save directories have been changed.
+ */
 void IndirectDataReduction::handleDirectoryChange(Mantid::Kernel::ConfigValChangeNotification_ptr pNf)
 {
   std::string key = pNf->key();
 
-  if ( key == "datasearch.directories" || key == "defaultsave.directory" )
-  {
-    loadSettings();
-  }
+  if(key == "datasearch.directories" || key == "defaultsave.directory")
+    readSettings();
 }
 
-void IndirectDataReduction::loadSettings()
-{  
-  // set values of m_dataDir and m_saveDir
+
+/**
+ * Read Qt settings for the interface.
+ */
+void IndirectDataReduction::readSettings()
+{
+  // Set values of m_dataDir and m_saveDir
   m_dataDir = QString::fromStdString(Mantid::Kernel::ConfigService::Instance().getString("datasearch.directories"));
-  m_dataDir.replace(" ","");
+  m_dataDir.replace(" ", "");
   if(m_dataDir.length() > 0)
     m_dataDir = m_dataDir.split(";", QString::SkipEmptyParts)[0];
   m_saveDir = QString::fromStdString(Mantid::Kernel::ConfigService::Instance().getString("defaultsave.directory"));
-  
+
   QSettings settings;
+
   // Load settings for MWRunFile widgets
   settings.beginGroup(m_settingsGroup + "DataFiles");
   settings.setValue("last_directory", m_dataDir);
@@ -405,15 +438,70 @@ void IndirectDataReduction::loadSettings()
   m_uiForm.moment_dsInput->readSettings(settings.group());
   m_uiForm.sqw_dsSampleInput->readSettings(settings.group());
   settings.endGroup();
+
+  // Load the last used instrument
+  settings.beginGroup(m_settingsGroup);
+  QString instName = settings.value("instrument-name", "").toString();
+  settings.endGroup();
+
+  if(instName.isEmpty())
+    return;
+
+  int index = m_uiForm.cbInst->findText(instName);
+  if(index >= 0)
+    m_uiForm.cbInst->setCurrentIndex(index);
+}
+
+
+/**
+ * Save settings to a persistent storage.
+ */
+void IndirectDataReduction::saveSettings()
+{
+  QSettings settings;
+  settings.beginGroup(m_settingsGroup);
+  QString instrName;
+
+  instrName = m_uiForm.cbInst->currentText();
+
+  settings.setValue("instrument-name", instrName);
+  settings.endGroup();
+}
+
+
+/**
+ * Handles showing the manage directory dialog box.
+ */
+void IndirectDataReduction::openDirectoryDialog()
+{
+  MantidQt::API::ManageUserDirectories *ad = new MantidQt::API::ManageUserDirectories(this);
+  ad->show();
+  ad->setFocus();
 }
 
+
 /**
  * Slot to wrap the protected showInformationBox method defined
  * in UserSubWindow and provide access to composed tabs.
- * 
- * @param message :: The message to display in the message box
+ *
+ * @param message The message to display in the message box
  */
 void IndirectDataReduction::showMessageBox(const QString& message)
 {
   showInformationBox(message);
 }
+
+
+/**
+ * Slot to allow setting the state of the Run button.
+ *
+ * @param enabled If the button is clickable
+ * @param message Message shown on the button
+ * @param tooltip Tooltip shown when hovering over button
+ */
+void IndirectDataReduction::updateRunButton(bool enabled, QString message, QString tooltip)
+{
+  m_uiForm.pbRun->setEnabled(enabled);
+  m_uiForm.pbRun->setText(message);
+  m_uiForm.pbRun->setToolTip(tooltip);
+}
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDataReductionTab.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDataReductionTab.cpp
index d496b7ccaed7d51a7432b95013bc504ed7553f25..c079ecba2bdc348de303080df8d637817d0bd1d2 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDataReductionTab.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDataReductionTab.cpp
@@ -21,6 +21,7 @@ namespace CustomInterfaces
   IndirectDataReductionTab::IndirectDataReductionTab(Ui::IndirectDataReduction& uiForm, QObject* parent) : IndirectTab(parent),
       m_uiForm(uiForm)
   {
+    connect(m_batchAlgoRunner, SIGNAL(batchComplete(bool)), this, SLOT(tabExecutionComplete(bool)));
   }
 
   //----------------------------------------------------------------------------------------------
@@ -30,78 +31,54 @@ namespace CustomInterfaces
   {
   }
 
-  /**
-   * Loads an empty instrument into a workspace (__empty_INST) unless the workspace already exists.
-   *
-   * If an analyser and reflection are supplied then the corresponding IPF is also loaded.
-   *
-   * @param instrumentName Name of the instrument to load
-   * @param analyser Analyser being used (optional)
-   * @param reflection Relection being used (optional)
-   * @returns Pointer to instrument workspace
-   */
-  Mantid::API::MatrixWorkspace_sptr IndirectDataReductionTab::loadInstrumentIfNotExist(std::string instrumentName,
-      std::string analyser, std::string reflection)
+  void IndirectDataReductionTab::runTab()
   {
-    std::string instWorkspaceName = "__empty_" + instrumentName;
-    std::string idfDirectory = Mantid::Kernel::ConfigService::Instance().getString("instrumentDefinition.directory");
-
-    // If the workspace does not exist in ADS then load an ampty instrument
-    if(AnalysisDataService::Instance().doesExist(instWorkspaceName))
+    if(validate())
     {
-      std::string parameterFilename = idfDirectory + instrumentName + "_Definition.xml";
-      IAlgorithm_sptr loadAlg = AlgorithmManager::Instance().create("LoadEmptyInstrument");
-      loadAlg->initialize();
-      loadAlg->setProperty("Filename", parameterFilename);
-      loadAlg->setProperty("OutputWorkspace", instWorkspaceName);
-      loadAlg->execute();
+      m_tabRunning = true;
+      emit updateRunButton(false, "Running...", "Running data reduction...");
+      run();
     }
-
-    // Load the IPF if given an analyser and reflection
-    if(!analyser.empty() && !reflection.empty())
+    else
     {
-      std::string ipfFilename = idfDirectory + instrumentName + "_" + analyser + "_" + reflection + "_Parameters.xml";
-      IAlgorithm_sptr loadParamAlg = AlgorithmManager::Instance().create("LoadParameterFile");
-      loadParamAlg->initialize();
-      loadParamAlg->setProperty("Filename", ipfFilename);
-      loadParamAlg->setProperty("Workspace", instWorkspaceName);
-      loadParamAlg->execute();
+      g_log.warning("Failed to validate indirect tab input!");
     }
-
-    // Get the workspace, which should exist now
-    MatrixWorkspace_sptr instWorkspace = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(instWorkspaceName);
-
-    return instWorkspace;
   }
 
   /**
-   * Gets the operation modes for a given instrument as defined in it's parameter file.
+   * Slot used to update the run button when an algorithm that was strted by the Run button complete.
    *
-   * @param instrumentName The name of an indirect instrument (IRIS, OSIRIS, TOSCA, VESUVIO)
-   * @returns A list of analysers and a vector of reflections that can be used with each
+   * @param error Unused
    */
-  std::vector<std::pair<std::string, std::vector<std::string> > > IndirectDataReductionTab::getInstrumentModes(std::string instrumentName)
+  void IndirectDataReductionTab::tabExecutionComplete(bool error)
   {
-    std::vector<std::pair<std::string, std::vector<std::string> > > modes;
-    MatrixWorkspace_sptr instWorkspace = loadInstrumentIfNotExist(instrumentName);
-    Instrument_const_sptr instrument = instWorkspace->getInstrument();
-
-    std::vector<std::string> analysers;
-    boost::split(analysers, instrument->getStringParameter("analysers")[0], boost::is_any_of(","));
-
-    for(auto it = analysers.begin(); it != analysers.end(); ++it)
+    UNUSED_ARG(error);
+    if(m_tabRunning)
     {
-      std::string analyser = *it;
-      std::string ipfReflections = instrument->getStringParameter("refl-" + analyser)[0];
+      m_tabRunning = false;
+      emit updateRunButton();
+    }
+  }
 
-      std::vector<std::string> reflections;
-      boost::split(reflections, ipfReflections, boost::is_any_of(","), boost::token_compress_on);
+  /**
+   * Loads an empty instrument into a workspace (__empty_INST) unless the workspace already exists.
+   *
+   * If an analyser and reflection are supplied then the corresponding IPF is also loaded.
+   *
+   * @param instrumentName Name of the instrument to load
+   * @param analyser Analyser being used (optional)
+   * @param reflection Relection being used (optional)
+   * @returns Pointer to instrument workspace
+   */
+  Mantid::API::MatrixWorkspace_sptr IndirectDataReductionTab::loadInstrumentIfNotExist(std::string instrumentName,
+      std::string analyser, std::string reflection)
+  {
+    IndirectDataReduction* parentIDR = dynamic_cast<IndirectDataReduction*>(m_parentWidget);
 
-      std::pair<std::string, std::vector<std::string> > data(analyser, reflections);
-      modes.push_back(data);
-    }
+    if(parentIDR == NULL)
+      throw std::runtime_error("IndirectDataReductionTab must be a child of IndirectDataReduction");
 
-    return modes;
+    return parentIDR->loadInstrumentIfNotExist(instrumentName, analyser, reflection);
   }
 
   /**
@@ -118,6 +95,10 @@ namespace CustomInterfaces
     std::string analyser = m_uiForm.cbAnalyser->currentText().toStdString();
     std::string reflection = m_uiForm.cbReflection->currentText().toStdString();
 
+    instDetails["instrument"] = QString::fromStdString(instrumentName);
+    instDetails["analyser"] = QString::fromStdString(analyser);
+    instDetails["reflection"] = QString::fromStdString(reflection);
+
     // List of values to get from IPF
     std::vector<std::string> ipfElements;
     ipfElements.push_back("analysis-type");
@@ -133,8 +114,17 @@ namespace CustomInterfaces
     // Get the instrument workspace
     MatrixWorkspace_sptr instWorkspace = loadInstrumentIfNotExist(instrumentName, analyser, reflection);
 
+    // In the IRIS IPF there is no fmica component
+    if(instrumentName == "IRIS" && analyser == "fmica")
+      analyser = "mica";
+
     // Get the instrument
-    Instrument_const_sptr instrument = instWorkspace->getInstrument();
+    auto instrument = instWorkspace->getInstrument();
+    if(instrument == NULL)
+      return instDetails;
+
+    // Get the analyser component
+    auto component = instrument->getComponentByName(analyser);
 
     // For each parameter we want to get
     for(auto it = ipfElements.begin(); it != ipfElements.end(); ++it)
@@ -142,16 +132,11 @@ namespace CustomInterfaces
       try
       {
         std::string key = *it;
-        QString value;
-
-        // Determint it's type and call the corresponding get function
-        std::string paramType = instrument->getParameterType(key);
 
-        if(paramType == "string")
-          value = QString::fromStdString(instrument->getStringParameter(key)[0]);
+        QString value = getInstrumentParameterFrom(instrument, key);
 
-        if(paramType == "double")
-          value = QString::number(instrument->getNumberParameter(key)[0]);
+        if(value.isEmpty() && component != NULL)
+          QString value = getInstrumentParameterFrom(component, key);
 
         instDetails[QString::fromStdString(key)] = value;
       }
@@ -166,5 +151,132 @@ namespace CustomInterfaces
     return instDetails;
   }
 
+  QString IndirectDataReductionTab::getInstrumentParameterFrom(Mantid::Geometry::IComponent_const_sptr comp, std::string param)
+  {
+    QString value;
+
+    if(!comp->hasParameter(param))
+      return "";
+
+    // Determine it's type and call the corresponding get function
+    std::string paramType = comp->getParameterType(param);
+
+    if(paramType == "string")
+      value = QString::fromStdString(comp->getStringParameter(param)[0]);
+
+    if(paramType == "double")
+      value = QString::number(comp->getNumberParameter(param)[0]);
+
+    return value;
+  }
+
+  /**
+   * Gets default peak and background ranges for an instrument in time of flight.
+   *
+   * @param instName Name of instrument
+   * @param analyser Analyser component
+   * @param reflection Reflection used
+   *
+   * @returns A map of range ID to value
+   */
+  std::map<std::string, double> IndirectDataReductionTab::getRangesFromInstrument(
+      QString instName, QString analyser, QString reflection)
+  {
+    // Get any unset parameters
+    if(instName.isEmpty())
+      instName = m_uiForm.cbInst->currentText();
+    if(analyser.isEmpty())
+      analyser = m_uiForm.cbAnalyser->currentText();
+    if(reflection.isEmpty())
+      reflection = m_uiForm.cbReflection->currentText();
+
+    std::map<std::string, double> ranges;
+
+    // Get the instrument
+    auto instWs = loadInstrumentIfNotExist(instName.toStdString(), analyser.toStdString(), reflection.toStdString());
+    auto inst = instWs->getInstrument();
+
+    // Get the analyser component
+    auto comp = inst->getComponentByName(analyser.toStdString());
+    if(!comp)
+      return ranges;
+
+    // Get the resolution of the analyser
+    auto resParams = comp->getNumberParameter("resolution", true);
+    if(resParams.size() < 1)
+      return ranges;
+    double resolution = resParams[0];
+
+    std::vector<double> x;
+    x.push_back(-6 * resolution);
+    x.push_back(-5 * resolution);
+    x.push_back(-2 * resolution);
+    x.push_back(0);
+    x.push_back(2 * resolution);
+    std::vector<double> y;
+    y.push_back(1);
+    y.push_back(2);
+    y.push_back(3);
+    y.push_back(4);
+    std::vector<double> e(4, 0);
+
+    IAlgorithm_sptr createWsAlg = AlgorithmManager::Instance().create("CreateWorkspace");
+    createWsAlg->initialize();
+    createWsAlg->setProperty("OutputWorkspace", "__energy");
+    createWsAlg->setProperty("DataX", x);
+    createWsAlg->setProperty("DataY", y);
+    createWsAlg->setProperty("DataE", e);
+    createWsAlg->setProperty("Nspec", 1);
+    createWsAlg->setProperty("UnitX", "DeltaE");
+    createWsAlg->execute();
+
+    IAlgorithm_sptr convertHistAlg = AlgorithmManager::Instance().create("ConvertToHistogram");
+    convertHistAlg->initialize();
+    convertHistAlg->setProperty("InputWorkspace", "__energy");
+    convertHistAlg->setProperty("OutputWorkspace", "__energy");
+    convertHistAlg->execute();
+
+    IAlgorithm_sptr loadInstAlg = AlgorithmManager::Instance().create("LoadInstrument");
+    loadInstAlg->initialize();
+    loadInstAlg->setProperty("Workspace", "__energy");
+    loadInstAlg->setProperty("InstrumentName", instName.toStdString());
+    loadInstAlg->execute();
+
+    QString ipfFilename = instName + "_" + analyser + "_" + reflection + "_Parameters.xml";
+
+    IAlgorithm_sptr loadParamAlg = AlgorithmManager::Instance().create("LoadParameterFile");
+    loadParamAlg->initialize();
+    loadParamAlg->setProperty("Workspace", "__energy");
+    loadParamAlg->setProperty("Filename", ipfFilename.toStdString());
+    loadParamAlg->execute();
+
+    auto energyWs = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("__energy");
+    double efixed = energyWs->getInstrument()->getNumberParameter("efixed-val")[0];
+
+    auto spectrum = energyWs->getSpectrum(0);
+    spectrum->setSpectrumNo(3);
+    spectrum->clearDetectorIDs();
+    spectrum->addDetectorID(3);
+
+    IAlgorithm_sptr convUnitsAlg = AlgorithmManager::Instance().create("ConvertUnits");
+    convUnitsAlg->initialize();
+    convUnitsAlg->setProperty("InputWorkspace", "__energy");
+    convUnitsAlg->setProperty("OutputWorkspace", "__tof");
+    convUnitsAlg->setProperty("Target", "TOF");
+    convUnitsAlg->setProperty("EMode", "Indirect");
+    convUnitsAlg->setProperty("EFixed", efixed);
+    convUnitsAlg->execute();
+
+    auto tofWs = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("__tof");
+
+    std::vector<double> tofData = tofWs->readX(0);
+    ranges["peak-start-tof"] = tofData[0];
+    ranges["peak-end-tof"] = tofData[2];
+    ranges["back-start-tof"] = tofData[3];
+    ranges["back-end-tof"] = tofData[4];
+
+    return ranges;
+  }
+
 } // namespace CustomInterfaces
 } // namespace Mantid
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDiagnostics.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDiagnostics.cpp
index 41bc3b838bca4473721afa6e02bedcc57c09dc95..e1ac3785e73fdfb109cf3da432b3d4cfc0a6a398 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDiagnostics.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDiagnostics.cpp
@@ -21,7 +21,7 @@ namespace CustomInterfaces
   /** Constructor
    */
   IndirectDiagnostics::IndirectDiagnostics(Ui::IndirectDataReduction& uiForm, QWidget * parent) :
-      IndirectDataReductionTab(uiForm, parent)
+      IndirectDataReductionTab(uiForm, parent), m_lastDiagFilename("")
   {
     // Property Tree
     m_propTrees["SlicePropTree"] = new QtTreePropertyBrowser();
@@ -65,7 +65,6 @@ namespace CustomInterfaces
 
     // Slice plot
     m_plots["SlicePlot"] = new QwtPlot(m_parentWidget);
-    m_curves["SlicePlot"] = new QwtPlotCurve();
     m_rangeSelectors["SlicePeak"] = new MantidWidgets::RangeSelector(m_plots["SlicePlot"]);
     m_rangeSelectors["SliceBackground"] = new MantidWidgets::RangeSelector(m_plots["SlicePlot"]);
 
@@ -81,23 +80,42 @@ namespace CustomInterfaces
     // Refresh the plot window
     m_plots["SlicePlot"]->replot();
 
+    // Preview plot
+    m_plots["SlicePreviewPlot"] = new QwtPlot(m_parentWidget);
+    m_plots["SlicePreviewPlot"]->setAxisFont(QwtPlot::xBottom, parent->font());
+    m_plots["SlicePreviewPlot"]->setAxisFont(QwtPlot::yLeft, parent->font());
+    m_plots["SlicePreviewPlot"]->setCanvasBackground(Qt::white);
+    m_uiForm.slice_plotPreview->addWidget(m_plots["SlicePreviewPlot"]);
+    m_plots["SlicePreviewPlot"]->replot();
+
     // SIGNAL/SLOT CONNECTIONS
-    /* connect(m_rangeSelectors["SlicePeak"], SIGNAL(rangeChanged(double, double)), m_rangeSelectors["SliceBackground"], SLOT(setRange(double, double))); */
+
+    // Update instrument information when a new instrument config is selected
+    connect(this, SIGNAL(newInstrumentConfiguration()), this, SLOT(setDefaultInstDetails()));
 
     // Update properties when a range selector is changed
-    connect(m_rangeSelectors["SlicePeak"], SIGNAL(minValueChanged(double)), this, SLOT(sliceMinChanged(double)));
-    connect(m_rangeSelectors["SlicePeak"], SIGNAL(maxValueChanged(double)), this, SLOT(sliceMaxChanged(double)));
-    connect(m_rangeSelectors["SliceBackground"], SIGNAL(minValueChanged(double)), this, SLOT(sliceMinChanged(double)));
-    connect(m_rangeSelectors["SliceBackground"], SIGNAL(maxValueChanged(double)), this, SLOT(sliceMaxChanged(double)));
-    // Update range seelctors when a property is changed
+    connect(m_rangeSelectors["SlicePeak"], SIGNAL(selectionChangedLazy(double, double)), this, SLOT(rangeSelectorDropped(double, double)));
+    connect(m_rangeSelectors["SliceBackground"], SIGNAL(selectionChangedLazy(double, double)), this, SLOT(rangeSelectorDropped(double, double)));
+
+    // Update range selctors when a property is changed
     connect(m_dblManager, SIGNAL(valueChanged(QtProperty*, double)), this, SLOT(sliceUpdateRS(QtProperty*, double)));
     // Enable/disable second range options when checkbox is toggled
     connect(m_blnManager, SIGNAL(valueChanged(QtProperty*, bool)), this, SLOT(sliceTwoRanges(QtProperty*, bool)));
-    // Plot slice miniplot when file has finished loading
-    connect(m_uiForm.slice_inputFile, SIGNAL(filesFound()), this, SLOT(slicePlotRaw()));
     // Enables/disables calibration file selection when user toggles Use Calibratin File checkbox
     connect(m_uiForm.slice_ckUseCalib, SIGNAL(toggled(bool)), this, SLOT(sliceCalib(bool)));
 
+    // Plot slice miniplot when file has finished loading
+    connect(m_uiForm.slice_inputFile, SIGNAL(filesFound()), this, SLOT(slicePlotRaw()));
+    // Shows message on run buton when user is inputting a run number
+    connect(m_uiForm.slice_inputFile, SIGNAL(fileTextChanged(const QString &)), this, SLOT(pbRunEditing()));
+    // Shows message on run button when Mantid is finding the file for a given run number
+    connect(m_uiForm.slice_inputFile, SIGNAL(findingFiles()), this, SLOT(pbRunFinding()));
+    // Reverts run button back to normal when file finding has finished
+    connect(m_uiForm.slice_inputFile, SIGNAL(fileFindingFinished()), this, SLOT(pbRunFinished()));
+
+    // Update preview plot when slice algorithm completes
+    connect(m_batchAlgoRunner, SIGNAL(batchComplete(bool)), this, SLOT(sliceAlgDone(bool)));
+
     // Set default UI state
     sliceTwoRanges(0, false);
     m_uiForm.slice_ckUseCalib->setChecked(false);
@@ -209,7 +227,7 @@ namespace CustomInterfaces
     {
       setMiniPlotGuides("SlicePeak", m_properties["PeakStart"], m_properties["PeakEnd"],
           std::pair<double, double>(instDetails["peak-start"].toDouble(), instDetails["peak-end"].toDouble()));
-      setMiniPlotGuides("SliceBackground", m_properties["BackStart"], m_properties["BackEnd"],
+      setMiniPlotGuides("SliceBackground", m_properties["BackgroundStart"], m_properties["BackgroundEnd"],
           std::pair<double, double>(instDetails["back-start"].toDouble(), instDetails["back-end"].toDouble()));
     }
   }
@@ -219,15 +237,28 @@ namespace CustomInterfaces
    */
   void IndirectDiagnostics::slicePlotRaw()
   {
+    QString filename = m_uiForm.slice_inputFile->getFirstFilename();
+
+    // Only update if we have a different file
+    if(filename == m_lastDiagFilename)
+      return;
+
+    m_lastDiagFilename = filename;
+
+    disconnect(m_dblManager, SIGNAL(valueChanged(QtProperty*, double)), this, SLOT(updatePreviewPlot()));
+    disconnect(m_blnManager, SIGNAL(valueChanged(QtProperty*, bool)), this, SLOT(updatePreviewPlot()));
+
     setDefaultInstDetails();
 
     if ( m_uiForm.slice_inputFile->isValid() )
     {
-      QString filename = m_uiForm.slice_inputFile->getFirstFilename();
       QFileInfo fi(filename);
       QString wsname = fi.baseName();
 
-      if(!loadFile(filename, wsname, m_uiForm.leSpectraMin->text().toInt(), m_uiForm.leSpectraMax->text().toInt()))
+      int specMin = static_cast<int>(m_dblManager->value(m_properties["SpecMin"]));
+      int specMax = static_cast<int>(m_dblManager->value(m_properties["SpecMax"]));
+
+      if(!loadFile(filename, wsname, specMin, specMax))
       {
         emit showMessageBox("Unable to load file.\nCheck whether your file exists and matches the selected instrument in the EnergyTransfer tab.");
         return;
@@ -251,6 +282,11 @@ namespace CustomInterfaces
     {
       emit showMessageBox("Selected input files are invalid.");
     }
+
+    connect(m_dblManager, SIGNAL(valueChanged(QtProperty*, double)), this, SLOT(updatePreviewPlot()));
+    connect(m_blnManager, SIGNAL(valueChanged(QtProperty*, bool)), this, SLOT(updatePreviewPlot()));
+
+    updatePreviewPlot();
   }
 
   /**
@@ -273,34 +309,20 @@ namespace CustomInterfaces
     m_uiForm.slice_dsCalibFile->setEnabled(state);
   }
 
-  /**
-   * Handles the value of a range selector minimum value being changed
-   *
-   * @param val :: New minimum value
-   */
-  void IndirectDiagnostics::sliceMinChanged(double val)
+  void IndirectDiagnostics::rangeSelectorDropped(double min, double max)
   {
     MantidWidgets::RangeSelector* from = qobject_cast<MantidWidgets::RangeSelector*>(sender());
 
-    if ( from == m_rangeSelectors["SlicePeak"] )
-      m_dblManager->setValue(m_properties["PeakStart"], val);
-    else if ( from == m_rangeSelectors["SliceBackground"] )
-      m_dblManager->setValue(m_properties["BackgroundStart"], val);
-  }
-
-  /**
-   * Handles the value of a range selector maximum value being changed
-   *
-   * @param val :: New maximum value
-   */
-  void IndirectDiagnostics::sliceMaxChanged(double val)
-  {
-    MantidWidgets::RangeSelector* from = qobject_cast<MantidWidgets::RangeSelector*>(sender());
-
-    if ( from == m_rangeSelectors["SlicePeak"] )
-      m_dblManager->setValue(m_properties["PeakEnd"], val);
-    else if ( from == m_rangeSelectors["SliceBackground"] )
-      m_dblManager->setValue(m_properties["BackgroundEnd"], val);
+    if(from == m_rangeSelectors["SlicePeak"])
+    {
+      m_dblManager->setValue(m_properties["PeakStart"], min);
+      m_dblManager->setValue(m_properties["PeakEnd"], max);
+    }
+    else if(from == m_rangeSelectors["SliceBackground"])
+    {
+      m_dblManager->setValue(m_properties["BackgroundStart"], min);
+      m_dblManager->setValue(m_properties["BackgroundEnd"], max);
+    }
   }
 
   /**
@@ -317,5 +339,111 @@ namespace CustomInterfaces
     else if(prop == m_properties["BackgroundEnd"])    m_rangeSelectors["SliceBackground"]->setMaximum(val);
   }
 
+  /**
+   * Runs the slice algorithm with preview properties.
+   */
+  void IndirectDiagnostics::updatePreviewPlot()
+  {
+    QString suffix = "_" + m_uiForm.cbAnalyser->currentText() + m_uiForm.cbReflection->currentText() + "_slice";
+    QString filenames = m_uiForm.slice_inputFile->getFilenames().join("', r'");
+
+    std::vector<long> spectraRange;
+    spectraRange.push_back(static_cast<long>(m_dblManager->value(m_properties["SpecMin"])));
+    spectraRange.push_back(static_cast<long>(m_dblManager->value(m_properties["SpecMax"])));
+
+    std::vector<double> peakRange;
+    peakRange.push_back(m_dblManager->value(m_properties["PeakStart"]));
+    peakRange.push_back(m_dblManager->value(m_properties["PeakEnd"]));
+
+    IAlgorithm_sptr sliceAlg = AlgorithmManager::Instance().create("TimeSlice");
+    sliceAlg->initialize();
+
+    sliceAlg->setProperty("InputFiles", filenames.toStdString());
+    sliceAlg->setProperty("SpectraRange", spectraRange);
+    sliceAlg->setProperty("PeakRange", peakRange);
+    sliceAlg->setProperty("Verbose", m_uiForm.slice_ckVerbose->isChecked());
+    sliceAlg->setProperty("Plot", false);
+    sliceAlg->setProperty("Save", false);
+    sliceAlg->setProperty("OutputNameSuffix", suffix.toStdString());
+
+    if(m_uiForm.slice_ckUseCalib->isChecked())
+    {
+      QString calibWsName = m_uiForm.slice_dsCalibFile->getCurrentDataName();
+      sliceAlg->setProperty("CalibrationWorkspace", calibWsName.toStdString());
+    }
+
+    if(m_blnManager->value(m_properties["UseTwoRanges"]))
+    {
+      std::vector<double> backgroundRange;
+      backgroundRange.push_back(m_dblManager->value(m_properties["BackgroundStart"]));
+      backgroundRange.push_back(m_dblManager->value(m_properties["BackgroundEnd"]));
+      sliceAlg->setProperty("BackgroundRange", backgroundRange);
+    }
+
+    // Stop the algorithm conflicting with it's self if it is already running
+    if(m_batchAlgoRunner->queueLength() == 0)
+      runAlgorithm(sliceAlg);
+  }
+
+  /**
+   * Updates the preview plot when the algorithm is complete.
+   *
+   * @param error True if the algorithm was stopped due to error, false otherwise
+   */
+  void IndirectDiagnostics::sliceAlgDone(bool error)
+  {
+    if(error)
+      return;
+
+    QStringList filenames = m_uiForm.slice_inputFile->getFilenames();
+    if(filenames.size() < 1)
+      return;
+
+    QString filename = filenames[0].toLower();
+    QFileInfo rawFileInfo(filename);
+    QString wsName = rawFileInfo.baseName() + "_" + m_uiForm.cbAnalyser->currentText() + m_uiForm.cbReflection->currentText() + "_slice";
+
+    // Plot result spectrum
+    plotMiniPlot(wsName, 0, "SlicePreviewPlot", "SlicePreviewCurve");
+
+    // Set X range to data range
+    setXAxisToCurve("SlicePreviewPlot", "SlicePreviewCurve");
+    m_plots["SlicePreviewPlot"]->replot();
+  }
+
+  /**
+   * Called when a user starts to type / edit the runs to load.
+   */
+  void IndirectDiagnostics::pbRunEditing()
+  {
+    emit updateRunButton(false, "Editing...", "Run numbers are curently being edited.");
+  }
+
+  /**
+   * Called when the FileFinder starts finding the files.
+   */
+  void IndirectDiagnostics::pbRunFinding()
+  {
+    emit updateRunButton(false, "Finding files...", "Searchig for data files for the run numbers entered...");
+    m_uiForm.slice_inputFile->setEnabled(false);
+  }
+
+  /**
+   * Called when the FileFinder has finished finding the files.
+   */
+  void IndirectDiagnostics::pbRunFinished()
+  {
+    if(!m_uiForm.slice_inputFile->isValid())
+    {
+      emit updateRunButton(false, "Invalid Run(s)", "Cannot find data files for some of the run numbers enetered.");
+    }
+    else
+    {
+      emit updateRunButton();
+    }
+
+    m_uiForm.slice_inputFile->setEnabled(true);
+  }
+
 } // namespace CustomInterfaces
 } // namespace Mantid
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDiffractionReduction.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDiffractionReduction.cpp
index 45009aa6534662338952fbc8a4ab5e297689d646..e3c9a1c5a4068fe428ce67a0b061cb6a8fd40958 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDiffractionReduction.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectDiffractionReduction.cpp
@@ -4,12 +4,16 @@
 #include "MantidQtCustomInterfaces/IndirectDiffractionReduction.h"
 
 #include "MantidQtAPI/ManageUserDirectories.h"
+#include "MantidAPI/AlgorithmManager.h"
 #include "MantidKernel/Logger.h"
 #include "MantidKernel/MultiFileNameParser.h"
 
 #include <QDesktopServices>
 #include <QUrl>
 
+using namespace Mantid::API;
+using namespace Mantid::Geometry;
+
 //Add this class to the list of specialised dialogs in this namespace
 namespace MantidQt
 {
@@ -30,15 +34,22 @@ namespace // anon
 
 DECLARE_SUBWINDOW(IndirectDiffractionReduction);
 
+using namespace Mantid::API;
 using namespace MantidQt::CustomInterfaces;
 
+using MantidQt::API::BatchAlgorithmRunner;
+
 //----------------------
 // Public member functions
 //----------------------
 ///Constructor
 IndirectDiffractionReduction::IndirectDiffractionReduction(QWidget *parent) :
-  UserSubWindow(parent), m_valInt(NULL), m_valDbl(NULL), m_settingsGroup("CustomInterfaces/DEMON")
+  UserSubWindow(parent), m_valInt(NULL), m_valDbl(NULL),
+  m_settingsGroup("CustomInterfaces/DEMON"),
+  m_batchAlgoRunner(new BatchAlgorithmRunner(parent))
 {
+  // Handles completion of the diffraction algorithm chain
+  connect(m_batchAlgoRunner, SIGNAL(batchComplete(bool)), this, SLOT(plotResults(bool)));
 }
 
 ///Destructor
@@ -47,208 +58,330 @@ IndirectDiffractionReduction::~IndirectDiffractionReduction()
   saveSettings();
 }
 
+/**
+ * Runs a diffraction reduction when the user clieks Run.
+ */
 void IndirectDiffractionReduction::demonRun()
 {
-  if ( !validateDemon() )
-  {
-    showInformationBox("Invalid invalid. Incorrect entries marked with red star.");
-    return;
-  }
-
-  QString instName=m_uiForm.cbInst->currentText();
+  QString instName = m_uiForm.cbInst->currentText();
   QString mode = m_uiForm.cbReflection->currentText();
-  if ( instName != "OSIRIS" || mode == "diffspec" )
-  {
-    // MSGDiffractionReduction
-    QString pfile = instName + "_diffraction_" + mode + "_Parameters.xml";
-    QString pyInput =
-      "from IndirectDiffractionReduction import MSGDiffractionReducer\n"
-      "reducer = MSGDiffractionReducer()\n"
-      "reducer.set_instrument_name('" + instName + "')\n"
-      "reducer.set_detector_range("+m_uiForm.set_leSpecMin->text()+"-1, " +m_uiForm.set_leSpecMax->text()+"-1)\n"
-      "reducer.set_parameter_file('" + pfile + "')\n"
-      "files = [r'" + m_uiForm.dem_rawFiles->getFilenames().join("',r'") + "']\n"
-      "for file in files:\n"
-      "    reducer.append_data_file(file)\n";
-    // Fix Vesuvio to FoilOut for now
-    if(instName == "VESUVIO")
-      pyInput += "reducer.append_load_option('Mode','FoilOut')\n";
-        
-    if ( m_uiForm.dem_ckSumFiles->isChecked() )
-    {
-      pyInput += "reducer.set_sum_files(True)\n";
-    }
 
-    pyInput += "formats = []\n";
-    if ( m_uiForm.ckGSS->isChecked() ) pyInput += "formats.append('gss')\n";
-    if ( m_uiForm.ckNexus->isChecked() ) pyInput += "formats.append('nxs')\n";
-    if ( m_uiForm.ckAscii->isChecked() ) pyInput += "formats.append('ascii')\n";
-
-    QString rebin = m_uiForm.leRebinStart->text() + "," + m_uiForm.leRebinWidth->text() 
-      + "," + m_uiForm.leRebinEnd->text();
-    if ( rebin != ",," )
-    {
-      pyInput += "reducer.set_rebin_string('" + rebin +"')\n";
-    }
-
-    pyInput += "reducer.set_save_formats(formats)\n";
-    pyInput +=
-      "reducer.reduce()\n";
-
-    if ( m_uiForm.cbPlotType->currentText() == "Spectra" )
+  if(instName == "OSIRIS" && mode == "diffonly")
+  {
+    if(!m_uiForm.dem_rawFiles->isValid() || !validateVanCal())
     {
-      pyInput += "wslist = reducer.get_result_workspaces()\n"
-        "from mantidplot import *\n"
-        "plotSpectrum(wslist, 0)\n";
+      showInformationBox("Invalid input.\nIncorrect entries marked with red star.");
+      return;
     }
 
-    QString pyOutput = runPythonCode(pyInput).trimmed();
+    runOSIRISdiffonlyReduction();
   }
   else
   {
-    // Get the files names from MWRunFiles widget, and convert them from Qt forms into stl equivalents.
-    QStringList fileNames = m_uiForm.dem_rawFiles->getFilenames();
-    std::vector<std::string> stlFileNames;
-    stlFileNames.reserve(fileNames.size());
-    std::transform(fileNames.begin(),fileNames.end(),std::back_inserter(stlFileNames), toStdString);
-
-    // Use the file names to suggest a workspace name to use.  Report to logger and stop if unable to parse correctly.
-    QString drangeWsName;
-    QString tofWsName;
-    try
+    if(!m_uiForm.dem_rawFiles->isValid() || !validateRebin())
     {
-      QString nameBase = QString::fromStdString(Mantid::Kernel::MultiFileNameParsing::suggestWorkspaceName(stlFileNames));
-      tofWsName = "'" + nameBase + "_tof'";
-      drangeWsName = "'" + nameBase + "_dRange'";
-    }
-    catch(std::runtime_error & re)
-    {
-      g_log.error(re.what());
+      showInformationBox("Invalid input.\nIncorrect entries marked with red star.");
       return;
     }
 
-    QString pyInput = 
-      "from mantid.simpleapi import *\n"
-      "OSIRISDiffractionReduction("
-      "Sample=r'" + m_uiForm.dem_rawFiles->getFilenames().join(", ") + "', "
-      "Vanadium=r'" + m_uiForm.dem_vanadiumFile->getFilenames().join(", ") + "', "
-      "CalFile=r'" + m_uiForm.dem_calFile->getFirstFilename() + "', "
-      "OutputWorkspace=" + drangeWsName + ")\n";
-
-    pyInput += "ConvertUnits(InputWorkspace=" + drangeWsName + ", OutputWorkspace=" + tofWsName + ", Target='TOF')\n";
-    
-    if ( m_uiForm.ckGSS->isChecked() )
-    {
-      pyInput += "SaveGSS(InputWorkspace=" + tofWsName + ", Filename=" + tofWsName + " + '.gss')\n";
-    }
+    runGenericReduction(instName, mode);
+  }
+}
+
+/**
+ * Handles plotting result spectra from algorithm chains.
+ *
+ * @param error True if the chain was stopped due to error
+ */
+void IndirectDiffractionReduction::plotResults(bool error)
+{
+  // Nothing can be plotted
+  if(error)
+  {
+    showInformationBox("Error running diffraction reduction.\nSee Results Log for details.");
+    return;
+  }
 
-    if ( m_uiForm.ckNexus->isChecked() ) 
-      pyInput += "SaveNexusProcessed(InputWorkspace=" + drangeWsName + ", Filename=" + drangeWsName + "+'.nxs')\n";
+  QString instName = m_uiForm.cbInst->currentText();
+  QString mode = m_uiForm.cbReflection->currentText();
 
-    if ( m_uiForm.ckAscii->isChecked() ) 
-      pyInput += "SaveAscii(InputWorkspace=" + drangeWsName + ", Filename=" + drangeWsName + " +'.dat')\n";
+  QString plotType = m_uiForm.cbPlotType->currentText();
 
-    if ( m_uiForm.cbPlotType->currentText() == "Spectra" )
-    {
-      pyInput += "from mantidplot import *\n"
-        "plotSpectrum(" + drangeWsName + ", 0)\n"
-        "plotSpectrum(" + tofWsName + ", 0)\n";
-    }
+  QString pyInput = "from mantidplot import plotSpectrum, plot2D\n";
+
+  if(plotType == "Spectra" || plotType == "Both")
+  {
+    for(auto it = m_plotWorkspaces.begin(); it != m_plotWorkspaces.end(); ++it)
+      pyInput += "plotSpectrum('" + *it + "', 0)\n";
+  }
 
-    QString pyOutput = runPythonCode(pyInput).trimmed();
+  if(plotType == "Contour" || plotType == "Both")
+  {
+    for(auto it = m_plotWorkspaces.begin(); it != m_plotWorkspaces.end(); ++it)
+      pyInput += "plot2D('" + *it + "')\n";
   }
+
+  runPythonCode(pyInput);
 }
 
-void IndirectDiffractionReduction::instrumentSelected(int)
+/**
+ * Runs a diffraction reduction for any instrument in any mode.
+ *
+ * @param instName Name of the instrument
+ * @param mode Mode instrument is operating in (diffspec/diffonly)
+ */
+void IndirectDiffractionReduction::runGenericReduction(QString instName, QString mode)
 {
-  if ( ! m_uiForm.cbInst->isVisible() )
+  // Get rebin string
+  QString rebinStart = m_uiForm.leRebinStart->text();
+  QString rebinWidth = m_uiForm.leRebinWidth->text();
+  QString rebinEnd = m_uiForm.leRebinEnd->text();
+
+  QString rebin = "";
+  if(!rebinStart.isEmpty() && !rebinWidth.isEmpty() && !rebinEnd.isEmpty())
+      rebin = rebinStart + "," + rebinWidth + "," + rebinEnd;
+
+  bool individualGrouping = m_uiForm.ckIndividualGrouping->isChecked();
+
+  // Get detector range
+  std::vector<long> detRange;
+  detRange.push_back(m_uiForm.set_leSpecMin->text().toLong());
+  detRange.push_back(m_uiForm.set_leSpecMax->text().toLong());
+
+  // Get MSGDiffractionReduction algorithm instance
+  IAlgorithm_sptr msgDiffReduction = AlgorithmManager::Instance().create("MSGDiffractionReduction");
+  msgDiffReduction->initialize();
+
+  // Get save formats
+  std::vector<std::string> saveFormats;
+  if(m_uiForm.ckGSS->isChecked())   saveFormats.push_back("gss");
+  if(m_uiForm.ckNexus->isChecked()) saveFormats.push_back("nxs");
+  if(m_uiForm.ckAscii->isChecked()) saveFormats.push_back("ascii");
+
+  // Set algorithm properties
+  msgDiffReduction->setProperty("Instrument", instName.toStdString());
+  msgDiffReduction->setProperty("Mode", mode.toStdString());
+  msgDiffReduction->setProperty("SumFiles", m_uiForm.dem_ckSumFiles->isChecked());
+  msgDiffReduction->setProperty("InputFiles", m_uiForm.dem_rawFiles->getFilenames().join(",").toStdString());
+  msgDiffReduction->setProperty("DetectorRange", detRange);
+  msgDiffReduction->setProperty("RebinParam", rebin.toStdString());
+  msgDiffReduction->setProperty("IndividualGrouping", individualGrouping);
+  msgDiffReduction->setProperty("SaveFormats", saveFormats);
+  msgDiffReduction->setProperty("OutputWorkspaceGroup", "IndirectDiffraction_Workspaces");
+
+  m_batchAlgoRunner->addAlgorithm(msgDiffReduction);
+
+  m_plotWorkspaces.clear();
+  m_plotWorkspaces.push_back("IndirectDiffraction_Workspaces");
+
+  m_batchAlgoRunner->executeBatchAsync();
+}
+
+/**
+ * Runs a diffraction reduction for OSIRIS operating in diffonly mode using the OSIRISDiffractionReduction algorithm.
+ */
+void IndirectDiffractionReduction::runOSIRISdiffonlyReduction()
+{
+  // Get the files names from MWRunFiles widget, and convert them from Qt forms into stl equivalents.
+  QStringList fileNames = m_uiForm.dem_rawFiles->getFilenames();
+  std::vector<std::string> stlFileNames;
+  stlFileNames.reserve(fileNames.size());
+  std::transform(fileNames.begin(),fileNames.end(),std::back_inserter(stlFileNames), toStdString);
+
+  // Use the file names to suggest a workspace name to use.  Report to logger and stop if unable to parse correctly.
+  QString drangeWsName;
+  QString tofWsName;
+  try
+  {
+    QString nameBase = QString::fromStdString(Mantid::Kernel::MultiFileNameParsing::suggestWorkspaceName(stlFileNames));
+    tofWsName = "'" + nameBase + "_tof'";
+    drangeWsName = "'" + nameBase + "_dRange'";
+  }
+  catch(std::runtime_error & re)
   {
-    // If the interface is not shown, do not go looking for parameter files, etc.
+    g_log.error(re.what());
     return;
   }
 
-  m_uiForm.cbReflection->blockSignals(true);
-  m_uiForm.cbReflection->clear();
+  IAlgorithm_sptr osirisDiffReduction = AlgorithmManager::Instance().create("OSIRISDiffractionReduction");
+  osirisDiffReduction->initialize();
+  osirisDiffReduction->setProperty("Sample", m_uiForm.dem_rawFiles->getFilenames().join(",").toStdString());
+  osirisDiffReduction->setProperty("Vanadium", m_uiForm.dem_vanadiumFile->getFilenames().join(",").toStdString());
+  osirisDiffReduction->setProperty("CalFile", m_uiForm.dem_calFile->getFirstFilename().toStdString());
+  osirisDiffReduction->setProperty("OutputWorkspace", drangeWsName.toStdString());
+  m_batchAlgoRunner->addAlgorithm(osirisDiffReduction);
 
-  QString pyInput = 
-    "from IndirectEnergyConversion import getInstrumentDetails\n"
-    "print getInstrumentDetails('" + m_uiForm.cbInst->currentText() + "')\n";
+  BatchAlgorithmRunner::AlgorithmRuntimeProps inputFromReductionProps;
+  inputFromReductionProps["InputWorkspace"] = drangeWsName.toStdString();
 
-  QString pyOutput = runPythonCode(pyInput).trimmed();
+  IAlgorithm_sptr convertUnits = AlgorithmManager::Instance().create("ConvertUnits");
+  convertUnits->initialize();
+  convertUnits->setProperty("OutputWorkspace", tofWsName.toStdString());
+  convertUnits->setProperty("Target", "TOF");
+  m_batchAlgoRunner->addAlgorithm(convertUnits, inputFromReductionProps);
 
-  if(pyOutput.length() > 0)
-  {
-    QStringList analysers = pyOutput.split("\n", QString::SkipEmptyParts);
+  BatchAlgorithmRunner::AlgorithmRuntimeProps inputFromConvUnitsProps;
+  inputFromConvUnitsProps["InputWorkspace"] = tofWsName.toStdString();
 
-    for (int i = 0; i< analysers.count(); i++ )
-    {
-      QStringList analyser = analysers[i].split("-", QString::SkipEmptyParts);
-      if ( analyser[0] == "diffraction" && analyser.count() > 1)
-      {
-        QStringList reflections = analyser[1].split(",", QString::SkipEmptyParts);
-        for ( int j = 0; j < reflections.count(); j++ )
-        {
-          m_uiForm.cbReflection->addItem(reflections[j]);
-        }
-      }
-    }
+  if ( m_uiForm.ckGSS->isChecked() )
+  {
+    QString gssFilename = tofWsName + ".gss";
+    IAlgorithm_sptr saveGSS = AlgorithmManager::Instance().create("SaveGSS");
+    saveGSS->initialize();
+    saveGSS->setProperty("Filename", gssFilename.toStdString());
+    m_batchAlgoRunner->addAlgorithm(saveGSS, inputFromConvUnitsProps);
   }
 
-  reflectionSelected(m_uiForm.cbReflection->currentIndex());
-  m_uiForm.cbReflection->blockSignals(false);
+  if ( m_uiForm.ckNexus->isChecked() )
+  {
+    QString nexusFilename = drangeWsName + ".nxs";
+    IAlgorithm_sptr saveNexus = AlgorithmManager::Instance().create("SaveNexusProcessed");
+    saveNexus->initialize();
+    saveNexus->setProperty("Filename", nexusFilename.toStdString());
+    m_batchAlgoRunner->addAlgorithm(saveNexus, inputFromReductionProps);
+  }
 
-  // Disable summing file options for OSIRIS.
-  if ( m_uiForm.cbInst->currentText() != "OSIRIS" )
-    m_uiForm.dem_ckSumFiles->setEnabled(true);
-  else
+  if ( m_uiForm.ckAscii->isChecked() )
   {
-    m_uiForm.dem_ckSumFiles->setChecked(true);
-    m_uiForm.dem_ckSumFiles->setEnabled(false);
+    QString asciiFilename = drangeWsName + ".dat";
+    IAlgorithm_sptr saveASCII = AlgorithmManager::Instance().create("SaveAscii");
+    saveASCII->initialize();
+    saveASCII->setProperty("Filename", asciiFilename.toStdString());
+    m_batchAlgoRunner->addAlgorithm(saveASCII, inputFromReductionProps);
   }
 
+  m_plotWorkspaces.clear();
+  m_plotWorkspaces.push_back(tofWsName);
+  m_plotWorkspaces.push_back(drangeWsName);
+
+  m_batchAlgoRunner->executeBatchAsync();
 }
 
-void IndirectDiffractionReduction::reflectionSelected(int)
+/**
+ * Loads an empty instrument and returns a pointer to the workspace.
+ *
+ * Optionally loads an IPF if a reflection was provided.
+ *
+ * @param instrumentName Name of an inelastic indiretc instrument (IRIS, OSIRIN, TOSCA, VESUVIO)
+ * @param reflection Reflection mode to load parameters for (diffspec or diffonly)
+ */
+MatrixWorkspace_sptr IndirectDiffractionReduction::loadInstrument(std::string instrumentName, std::string reflection)
 {
-  QString pyInput =
-    "from IndirectEnergyConversion import getReflectionDetails\n"
-    "instrument = '" + m_uiForm.cbInst->currentText() + "'\n"
-    "reflection = '" + m_uiForm.cbReflection->currentText() + "'\n"
-    "print getReflectionDetails(instrument, 'diffraction', reflection)\n";
+  std::string instWorkspaceName = "__empty_" + instrumentName;
+  std::string idfPath = Mantid::Kernel::ConfigService::Instance().getString("instrumentDefinition.directory");
+
+  if(!AnalysisDataService::Instance().doesExist(instWorkspaceName))
+  {
+    std::string parameterFilename = idfPath + instrumentName + "_Definition.xml";
+    IAlgorithm_sptr loadAlg = AlgorithmManager::Instance().create("LoadEmptyInstrument");
+    loadAlg->initialize();
+    loadAlg->setProperty("Filename", parameterFilename);
+    loadAlg->setProperty("OutputWorkspace", instWorkspaceName);
+    loadAlg->execute();
+  }
 
-  QString pyOutput = runPythonCode(pyInput).trimmed();
-  QStringList values = pyOutput.split("\n", QString::SkipEmptyParts);
+  MatrixWorkspace_sptr instWorkspace = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(instWorkspaceName);
 
-  if ( values.count() < 3 )
+  // Load parameter file if a reflection was given
+  if(!reflection.empty())
   {
-    showInformationBox("Could not gather necessary data from parameter file.");
-    return;
+    std::string ipfFilename = idfPath + instrumentName + "_diffraction_" + reflection + "_Parameters.xml";
+    IAlgorithm_sptr loadParamAlg = AlgorithmManager::Instance().create("LoadParameterFile");
+    loadParamAlg->initialize();
+    loadParamAlg->setProperty("Filename", ipfFilename);
+    loadParamAlg->setProperty("Workspace", instWorkspaceName);
+    loadParamAlg->execute();
   }
-  else
+
+  return instWorkspace;
+}
+
+/**
+ * Handles loading an instrument and reflections when an instruiment is selected form the drop down.
+ */
+void IndirectDiffractionReduction::instrumentSelected(int)
+{
+  // If the interface is not shown, do not go looking for parameter files, etc.
+  if(!m_uiForm.cbInst->isVisible())
+    return;
+
+  std::string instrumentName = m_uiForm.cbInst->currentText().toStdString();
+  MatrixWorkspace_sptr instWorkspace = loadInstrument(instrumentName);
+  Instrument_const_sptr instrument = instWorkspace->getInstrument();
+
+  std::vector<std::string> analysers;
+  boost::split(analysers, instrument->getStringParameter("refl-diffraction")[0], boost::is_any_of(","));
+
+  m_uiForm.cbReflection->blockSignals(true);
+  m_uiForm.cbReflection->clear();
+
+  for(auto it = analysers.begin(); it != analysers.end(); ++it)
   {
-    QString analysisType = values[0];
-    m_uiForm.set_leSpecMin->setText(values[1]);
-    m_uiForm.set_leSpecMax->setText(values[2]);
+    std::string reflection = *it;
+    m_uiForm.cbReflection->addItem(QString::fromStdString(reflection));
   }
 
+  reflectionSelected(m_uiForm.cbReflection->currentIndex());
+  m_uiForm.cbReflection->blockSignals(false);
+}
+
+/**
+ * Handles setting default spectra range when a reflection is slected from the drop down.
+ */
+void IndirectDiffractionReduction::reflectionSelected(int)
+{
+  std::string instrumentName = m_uiForm.cbInst->currentText().toStdString();
+  std::string reflection = m_uiForm.cbReflection->currentText().toStdString();
+  MatrixWorkspace_sptr instWorkspace = loadInstrument(instrumentName, reflection);
+  Instrument_const_sptr instrument = instWorkspace->getInstrument();
+
+  // Get default spectra range
+  double specMin = instrument->getNumberParameter("spectra-min")[0];
+  double specMax = instrument->getNumberParameter("spectra-max")[0];
+
+  m_uiForm.set_leSpecMin->setText(QString::number(specMin));
+  m_uiForm.set_leSpecMax->setText(QString::number(specMax));
+
   // Determine whether we need vanadium input
-  pyInput = "from IndirectDiffractionReduction import getStringProperty\n"
-      "print getStringProperty('__empty_" + m_uiForm.cbInst->currentText() + "', 'Workflow.Diffraction.Correction')\n";
+  std::vector<std::string> correctionVector = instrument->getStringParameter("Workflow.Diffraction.Correction");
+  bool vanadiumNeeded = false;
+  if(correctionVector.size() > 0)
+    vanadiumNeeded = (correctionVector[0] == "Vanadium");
 
-  pyOutput = runPythonCode(pyInput).trimmed();
+  if(vanadiumNeeded)
+    m_uiForm.swVanadium->setCurrentIndex(0);
+  else
+    m_uiForm.swVanadium->setCurrentIndex(1);
 
-  if ( pyOutput == "Vanadium" )
+  // Hide options that the current instrument config cannot process
+  if(instrumentName == "OSIRIS" && reflection == "diffonly")
   {
-    m_uiForm.swVanadium->setCurrentIndex(0);
+    // Disable individual grouping
+    m_uiForm.ckIndividualGrouping->setToolTip("OSIRIS cannot group detectors individually in diffonly mode");
+    m_uiForm.ckIndividualGrouping->setEnabled(false);
+    m_uiForm.ckIndividualGrouping->setChecked(false);
+
+    // Disable sum files
+    m_uiForm.dem_ckSumFiles->setToolTip("OSIRIS cannot sum files in diffonly mode");
+    m_uiForm.dem_ckSumFiles->setEnabled(false);
+    m_uiForm.dem_ckSumFiles->setChecked(false);
   }
   else
   {
-    m_uiForm.swVanadium->setCurrentIndex(1);
-  }
-
+    // Re-enable sum files
+    m_uiForm.dem_ckSumFiles->setToolTip("");
+    m_uiForm.dem_ckSumFiles->setEnabled(true);
+    m_uiForm.dem_ckSumFiles->setChecked(true);
 
+    // Re-enable individual grouping
+    m_uiForm.ckIndividualGrouping->setToolTip("");
+    m_uiForm.ckIndividualGrouping->setEnabled(true);
+  }
 }
 
+/**
+ * Handles opening the directory manager window.
+ */
 void IndirectDiffractionReduction::openDirectoryDialog()
 {
   MantidQt::API::ManageUserDirectories *ad = new MantidQt::API::ManageUserDirectories(this);
@@ -256,12 +389,18 @@ void IndirectDiffractionReduction::openDirectoryDialog()
   ad->setFocus();
 }
 
+/**
+ * Handles the user clicking the help button.
+ */
 void IndirectDiffractionReduction::help()
 {
   QString url = "http://www.mantidproject.org/Indirect_Diffraction_Reduction";
   QDesktopServices::openUrl(QUrl(url));
 }
 
+/**
+ * Sets up UI components and Qt signal/slot connections.
+ */
 void IndirectDiffractionReduction::initLayout()
 {
   m_uiForm.setupUi(this);
@@ -272,7 +411,12 @@ void IndirectDiffractionReduction::initLayout()
 
   connect(m_uiForm.cbInst, SIGNAL(currentIndexChanged(int)), this, SLOT(instrumentSelected(int)));
   connect(m_uiForm.cbReflection, SIGNAL(currentIndexChanged(int)), this, SLOT(reflectionSelected(int)));
-  
+
+  // Update run button based on state of raw files field
+  connect(m_uiForm.dem_rawFiles, SIGNAL(fileTextChanged(const QString &)), this, SLOT(runFilesChanged()));
+  connect(m_uiForm.dem_rawFiles, SIGNAL(findingFiles()), this, SLOT(runFilesFinding()));
+  connect(m_uiForm.dem_rawFiles, SIGNAL(fileFindingFinished()), this, SLOT(runFilesFound()));
+
   m_valInt = new QIntValidator(this);
   m_valDbl = new QDoubleValidator(this);
 
@@ -283,9 +427,13 @@ void IndirectDiffractionReduction::initLayout()
   m_uiForm.leRebinWidth->setValidator(m_valDbl);
   m_uiForm.leRebinEnd->setValidator(m_valDbl);
 
+  // Update the list of plot options when individual grouping is toggled
+  connect(m_uiForm.ckIndividualGrouping, SIGNAL(stateChanged(int)), this, SLOT(individualGroupingToggled(int)));
+
   loadSettings();
 
-  validateDemon();
+  // Update invalid rebinning markers
+  validateRebin();
 }
 
 void IndirectDiffractionReduction::initLocalPython()
@@ -305,7 +453,6 @@ void IndirectDiffractionReduction::loadSettings()
   m_uiForm.dem_calFile->setUserInput(settings.value("last_cal_file").toString());
   m_uiForm.dem_vanadiumFile->setUserInput(settings.value("last_van_files").toString());
   settings.endGroup();
-  
 }
 
 void IndirectDiffractionReduction::saveSettings()
@@ -318,18 +465,20 @@ void IndirectDiffractionReduction::saveSettings()
   settings.endGroup();
 }
 
-bool IndirectDiffractionReduction::validateDemon()
+/**
+ * Validates the rebinning fields and updates invalid markers.
+ *
+ * @returns True if reinning options are valid, flase otherwise
+ */
+bool IndirectDiffractionReduction::validateRebin()
 {
-  bool rawValid = true;
-  if ( ! m_uiForm.dem_rawFiles->isValid() ) { rawValid = false; }
-
   QString rebStartTxt = m_uiForm.leRebinStart->text();
   QString rebStepTxt = m_uiForm.leRebinWidth->text();
   QString rebEndTxt = m_uiForm.leRebinEnd->text();
 
   bool rebinValid = true;
   // Need all or none
-  if(rebStartTxt.isEmpty() && rebStepTxt.isEmpty() && rebEndTxt.isEmpty() )
+  if(rebStartTxt.isEmpty() && rebStepTxt.isEmpty() && rebEndTxt.isEmpty())
   {
     rebinValid = true;
     m_uiForm.valRebinStart->setText("");
@@ -354,7 +503,7 @@ bool IndirectDiffractionReduction::validateDemon()
     CHECK_VALID(rebStepTxt,m_uiForm.valRebinWidth);
     CHECK_VALID(rebEndTxt,m_uiForm.valRebinEnd);
 
-    if(rebinValid && rebStartTxt.toDouble() > rebEndTxt.toDouble())
+    if(rebinValid && rebStartTxt.toDouble() >= rebEndTxt.toDouble())
     {
       rebinValid = false;
       m_uiForm.valRebinStart->setText("*");
@@ -362,7 +511,92 @@ bool IndirectDiffractionReduction::validateDemon()
     }
   }
 
-  return rawValid && rebinValid;
+  return rebinValid;
+}
+
+/**
+ * Checks to see if the vanadium and cal file fields are valid.
+ *
+ * @returns True fo vanadium and calibration files are valid, false otherwise
+ */
+bool IndirectDiffractionReduction::validateVanCal()
+{
+  if(!m_uiForm.dem_calFile->isValid())
+    return false;
+
+  if(!m_uiForm.dem_vanadiumFile->isValid())
+    return false;
+
+  return true;
+}
+
+/**
+ * Disables and shows message on run button indicating that run files have benn changed.
+ */
+void IndirectDiffractionReduction::runFilesChanged()
+{
+  m_uiForm.pbRun->setEnabled(false);
+  m_uiForm.pbRun->setText("Editing...");
+}
+
+/**
+ * Disables and shows message on run button to indicate searching for data files.
+ */
+void IndirectDiffractionReduction::runFilesFinding()
+{
+  m_uiForm.pbRun->setEnabled(false);
+  m_uiForm.pbRun->setText("Finding files...");
+}
+
+/**
+ * Updates run button with result of file search.
+ */
+void IndirectDiffractionReduction::runFilesFound()
+{
+  bool valid = m_uiForm.dem_rawFiles->isValid();
+  m_uiForm.pbRun->setEnabled(valid);
+
+  if(valid)
+    m_uiForm.pbRun->setText("Run");
+  else
+    m_uiForm.pbRun->setText("Invalid Run");
+
+  // Disable sum files if only one file is given
+  int fileCount = m_uiForm.dem_rawFiles->getFilenames().size();
+  if(fileCount < 2)
+    m_uiForm.dem_ckSumFiles->setChecked(false);
+}
+
+/**
+ * Handles the user toggling the individual grouping check box.
+ *
+ * @param state The selection state of the check box
+ */
+void IndirectDiffractionReduction::individualGroupingToggled(int state)
+{
+  int itemCount = m_uiForm.cbPlotType->count();
+
+  switch(state)
+  {
+    case Qt::Unchecked:
+      if(itemCount == 4)
+      {
+        m_uiForm.cbPlotType->removeItem(3);
+        m_uiForm.cbPlotType->removeItem(2);
+      }
+      break;
+
+    case Qt::Checked:
+      if(itemCount == 2)
+      {
+        m_uiForm.cbPlotType->insertItem(2, "Contour");
+        m_uiForm.cbPlotType->insertItem(3, "Both");
+      }
+      break;
+
+    default:
+      return;
+  }
 }
 
 }
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectMolDyn.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectMolDyn.cpp
index ceb7311b924264ce4a5624f51c3d0416a94cfb36..ffe02756868ad5842153d9ad81e01d27f47b6cd8 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectMolDyn.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectMolDyn.cpp
@@ -1,87 +1,98 @@
 #include "MantidQtCustomInterfaces/IndirectMolDyn.h"
 
+#include "MantidAPI/AlgorithmManager.h"
+
 #include <QFileInfo>
 #include <QString>
 
+using namespace Mantid::API;
+
 namespace MantidQt
 {
-	namespace CustomInterfaces
-	{
-		IndirectMolDyn::IndirectMolDyn(QWidget * parent) : 
-			IndirectSimulationTab(parent)
-		{
-			m_uiForm.setupUi(parent);
-		}
-
-		/**
-		 * Validate the form to check the program can be run
-		 * 
-		 * @return :: Whether the form was valid
-		 */
-		bool IndirectMolDyn::validate()
-		{
-			QString filename = m_uiForm.mwRun->getFirstFilename();
-			QFileInfo finfo(filename);
-			QString ext = finfo.extension().toLower();
-
-			if(ext != "dat" && ext != "cdl")
-			{
-				emit showMessageBox("File is not of expected type:\n File type must be .dat or .cdl");
-				return false;
-			} 
-
-			return true;
-		}
-
-		/**
-		 * Collect the settings on the GUI and build a python
-		 * script that runs IndirectMolDyn
-		 */
-		void IndirectMolDyn::run() 
-		{
-			QString verbose("False");
-			QString plot("False");
-			QString save("False");
-
-			QString filename = m_uiForm.mwRun->getFirstFilename();
-			QFileInfo finfo(filename);
-			QString ext = finfo.extension().toLower();
-
-			QString funcNames = m_uiForm.leFunctionNames->text();
-
-			//output options
-			if(m_uiForm.chkVerbose->isChecked()){ verbose = "True"; }
-			if(m_uiForm.chkSave->isChecked()){ save ="True"; }
-			plot = m_uiForm.cbPlot->currentText();
-
-
-			QString pyInput = 
-				"from IndirectMolDyn import ";
-
-			QString pyFunc("");
-			if(ext == "dat")
-			{
-				pyFunc = "MolDynText";
-				pyInput += pyFunc + "\n" + pyFunc + "('"+filename+"',"+verbose+",'"+plot+"',"+save+")";
-			}
-			else if (ext == "cdl")
-			{
-				pyFunc = "MolDynImport";
-				pyInput += pyFunc + "\n" + pyFunc + "('"+filename+"','"+funcNames+"',"+verbose+",'"+plot+"',"+save+")";
-			}
-
-			runPythonScript(pyInput);
-		}
-
-		/**
-		 * Set the data selectors to use the default save directory
-		 * when browsing for input files.
-		 *  
-		 * @param settings :: The settings to loading into the interface
-		 */
-		void IndirectMolDyn::loadSettings(const QSettings& settings)
-		{
-			m_uiForm.mwRun->readSettings(settings.group());
-		}
-	} // namespace CustomInterfaces
+  namespace CustomInterfaces
+  {
+    IndirectMolDyn::IndirectMolDyn(QWidget * parent) :
+      IndirectSimulationTab(parent)
+    {
+      m_uiForm.setupUi(parent);
+
+      connect(m_uiForm.ckCropEnergy, SIGNAL(toggled(bool)), m_uiForm.dspMaxEnergy, SLOT(setEnabled(bool)));
+      connect(m_uiForm.ckResolution, SIGNAL(toggled(bool)), m_uiForm.dsResolution, SLOT(setEnabled(bool)));
+    }
+
+    /**
+     * Validate the form to check the program can be run
+     *
+     * @return :: Whether the form was valid
+     */
+    bool IndirectMolDyn::validate()
+    {
+      QString filename = m_uiForm.mwRun->getFirstFilename();
+      QFileInfo finfo(filename);
+      QString ext = finfo.extension().toLower();
+
+      if(ext != "dat" && ext != "cdl")
+      {
+        emit showMessageBox("File is not of expected type.\n File type must be .dat or .cdl");
+        return false;
+      }
+
+      QString functions = m_uiForm.leFunctionNames->text();
+      if(ext == "cdl" && functions.isEmpty())
+      {
+        emit showMessageBox("Must specify at least one function when loading CDL file.");
+        return false;
+      }
+
+      if(m_uiForm.ckResolution->isChecked() && !m_uiForm.dsResolution->isValid())
+      {
+        emit showMessageBox("Invalid resolution file.");
+        return false;
+      }
+
+      return true;
+    }
+
+    /**
+     * Collect the settings on the GUI and run the MolDyn algorithm.
+     */
+    void IndirectMolDyn::run()
+    {
+      // Get filename and base filename (for naming output workspace group)
+      QString filename = m_uiForm.mwRun->getFirstFilename();
+      QFileInfo fi(filename);
+      QString baseName = fi.baseName();
+
+      // Setup algorithm
+      IAlgorithm_sptr molDynAlg = AlgorithmManager::Instance().create("MolDyn");
+      molDynAlg->setProperty("Filename", filename.toStdString());
+      molDynAlg->setProperty("Functions", m_uiForm.leFunctionNames->text().toStdString());
+      molDynAlg->setProperty("Verbose", m_uiForm.ckVerbose->isChecked());
+      molDynAlg->setProperty("Save", m_uiForm.ckSave->isChecked());
+      molDynAlg->setProperty("Plot", m_uiForm.cbPlot->currentText().toStdString());
+      molDynAlg->setProperty("OutputWorkspace", baseName.toStdString());
+
+      // Set energy crop option
+      if(m_uiForm.ckCropEnergy->isChecked())
+        molDynAlg->setProperty("MaxEnergy", QString::number(m_uiForm.dspMaxEnergy->value()).toStdString());
+
+      // Set instrument resolution option
+      if(m_uiForm.ckResolution->isChecked())
+        molDynAlg->setProperty("Resolution", m_uiForm.dsResolution->getCurrentDataName().toStdString());
+
+      runAlgorithm(molDynAlg);
+    }
+
+    /**
+     * Set the data selectors to use the default save directory
+     * when browsing for input files.
+     *
+     * @param settings :: The settings to loading into the interface
+     */
+    void IndirectMolDyn::loadSettings(const QSettings& settings)
+    {
+      m_uiForm.mwRun->readSettings(settings.group());
+    }
+
+  } // namespace CustomInterfaces
 } // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSimulationTab.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSimulationTab.cpp
index ea5956931ece553c0cf5fdf9619ce7346ccd2be3..f76c10a40b0b047d9f66686740fe6f475c979468 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSimulationTab.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSimulationTab.cpp
@@ -1,6 +1,8 @@
 #include "MantidQtAPI/UserSubWindow.h"
 #include "MantidQtCustomInterfaces/IndirectSimulationTab.h"
 
+using namespace Mantid::API;
+
 namespace MantidQt
 {
 	namespace CustomInterfaces
@@ -9,9 +11,9 @@ namespace MantidQt
     //----------------------------------------------------------------------------------------------
     /** Constructor
      */
-    IndirectSimulationTab::IndirectSimulationTab(QWidget * parent) : QWidget(parent)
+    IndirectSimulationTab::IndirectSimulationTab(QWidget * parent) : QWidget(parent),
+      m_algoRunner(parent)
     {
-
     }
 
     //----------------------------------------------------------------------------------------------
@@ -41,5 +43,16 @@ namespace MantidQt
     {
       emit executePythonScript(pyInput, false);
     }
+
+    /**
+     * Runs an algorithm async from the UI thread.
+     *
+     * @param alg Configured algorithm to run
+     */
+    void IndirectSimulationTab::runAlgorithm(const IAlgorithm_sptr alg)
+    {
+      m_algoRunner.startAlgorithm(alg);
+    }
+
   }
 } // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSqw.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSqw.cpp
index c736b1a73397a511ae8fdd36556d9ccde7858c5d..22f772470c3bb474e414653b4b077570a273a89e 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSqw.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSqw.cpp
@@ -4,6 +4,9 @@
 
 #include <QFileInfo>
 
+using namespace Mantid::API;
+using MantidQt::API::BatchAlgorithmRunner;
+
 namespace MantidQt
 {
 namespace CustomInterfaces
@@ -14,184 +17,254 @@ namespace CustomInterfaces
   IndirectSqw::IndirectSqw(Ui::IndirectDataReduction& uiForm, QWidget * parent) :
       IndirectDataReductionTab(uiForm, parent)
   {
-    connect(m_uiForm.sqw_ckRebinE, SIGNAL(toggled(bool)), this, SLOT(sOfQwRebinE(bool)));
-    connect(m_uiForm.sqw_dsSampleInput, SIGNAL(loadClicked()), this, SLOT(sOfQwPlotInput()));
-
     m_uiForm.sqw_leELow->setValidator(m_valDbl);
     m_uiForm.sqw_leEWidth->setValidator(m_valDbl);
     m_uiForm.sqw_leEHigh->setValidator(m_valDbl);
     m_uiForm.sqw_leQLow->setValidator(m_valDbl);
     m_uiForm.sqw_leQWidth->setValidator(m_valDbl);
     m_uiForm.sqw_leQHigh->setValidator(m_valDbl);
+
+    connect(m_uiForm.sqw_ckRebinE, SIGNAL(toggled(bool)), this, SLOT(energyRebinToggle(bool)));
+    connect(m_uiForm.sqw_dsSampleInput, SIGNAL(loadClicked()), this, SLOT(plotContour()));
+
+    connect(m_batchAlgoRunner, SIGNAL(batchComplete(bool)), this, SLOT(sqwAlgDone(bool)));
   }
-    
+
   //----------------------------------------------------------------------------------------------
   /** Destructor
    */
   IndirectSqw::~IndirectSqw()
   {
   }
-  
+
   void IndirectSqw::setup()
   {
   }
 
-  void IndirectSqw::run()
+  bool IndirectSqw::validate()
   {
-    QString rebinString = m_uiForm.sqw_leQLow->text() + "," + m_uiForm.sqw_leQWidth->text() +
-      "," + m_uiForm.sqw_leQHigh->text();
-
-    QString wsname;
-    if(m_uiForm.sqw_dsSampleInput->isFileSelectorVisible())
-    {
-      // Load Nexus file into workspace
-      QString filename = m_uiForm.sqw_dsSampleInput->getFullFilePath();
-      QFileInfo fi(filename);
-      wsname = fi.baseName();
-
-      if(!loadFile(filename, wsname))
-      {
-        emit showMessageBox("Could not load Nexus file");
-      }
-    }
-    else
-    {
-      // Get the workspace
-      wsname = m_uiForm.sqw_dsSampleInput->getCurrentDataName();
-    }
-
-    QString pyInput = "from mantid.simpleapi import *\n";
+    bool valid = true;
 
-    // Create output name before rebinning
-    pyInput += "sqwInput = '" + wsname + "'\n";
-    pyInput += "sqwOutput = sqwInput[:-3] + 'sqw'\n";
+    UserInputValidator uiv;
+    uiv.checkDataSelectorIsValid("Sample", m_uiForm.sqw_dsSampleInput);
+    QString error = uiv.generateErrorMessage();
 
-    if ( m_uiForm.sqw_ckRebinE->isChecked() )
+    if(!error.isEmpty())
     {
-      QString eRebinString = m_uiForm.sqw_leELow->text() + "," + m_uiForm.sqw_leEWidth->text() +
-        "," + m_uiForm.sqw_leEHigh->text();
-
-      pyInput += "Rebin(InputWorkspace=sqwInput, OutputWorkspace=sqwInput+'_r', Params='" + eRebinString + "')\n"
-        "sqwInput += '_r'\n";
+      valid = false;
+      emit showMessageBox(error);
     }
 
-    pyInput +=
-      "efixed = " + m_uiForm.leEfixed->text() + "\n"
-      "rebin = '" + rebinString + "'\n";
+    if(m_uiForm.sqw_ckRebinE->isChecked() && !validateEnergyRebin())
+      valid = false;
 
-    QString rebinType = m_uiForm.sqw_cbRebinType->currentText();
-    if(rebinType == "Centre (SofQW)")
-      pyInput += "SofQW(InputWorkspace=sqwInput, OutputWorkspace=sqwOutput, QAxisBinning=rebin, EMode='Indirect', EFixed=efixed)\n";
-    else if(rebinType == "Parallelepiped (SofQW2)")
-      pyInput += "SofQW2(InputWorkspace=sqwInput, OutputWorkspace=sqwOutput, QAxisBinning=rebin, EMode='Indirect', EFixed=efixed)\n";
-    else if(rebinType == "Parallelepiped/Fractional Area (SofQW3)")
-      pyInput += "SofQW3(InputWorkspace=sqwInput, OutputWorkspace=sqwOutput, QAxisBinning=rebin, EMode='Indirect', EFixed=efixed)\n";
+    if(!validateQRebin())
+      valid = false;
 
-    pyInput += "AddSampleLog(Workspace=sqwOutput, LogName='rebin_type', LogType='String', LogText='"+rebinType+"')\n";
+    return valid;
+  }
 
-    if ( m_uiForm.sqw_ckSave->isChecked() )
-    {
-      pyInput += "SaveNexus(InputWorkspace=sqwOutput, Filename=sqwOutput+'.nxs')\n";
+  /**
+   * Validates the Q rebinning parameters.
+   *
+   * @returns If the rebinning is valid
+   */
+  bool IndirectSqw::validateQRebin()
+  {
+    bool valid = true;
 
-      if (m_uiForm.sqw_ckVerbose->isChecked())
-      {
-        pyInput += "logger.notice(\"Resolution file saved to default save directory.\")\n";
-      }
+    if ( m_uiForm.sqw_leQLow->text() == "" )
+    {
+      valid = false;
+      m_uiForm.sqw_valQLow->setText("*");
+    }
+    else
+    {
+      m_uiForm.sqw_valQLow->setText(" ");
     }
 
-    if ( m_uiForm.sqw_cbPlotType->currentText() == "Contour" )
+    if ( m_uiForm.sqw_leQWidth->text() == "" )
     {
-      pyInput += "importMatrixWorkspace(sqwOutput).plotGraph2D()\n";
+      valid = false;
+      m_uiForm.sqw_valQWidth->setText("*");
+    }
+    else
+    {
+      m_uiForm.sqw_valQWidth->setText(" ");
     }
 
-    else if ( m_uiForm.sqw_cbPlotType->currentText() == "Spectra" )
+    if ( m_uiForm.sqw_leQHigh->text() == "" )
     {
-      pyInput +=
-        "nspec = mtd[sqwOutput].getNumberHistograms()\n"
-        "plotSpectrum(sqwOutput, range(0, nspec))\n";
+      valid = false;
+      m_uiForm.sqw_valQHigh->setText("*");
+    }
+    else
+    {
+      m_uiForm.sqw_valQHigh->setText(" ");
     }
 
-    QString pyOutput = m_pythonRunner.runPythonCode(pyInput).trimmed();
+    return valid;
   }
 
-  bool IndirectSqw::validate()
+  /**
+   * Validates the energy rebinning parameters.
+   *
+   * @returns If the rebinning is valid
+   */
+  bool IndirectSqw::validateEnergyRebin()
   {
     bool valid = true;
 
-    UserInputValidator uiv;
-    uiv.checkDataSelectorIsValid("Sample", m_uiForm.sqw_dsSampleInput);
-    QString error = uiv.generateErrorMessage();
-
-    if (!error.isEmpty())
+    if ( m_uiForm.sqw_leELow->text() == "" )
     {
       valid = false;
-      emit showMessageBox(error);
+      m_uiForm.sqw_valELow->setText("*");
     }
-
-    if ( m_uiForm.sqw_ckRebinE->isChecked() )
+    else
     {
-      if ( m_uiForm.sqw_leELow->text() == "" )
-      {
-        valid = false;
-        m_uiForm.sqw_valELow->setText("*");
-      }
-      else
-      {
-        m_uiForm.sqw_valELow->setText(" ");
-      }
-
-      if ( m_uiForm.sqw_leEWidth->text() == "" )
-      {
-        valid = false;
-        m_uiForm.sqw_valEWidth->setText("*");
-      }
-      else
-      {
-        m_uiForm.sqw_valEWidth->setText(" ");
-      }
-
-      if ( m_uiForm.sqw_leEHigh->text() == "" )
-      {
-        valid = false;
-        m_uiForm.sqw_valEHigh->setText("*");
-      }
-      else
-      {
-        m_uiForm.sqw_valEHigh->setText(" ");
-      }
+      m_uiForm.sqw_valELow->setText(" ");
     }
 
-    if ( m_uiForm.sqw_leQLow->text() == "" )
+    if ( m_uiForm.sqw_leEWidth->text() == "" )
     {
       valid = false;
-      m_uiForm.sqw_valQLow->setText("*");
+      m_uiForm.sqw_valEWidth->setText("*");
     }
     else
     {
-      m_uiForm.sqw_valQLow->setText(" ");
+      m_uiForm.sqw_valEWidth->setText(" ");
     }
 
-    if ( m_uiForm.sqw_leQWidth->text() == "" )
+    if ( m_uiForm.sqw_leEHigh->text() == "" )
     {
       valid = false;
-      m_uiForm.sqw_valQWidth->setText("*");
+      m_uiForm.sqw_valEHigh->setText("*");
     }
     else
     {
-      m_uiForm.sqw_valQWidth->setText(" ");
+      m_uiForm.sqw_valEHigh->setText(" ");
     }
 
-    if ( m_uiForm.sqw_leQHigh->text() == "" )
+    return valid;
+  }
+
+  void IndirectSqw::run()
+  {
+    QString sampleWsName = m_uiForm.sqw_dsSampleInput->getCurrentDataName();
+    QString sqwWsName = sampleWsName.left(sampleWsName.length() - 4) + "_sqw";
+    QString eRebinWsName = sampleWsName.left(sampleWsName.length() - 4) + "_r";
+
+    QString rebinString = m_uiForm.sqw_leQLow->text() + "," + m_uiForm.sqw_leQWidth->text() +
+      "," + m_uiForm.sqw_leQHigh->text();
+
+    // Rebin in energy
+    bool rebinInEnergy = m_uiForm.sqw_ckRebinE->isChecked();
+    if(rebinInEnergy)
     {
-      valid = false;
-      m_uiForm.sqw_valQHigh->setText("*");
+      QString eRebinString = m_uiForm.sqw_leELow->text() + "," + m_uiForm.sqw_leEWidth->text() +
+                             "," + m_uiForm.sqw_leEHigh->text();
+
+      IAlgorithm_sptr energyRebinAlg = AlgorithmManager::Instance().create("Rebin");
+      energyRebinAlg->initialize();
+
+      energyRebinAlg->setProperty("InputWorkspace", sampleWsName.toStdString());
+      energyRebinAlg->setProperty("OutputWorkspace", eRebinWsName.toStdString());
+      energyRebinAlg->setProperty("Params", eRebinString.toStdString());
+
+      m_batchAlgoRunner->addAlgorithm(energyRebinAlg);
     }
+
+    // Get correct S(Q, w) algorithm
+    QString eFixed = getInstrumentDetails()["efixed-val"];
+
+    IAlgorithm_sptr sqwAlg;
+    QString rebinType = m_uiForm.sqw_cbRebinType->currentText();
+
+    if(rebinType == "Centre (SofQW)")
+      sqwAlg = AlgorithmManager::Instance().create("SofQW");
+    else if(rebinType == "Parallelepiped (SofQW2)")
+      sqwAlg = AlgorithmManager::Instance().create("SofQW2");
+    else if(rebinType == "Parallelepiped/Fractional Area (SofQW3)")
+      sqwAlg = AlgorithmManager::Instance().create("SofQW3");
+
+    // S(Q, w) algorithm
+    sqwAlg->initialize();
+
+    BatchAlgorithmRunner::AlgorithmRuntimeProps sqwInputProps;
+    if(rebinInEnergy)
+      sqwInputProps["InputWorkspace"] = eRebinWsName.toStdString();
     else
+      sqwInputProps["InputWorkspace"] = sampleWsName.toStdString();
+
+    sqwAlg->setProperty("OutputWorkspace", sqwWsName.toStdString());
+    sqwAlg->setProperty("QAxisBinning", rebinString.toStdString());
+    sqwAlg->setProperty("EMode", "Indirect");
+    sqwAlg->setProperty("EFixed", eFixed.toStdString());
+
+    m_batchAlgoRunner->addAlgorithm(sqwAlg, sqwInputProps);
+
+    // Add sample log for S(Q, w) algorithm used
+    IAlgorithm_sptr sampleLogAlg = AlgorithmManager::Instance().create("AddSampleLog");
+    sampleLogAlg->initialize();
+
+    sampleLogAlg->setProperty("LogName", "rebin_type");
+    sampleLogAlg->setProperty("LogType", "String");
+    sampleLogAlg->setProperty("LogText", rebinType.toStdString());
+
+    BatchAlgorithmRunner::AlgorithmRuntimeProps inputToAddSampleLogProps;
+    inputToAddSampleLogProps["Workspace"] = sqwWsName.toStdString();
+
+    m_batchAlgoRunner->addAlgorithm(sampleLogAlg, inputToAddSampleLogProps);
+
+    // Save S(Q, w) workspace
+    if(m_uiForm.sqw_ckSave->isChecked())
     {
-      m_uiForm.sqw_valQHigh->setText(" ");
+      QString saveFilename = sqwWsName + ".nxs";
+
+      IAlgorithm_sptr saveNexusAlg = AlgorithmManager::Instance().create("SaveNexus");
+      saveNexusAlg->initialize();
+
+      saveNexusAlg->setProperty("Filename", saveFilename.toStdString());
+
+      BatchAlgorithmRunner::AlgorithmRuntimeProps inputToSaveNexusProps;
+      inputToSaveNexusProps["InputWorkspace"] = sqwWsName.toStdString();
+
+      m_batchAlgoRunner->addAlgorithm(saveNexusAlg, inputToSaveNexusProps);
     }
 
-    return valid;
+    m_batchAlgoRunner->executeBatch();
+  }
+
+  /**
+   * Handles plotting the S(Q, w) workspace when the algorithm chain is finished.
+   *
+   * @param error If the algorithm chain failed
+   */
+  void IndirectSqw::sqwAlgDone(bool error)
+  {
+    if(error)
+      return;
+
+    // Get the workspace name
+    QString sampleWsName = m_uiForm.sqw_dsSampleInput->getCurrentDataName();
+    QString sqwWsName = sampleWsName.left(sampleWsName.length() - 4) + "_sqw";
+
+    QString pyInput = "sqw_ws = '" + sqwWsName + "'\n";
+    QString plotType = m_uiForm.sqw_cbPlotType->currentText();
+
+    if(plotType == "Contour")
+    {
+      pyInput += "plot2D(sqw_ws)\n";
+    }
+
+    else if(plotType == "Spectra")
+    {
+      pyInput +=
+        "n_spec = mtd[sqw_ws].getNumberHistograms()\n"
+        "plotSpectrum(sqw_ws, range(0, n_spec))\n";
+    }
+
+    m_pythonRunner.runPythonCode(pyInput).trimmed();
   }
 
   /**
@@ -199,11 +272,14 @@ namespace CustomInterfaces
    *
    * @param state :: True to enable RiE UI, false to disable
    */
-  void IndirectSqw::sOfQwRebinE(bool state)
+  void IndirectSqw::energyRebinToggle(bool state)
   {
     QString val;
-    if ( state ) val = "*";
-    else val = " ";
+    if(state)
+      val = "*";
+    else
+      val = " ";
+
     m_uiForm.sqw_leELow->setEnabled(state);
     m_uiForm.sqw_leEWidth->setEnabled(state);
     m_uiForm.sqw_leEHigh->setEnabled(state);
@@ -223,32 +299,26 @@ namespace CustomInterfaces
    *
    * Creates a colour 2D plot of the data
    */
-  void IndirectSqw::sOfQwPlotInput()
+  void IndirectSqw::plotContour()
   {
-    QString pyInput = "from mantid.simpleapi import *\n"
-      "from mantidplot import *\n";
-
-    if (m_uiForm.sqw_dsSampleInput->isValid())
+    if(m_uiForm.sqw_dsSampleInput->isValid())
     {
-      if(m_uiForm.sqw_dsSampleInput->isFileSelectorVisible())
-      {
-        //Load file into workspacwe
-        pyInput += "filename = r'" + m_uiForm.sqw_dsSampleInput->getFullFilePath() + "'\n"
-          "(dir, file) = os.path.split(filename)\n"
-          "(sqwInput, ext) = os.path.splitext(file)\n"
-          "LoadNexus(Filename=filename, OutputWorkspace=sqwInput)\n";
-      }
-      else
-      {
-        //Use existing workspace
-        pyInput += "sqwInput = '" + m_uiForm.sqw_dsSampleInput->getCurrentDataName() + "'\n";
-      }
-
-      pyInput += "ConvertSpectrumAxis(InputWorkspace=sqwInput, OutputWorkspace=sqwInput[:-4]+'_rqw', Target='ElasticQ', EMode='Indirect')\n"
-        "ws = importMatrixWorkspace(sqwInput[:-4]+'_rqw')\n"
-        "ws.plotGraph2D()\n";
-
-      QString pyOutput = m_pythonRunner.runPythonCode(pyInput).trimmed();
+      QString sampleWsName = m_uiForm.sqw_dsSampleInput->getCurrentDataName();
+
+      QString convertedWsName = sampleWsName.left(sampleWsName.length() - 4) + "_rqw";
+
+      IAlgorithm_sptr convertSpecAlg = AlgorithmManager::Instance().create("ConvertSpectrumAxis");
+      convertSpecAlg->initialize();
+
+      convertSpecAlg->setProperty("InputWorkspace", sampleWsName.toStdString());
+      convertSpecAlg->setProperty("OutputWorkspace", convertedWsName.toStdString());
+      convertSpecAlg->setProperty("Target", "ElasticQ");
+      convertSpecAlg->setProperty("EMode", "Indirect");
+
+      convertSpecAlg->execute();
+
+      QString pyInput = "plot2D('" + convertedWsName + "')\n";
+      m_pythonRunner.runPythonCode(pyInput).trimmed();
     }
     else
     {
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSymmetrise.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSymmetrise.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6caef16805e20fc678cc6f1c974351ea13786de7
--- /dev/null
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSymmetrise.cpp
@@ -0,0 +1,520 @@
+#include "MantidQtCustomInterfaces/IndirectSymmetrise.h"
+
+#include "MantidAPI/MatrixWorkspace.h"
+#include "MantidAPI/ITableWorkspace.h"
+#include "MantidKernel/Logger.h"
+#include "MantidQtCustomInterfaces/UserInputValidator.h"
+
+#include <QFileInfo>
+
+namespace
+{
+  Mantid::Kernel::Logger g_log("IndirectSymmetrise");
+}
+
+using namespace Mantid::API;
+
+namespace MantidQt
+{
+namespace CustomInterfaces
+{
+  //----------------------------------------------------------------------------------------------
+  /** Constructor
+   */
+  IndirectSymmetrise::IndirectSymmetrise(Ui::IndirectDataReduction& uiForm, QWidget * parent) :
+      IndirectDataReductionTab(uiForm, parent)
+  {
+    int numDecimals = 6;
+
+    // Property Trees
+    m_propTrees["SymmPropTree"] = new QtTreePropertyBrowser();
+    m_uiForm.symm_properties->addWidget(m_propTrees["SymmPropTree"]);
+
+    m_propTrees["SymmPVPropTree"] = new QtTreePropertyBrowser();
+    m_uiForm.symm_previewProperties->addWidget(m_propTrees["SymmPVPropTree"]);
+
+    // Editor Factories
+    DoubleEditorFactory *doubleEditorFactory = new DoubleEditorFactory();
+    m_propTrees["SymmPropTree"]->setFactoryForManager(m_dblManager, doubleEditorFactory);
+
+    // Raw Properties
+    m_properties["EMin"] = m_dblManager->addProperty("EMin");
+    m_dblManager->setDecimals(m_properties["EMin"], numDecimals);
+    m_propTrees["SymmPropTree"]->addProperty(m_properties["EMin"]);
+    m_properties["EMax"] = m_dblManager->addProperty("EMax");
+    m_dblManager->setDecimals(m_properties["EMax"], numDecimals);
+    m_propTrees["SymmPropTree"]->addProperty(m_properties["EMax"]);
+
+    QtProperty* rawPlotProps = m_grpManager->addProperty("Raw Plot");
+    m_propTrees["SymmPropTree"]->addProperty(rawPlotProps);
+
+    m_properties["PreviewSpec"] = m_dblManager->addProperty("Spectrum No");
+    m_dblManager->setDecimals(m_properties["PreviewSpec"], 0);
+    rawPlotProps->addSubProperty(m_properties["PreviewSpec"]);
+
+    m_properties["PreviewRange"] = m_dblManager->addProperty("X Range");
+    rawPlotProps->addSubProperty(m_properties["PreviewRange"]);
+
+    // Preview Properties
+    // Mainly used for display rather than getting user input
+    m_properties["NegativeYValue"] = m_dblManager->addProperty("Negative Y");
+    m_dblManager->setDecimals(m_properties["NegativeYValue"], numDecimals);
+    m_propTrees["SymmPVPropTree"]->addProperty(m_properties["NegativeYValue"]);
+
+    m_properties["PositiveYValue"] = m_dblManager->addProperty("Positive Y");
+    m_dblManager->setDecimals(m_properties["PositiveYValue"], numDecimals);
+    m_propTrees["SymmPVPropTree"]->addProperty(m_properties["PositiveYValue"]);
+
+    m_properties["DeltaY"] = m_dblManager->addProperty("Delta Y");
+    m_dblManager->setDecimals(m_properties["DeltaY"], numDecimals);
+    m_propTrees["SymmPVPropTree"]->addProperty(m_properties["DeltaY"]);
+
+    // Raw plot
+    m_plots["SymmRawPlot"] = new QwtPlot(m_parentWidget);
+    m_plots["SymmRawPlot"]->setAxisFont(QwtPlot::xBottom, parent->font());
+    m_plots["SymmRawPlot"]->setAxisFont(QwtPlot::yLeft, parent->font());
+    m_plots["SymmRawPlot"]->setCanvasBackground(Qt::white);
+    m_uiForm.symm_plot->addWidget(m_plots["SymmRawPlot"]);
+
+    // Indicators for Y value at each EMin position
+    m_rangeSelectors["NegativeEMinYPos"] = new MantidWidgets::RangeSelector(m_plots["SymmRawPlot"],
+        MantidWidgets::RangeSelector::YSINGLE, true, true);
+    m_rangeSelectors["PositiveEMinYPos"] = new MantidWidgets::RangeSelector(m_plots["SymmRawPlot"],
+        MantidWidgets::RangeSelector::YSINGLE, true, true);
+
+    m_rangeSelectors["NegativeEMinYPos"]->setColour(Qt::red);
+    m_rangeSelectors["PositiveEMinYPos"]->setColour(Qt::blue);
+    m_rangeSelectors["NegativeEMinYPos"]->setMinimum(0);
+    m_rangeSelectors["PositiveEMinYPos"]->setMinimum(0);
+
+    // Indicator for centre of symmetry (x=0)
+    m_rangeSelectors["CentreMark_Raw"] = new MantidWidgets::RangeSelector(m_plots["SymmRawPlot"],
+        MantidWidgets::RangeSelector::XSINGLE, true, true);
+    m_rangeSelectors["CentreMark_Raw"]->setColour(Qt::cyan);
+    m_rangeSelectors["CentreMark_Raw"]->setMinimum(0.0);
+
+    // Indicators for negative and positive X range values on X axis
+    // The user can use these to move the X range
+    // Note that the max and min of the negative range selector corespond to the opposite X value
+    // i.e. RS min is X max
+    m_rangeSelectors["NegativeE_Raw"] = new MantidWidgets::RangeSelector(m_plots["SymmRawPlot"]);
+    m_rangeSelectors["PositiveE_Raw"] = new MantidWidgets::RangeSelector(m_plots["SymmRawPlot"]);
+
+    m_rangeSelectors["NegativeE_Raw"]->setColour(Qt::darkGreen);
+    m_rangeSelectors["PositiveE_Raw"]->setColour(Qt::darkGreen);
+
+    // Preview plot
+    m_plots["SymmPreviewPlot"] = new QwtPlot(m_parentWidget);
+    m_plots["SymmPreviewPlot"]->setAxisFont(QwtPlot::xBottom, parent->font());
+    m_plots["SymmPreviewPlot"]->setAxisFont(QwtPlot::yLeft, parent->font());
+    m_plots["SymmPreviewPlot"]->setCanvasBackground(Qt::white);
+    m_uiForm.symm_previewPlot->addWidget(m_plots["SymmPreviewPlot"]);
+
+    // Indicators for negative and positive X range values on X axis
+    m_rangeSelectors["NegativeE_PV"] = new MantidWidgets::RangeSelector(m_plots["SymmPreviewPlot"],
+        MantidWidgets::RangeSelector::XMINMAX, true, true);
+    m_rangeSelectors["PositiveE_PV"] = new MantidWidgets::RangeSelector(m_plots["SymmPreviewPlot"],
+        MantidWidgets::RangeSelector::XMINMAX, true, true);
+
+    m_rangeSelectors["NegativeE_PV"]->setColour(Qt::darkGreen);
+    m_rangeSelectors["PositiveE_PV"]->setColour(Qt::darkGreen);
+
+    // Indicator for centre of symmetry (x=0)
+    m_rangeSelectors["CentreMark_PV"] = new MantidWidgets::RangeSelector(m_plots["SymmPreviewPlot"],
+        MantidWidgets::RangeSelector::XSINGLE, true, true);
+    m_rangeSelectors["CentreMark_PV"]->setColour(Qt::cyan);
+    m_rangeSelectors["CentreMark_PV"]->setMinimum(0.0);
+
+    // Refresh the plot windows
+    m_plots["SymmRawPlot"]->replot();
+    m_plots["SymmPreviewPlot"]->replot();
+
+    // SIGNAL/SLOT CONNECTIONS
+    // Validate the E range when it is changed
+    connect(m_dblManager, SIGNAL(valueChanged(QtProperty*, double)), this, SLOT(verifyERange(QtProperty*, double)));
+    // Plot a new spectrum when the user changes the value of the preview spectrum
+    connect(m_dblManager, SIGNAL(valueChanged(QtProperty*, double)), this, SLOT(replotNewSpectrum(QtProperty*, double)));
+    // Plot miniplot when file has finished loading
+    connect(m_uiForm.symm_dsInput, SIGNAL(dataReady(const QString&)), this, SLOT(plotRawInput(const QString&)));
+    // Preview symmetrise
+    connect(m_uiForm.symm_previewButton, SIGNAL(clicked()), this, SLOT(preview()));
+    // X range selectors
+    connect(m_rangeSelectors["PositiveE_Raw"], SIGNAL(minValueChanged(double)), this, SLOT(xRangeMinChanged(double)));
+    connect(m_rangeSelectors["PositiveE_Raw"], SIGNAL(maxValueChanged(double)), this, SLOT(xRangeMaxChanged(double)));
+    connect(m_rangeSelectors["NegativeE_Raw"], SIGNAL(minValueChanged(double)), this, SLOT(xRangeMinChanged(double)));
+    connect(m_rangeSelectors["NegativeE_Raw"], SIGNAL(maxValueChanged(double)), this, SLOT(xRangeMaxChanged(double)));
+
+    // Set default X range values
+    m_dblManager->setValue(m_properties["EMin"], 0.1);
+    m_dblManager->setValue(m_properties["EMax"], 0.5);
+
+    // Set default x axis range
+    std::pair<double, double> defaultRange(-1.0, 1.0);
+    setAxisRange("SymmRawPlot", QwtPlot::xBottom, defaultRange);
+    setAxisRange("SymmPreviewPlot", QwtPlot::xBottom, defaultRange);
+  }
+
+  //----------------------------------------------------------------------------------------------
+  /** Destructor
+   */
+  IndirectSymmetrise::~IndirectSymmetrise()
+  {
+  }
+
+  void IndirectSymmetrise::setup()
+  {
+  }
+
+  bool IndirectSymmetrise::validate()
+  {
+    // Check for a valid input file
+    if(!m_uiForm.symm_dsInput->isValid())
+      return false;
+
+    // EMin and EMax must be positive
+    if(m_dblManager->value(m_properties["EMin"]) <= 0.0)
+      return false;
+    if(m_dblManager->value(m_properties["EMax"]) <= 0.0)
+      return false;
+
+    return true;
+  }
+
+  void IndirectSymmetrise::run()
+  {
+    QString workspaceName = m_uiForm.symm_dsInput->getCurrentDataName();
+    QString outputWorkspaceName = workspaceName.left(workspaceName.length() - 4) + "_sym" + workspaceName.right(4);
+
+    bool plot = m_uiForm.symm_ckPlot->isChecked();
+    bool verbose = m_uiForm.symm_ckVerbose->isChecked();
+    bool save = m_uiForm.symm_ckSave->isChecked();
+
+    double e_min = m_dblManager->value(m_properties["EMin"]);
+    double e_max = m_dblManager->value(m_properties["EMax"]);
+
+    IAlgorithm_sptr symmetriseAlg = AlgorithmManager::Instance().create("Symmetrise", -1);
+    symmetriseAlg->initialize();
+    symmetriseAlg->setProperty("Sample", workspaceName.toStdString());
+    symmetriseAlg->setProperty("XMin", e_min);
+    symmetriseAlg->setProperty("XMax", e_max);
+    symmetriseAlg->setProperty("Plot", plot);
+    symmetriseAlg->setProperty("Verbose", verbose);
+    symmetriseAlg->setProperty("Save", save);
+    symmetriseAlg->setProperty("OutputWorkspace", outputWorkspaceName.toStdString());
+
+    // Execute algorithm on seperate thread
+    runAlgorithm(symmetriseAlg);
+  }
+
+  /**
+   * Plots a new workspace in the mini plot when it is loaded form the data selector.
+   *
+   * @param workspaceName Name of the workspace that has been laoded
+   */
+  void IndirectSymmetrise::plotRawInput(const QString &workspaceName)
+  {
+    // Set the preview spectrum number to the first spectrum in the workspace
+    MatrixWorkspace_sptr sampleWS = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(workspaceName.toStdString());
+    int minSpectrumRange = sampleWS->getSpectrum(0)->getSpectrumNo();
+    m_dblManager->setValue(m_properties["PreviewSpec"], static_cast<double>(minSpectrumRange));
+
+    updateMiniPlots();
+
+    // Set the preview range to the maximum absolute X value
+    auto axisRange = getCurveRange("SymmRawPlot");
+    double symmRange = std::max(fabs(axisRange.first), fabs(axisRange.second));
+    g_log.information() << "Symmetrise x axis range +/- " << symmRange << std::endl;
+    m_dblManager->setValue(m_properties["PreviewRange"], symmRange);
+
+    // Set valid range for range selectors
+    m_rangeSelectors["NegativeE_Raw"]->setRange(-symmRange, 0);
+    m_rangeSelectors["PositiveE_Raw"]->setRange(0, symmRange);
+
+    // Set some default (and valid) values for E range
+    m_dblManager->setValue(m_properties["EMax"], axisRange.second);
+    m_dblManager->setValue(m_properties["EMin"], axisRange.second/10);
+
+    updateMiniPlots();
+  }
+
+  /**
+   * Updates the mini plots.
+   */
+  void IndirectSymmetrise::updateMiniPlots()
+  {
+    if(!m_uiForm.symm_dsInput->isValid())
+      return;
+
+    QString workspaceName = m_uiForm.symm_dsInput->getCurrentDataName();
+    int spectrumNumber = static_cast<int>(m_dblManager->value(m_properties["PreviewSpec"]));
+
+    Mantid::API::MatrixWorkspace_sptr input = boost::dynamic_pointer_cast<Mantid::API::MatrixWorkspace>(
+        Mantid::API::AnalysisDataService::Instance().retrieve(workspaceName.toStdString()));
+
+    // Set the X axis range based on the range specified by the user
+    std::pair<double, double>range;
+    range.first = -m_dblManager->value(m_properties["PreviewRange"]);
+    range.second = m_dblManager->value(m_properties["PreviewRange"]);
+    setAxisRange("SymmRawPlot", QwtPlot::xBottom, range);
+
+    // Plot the spectrum chosen by the user
+    size_t spectrumIndex = input->getIndexFromSpectrumNumber(spectrumNumber);
+    plotMiniPlot(input, spectrumIndex, "SymmRawPlot");
+
+    // Match X axis range on preview plot
+    setAxisRange("SymmPreviewPlot", QwtPlot::xBottom, range);
+    m_plots["SymmPreviewPlot"]->replot();
+  }
+
+  /**
+   * Redraws mini plots when user changes previw range or spectrum.
+   *
+   * @param prop QtProperty that was changed
+   * @param value Value it was changed to
+   */
+  void IndirectSymmetrise::replotNewSpectrum(QtProperty *prop, double value)
+  {
+    // Validate the preview range
+    if(prop == m_properties["PreviewRange"])
+    {
+      // If preview range was set negative then set it to the absolute value of the value it was set to
+      if(value < 0)
+      {
+        m_dblManager->setValue(m_properties["PreviewRange"], fabs(value));
+        return;
+      }
+    }
+
+    // Validate the preview spectra
+    if(prop == m_properties["PreviewSpec"])
+    {
+      // Get the range of possible spectra numbers
+      QString workspaceName = m_uiForm.symm_dsInput->getCurrentDataName();
+      MatrixWorkspace_sptr sampleWS = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(workspaceName.toStdString());
+      int minSpectrumRange = sampleWS->getSpectrum(0)->getSpectrumNo();
+      int maxSpectrumRange = sampleWS->getSpectrum(sampleWS->getNumberHistograms()-1)->getSpectrumNo();
+
+      // If entered value is lower then set spectra number to lowest valid value
+      if(value < minSpectrumRange)
+      {
+        m_dblManager->setValue(m_properties["PreviewSpec"], minSpectrumRange);
+        return;
+      }
+
+      // If entered value is higer then set spectra number to highest valid value
+      if(value > maxSpectrumRange)
+      {
+        m_dblManager->setValue(m_properties["PreviewSpec"], maxSpectrumRange);
+        return;
+      }
+    }
+
+    // If we get this far then properties are valid so update mini plots
+    if((prop == m_properties["PreviewSpec"]) || (prop == m_properties["PreviewRange"]))
+      updateMiniPlots();
+  }
+
+  /**
+   * Verifies that the E Range is valid.
+   *
+   * @param prop QtProperty changed
+   * @param value Value it was changed to (unused)
+   */
+  void IndirectSymmetrise::verifyERange(QtProperty *prop, double value)
+  {
+    UNUSED_ARG(value);
+
+    double eMin = m_dblManager->value(m_properties["EMin"]);
+    double eMax = m_dblManager->value(m_properties["EMax"]);
+
+    if(prop == m_properties["EMin"])
+    {
+      // If the value of EMin is negative try negating it to get a valid range
+      if(eMin < 0)
+      {
+        eMin = -eMin;
+        m_dblManager->setValue(m_properties["EMin"], eMin);
+        return;
+      }
+
+      // If range is still invalid reset EMin to half EMax
+      if(eMin > eMax)
+      {
+        m_dblManager->setValue(m_properties["EMin"], eMax/2);
+        return;
+      }
+    }
+    else if(prop == m_properties["EMax"])
+    {
+      // If the value of EMax is negative try negating it to get a valid range
+      if(eMax < 0)
+      {
+        eMax = -eMax;
+        m_dblManager->setValue(m_properties["EMax"], eMax);
+        return;
+      }
+
+      // If range is invalid reset EMax to double EMin
+      if(eMin > eMax)
+      {
+        m_dblManager->setValue(m_properties["EMax"], eMin*2);
+        return;
+      }
+    }
+
+    // If we get this far then the E range is valid
+    // Update the range selectors with the new values.
+    updateRangeSelectors(prop, value);
+  }
+
+  /**
+   * Handles a request to preview the symmetrise.
+   *
+   * Runs Symmetrise on the current spectrum and plots in preview mini plot.
+   *
+   * @see IndirectSymmetrise::previewAlgDone()
+   */
+  void IndirectSymmetrise::preview()
+  {
+    // Handle algorithm completion signal
+    connect(m_batchAlgoRunner, SIGNAL(batchComplete(bool)), this, SLOT(previewAlgDone(bool)));
+
+    // Do nothing if no data has been laoded
+    QString workspaceName = m_uiForm.symm_dsInput->getCurrentDataName();
+    if(workspaceName.isEmpty())
+      return;
+
+    bool verbose = m_uiForm.symm_ckVerbose->isChecked();
+    double e_min = m_dblManager->value(m_properties["EMin"]);
+    double e_max = m_dblManager->value(m_properties["EMax"]);
+    long spectrumNumber = static_cast<long>(m_dblManager->value(m_properties["PreviewSpec"]));
+    std::vector<long> spectraRange(2, spectrumNumber);
+
+    // Run the algorithm on the preview spectrum only
+    IAlgorithm_sptr symmetriseAlg = AlgorithmManager::Instance().create("Symmetrise", -1);
+    symmetriseAlg->initialize();
+    symmetriseAlg->setProperty("Sample", workspaceName.toStdString());
+    symmetriseAlg->setProperty("XMin", e_min);
+    symmetriseAlg->setProperty("XMax", e_max);
+    symmetriseAlg->setProperty("Plot", false);
+    symmetriseAlg->setProperty("Verbose", verbose);
+    symmetriseAlg->setProperty("Save", false);
+    symmetriseAlg->setProperty("SpectraRange", spectraRange);
+    symmetriseAlg->setProperty("OutputWorkspace", "__Symmetrise_temp");
+    symmetriseAlg->setProperty("OutputPropertiesTable", "__SymmetriseProps_temp");
+
+    runAlgorithm(symmetriseAlg);
+  }
+
+  /**
+   * Handles completion of the preview algorithm.
+   *
+   * @param error If the algorithm failed
+   */
+  void IndirectSymmetrise::previewAlgDone(bool error)
+  {
+    if(error)
+      return;
+
+    QString workspaceName = m_uiForm.symm_dsInput->getCurrentDataName();
+    int spectrumNumber = static_cast<int>(m_dblManager->value(m_properties["PreviewSpec"]));
+
+    MatrixWorkspace_sptr sampleWS = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(workspaceName.toStdString());
+    ITableWorkspace_sptr propsTable = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("__SymmetriseProps_temp");
+    MatrixWorkspace_sptr symmWS = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("__Symmetrise_temp");
+
+    // Get the index of XCut on each side of zero
+    int negativeIndex = propsTable->getColumn("NegativeXMinIndex")->cell<int>(0);
+    int positiveIndex = propsTable->getColumn("PositiveXMinIndex")->cell<int>(0);
+
+    // Get the Y values for each XCut and the difference between them
+    double negativeY = sampleWS->dataY(0)[negativeIndex];
+    double positiveY = sampleWS->dataY(0)[positiveIndex];
+    double deltaY = fabs(negativeY - positiveY);
+
+    // Show values in property tree
+    m_dblManager->setValue(m_properties["NegativeYValue"], negativeY);
+    m_dblManager->setValue(m_properties["PositiveYValue"], positiveY);
+    m_dblManager->setValue(m_properties["DeltaY"], deltaY);
+
+    // Set indicator positions
+    m_rangeSelectors["NegativeEMinYPos"]->setMinimum(negativeY);
+    m_rangeSelectors["PositiveEMinYPos"]->setMinimum(positiveY);
+
+    // Plot preview plot
+    size_t spectrumIndex = symmWS->getIndexFromSpectrumNumber(spectrumNumber);
+    plotMiniPlot("__Symmetrise_temp", spectrumIndex, "SymmPreviewPlot");
+
+    // Don't want this to trigger when the algorithm is run for all spectra
+    disconnect(m_batchAlgoRunner, SIGNAL(batchComplete(bool)), this, SLOT(previewAlgDone(bool)));
+  }
+
+  /**
+   * Updates position of XCut range selectors when used changed value of XCut.
+   *
+   * @param prop QtProperty changed
+   * @param value Value it was changed to (unused)
+   */
+  void IndirectSymmetrise::updateRangeSelectors(QtProperty *prop, double value)
+  {
+    value = fabs(value);
+
+    if(prop == m_properties["EMin"])
+    {
+      m_rangeSelectors["NegativeE_Raw"]->setMaximum(-value);
+      m_rangeSelectors["PositiveE_Raw"]->setMinimum(value);
+
+      m_rangeSelectors["NegativeE_PV"]->setMinimum(-value);
+      m_rangeSelectors["PositiveE_PV"]->setMinimum(value);
+    }
+
+    if(prop == m_properties["EMax"])
+    {
+      m_rangeSelectors["NegativeE_Raw"]->setMinimum(-value);
+      m_rangeSelectors["PositiveE_Raw"]->setMaximum(value);
+
+      m_rangeSelectors["NegativeE_PV"]->setMaximum(-value);
+      m_rangeSelectors["PositiveE_PV"]->setMaximum(value);
+    }
+  }
+
+  /**
+   * Handles the X minimum value being changed from a range selector.
+   *
+   * @param value New range selector value
+   */
+  void IndirectSymmetrise::xRangeMinChanged(double value)
+  {
+    MantidWidgets::RangeSelector *from = qobject_cast<MantidWidgets::RangeSelector*>(sender());
+
+    if(from == m_rangeSelectors["PositiveE_Raw"])
+    {
+      m_dblManager->setValue(m_properties["EMin"], std::abs(value));
+    }
+    else if(from == m_rangeSelectors["NegativeE_Raw"])
+    {
+      m_dblManager->setValue(m_properties["EMax"], std::abs(value));
+    }
+  }
+
+  /**
+   * Handles the X maximum value being changed from a range selector.
+   *
+   * @param value New range selector value
+   */
+  void IndirectSymmetrise::xRangeMaxChanged(double value)
+  {
+    MantidWidgets::RangeSelector *from = qobject_cast<MantidWidgets::RangeSelector*>(sender());
+
+    if(from == m_rangeSelectors["PositiveE_Raw"])
+    {
+      m_dblManager->setValue(m_properties["EMax"], std::abs(value));
+    }
+    else if(from == m_rangeSelectors["NegativeE_Raw"])
+    {
+      m_dblManager->setValue(m_properties["EMin"], std::abs(value));
+    }
+  }
+
+} // namespace CustomInterfaces
+} // namespace Mantid
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/JumpFit.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/JumpFit.cpp
index 0f187bf1e5c73ddee1b1294a9bc8f0030d1c9c14..5f50250b1995807250a8c536fde630d865617282 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/JumpFit.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/JumpFit.cpp
@@ -13,7 +13,7 @@ namespace MantidQt
 {
 	namespace CustomInterfaces
 	{
-		JumpFit::JumpFit(QWidget * parent) : 
+		JumpFit::JumpFit(QWidget * parent) :
 			IndirectBayesTab(parent)
 		{
 			m_uiForm.setupUi(parent);
@@ -34,7 +34,7 @@ namespace MantidQt
 
 			m_properties["QMin"] = m_dblManager->addProperty("QMin");
 			m_properties["QMax"] = m_dblManager->addProperty("QMax");
-			
+
 			m_dblManager->setDecimals(m_properties["QMin"], NUM_DECIMALS);
 			m_dblManager->setDecimals(m_properties["QMax"], NUM_DECIMALS);
 
@@ -58,7 +58,7 @@ namespace MantidQt
 
 		/**
 		 * Validate the form to check the program can be run
-		 * 
+		 *
 		 * @return :: Whether the form was valid
 		 */
 		bool JumpFit::validate()
@@ -86,7 +86,7 @@ namespace MantidQt
 		 * Collect the settings on the GUI and build a python
 		 * script that runs JumpFit
 		 */
-		void JumpFit::run() 
+		void JumpFit::run()
 		{
 			bool verbose = m_uiForm.chkVerbose->isChecked();
 			bool save = m_uiForm.chkSave->isChecked();
@@ -190,14 +190,14 @@ namespace MantidQt
           m_curves[specName]->setPen(QColor(Qt::green));
         }
       }
-  
+
       replot("JumpFitPlot");
     }
 
 		/**
 		 * Set the data selectors to use the default save directory
 		 * when browsing for input files.
-		 *  
+		 *
      * @param settings :: The current settings
 		 */
 		void JumpFit::loadSettings(const QSettings& settings)
@@ -208,7 +208,7 @@ namespace MantidQt
 		/**
 		 * Plots the loaded file to the miniplot and sets the guides
 		 * and the range
-		 * 
+		 *
 		 * @param filename :: The name of the workspace to plot
 		 */
 		void JumpFit::handleSampleInputReady(const QString& filename)
@@ -218,29 +218,34 @@ namespace MantidQt
 			disconnect(m_uiForm.cbFunction, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(runPreviewAlgorithm()));
 			disconnect(m_uiForm.cbWidth, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(runPreviewAlgorithm()));
 
+      // Scale to convert to HWHM
+      IAlgorithm_sptr scaleAlg = AlgorithmManager::Instance().create("Scale");
+      scaleAlg->initialize();
+      scaleAlg->setProperty("InputWorkspace", filename.toStdString());
+      scaleAlg->setProperty("OutputWorkspace", filename.toStdString());
+      scaleAlg->setProperty("Factor", 0.5);
+      scaleAlg->execute();
+
 			auto ws = Mantid::API::AnalysisDataService::Instance().retrieve(filename.toStdString());
 			auto mws = boost::dynamic_pointer_cast<Mantid::API::MatrixWorkspace>(ws);
 
 			findAllWidths(mws);
-			
+
 			if(m_spectraList.size() > 0)
 			{
 				m_uiForm.cbWidth->setEnabled(true);
 
 				std::string currentWidth = m_uiForm.cbWidth->currentText().toStdString();
 				plotMiniPlot(filename, m_spectraList[currentWidth], "JumpFitPlot", "RawPlotCurve");
+
 				std::pair<double,double> res;
 				std::pair<double,double> range = getCurveRange("RawPlotCurve");
 
-				//Use the values from the instrument parameter file if we can
+				// Use the values from the instrument parameter file if we can
 				if(getInstrumentResolution(filename, res))
-				{
 					setMiniPlotGuides("JumpFitQ", m_properties["QMin"], m_properties["QMax"], res);
-				}
 				else
-				{
 					setMiniPlotGuides("JumpFitQ", m_properties["QMin"], m_properties["QMax"], range);
-				}
 
 				setPlotRange("JumpFitQ", m_properties["QMin"], m_properties["QMax"], range);
 			}
@@ -260,8 +265,8 @@ namespace MantidQt
 		}
 
 		/**
-		 * Find all of the spectra in the workspace that have width data 
-		 * 
+		 * Find all of the spectra in the workspace that have width data
+		 *
 		 * @param ws :: The workspace to search
 		 */
 		void JumpFit::findAllWidths(Mantid::API::MatrixWorkspace_const_sptr ws)
@@ -274,7 +279,7 @@ namespace MantidQt
 				auto axis = dynamic_cast<Mantid::API::TextAxis*>(ws->getAxis(1));
 				std::string title = axis->label(i);
 
-				//check if the axis labels indicate this spectrum is width data 
+				//check if the axis labels indicate this spectrum is width data
 				size_t qLinesWidthIndex = title.find(".Width");
 				size_t convFitWidthIndex = title.find(".FWHM");
 
@@ -286,7 +291,7 @@ namespace MantidQt
 				{
 					std::string cbItemName = "";
 					size_t substrIndex = 0;
-					
+
 					if (qLinesWidth)
 					{
 						substrIndex = qLinesWidthIndex;
@@ -299,7 +304,7 @@ namespace MantidQt
 					cbItemName = title.substr(0, substrIndex);
 					m_spectraList[cbItemName] = static_cast<int>(i);
 					m_uiForm.cbWidth->addItem(QString(cbItemName.c_str()));
-					
+
 					//display widths f1.f1, f2.f1 and f2.f2
 					if (m_uiForm.cbWidth->count() == 3)
 					{
@@ -311,7 +316,7 @@ namespace MantidQt
 
 		/**
 		 * Plots the loaded file to the miniplot when the selected spectrum changes
-		 * 
+		 *
 		 * @param text :: The name spectrum index to plot
 		 */
 		void JumpFit::handleWidthChange(const QString& text)
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/QReflTableModel.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/QReflTableModel.cpp
index 03e6e8548246bb31bfd6139397f7ef5871b00022..b6d0412a07eb077ae36bd1435c5811c118fb6b39 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/QReflTableModel.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/QReflTableModel.cpp
@@ -59,7 +59,7 @@ namespace MantidQt
     void QReflTableModel::invalidateDataCache(const int row) const
     {
       //If the row is in the cache, invalidate the cache.
-      if(row == m_dataCachePeakIndex)
+      if(row == m_dataCachePeakIndex || row == -1)
         m_dataCachePeakIndex = -1;
     }
 
@@ -83,7 +83,7 @@ namespace MantidQt
       m_dataCache.push_back(QString::fromStdString(tableRow.cell<std::string>(COL_QMIN)));
       m_dataCache.push_back(QString::fromStdString(tableRow.cell<std::string>(COL_QMAX)));
       m_dataCache.push_back(QString::fromStdString(tableRow.cell<std::string>(COL_DQQ)));
-      m_dataCache.push_back(QString::fromStdString(tableRow.cell<std::string>(COL_SCALE)));
+      m_dataCache.push_back(QString::number(tableRow.cell<double>(COL_SCALE)));
       m_dataCache.push_back(QString::number(tableRow.cell<int>(COL_GROUP)));
       m_dataCache.push_back(QString::fromStdString(tableRow.cell<std::string>(COL_OPTIONS)));
 
@@ -137,7 +137,10 @@ namespace MantidQt
     {
       if (role == Qt::TextAlignmentRole)
       {
-        return Qt::AlignRight;
+        if(index.column() == COL_OPTIONS)
+          return Qt::AlignLeft;
+        else
+          return Qt::AlignRight;
       }
       else if( role != Qt::DisplayRole && role != Qt::EditRole)
       {
@@ -167,13 +170,14 @@ namespace MantidQt
         const int colNumber = index.column();
         const int rowNumber = index.row();
 
-        if (colNumber == COL_GROUP)
-        {
-          m_tWS->Int(rowNumber, COL_GROUP) = str.toInt();
-        }
-        else
+        switch(colNumber)
         {
-          m_tWS->String(rowNumber, colNumber) = str.toStdString();
+        case COL_GROUP:
+          m_tWS->Int(rowNumber, COL_GROUP) = str.toInt(); break;
+        case COL_SCALE:
+          m_tWS->Double(rowNumber, COL_SCALE) = str.toDouble(); break;
+        default:
+          m_tWS->String(rowNumber, colNumber) = str.toStdString(); break;
         }
 
         invalidateDataCache(rowNumber);
@@ -217,5 +221,51 @@ namespace MantidQt
       return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
     }
 
+    /**
+    Insert the given number of rows at the specified position
+    @param row : The row to insert before
+    @param count : The number of rows to insert
+    @param parent : The parent index
+    */
+    bool QReflTableModel::insertRows(int row, int count, const QModelIndex& parent)
+    {
+      if(count < 1)
+        return true;
+
+      if(row < 0)
+        return false;
+
+      beginInsertRows(parent, row, row + count - 1);
+      for(int i = 0; i < count; ++i)
+        m_tWS->insertRow(row + i);
+      endInsertRows();
+
+      invalidateDataCache(-1);
+      return true;
+    }
+
+    /**
+    Remove the given number of rows from the specified position
+    @param row : The row index to remove from
+    @param count : The number of rows to remove
+    @param parent : The parent index
+    */
+    bool QReflTableModel::removeRows(int row, int count, const QModelIndex& parent)
+    {
+      if(count < 1)
+        return true;
+
+      if(row < 0)
+        return false;
+
+      beginRemoveRows(parent, row, row + count - 1);
+      for(int i = 0; i < count; ++i)
+        m_tWS->removeRow(row);
+      endRemoveRows();
+
+      invalidateDataCache(-1);
+      return true;
+    }
+
   } // namespace CustomInterfaces
 } // namespace Mantid
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/QtReflMainView.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/QtReflMainView.cpp
index a74d00ce824aad97b59b722e92c9a8cacd2465f7..31db3c7987cb05312da2b1e112e04e1364c13053 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/QtReflMainView.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/QtReflMainView.cpp
@@ -1,9 +1,7 @@
 #include "MantidQtCustomInterfaces/QtReflMainView.h"
 #include "MantidQtCustomInterfaces/QReflTableModel.h"
-#include "MantidQtCustomInterfaces/ReflNullMainViewPresenter.h"
 #include "MantidQtCustomInterfaces/ReflMainViewPresenter.h"
-#include "MantidQtCustomInterfaces/ReflBlankMainViewPresenter.h"
-#include "MantidQtCustomInterfaces/ReflLoadedMainViewPresenter.h"
+#include "MantidQtMantidWidgets/HintingLineEditFactory.h"
 #include "MantidAPI/ITableWorkspace.h"
 #include "MantidKernel/ConfigService.h"
 #include <qinputdialog.h>
@@ -20,7 +18,7 @@ namespace MantidQt
     //----------------------------------------------------------------------------------------------
     /** Constructor
     */
-    QtReflMainView::QtReflMainView(QWidget *parent) : UserSubWindow(parent), m_presenter(new ReflNullMainViewPresenter())
+    QtReflMainView::QtReflMainView(QWidget *parent) : UserSubWindow(parent), m_openMap(new QSignalMapper(this))
     {
     }
 
@@ -37,50 +35,21 @@ namespace MantidQt
     void QtReflMainView::initLayout()
     {
       ui.setupUi(this);
-      ui.workspaceSelector->refresh();
+
+      ui.buttonProcess->setDefaultAction(ui.actionProcess);
 
       //Expand the process runs column at the expense of the search column
       ui.splitterTables->setStretchFactor(0, 0);
       ui.splitterTables->setStretchFactor(1, 1);
 
-      //Zero out the progress bar
-      ui.progressBar->setRange(0, 100);
-      ui.progressBar->setValue(0);
-
-      std::vector<std::string> instruments;
-      instruments.push_back("INTER");
-      instruments.push_back("SURF");
-      instruments.push_back("CRISP");
-      instruments.push_back("POLREF");
-      setInstrumentList(instruments);
+      //Allow rows to be reordered
+      ui.viewTable->verticalHeader()->setMovable(true);
 
-      const std::string defaultInst = Mantid::Kernel::ConfigService::Instance().getString("default.instrument");
-
-      if(std::find(instruments.begin(), instruments.end(), defaultInst) != instruments.end())
-      {
-        int index = ui.comboSearchInstrument->findData(QString::fromStdString(defaultInst), Qt::DisplayRole);
-        ui.comboSearchInstrument->setCurrentIndex(index);
-        ui.comboProcessInstrument->setCurrentIndex(index);
-      }
-
-      connect(ui.workspaceSelector,SIGNAL(activated(QString)),this,SLOT(setModel(QString)));
-      connect(ui.actionSaveTable, SIGNAL(triggered()),this, SLOT(actionSave()));
-      connect(ui.actionSaveTableAs, SIGNAL(triggered()),this, SLOT(actionSaveAs()));
-      connect(ui.actionNewTable, SIGNAL(triggered()),this, SLOT(setNew()));
-      connect(ui.actionAddRow, SIGNAL(triggered()),this, SLOT(actionAddRow()));
-      connect(ui.actionDeleteRow, SIGNAL(triggered()),this, SLOT(actionDeleteRow()));
-      connect(ui.actionProcess, SIGNAL(triggered()),this, SLOT(actionProcess()));
-      connect(ui.actionGroupRows, SIGNAL(triggered()),this, SLOT(actionGroupRows()));
-      setNew();
-    }
+      //Custom context menu for table
+      connect(ui.viewTable, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showContextMenu(const QPoint&)));
 
-    /**
-    This slot loads a blank table and changes to a BlankMainView presenter
-    */
-    void QtReflMainView::setNew()
-    {
-      boost::scoped_ptr<IReflPresenter> newPtr(new ReflBlankMainViewPresenter(this));
-      m_presenter.swap(newPtr);
+      //Finally, create a presenter to do the thinking for us
+      m_presenter = boost::shared_ptr<IReflPresenter>(new ReflMainViewPresenter(this));
     }
 
     /**
@@ -89,67 +58,193 @@ namespace MantidQt
     */
     void QtReflMainView::setModel(QString name)
     {
-      boost::scoped_ptr<IReflPresenter> newPtr(new ReflLoadedMainViewPresenter(name.toStdString(), this));
-      m_presenter.swap(newPtr);
-      m_presenter->notify(NoFlags);
+      m_toOpen = name.toStdString();
+      m_presenter->notify(IReflPresenter::OpenTableFlag);
     }
 
     /**
     Set a new model in the tableview
     @param model : the model to be attached to the tableview
     */
-    void QtReflMainView::showTable(ITableWorkspace_sptr model)
+    void QtReflMainView::showTable(QReflTableModel_sptr model)
     {
-      ui.viewTable->setModel(new QReflTableModel(model));
+      m_model = model;
+      //So we can notify the presenter when the user updates the table
+      connect(m_model.get(), SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(tableUpdated(const QModelIndex&, const QModelIndex&)));
+      ui.viewTable->setModel(m_model.get());
       ui.viewTable->resizeColumnsToContents();
     }
 
+    /**
+    Set the list of tables the user is offered to open
+    @param tables : the names of the tables in the ADS
+    */
+    void QtReflMainView::setTableList(const std::set<std::string>& tables)
+    {
+      ui.menuOpenTable->clear();
+
+      for(auto it = tables.begin(); it != tables.end(); ++it)
+      {
+        QAction* openTable = ui.menuOpenTable->addAction(QString::fromStdString(*it));
+        openTable->setIcon(QIcon("://worksheet.png"));
+
+        //Map this action to the table name
+        m_openMap->setMapping(openTable, QString::fromStdString(*it));
+
+        connect(openTable, SIGNAL(triggered()), m_openMap, SLOT(map()));
+        connect(m_openMap, SIGNAL(mapped(QString)), this, SLOT(setModel(QString)));
+      }
+    }
+
     /**
     This slot notifies the presenter that the "save" button has been pressed
     */
-    void QtReflMainView::actionSave()
+    void QtReflMainView::on_actionSaveTable_triggered()
     {
-      m_presenter->notify(SaveFlag);
+      m_presenter->notify(IReflPresenter::SaveFlag);
     }
 
     /**
     This slot notifies the presenter that the "save as" button has been pressed
     */
-    void QtReflMainView::actionSaveAs()
+    void QtReflMainView::on_actionSaveTableAs_triggered()
     {
-      m_presenter->notify(SaveAsFlag);
+      m_presenter->notify(IReflPresenter::SaveAsFlag);
     }
 
     /**
-    This slot notifies the presenter that the "add row" button has been pressed
+    This slot notifies the presenter that the "append row" button has been pressed
     */
-    void QtReflMainView::actionAddRow()
+    void QtReflMainView::on_actionAppendRow_triggered()
     {
-      m_presenter->notify(AddRowFlag);
+      m_presenter->notify(IReflPresenter::AppendRowFlag);
+    }
+
+    /**
+    This slot notifies the presenter that the "prepend row" button has been pressed
+    */
+    void QtReflMainView::on_actionPrependRow_triggered()
+    {
+      m_presenter->notify(IReflPresenter::PrependRowFlag);
     }
 
     /**
     This slot notifies the presenter that the "delete" button has been pressed
     */
-    void QtReflMainView::actionDeleteRow()
+    void QtReflMainView::on_actionDeleteRow_triggered()
     {
-      m_presenter->notify(DeleteRowFlag);
+      m_presenter->notify(IReflPresenter::DeleteRowFlag);
     }
 
     /**
     This slot notifies the presenter that the "process" button has been pressed
     */
-    void QtReflMainView::actionProcess()
+    void QtReflMainView::on_actionProcess_triggered()
     {
-      m_presenter->notify(ProcessFlag);
+      m_presenter->notify(IReflPresenter::ProcessFlag);
     }
 
     /**
     This slot notifies the presenter that the "group rows" button has been pressed
     */
-    void QtReflMainView::actionGroupRows()
+    void QtReflMainView::on_actionGroupRows_triggered()
     {
-      m_presenter->notify(GroupRowsFlag);
+      m_presenter->notify(IReflPresenter::GroupRowsFlag);
+    }
+
+    /**
+    This slot notifies the presenter that the "clear selected" button has been pressed
+    */
+    void QtReflMainView::on_actionClearSelected_triggered()
+    {
+      m_presenter->notify(IReflPresenter::ClearSelectedFlag);
+    }
+
+    /**
+    This slot notifies the presenter that the "copy selection" button has been pressed
+    */
+    void QtReflMainView::on_actionCopySelected_triggered()
+    {
+      m_presenter->notify(IReflPresenter::CopySelectedFlag);
+    }
+
+    /**
+    This slot notifies the presenter that the "cut selection" button has been pressed
+    */
+    void QtReflMainView::on_actionCutSelected_triggered()
+    {
+      m_presenter->notify(IReflPresenter::CutSelectedFlag);
+    }
+
+    /**
+    This slot notifies the presenter that the "paste selection" button has been pressed
+    */
+    void QtReflMainView::on_actionPasteSelected_triggered()
+    {
+      m_presenter->notify(IReflPresenter::PasteSelectedFlag);
+    }
+
+    /**
+    This slot notifies the presenter that the "new table" button has been pressed
+    */
+    void QtReflMainView::on_actionNewTable_triggered()
+    {
+      m_presenter->notify(IReflPresenter::NewTableFlag);
+    }
+
+    /**
+    This slot notifies the presenter that the "expand selection" button has been pressed
+    */
+    void QtReflMainView::on_actionExpandSelection_triggered()
+    {
+      m_presenter->notify(IReflPresenter::ExpandSelectionFlag);
+    }
+
+    /**
+    This slot notifies the presenter that the "options..." button has been pressed
+    */
+    void QtReflMainView::on_actionOptionsDialog_triggered()
+    {
+      m_presenter->notify(IReflPresenter::OptionsDialogFlag);
+    }
+
+    /**
+    This slot notifies the presenter that the table has been updated/changed by the user
+    */
+    void QtReflMainView::tableUpdated(const QModelIndex& topLeft, const QModelIndex& bottomRight)
+    {
+      Q_UNUSED(topLeft);
+      Q_UNUSED(bottomRight);
+      m_presenter->notify(IReflPresenter::TableUpdatedFlag);
+    }
+
+    /**
+    This slot is triggered when the user right clicks on the table
+    @param pos : The position of the right click within the table
+    */
+    void QtReflMainView::showContextMenu(const QPoint& pos)
+    {
+      //If the user didn't right-click on anything, don't show a context menu.
+      if(!ui.viewTable->indexAt(pos).isValid())
+        return;
+
+      //parent widget takes ownership of QMenu
+      QMenu* menu = new QMenu(this);
+      menu->addAction(ui.actionProcess);
+      menu->addAction(ui.actionExpandSelection);
+      menu->addSeparator();
+      menu->addAction(ui.actionPrependRow);
+      menu->addAction(ui.actionAppendRow);
+      menu->addSeparator();
+      menu->addAction(ui.actionGroupRows);
+      menu->addAction(ui.actionCopySelected);
+      menu->addAction(ui.actionCutSelected);
+      menu->addAction(ui.actionPasteSelected);
+      menu->addAction(ui.actionClearSelected);
+      menu->addSeparator();
+      menu->addAction(ui.actionDeleteRow);
+
+      menu->popup(ui.viewTable->viewport()->mapToGlobal(pos));
     }
 
     /**
@@ -233,11 +328,25 @@ namespace MantidQt
       ui.progressBar->setValue(progress);
     }
 
+    /**
+    Set which rows are selected
+    @param rows : The set of rows to select
+    */
+    void QtReflMainView::setSelection(const std::set<int>& rows)
+    {
+      ui.viewTable->clearSelection();
+      auto selectionModel = ui.viewTable->selectionModel();
+
+      for(auto row = rows.begin(); row != rows.end(); ++row)
+        selectionModel->select(ui.viewTable->model()->index((*row), 0), QItemSelectionModel::Select | QItemSelectionModel::Rows);
+    }
+
     /**
     Set the list of available instruments to search and process for
     @param instruments : The list of instruments available
+    @param defaultInstrument : The instrument to have selected by default
     */
-    void QtReflMainView::setInstrumentList(const std::vector<std::string>& instruments)
+    void QtReflMainView::setInstrumentList(const std::vector<std::string>& instruments, const std::string& defaultInstrument)
     {
       ui.comboSearchInstrument->clear();
       ui.comboProcessInstrument->clear();
@@ -248,6 +357,28 @@ namespace MantidQt
         ui.comboSearchInstrument->addItem(instrument);
         ui.comboProcessInstrument->addItem(instrument);
       }
+
+      int index = ui.comboSearchInstrument->findData(QString::fromStdString(defaultInstrument), Qt::DisplayRole);
+      ui.comboSearchInstrument->setCurrentIndex(index);
+      ui.comboProcessInstrument->setCurrentIndex(index);
+    }
+
+    /**
+    Set the strategy used for generating hints for the autocompletion in the options column.
+    @param hintStrategy The hinting strategy to use
+    */
+    void QtReflMainView::setOptionsHintStrategy(HintStrategy* hintStrategy)
+    {
+      ui.viewTable->setItemDelegateForColumn(ReflMainViewPresenter::COL_OPTIONS, new HintingLineEditFactory(hintStrategy));
+    }
+
+    /**
+    Sets the contents of the system's clipboard
+    @param text The contents of the clipboard
+    */
+    void QtReflMainView::setClipboard(const std::string& text)
+    {
+      QApplication::clipboard()->setText(QString::fromStdString(text));
     }
 
     /**
@@ -272,16 +403,41 @@ namespace MantidQt
     Get the indices of the highlighted rows
     @returns a vector of unsigned ints contianing the highlighted row numbers
     */
-    std::vector<size_t> QtReflMainView::getSelectedRowIndexes() const
+    std::set<int> QtReflMainView::getSelectedRows() const
     {
       auto selectedRows = ui.viewTable->selectionModel()->selectedRows();
-      //auto selectedType = ui.viewTable->selectionModel()->;
-      std::vector<size_t> rowIndexes;
-      for (auto idx = selectedRows.begin(); idx != selectedRows.end(); ++idx)
-      {
-        rowIndexes.push_back(idx->row());
-      }
-      return rowIndexes;
+      std::set<int> rows;
+      for(auto it = selectedRows.begin(); it != selectedRows.end(); ++it)
+        rows.insert(it->row());
+
+      return rows;
+    }
+
+    /**
+    Get the name of the workspace that the user wishes to open as a table
+    @returns The name of the workspace to open
+    */
+    std::string QtReflMainView::getWorkspaceToOpen() const
+    {
+      return m_toOpen;
+    }
+
+    /**
+    Get a pointer to the presenter that's currently controlling this view.
+    @returns A pointer to the presenter
+    */
+    boost::shared_ptr<IReflPresenter> QtReflMainView::getPresenter() const
+    {
+      return m_presenter;
+    }
+
+    /**
+    Gets the contents of the system's clipboard
+    @returns The contents of the clipboard
+    */
+    std::string QtReflMainView::getClipboard() const
+    {
+      return QApplication::clipboard()->text().toStdString();
     }
 
   } // namespace CustomInterfaces
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/QtReflOptionsDialog.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/QtReflOptionsDialog.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..501c461d1e06d0d9b6fab8f0c5303c4bf4cc2add
--- /dev/null
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/QtReflOptionsDialog.cpp
@@ -0,0 +1,107 @@
+#include "MantidQtCustomInterfaces/QtReflOptionsDialog.h"
+#include "MantidQtCustomInterfaces/QtReflMainView.h"
+
+namespace MantidQt
+{
+  namespace CustomInterfaces
+  {
+    /** Constructor */
+    QtReflOptionsDialog::QtReflOptionsDialog(ReflMainView* view, boost::shared_ptr<IReflPresenter> presenter) :
+      QDialog(dynamic_cast<QtReflMainView*>(view)),
+      m_presenter(presenter)
+    {
+      initLayout();
+      initBindings();
+      loadOptions();
+    }
+
+    /** Destructor */
+    QtReflOptionsDialog::~QtReflOptionsDialog()
+    {
+    }
+
+    /** Initialise the ui */
+    void QtReflOptionsDialog::initLayout()
+    {
+      ui.setupUi(this);
+      connect(ui.buttonBox->button(QDialogButtonBox::Ok),    SIGNAL(clicked()), this, SLOT(saveOptions()));
+    }
+
+    /** Bind options to their widgets */
+    void QtReflOptionsDialog::initBindings()
+    {
+      m_bindings.clear();
+
+      //Check all the widgets for the "reflOptionName" property.
+      //If it exists, bind the named option to that widget.
+      QList<QWidget*> widgets = findChildren<QWidget*>();
+      for(auto it = widgets.begin(); it != widgets.end(); ++it)
+      {
+        QVariant binding = (*it)->property("reflOptionName");
+        if(binding.isValid())
+          m_bindings[binding.toString().toStdString()] = (*it)->objectName();
+      }
+    }
+
+    /** This slot saves the currently configured options to the presenter */
+    void QtReflOptionsDialog::saveOptions()
+    {
+      std::map<std::string,QVariant> options = m_presenter->options();
+
+      //Iterate through all our bound widgets, pushing their value into the options map
+      for(auto it = m_bindings.begin(); it != m_bindings.end(); ++it)
+      {
+        QString widgetName = it->second;
+        if(widgetName.isEmpty())
+          continue;
+
+        QCheckBox* checkbox = findChild<QCheckBox*>(widgetName);
+        if(checkbox)
+        {
+          options[it->first] = checkbox->isChecked();
+          continue;
+        }
+
+        QSpinBox* spinbox = findChild<QSpinBox*>(widgetName);
+        if(spinbox)
+        {
+          options[it->first] = spinbox->value();
+          continue;
+        }
+      }
+
+      //Update the presenter's options
+      m_presenter->setOptions(options);
+    }
+
+    /** This slot sets the ui to match the presenter's options */
+    void QtReflOptionsDialog::loadOptions()
+    {
+      std::map<std::string,QVariant> options = m_presenter->options();
+
+      //Set the values from the options
+      for(auto it = options.begin(); it != options.end(); ++it)
+      {
+        QString widgetName = m_bindings[it->first];
+        if(widgetName.isEmpty())
+          continue;
+
+        QCheckBox* checkbox = findChild<QCheckBox*>(widgetName);
+        if(checkbox)
+        {
+          checkbox->setChecked(it->second.toBool());
+          continue;
+        }
+
+        QSpinBox* spinbox = findChild<QSpinBox*>(widgetName);
+        if(spinbox)
+        {
+          spinbox->setValue(it->second.toInt());
+          continue;
+        }
+      }
+    }
+
+  } //CustomInterfaces
+} //MantidQt
+
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/Quasi.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/Quasi.cpp
index 0b852f1b52c94102e014e11e74bc556bb30f22fc..f66a6cd58f539b74507c321505b12a3ff1393975 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/Quasi.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/Quasi.cpp
@@ -136,6 +136,9 @@ namespace MantidQt
 			QString sampleName = m_uiForm.dsSample->getCurrentDataName();
 			QString resName = m_uiForm.dsResolution->getCurrentDataName();
 
+      // Should be either "red", "sqw" or "res"
+      QString resType = resName.right(3);
+
 			QString program = m_uiForm.cbProgram->currentText();
 
 			if(program == "Lorentzians")
@@ -167,7 +170,7 @@ namespace MantidQt
 
 			QString fitOps = "[" + elasticPeak + ", '" + background + "', " + fixedWidth + ", " + useResNorm + "]";
 
-			//Collect input from the properties browser
+			// Collect input from the properties browser
 			QString eMin = m_properties["EMin"]->valueText();
 			QString eMax = m_properties["EMax"]->valueText();
 			QString eRange = "[" + eMin + "," + eMax + "]";
@@ -176,7 +179,7 @@ namespace MantidQt
 			QString resBins = m_properties["ResBinning"]->valueText();
 			QString nBins = "[" + sampleBins + "," + resBins + "]";
 
-			//Output options
+			// Output options
 			if(m_uiForm.chkVerbose->isChecked()) { verbose = "True"; }
 			if(m_uiForm.chkSave->isChecked()) { save = "True"; }
 			QString plot = m_uiForm.cbPlot->currentText();
@@ -187,12 +190,21 @@ namespace MantidQt
 
 			runPythonScript(pyInput);
 
-      //Update mini plot
-      QString outWsName = sampleName.left(sampleName.size() - 3) + "QLr_Workspace_0";
+      // Get the correct workspace name based on the type of resolution file
+      if(program == "QL")
+      {
+        if(resType == "res")
+          program += "r";
+        else
+          program += "d";
+      }
+
+      // Update mini plot
+      QString outWsName = sampleName.left(sampleName.size() - 3) + program + "_Workspace_0";
       MatrixWorkspace_sptr outputWorkspace = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(outWsName.toStdString());
       TextAxis* axis = dynamic_cast<TextAxis*>(outputWorkspace->getAxis(1));
 
-      for(unsigned int histIndex = 0; histIndex < outputWorkspace->getNumberHistograms(); histIndex++)
+      for(size_t histIndex = 0; histIndex < outputWorkspace->getNumberHistograms(); histIndex++)
       {
         QString specName = QString::fromStdString(axis->label(histIndex));
 
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/ReflBlankMainViewPresenter.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/ReflBlankMainViewPresenter.cpp
deleted file mode 100644
index 26d1da245c7d2c5a157aaf6ee93837398a02750f..0000000000000000000000000000000000000000
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/ReflBlankMainViewPresenter.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-#include "MantidQtCustomInterfaces/ReflBlankMainViewPresenter.h"
-#include "MantidAPI/WorkspaceFactory.h"
-#include "MantidAPI/TableRow.h"
-using namespace Mantid::API;
-namespace
-{
-  ITableWorkspace_sptr createWorkspace()
-  {
-    ITableWorkspace_sptr ws = WorkspaceFactory::Instance().createTable();
-    auto colRuns = ws->addColumn("str","Run(s)");
-    auto colTheta = ws->addColumn("str","ThetaIn");
-    auto colTrans = ws->addColumn("str","TransRun(s)");
-    auto colQmin = ws->addColumn("str","Qmin");
-    auto colQmax = ws->addColumn("str","Qmax");
-    auto colDqq = ws->addColumn("str","dq/q");
-    auto colScale = ws->addColumn("str","Scale");
-    auto colStitch = ws->addColumn("int","StitchGroup");
-    auto colOptions = ws->addColumn("str","Options");
-
-    colRuns->setPlotType(0);
-    colTheta->setPlotType(0);
-    colTrans->setPlotType(0);
-    colQmin->setPlotType(0);
-    colQmax->setPlotType(0);
-    colDqq->setPlotType(0);
-    colScale->setPlotType(0);
-    colStitch->setPlotType(0);
-    colOptions->setPlotType(0);
-
-    TableRow row = ws->appendRow();
-    return ws;
-  }
-}
-
-namespace MantidQt
-{
-  namespace CustomInterfaces
-  {
-
-
-    //----------------------------------------------------------------------------------------------
-    /** Constructor
-    */
-    ReflBlankMainViewPresenter::ReflBlankMainViewPresenter(ReflMainView* view): ReflMainViewPresenter(view)
-    {
-      m_model = createWorkspace();
-      load();
-    }
-
-    //----------------------------------------------------------------------------------------------
-    /** Destructor
-    */
-    ReflBlankMainViewPresenter::~ReflBlankMainViewPresenter()
-    {
-    }
-
-    /**
-    Press changes to a previously saved-to item in the ADS, or ask for a name if never given one
-    */
-    void ReflBlankMainViewPresenter::save()
-    {
-      if (m_cache_name != "")
-      {
-        AnalysisDataService::Instance().addOrReplace(m_cache_name, boost::shared_ptr<ITableWorkspace>(m_model->clone()));
-      }
-      else
-      {
-        saveAs();
-      }
-    }
-
-    /**
-    Press changes to a new item in the ADS
-    */
-    void ReflBlankMainViewPresenter::saveAs()
-    {
-      std::string userString = m_view->askUserString("Save As", "Enter a workspace name:", "Workspace");
-      if(!userString.empty())
-      {
-        m_cache_name = userString;
-        save();
-      }
-    }
-  } // namespace CustomInterfaces
-} // namespace Mantid
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/ReflLoadedMainViewPresenter.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/ReflLoadedMainViewPresenter.cpp
deleted file mode 100644
index 5a2795a76c7235f225328f68ba1943ee751956ab..0000000000000000000000000000000000000000
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/ReflLoadedMainViewPresenter.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-#include "MantidQtCustomInterfaces/ReflLoadedMainViewPresenter.h"
-#include "MantidAPI/ITableWorkspace.h"
-#include "MantidAPI/WorkspaceFactory.h"
-#include "MantidQtCustomInterfaces/ReflMainView.h"
-using namespace Mantid::API;
-namespace
-{
-  void hasValidModel(ITableWorkspace_sptr model)
-  {
-    if(model->columnCount() != 9)
-      throw std::runtime_error("Selected table has the incorrect number of columns (9) to be used as a reflectometry table.");
-
-    try
-    {
-      model->String(0,0);
-      model->String(0,1);
-      model->String(0,2);
-      model->String(0,3);
-      model->String(0,4);
-      model->String(0,5);
-      model->String(0,6);
-      model->Int(0,7);
-      model->String(0,8);
-    }
-    catch(const std::runtime_error&)
-    {
-      throw std::runtime_error("Selected table does not meet the specifications to become a model for this interface.");
-    }
-  }
-}
-namespace MantidQt
-{
-  namespace CustomInterfaces
-  {
-
-
-    //----------------------------------------------------------------------------------------------
-    /** Constructor
-    */
-
-    ReflLoadedMainViewPresenter::ReflLoadedMainViewPresenter(ITableWorkspace_sptr model, ReflMainView* view):
-      ReflMainViewPresenter(boost::shared_ptr<ITableWorkspace>(model->clone()), view)
-    {
-      if (model->name() != "")
-      {
-        m_cache_name = model->name();
-      }
-      else
-      {
-        throw std::runtime_error("Supplied model workspace must have a name");
-      }
-      m_cache = model;
-      hasValidModel(m_model);
-      load();
-    }
-
-    ReflLoadedMainViewPresenter::ReflLoadedMainViewPresenter(std::string model, ReflMainView* view):
-      ReflMainViewPresenter(boost::shared_ptr<ITableWorkspace>(AnalysisDataService::Instance().retrieveWS<ITableWorkspace>(model)->clone()), view)
-    {
-      m_cache = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>(model);
-      if (m_cache->name() != "")
-      {
-        m_cache_name = m_cache->name();
-      }
-      else
-      {
-        throw std::runtime_error("Supplied model workspace must have a name");
-      }
-      hasValidModel(m_model);
-      load();
-    }
-
-    //----------------------------------------------------------------------------------------------
-    /** Destructor
-    */
-    ReflLoadedMainViewPresenter::~ReflLoadedMainViewPresenter()
-    {
-
-    }
-
-    /**
-    Press changes to the same item in the ADS
-    */
-    void ReflLoadedMainViewPresenter::save()
-    {
-      AnalysisDataService::Instance().addOrReplace(m_cache_name,boost::shared_ptr<ITableWorkspace>(m_model->clone()));
-    }
-
-    /**
-    Press changes to a new item in the ADS
-    */
-    void ReflLoadedMainViewPresenter::saveAs()
-    {
-      std::string userString = m_view->askUserString("Save As", "Enter a workspace name:", "Workspace");
-      if(!userString.empty())
-      {
-        m_cache_name = userString;
-        save();
-      }
-    }
-
-  } // namespace CustomInterfaces
-} // namespace Mantid
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/ReflMainView.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/ReflMainView.cpp
deleted file mode 100644
index 88019bdf982ac5e7c49e2bc84e29c0bd652fe099..0000000000000000000000000000000000000000
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/ReflMainView.cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "MantidQtCustomInterfaces/ReflMainView.h"
-#include "MantidAPI/ITableWorkspace.h"
-
-namespace MantidQt
-{
-  namespace CustomInterfaces
-  {
-
-    ReflMainView::ReflMainView()
-    {
-    }
-
-    ReflMainView::~ReflMainView()
-    {
-    }
-  }
-}
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/ReflMainViewPresenter.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/ReflMainViewPresenter.cpp
index 901090f4639d94149ec965e5bc4b98cf037f904f..774515f285daf8d8fa708c4016b19d2764325f2b 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/ReflMainViewPresenter.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/ReflMainViewPresenter.cpp
@@ -1,32 +1,253 @@
 #include "MantidQtCustomInterfaces/ReflMainViewPresenter.h"
 #include "MantidAPI/AlgorithmManager.h"
 #include "MantidAPI/ITableWorkspace.h"
+#include "MantidAPI/TableRow.h"
 #include "MantidGeometry/Instrument/ParameterMap.h"
 #include "MantidKernel/Strings.h"
 #include "MantidKernel/TimeSeriesProperty.h"
 #include "MantidKernel/Utils.h"
 #include "MantidQtCustomInterfaces/ReflMainView.h"
+#include "MantidQtCustomInterfaces/QReflTableModel.h"
+#include "MantidQtCustomInterfaces/QtReflOptionsDialog.h"
+#include "MantidQtMantidWidgets/AlgorithmHintStrategy.h"
 
 #include <boost/regex.hpp>
+#include <boost/tokenizer.hpp>
+
+#include <QSettings>
 
 using namespace Mantid::API;
 using namespace Mantid::Geometry;
 using namespace Mantid::Kernel;
+using namespace MantidQt::MantidWidgets;
+
+namespace
+{
+  const QString ReflSettingsGroup = "Mantid/CustomInterfaces/ISISReflectometry";
+
+  void validateModel(ITableWorkspace_sptr model)
+  {
+    if(!model)
+      throw std::runtime_error("Null pointer");
+
+    if(model->columnCount() != 9)
+      throw std::runtime_error("Selected table has the incorrect number of columns (9) to be used as a reflectometry table.");
+
+    try
+    {
+      model->String(0,0);
+      model->String(0,1);
+      model->String(0,2);
+      model->String(0,3);
+      model->String(0,4);
+      model->String(0,5);
+      model->Double(0,6);
+      model->Int(0,7);
+      model->String(0,8);
+    }
+    catch(const std::runtime_error&)
+    {
+      throw std::runtime_error("Selected table does not meet the specifications to become a model for this interface.");
+    }
+  }
+
+  bool isValidModel(Workspace_sptr model)
+  {
+    try
+    {
+      validateModel(boost::dynamic_pointer_cast<ITableWorkspace>(model));
+    }
+    catch(...)
+    {
+      return false;
+    }
+    return true;
+  }
+
+  ITableWorkspace_sptr createWorkspace()
+  {
+    ITableWorkspace_sptr ws = WorkspaceFactory::Instance().createTable();
+    auto colRuns = ws->addColumn("str","Run(s)");
+    auto colTheta = ws->addColumn("str","ThetaIn");
+    auto colTrans = ws->addColumn("str","TransRun(s)");
+    auto colQmin = ws->addColumn("str","Qmin");
+    auto colQmax = ws->addColumn("str","Qmax");
+    auto colDqq = ws->addColumn("str","dq/q");
+    auto colScale = ws->addColumn("double","Scale");
+    auto colStitch = ws->addColumn("int","StitchGroup");
+    auto colOptions = ws->addColumn("str","Options");
+
+    colRuns->setPlotType(0);
+    colTheta->setPlotType(0);
+    colTrans->setPlotType(0);
+    colQmin->setPlotType(0);
+    colQmax->setPlotType(0);
+    colDqq->setPlotType(0);
+    colScale->setPlotType(0);
+    colStitch->setPlotType(0);
+    colOptions->setPlotType(0);
+
+    return ws;
+  }
+
+  ITableWorkspace_sptr createDefaultWorkspace()
+  {
+    //Create a blank workspace with one line and set the scale column to 1
+    auto ws = createWorkspace();
+    ws->appendRow();
+    ws->Double(0, MantidQt::CustomInterfaces::ReflMainViewPresenter::COL_SCALE) = 1.0;
+    return ws;
+  }
+}
 
 namespace MantidQt
 {
   namespace CustomInterfaces
   {
-    ReflMainViewPresenter::ReflMainViewPresenter(ReflMainView* view): m_view(view)
+    ReflMainViewPresenter::ReflMainViewPresenter(ReflMainView* view):
+      m_view(view),
+      m_tableDirty(false),
+      m_addObserver(*this, &ReflMainViewPresenter::handleAddEvent),
+      m_remObserver(*this, &ReflMainViewPresenter::handleRemEvent),
+      m_clearObserver(*this, &ReflMainViewPresenter::handleClearEvent),
+      m_renameObserver(*this, &ReflMainViewPresenter::handleRenameEvent),
+      m_replaceObserver(*this, &ReflMainViewPresenter::handleReplaceEvent)
     {
+      //Initialise options
+      initOptions();
+
+      //Set up the instrument selectors
+      std::vector<std::string> instruments;
+      instruments.push_back("INTER");
+      instruments.push_back("SURF");
+      instruments.push_back("CRISP");
+      instruments.push_back("POLREF");
+
+      //If the user's configured default instrument is in this list, set it as the default, otherwise use INTER
+      const std::string defaultInst = Mantid::Kernel::ConfigService::Instance().getString("default.instrument");
+      if(std::find(instruments.begin(), instruments.end(), defaultInst) != instruments.end())
+        m_view->setInstrumentList(instruments, defaultInst);
+      else
+        m_view->setInstrumentList(instruments, "INTER");
+
+      //Populate an initial list of valid tables to open, and subscribe to the ADS to keep it up to date
+      Mantid::API::AnalysisDataServiceImpl& ads = Mantid::API::AnalysisDataService::Instance();
+
+      std::set<std::string> items;
+      items = ads.getObjectNames();
+      for(auto it = items.begin(); it != items.end(); ++it )
+      {
+        const std::string name = *it;
+        Workspace_sptr ws = ads.retrieve(name);
+
+        if(isValidModel(ws))
+          m_workspaceList.insert(name);
+      }
+
+      ads.notificationCenter.addObserver(m_addObserver);
+      ads.notificationCenter.addObserver(m_remObserver);
+      ads.notificationCenter.addObserver(m_renameObserver);
+      ads.notificationCenter.addObserver(m_clearObserver);
+      ads.notificationCenter.addObserver(m_replaceObserver);
+
+      m_view->setTableList(m_workspaceList);
+
+      //Provide autocompletion hints for the options column. We use the algorithm's properties minus
+      //those we blacklist. We blacklist any useless properties or ones we're handling that the user
+      //should'nt touch.
+      IAlgorithm_sptr alg = AlgorithmManager::Instance().create("ReflectometryReductionOneAuto");
+      std::set<std::string> blacklist;
+      blacklist.insert("ThetaIn");
+      blacklist.insert("ThetaOut");
+      blacklist.insert("InputWorkspace");
+      blacklist.insert("OutputWorkspace");
+      blacklist.insert("OutputWorkspaceWavelength");
+      blacklist.insert("FirstTransmissionRun");
+      blacklist.insert("SecondTransmissionRun");
+      m_view->setOptionsHintStrategy(new AlgorithmHintStrategy(alg, blacklist));
+
+      //Start with a blank table
+      newTable();
     }
 
-    ReflMainViewPresenter::ReflMainViewPresenter(ITableWorkspace_sptr model, ReflMainView* view): m_model(model), m_view(view)
+    ReflMainViewPresenter::~ReflMainViewPresenter()
     {
+      Mantid::API::AnalysisDataServiceImpl& ads = Mantid::API::AnalysisDataService::Instance();
+      ads.notificationCenter.removeObserver(m_addObserver);
+      ads.notificationCenter.removeObserver(m_remObserver);
+      ads.notificationCenter.removeObserver(m_clearObserver);
+      ads.notificationCenter.removeObserver(m_renameObserver);
+      ads.notificationCenter.removeObserver(m_replaceObserver);
     }
 
-    ReflMainViewPresenter::~ReflMainViewPresenter()
+    /**
+     * Finds the first unused group id
+     */
+    int ReflMainViewPresenter::getUnusedGroup(std::set<int> ignoredRows) const
     {
+      std::set<int> usedGroups;
+
+      //Scan through all the rows, working out which group ids are used
+      for(int idx = 0; idx < m_model->rowCount(); ++idx)
+      {
+        if(ignoredRows.find(idx) != ignoredRows.end())
+          continue;
+
+        //This is an unselected row. Add it to the list of used group ids
+        usedGroups.insert(m_model->data(m_model->index(idx, COL_GROUP)).toInt());
+      }
+
+      int groupId = 0;
+
+      //While the group id is one of the used ones, increment it by 1
+      while(usedGroups.find(groupId) != usedGroups.end())
+        groupId++;
+
+      return groupId;
+    }
+
+    /**
+    Parses a string in the format `a = 1,b=2, c = "1,2,3,4", d = 5.0, e='a,b,c'` into a map of key/value pairs
+    @param str The input string
+    @throws std::runtime_error on an invalid input string
+    */
+    std::map<std::string,std::string> ReflMainViewPresenter::parseKeyValueString(const std::string& str)
+    {
+      //Tokenise, using '\' as an escape character, ',' as a delimiter and " and ' as quote characters
+      boost::tokenizer<boost::escaped_list_separator<char> > tok(str, boost::escaped_list_separator<char>("\\", ",", "\"'"));
+
+      std::map<std::string,std::string> kvp;
+
+      for(auto it = tok.begin(); it != tok.end(); ++it)
+      {
+        std::vector<std::string> valVec;
+        boost::split(valVec, *it, boost::is_any_of("="));
+
+        if(valVec.size() > 1)
+        {
+          //We split on all '='s. The first delimits the key, the rest are assumed to be part of the value
+          std::string key = valVec[0];
+          //Drop the key from the values vector
+          valVec.erase(valVec.begin());
+          //Join the remaining sections,
+          std::string value = boost::algorithm::join(valVec, "=");
+
+          //Remove any unwanted whitespace
+          boost::trim(key);
+          boost::trim(value);
+
+          if(key.empty() || value.empty())
+            throw std::runtime_error("Invalid key value pair, '" + *it + "'");
+
+
+          kvp[key] = value;
+        }
+        else
+        {
+          throw std::runtime_error("Invalid key value pair, '" + *it + "'");
+        }
+      }
+      return kvp;
     }
 
     /**
@@ -40,33 +261,54 @@ namespace MantidQt
         return;
       }
 
-      std::vector<size_t> rows = m_view->getSelectedRowIndexes();
-      if(rows.size() == 0)
+      std::set<int> rows = m_view->getSelectedRows();
+      if(rows.empty())
       {
-        //Does the user want to abort?
-        if(!m_view->askUserYesNo("This will process all rows in the table. Continue?","Process all rows?"))
-          return;
+        if(m_options["WarnProcessAll"].toBool())
+        {
+          //Does the user want to abort?
+          if(!m_view->askUserYesNo("This will process all rows in the table. Continue?","Process all rows?"))
+            return;
+        }
 
         //They want to process all rows, so populate rows with every index in the model
-        for(size_t idx = 0; idx < m_model->rowCount(); ++idx)
-          rows.push_back(idx);
+        for(int idx = 0; idx < m_model->rowCount(); ++idx)
+          rows.insert(idx);
       }
 
-      //Maps group numbers to the list of rows in that group we want to process
-      std::map<int,std::vector<size_t> > groups;
+      //Map group numbers to the set of rows in that group we want to process
+      std::map<int,std::set<int> > groups;
+      for(auto it = rows.begin(); it != rows.end(); ++it)
+        groups[m_model->data(m_model->index(*it, COL_GROUP)).toInt()].insert(*it);
+
+      //Check each group and warn if we're only partially processing it
+      for(auto gIt = groups.begin(); gIt != groups.end(); ++gIt)
+      {
+        const int& groupId = gIt->first;
+        const std::set<int>& groupRows = gIt->second;
+        //Are we only partially processing a group?
+        if(groupRows.size() < numRowsInGroup(gIt->first) && m_options["WarnProcessPartialGroup"].toBool())
+        {
+          std::stringstream err;
+          err << "You have only selected " << groupRows.size() << " of the ";
+          err << numRowsInGroup(groupId) << " rows in group " << groupId << ".";
+          err << " Are you sure you want to continue?";
+          if(!m_view->askUserYesNo(err.str(), "Continue Processing?"))
+            return;
+        }
+      }
+
+      //Validate the rows
       for(auto it = rows.begin(); it != rows.end(); ++it)
       {
         try
         {
           validateRow(*it);
           autofillRow(*it);
-
-          const int group = m_model->Int(*it, COL_GROUP);
-          groups[group].push_back(*it);
         }
         catch(std::exception& ex)
         {
-          const std::string rowNo = Mantid::Kernel::Strings::toString<size_t>(*it + 1);
+          const std::string rowNo = Mantid::Kernel::Strings::toString<int>(*it + 1);
           m_view->giveUserCritical("Error found in row " + rowNo + ":\n" + ex.what(), "Error");
           return;
         }
@@ -80,19 +322,19 @@ namespace MantidQt
 
       for(auto gIt = groups.begin(); gIt != groups.end(); ++gIt)
       {
-        const std::vector<size_t> groupRows = gIt->second;
+        const std::set<int> groupRows = gIt->second;
 
-        //Process each row individually
+        //Reduce each row
         for(auto rIt = groupRows.begin(); rIt != groupRows.end(); ++rIt)
         {
           try
           {
-            processRow(*rIt);
+            reduceRow(*rIt);
             m_view->setProgress(++progress);
           }
           catch(std::exception& ex)
           {
-            const std::string rowNo = Mantid::Kernel::Strings::toString<size_t>(*rIt + 1);
+            const std::string rowNo = Mantid::Kernel::Strings::toString<int>(*rIt + 1);
             const std::string message = "Error encountered while processing row " + rowNo + ":\n";
             m_view->giveUserCritical(message + ex.what(), "Error");
             m_view->setProgress(0);
@@ -123,12 +365,12 @@ namespace MantidQt
     @param rowNo : The row in the model to validate
     @throws std::invalid_argument if the row fails validation
     */
-    void ReflMainViewPresenter::validateRow(size_t rowNo) const
+    void ReflMainViewPresenter::validateRow(int rowNo) const
     {
       if(rowNo >= m_model->rowCount())
         throw std::invalid_argument("Invalid row");
 
-      if(m_model->String(rowNo, COL_RUNS).empty())
+      if(m_model->data(m_model->index(rowNo, COL_RUNS)).toString().isEmpty())
         throw std::invalid_argument("Run column may not be empty.");
     }
 
@@ -137,16 +379,16 @@ namespace MantidQt
     @param rowNo : The row in the model to autofill
     @throws std::runtime_error if the row could not be auto-filled
     */
-    void ReflMainViewPresenter::autofillRow(size_t rowNo)
+    void ReflMainViewPresenter::autofillRow(int rowNo)
     {
       if(rowNo >= m_model->rowCount())
         throw std::runtime_error("Invalid row");
 
-      const std::string runStr = m_model->String(rowNo, COL_RUNS);
+      const std::string runStr = m_model->data(m_model->index(rowNo, COL_RUNS)).toString().toStdString();
       MatrixWorkspace_sptr run = boost::dynamic_pointer_cast<MatrixWorkspace>(loadRun(runStr, m_view->getProcessInstrument()));
 
       //Fetch two theta from the log if needed
-      if(m_model->String(rowNo, COL_ANGLE).empty())
+      if(m_model->data(m_model->index(rowNo, COL_ANGLE)).toString().isEmpty())
       {
         Property* logData = NULL;
 
@@ -172,24 +414,30 @@ namespace MantidQt
           throw std::runtime_error("Value for two theta could not be found in log.");
 
         //Update the model
-        m_model->String(rowNo, COL_ANGLE) = Strings::toString<double>(Utils::roundToDP(thetaVal, 3));
+        if(m_options["RoundAngle"].toBool())
+          thetaVal = Utils::roundToDP(thetaVal, m_options["RoundAnglePrecision"].toInt());
+
+        m_model->setData(m_model->index(rowNo, COL_ANGLE), thetaVal);
+        m_tableDirty = true;
       }
 
       //If we need to calculate the resolution, do.
-      if(m_model->String(rowNo, COL_DQQ).empty())
+      if(m_model->data(m_model->index(rowNo, COL_DQQ)).toString().isEmpty())
       {
         IAlgorithm_sptr calcResAlg = AlgorithmManager::Instance().create("CalculateResolution");
         calcResAlg->setProperty("Workspace", run);
-        calcResAlg->setProperty("TwoTheta", m_model->String(rowNo, COL_ANGLE));
+        calcResAlg->setProperty("TwoTheta", m_model->data(m_model->index(rowNo, COL_ANGLE)).toString().toStdString());
         calcResAlg->execute();
 
         //Update the model
         double dqqVal = calcResAlg->getProperty("Resolution");
-        m_model->String(rowNo, COL_DQQ) = Strings::toString<double>(dqqVal);
-      }
 
-      //Make sure the view updates
-      m_view->showTable(m_model);
+        if(m_options["RoundDQQ"].toBool())
+          dqqVal = Utils::roundToDP(dqqVal, m_options["RoundDQQPrecision"].toInt());
+
+        m_model->setData(m_model->index(rowNo, COL_DQQ), dqqVal);
+        m_tableDirty = true;
+      }
     }
 
     /**
@@ -284,22 +532,22 @@ namespace MantidQt
     }
 
     /**
-    Process a row
-    @param rowNo : The row in the model to process
-    @throws std::runtime_error if processing fails
+    Reduce a row
+    @param rowNo : The row in the model to reduce
+    @throws std::runtime_error if reduction fails
     */
-    void ReflMainViewPresenter::processRow(size_t rowNo)
+    void ReflMainViewPresenter::reduceRow(int rowNo)
     {
-      const std::string         run = m_model->String(rowNo, COL_RUNS);
-      const std::string    transStr = m_model->String(rowNo, COL_TRANSMISSION);
-      const std::string     options = m_model->String(rowNo, COL_OPTIONS);
+      const std::string      run = m_model->data(m_model->index(rowNo, COL_RUNS)).toString().toStdString();
+      const std::string transStr = m_model->data(m_model->index(rowNo, COL_TRANSMISSION)).toString().toStdString();
+      const std::string  options = m_model->data(m_model->index(rowNo, COL_OPTIONS)).toString().toStdString();
 
       double theta = 0;
 
-      const bool thetaGiven = !m_model->String(rowNo, COL_ANGLE).empty();
+      const bool thetaGiven = !m_model->data(m_model->index(rowNo, COL_ANGLE)).toString().isEmpty();
 
       if(thetaGiven)
-        Mantid::Kernel::Strings::convert<double>(m_model->String(rowNo, COL_ANGLE), theta);
+        theta = m_model->data(m_model->index(rowNo, COL_ANGLE)).toDouble();
 
       Workspace_sptr runWS = loadRun(run, m_view->getProcessInstrument());
       const std::string runNo = getRunNumber(runWS);
@@ -310,15 +558,15 @@ namespace MantidQt
 
       IAlgorithm_sptr algReflOne = AlgorithmManager::Instance().create("ReflectometryReductionOneAuto");
       algReflOne->initialize();
-      algReflOne->setProperty("InputWorkspace", runWS);
+      algReflOne->setProperty("InputWorkspace", runWS->name());
       if(transWS)
-        algReflOne->setProperty("FirstTransmissionRun", transWS);
+        algReflOne->setProperty("FirstTransmissionRun", transWS->name());
       algReflOne->setProperty("OutputWorkspace", "IvsQ_" + runNo);
       algReflOne->setProperty("OutputWorkspaceWaveLength", "IvsLam_" + runNo);
       algReflOne->setProperty("ThetaIn", theta);
 
       //Parse and set any user-specified options
-      auto optionsMap = Mantid::Kernel::Strings::splitToKeyValues(options);
+      auto optionsMap = parseKeyValueString(options);
       for(auto kvp = optionsMap.begin(); kvp != optionsMap.end(); ++kvp)
       {
         try
@@ -336,19 +584,33 @@ namespace MantidQt
       if(!algReflOne->isExecuted())
         throw std::runtime_error("Failed to run ReflectometryReductionOneAuto.");
 
-      //Processing has completed. Put Qmin and Qmax into the table if needed, for stitching.
-      if(m_model->String(rowNo, COL_QMIN).empty() || m_model->String(rowNo, COL_QMAX).empty())
+      const double scale = m_model->data(m_model->index(rowNo, COL_SCALE)).toDouble();
+      if(scale != 1.0)
+      {
+        IAlgorithm_sptr algScale = AlgorithmManager::Instance().create("Scale");
+        algScale->initialize();
+        algScale->setProperty("InputWorkspace", "IvsQ_" + runNo);
+        algScale->setProperty("OutputWorkspace", "IvsQ_" + runNo);
+        algScale->setProperty("Factor", 1.0 / scale);
+        algScale->execute();
+
+        if(!algScale->isExecuted())
+          throw std::runtime_error("Failed to run Scale algorithm");
+      }
+
+      //Reduction has completed. Put Qmin and Qmax into the table if needed, for stitching.
+      if(m_model->data(m_model->index(rowNo, COL_QMIN)).toString().isEmpty() || m_model->data(m_model->index(rowNo, COL_QMAX)).toString().isEmpty())
       {
         MatrixWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("IvsQ_" + runNo);
         std::vector<double> qrange = calcQRange(ws, theta);
 
-        if(m_model->String(rowNo, COL_QMIN).empty())
-          m_model->String(rowNo, COL_QMIN) = Strings::toString<double>(qrange[0]);
+        if(m_model->data(m_model->index(rowNo, COL_QMIN)).toString().isEmpty())
+          m_model->setData(m_model->index(rowNo, COL_QMIN), qrange[0]);
 
-        if(m_model->String(rowNo, COL_QMAX).empty())
-          m_model->String(rowNo, COL_QMAX) = Strings::toString<double>(qrange[1]);
+        if(m_model->data(m_model->index(rowNo, COL_QMAX)).toString().isEmpty())
+          m_model->setData(m_model->index(rowNo, COL_QMAX), qrange[1]);
 
-        m_view->showTable(m_model);
+        m_tableDirty = true;
       }
     }
 
@@ -373,8 +635,12 @@ namespace MantidQt
 
       double qmin = 4 * M_PI / lmax * sin(theta * M_PI / 180.0);
       double qmax = 4 * M_PI / lmin * sin(theta * M_PI / 180.0);
-      qmin = Utils::roundToDP(qmin, 3);
-      qmax = Utils::roundToDP(qmax, 3);
+
+      if(m_options["RoundQMin"].toBool())
+        qmin = Utils::roundToDP(qmin, m_options["RoundQMinPrecision"].toInt());
+
+      if(m_options["RoundQMax"].toBool())
+        qmax = Utils::roundToDP(qmax, m_options["RoundQMaxPrecision"].toInt());
 
       std::vector<double> ret;
       ret.push_back(qmin);
@@ -386,15 +652,12 @@ namespace MantidQt
     Stitches the workspaces created by the given rows together.
     @param rows : the list of rows
     */
-    void ReflMainViewPresenter::stitchRows(std::vector<size_t> rows)
+    void ReflMainViewPresenter::stitchRows(std::set<int> rows)
     {
       //If we can get away with doing nothing, do.
       if(rows.size() < 2)
         return;
 
-      //Ensure the rows are in order.
-      std::sort(rows.begin(), rows.end());
-
       //Properties for Stitch1DMany
       std::vector<std::string> workspaceNames;
       std::vector<std::string> runs;
@@ -406,13 +669,9 @@ namespace MantidQt
       //Go through each row and prepare the properties
       for(auto rowIt = rows.begin(); rowIt != rows.end(); ++rowIt)
       {
-        const std::string  runStr = m_model->String(*rowIt, COL_RUNS);
-        const std::string qMinStr = m_model->String(*rowIt, COL_QMIN);
-        const std::string qMaxStr = m_model->String(*rowIt, COL_QMAX);
-
-        double qmin, qmax;
-        Mantid::Kernel::Strings::convert<double>(qMinStr, qmin);
-        Mantid::Kernel::Strings::convert<double>(qMaxStr, qmax);
+        const std::string  runStr = m_model->data(m_model->index(*rowIt, COL_RUNS)).toString().toStdString();
+        const double         qmin = m_model->data(m_model->index(*rowIt, COL_QMIN)).toDouble();
+        const double         qmax = m_model->data(m_model->index(*rowIt, COL_QMAX)).toDouble();
 
         Workspace_sptr runWS = loadRun(runStr);
         if(runWS)
@@ -429,9 +688,7 @@ namespace MantidQt
         endOverlaps.push_back(qmax);
       }
 
-      double dqq;
-      std::string dqqStr = m_model->String(rows.front(), COL_DQQ);
-      Mantid::Kernel::Strings::convert<double>(dqqStr, dqq);
+      double dqq = m_model->data(m_model->index(*(rows.begin()), COL_DQQ)).toDouble();
 
       //params are qmin, -dqq, qmax for the final output
       params.push_back(*std::min_element(startOverlaps.begin(), startOverlaps.end()));
@@ -511,27 +768,44 @@ namespace MantidQt
     }
 
     /**
-    Add row(s) to the model
+    Inserts a new row in the specified location
+    @param index The index to insert the new row before
     */
-    void ReflMainViewPresenter::addRow()
+    void ReflMainViewPresenter::insertRow(int index)
     {
-      std::vector<size_t> rows = m_view->getSelectedRowIndexes();
-      if (rows.size() == 0)
-      {
-        m_model->appendRow();
-      }
+      const int groupId = getUnusedGroup();
+      if(!m_model->insertRow(index))
+        return;
+      //Set the default scale to 1.0
+      m_model->setData(m_model->index(index, COL_SCALE), 1.0);
+      //Set the group id of the new row
+      m_model->setData(m_model->index(index, COL_GROUP), groupId);
+    }
+
+    /**
+    Insert a row after the last selected row
+    */
+    void ReflMainViewPresenter::appendRow()
+    {
+      std::set<int> rows = m_view->getSelectedRows();
+      if(rows.empty())
+        insertRow(m_model->rowCount());
       else
-      {
-        //as selections have to be contigous, then all that needs to be done is add
-        //a number of rows at the highest index equal to the size of the returned vector
-        std::sort (rows.begin(), rows.end());
-        for (size_t idx = rows.size(); 0 < idx; --idx)
-        {
-          m_model->insertRow(rows.at(0));
-        }
-      }
+        insertRow(*rows.rbegin() + 1);
+      m_tableDirty = true;
+    }
 
-      m_view->showTable(m_model);
+    /**
+    Insert a row before the first selected row
+    */
+    void ReflMainViewPresenter::prependRow()
+    {
+      std::set<int> rows = m_view->getSelectedRows();
+      if(rows.empty())
+        insertRow(0);
+      else
+        insertRow(*rows.begin());
+      m_tableDirty = true;
     }
 
     /**
@@ -539,12 +813,11 @@ namespace MantidQt
     */
     void ReflMainViewPresenter::deleteRow()
     {
-      std::vector<size_t> rows = m_view->getSelectedRowIndexes();
-      std::sort(rows.begin(), rows.end());
-      for(size_t idx = rows.size(); 0 < idx; --idx)
-        m_model->removeRow(rows.at(0));
+      std::set<int> rows = m_view->getSelectedRows();
+      for(auto row = rows.rbegin(); row != rows.rend(); ++row)
+        m_model->removeRow(*row);
 
-      m_view->showTable(m_model);
+      m_tableDirty = true;
     }
 
     /**
@@ -552,60 +825,371 @@ namespace MantidQt
     */
     void ReflMainViewPresenter::groupRows()
     {
-      std::vector<size_t> rows = m_view->getSelectedRowIndexes();
-      std::vector<int> usedGroups;
+      const std::set<int> rows = m_view->getSelectedRows();
+      //Find the first unused group id, ignoring the selected rows
+      const int groupId = getUnusedGroup(rows);
 
-      //First we need find the first unused group id
+      //Now we just have to set the group id on the selected rows
+      for(auto it = rows.begin(); it != rows.end(); ++it)
+        m_model->setData(m_model->index(*it, COL_GROUP), groupId);
 
-      //Scan through all the rows, working out which group ids are used
-      for(size_t idx = 0; idx < m_model->rowCount(); ++idx)
-      {
-        //If this row is one of the selected rows we don't need to include it
-        if(std::find(rows.begin(), rows.end(), idx) != rows.end())
-          continue;
+      m_tableDirty = true;
+    }
 
-        //This is an unselected row. At it to the list of used group ids
-        usedGroups.push_back(m_model->Int(idx, COL_GROUP));
+    /**
+    Used by the view to tell the presenter something has changed
+    */
+    void ReflMainViewPresenter::notify(IReflPresenter::Flag flag)
+    {
+      switch(flag)
+      {
+      case IReflPresenter::SaveAsFlag:          saveTableAs();       break;
+      case IReflPresenter::SaveFlag:            saveTable();         break;
+      case IReflPresenter::AppendRowFlag:       appendRow();         break;
+      case IReflPresenter::PrependRowFlag:      prependRow();        break;
+      case IReflPresenter::DeleteRowFlag:       deleteRow();         break;
+      case IReflPresenter::ProcessFlag:         process();           break;
+      case IReflPresenter::GroupRowsFlag:       groupRows();         break;
+      case IReflPresenter::OpenTableFlag:       openTable();         break;
+      case IReflPresenter::NewTableFlag:        newTable();          break;
+      case IReflPresenter::TableUpdatedFlag:    m_tableDirty = true; break;
+      case IReflPresenter::ExpandSelectionFlag: expandSelection();   break;
+      case IReflPresenter::OptionsDialogFlag:   showOptionsDialog(); break;
+      case IReflPresenter::ClearSelectedFlag:   clearSelected();     break;
+      case IReflPresenter::CopySelectedFlag:    copySelected();      break;
+      case IReflPresenter::CutSelectedFlag:     cutSelected();       break;
+      case IReflPresenter::PasteSelectedFlag:   pasteSelected();     break;
       }
+      //Not having a 'default' case is deliberate. gcc issues a warning if there's a flag we aren't handling.
+    }
 
-      int groupId = 0;
+    /**
+    Press changes to the same item in the ADS
+    */
+    void ReflMainViewPresenter::saveTable()
+    {
+      if(!m_wsName.empty())
+      {
+        AnalysisDataService::Instance().addOrReplace(m_wsName,boost::shared_ptr<ITableWorkspace>(m_ws->clone()));
+        m_tableDirty = false;
+      }
+      else
+      {
+        saveTableAs();
+      }
+    }
 
-      //While the group id is one of the used ones, increment it by 1
-      while(std::find(usedGroups.begin(), usedGroups.end(), groupId) != usedGroups.end())
-        groupId++;
+    /**
+    Press changes to a new item in the ADS
+    */
+    void ReflMainViewPresenter::saveTableAs()
+    {
+      const std::string userString = m_view->askUserString("Save As", "Enter a workspace name:", "Workspace");
+      if(!userString.empty())
+      {
+        m_wsName = userString;
+        saveTable();
+      }
+    }
 
-      //Now we just have to set the group id on the selected rows
-      for(auto it = rows.begin(); it != rows.end(); ++it)
-        m_model->Int(*it, COL_GROUP) = groupId;
+    /**
+    Start a new, untitled table
+    */
+    void ReflMainViewPresenter::newTable()
+    {
+      if(m_tableDirty && m_options["WarnDiscardChanges"].toBool())
+        if(!m_view->askUserYesNo("Your current table has unsaved changes. Are you sure you want to discard them?","Start New Table?"))
+          return;
 
+      m_ws = createDefaultWorkspace();
+      m_model.reset(new QReflTableModel(m_ws));
+      m_wsName.clear();
       m_view->showTable(m_model);
+
+      m_tableDirty = false;
     }
 
     /**
-    Used by the view to tell the presenter something has changed
+    Open a table from the ADS
     */
-    void ReflMainViewPresenter::notify(int flag)
+    void ReflMainViewPresenter::openTable()
     {
-      switch(flag)
+      if(m_tableDirty && m_options["WarnDiscardChanges"].toBool())
+        if(!m_view->askUserYesNo("Your current table has unsaved changes. Are you sure you want to discard them?","Open Table?"))
+          return;
+
+      auto& ads = AnalysisDataService::Instance();
+      const std::string toOpen = m_view->getWorkspaceToOpen();
+
+      if(toOpen.empty())
+        return;
+
+      if(!ads.isValid(toOpen).empty())
       {
-      case ReflMainView::SaveAsFlag:    saveAs();     break;
-      case ReflMainView::SaveFlag:      save();       break;
-      case ReflMainView::AddRowFlag:    addRow();     break;
-      case ReflMainView::DeleteRowFlag: deleteRow();  break;
-      case ReflMainView::ProcessFlag:   process();    break;
-      case ReflMainView::GroupRowsFlag: groupRows();  break;
-
-      case ReflMainView::NoFlags:       return;
+        m_view->giveUserCritical("Could not open workspace: " + toOpen, "Error");
+        return;
+      }
+
+      ITableWorkspace_sptr origTable = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>(toOpen);
+
+      //We create a clone of the table for live editing. The original is not updated unless we explicitly save.
+      ITableWorkspace_sptr newTable = boost::shared_ptr<ITableWorkspace>(origTable->clone());
+      try
+      {
+        validateModel(newTable);
+        m_ws = newTable;
+        m_model.reset(new QReflTableModel(m_ws));
+        m_wsName = toOpen;
+        m_view->showTable(m_model);
+        m_tableDirty = false;
+      }
+      catch(std::runtime_error& e)
+      {
+        m_view->giveUserCritical("Could not open workspace: " + std::string(e.what()), "Error");
       }
-      //Not having a 'default' case is deliberate. gcc issues a warning if there's a flag we aren't handling.
     }
 
     /**
-    Load the model into the table
+    Handle ADS add events
     */
-    void ReflMainViewPresenter::load()
+    void ReflMainViewPresenter::handleAddEvent(Mantid::API::WorkspaceAddNotification_ptr pNf)
     {
-      m_view->showTable(m_model);
+      const std::string name = pNf->objectName();
+
+      if(Mantid::API::AnalysisDataService::Instance().isHiddenDataServiceObject(name))
+        return;
+
+      if(!isValidModel(pNf->object()))
+        return;
+
+      m_workspaceList.insert(name);
+      m_view->setTableList(m_workspaceList);
+    }
+
+    /**
+    Handle ADS remove events
+    */
+    void ReflMainViewPresenter::handleRemEvent(Mantid::API::WorkspacePostDeleteNotification_ptr pNf)
+    {
+      const std::string name = pNf->objectName();
+      m_workspaceList.erase(name);
+      m_view->setTableList(m_workspaceList);
+    }
+
+    /**
+    Handle ADS clear events
+    */
+    void ReflMainViewPresenter::handleClearEvent(Mantid::API::ClearADSNotification_ptr)
+    {
+      m_workspaceList.clear();
+      m_view->setTableList(m_workspaceList);
+    }
+
+    /**
+    Handle ADS rename events
+    */
+    void ReflMainViewPresenter::handleRenameEvent(Mantid::API::WorkspaceRenameNotification_ptr pNf)
+    {
+      //If we have this workspace, rename it
+      const std::string name = pNf->objectName();
+      const std::string newName = pNf->newObjectName();
+
+      if(m_workspaceList.find(name) == m_workspaceList.end())
+        return;
+
+      m_workspaceList.erase(name);
+      m_workspaceList.insert(newName);
+      m_view->setTableList(m_workspaceList);
+    }
+
+    /**
+    Handle ADS replace events
+    */
+    void ReflMainViewPresenter::handleReplaceEvent(Mantid::API::WorkspaceAfterReplaceNotification_ptr pNf)
+    {
+      const std::string name = pNf->objectName();
+      //Erase it
+      m_workspaceList.erase(name);
+
+      //If it's a table workspace, bring it back
+      if(isValidModel(pNf->object()))
+        m_workspaceList.insert(name);
+
+      m_view->setTableList(m_workspaceList);
+    }
+
+    /** Returns how many rows there are in a given group
+        @param groupId : The id of the group to count the rows of
+        @returns The number of rows in the group
+     */
+    size_t ReflMainViewPresenter::numRowsInGroup(int groupId) const
+    {
+      size_t count = 0;
+      for(int i = 0; i < m_model->rowCount(); ++i)
+        if(m_model->data(m_model->index(i, COL_GROUP)).toInt() == groupId)
+          count++;
+      return count;
+    }
+
+    /** Expands the current selection to all the rows in the selected groups */
+    void ReflMainViewPresenter::expandSelection()
+    {
+      std::set<int> groupIds;
+
+      std::set<int> rows = m_view->getSelectedRows();
+      for(auto row = rows.begin(); row != rows.end(); ++row)
+        groupIds.insert(m_model->data(m_model->index(*row, COL_GROUP)).toInt());
+
+      std::set<int> selection;
+
+      for(int i = 0; i < m_model->rowCount(); ++i)
+        if(groupIds.find(m_model->data(m_model->index(i, COL_GROUP)).toInt()) != groupIds.end())
+          selection.insert(i);
+
+      m_view->setSelection(selection);
+    }
+
+    /** Clear the currently selected rows */
+    void ReflMainViewPresenter::clearSelected()
+    {
+      std::set<int> rows = m_view->getSelectedRows();
+      std::set<int> ignore;
+      for(auto row = rows.begin(); row != rows.end(); ++row)
+      {
+        ignore.clear();
+        ignore.insert(*row);
+
+        m_model->setData(m_model->index(*row, COL_RUNS), "");
+        m_model->setData(m_model->index(*row, COL_ANGLE), "");
+        m_model->setData(m_model->index(*row, COL_TRANSMISSION), "");
+        m_model->setData(m_model->index(*row, COL_QMIN), "");
+        m_model->setData(m_model->index(*row, COL_QMAX), "");
+        m_model->setData(m_model->index(*row, COL_SCALE), 1.0);
+        m_model->setData(m_model->index(*row, COL_DQQ), "");
+        m_model->setData(m_model->index(*row, COL_GROUP), getUnusedGroup(ignore));
+        m_model->setData(m_model->index(*row, COL_OPTIONS), "");
+      }
+      m_tableDirty = true;
+    }
+
+    /** Copy the currently selected rows to the clipboard */
+    void ReflMainViewPresenter::copySelected()
+    {
+      std::vector<std::string> lines;
+
+      std::set<int> rows = m_view->getSelectedRows();
+      for(auto rowIt = rows.begin(); rowIt != rows.end(); ++rowIt)
+      {
+        std::vector<std::string> line;
+        for(int col = COL_RUNS; col <= COL_OPTIONS; ++col)
+          line.push_back(m_model->data(m_model->index(*rowIt, col)).toString().toStdString());
+        lines.push_back(boost::algorithm::join(line, "\t"));
+      }
+
+      m_view->setClipboard(boost::algorithm::join(lines, "\n"));
+    }
+
+    /** Copy currently selected rows to the clipboard, and then delete them. */
+    void ReflMainViewPresenter::cutSelected()
+    {
+      copySelected();
+      deleteRow();
+    }
+
+    /** Paste the contents of the clipboard into the currently selected rows, or append new rows */
+    void ReflMainViewPresenter::pasteSelected()
+    {
+      const std::string text = m_view->getClipboard();
+      std::vector<std::string> lines;
+      boost::split(lines, text, boost::is_any_of("\n"));
+
+      //If we have rows selected, we'll overwrite them. If not, we'll append new rows to write to.
+      std::set<int> rows = m_view->getSelectedRows();
+      if(rows.empty())
+      {
+        //Add as many new rows as required
+        for(size_t i = 0; i < lines.size(); ++i)
+        {
+          int index = m_model->rowCount();
+          insertRow(index);
+          rows.insert(index);
+        }
+      }
+
+      //Iterate over rows and lines simultaneously, stopping when we reach the end of either
+      auto rowIt = rows.begin();
+      auto lineIt = lines.begin();
+      for(; rowIt != rows.end() && lineIt != lines.end(); rowIt++, lineIt++)
+      {
+        std::vector<std::string> values;
+        boost::split(values, *lineIt, boost::is_any_of("\t"));
+
+        //Paste as many columns as we can from this line
+        for(int col = COL_RUNS; col <= COL_OPTIONS && col < static_cast<int>(values.size()); ++col)
+          m_model->setData(m_model->index(*rowIt, col), QString::fromStdString(values[col]));
+      }
+    }
+
+    /** Shows the Refl Options dialog */
+    void ReflMainViewPresenter::showOptionsDialog()
+    {
+      auto options = new QtReflOptionsDialog(m_view, m_view->getPresenter());
+      //By default the dialog is only destroyed when ReflMainView is and so they'll stack up.
+      //This way, they'll be deallocated as soon as they've been closed.
+      options->setAttribute(Qt::WA_DeleteOnClose, true);
+      options->exec();
+    }
+
+    /** Gets the options used by the presenter
+        @returns The options used by the presenter
+     */
+    const std::map<std::string,QVariant>& ReflMainViewPresenter::options() const
+    {
+      return m_options;
+    }
+
+    /** Sets the options used by the presenter
+        @param options : The new options for the presenter to use
+     */
+    void ReflMainViewPresenter::setOptions(const std::map<std::string,QVariant>& options)
+    {
+      //Overwrite the given options
+      for(auto it = options.begin(); it != options.end(); ++it)
+        m_options[it->first] = it->second;
+
+      //Save any changes to disk
+      QSettings settings;
+      settings.beginGroup(ReflSettingsGroup);
+      for(auto it = m_options.begin(); it != m_options.end(); ++it)
+        settings.setValue(QString::fromStdString(it->first), it->second);
+      settings.endGroup();
+    }
+
+    /** Load options from disk if possible, or set to defaults */
+    void ReflMainViewPresenter::initOptions()
+    {
+      m_options.clear();
+
+      //Set defaults
+      m_options["WarnProcessAll"] = true;
+      m_options["WarnDiscardChanges"] = true;
+      m_options["WarnProcessPartialGroup"] = true;
+      m_options["RoundAngle"] = false;
+      m_options["RoundQMin"] = false;
+      m_options["RoundQMax"] = false;
+      m_options["RoundDQQ"] = false;
+      m_options["RoundAnglePrecision"] = 3;
+      m_options["RoundQMinPrecision"] = 3;
+      m_options["RoundQMaxPrecision"] = 3;
+      m_options["RoundDQQPrecision"] = 3;
+
+      //Load saved values from disk
+      QSettings settings;
+      settings.beginGroup(ReflSettingsGroup);
+      QStringList keys = settings.childKeys();
+      for(auto it = keys.begin(); it != keys.end(); ++it)
+        m_options[it->toStdString()] = settings.value(*it);
+      settings.endGroup();
     }
   }
 }
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/ReflNullMainViewPresenter.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/ReflNullMainViewPresenter.cpp
deleted file mode 100644
index 2af3afc4169d852f47903e9e8eef06e1a1447edd..0000000000000000000000000000000000000000
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/ReflNullMainViewPresenter.cpp
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "MantidQtCustomInterfaces/ReflNullMainViewPresenter.h"
-#include "MantidAPI/ITableWorkspace.h"
-#include "MantidQtCustomInterfaces/ReflMainView.h"
-
-namespace MantidQt
-{
-  namespace CustomInterfaces
-  {
-    void ReflNullMainViewPresenter::notify(int flag)
-    {
-      (void)flag;
-      throw std::runtime_error("Cannot notify a null presenter");
-    }
-
-    ReflNullMainViewPresenter::~ReflNullMainViewPresenter()
-    {
-    }
-  }
-}
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/Stretch.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/Stretch.cpp
index 98ac5d309a75dd41fdaaaf020eec807ff0220dd7..83f8217d2830da0d0ba47683e8df4f52755b1ed8 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/Stretch.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/Stretch.cpp
@@ -137,21 +137,6 @@ namespace MantidQt
 										" Save="+save+", Plot='"+plot+"', Verbose="+verbose+")\n";
 
 			runPythonScript(pyInput);
-
-      //Update mini plot
-      QString sigmaWsName = sampleName.left(sampleName.size() - 3) + "Qst_Sigma";
-      QString betaWsName = sampleName.left(sampleName.size() - 3) + "Qst_Beta";
-
-      MatrixWorkspace_sptr sigmaWs = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(sigmaWsName.toStdString());
-      MatrixWorkspace_sptr betaWs = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(betaWsName.toStdString());
-
-      plotMiniPlot(sigmaWs, 0, "StretchPlot", "SigmaCurve");
-      plotMiniPlot(betaWs, 0, "StretchPlot", "BetaCurve");
-
-      m_curves["SigmaCurve"]->setPen(QColor(Qt::red));
-      m_curves["BetaCurve"]->setPen(QColor(Qt::green));
-
-      replot("StretchPlot");
 		}
 
 		/**
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/test/ReflBlankMainViewPresenterTest.h b/Code/Mantid/MantidQt/CustomInterfaces/test/ReflBlankMainViewPresenterTest.h
deleted file mode 100644
index 46eb627f2390c606eefd80e841124bab42926ad6..0000000000000000000000000000000000000000
--- a/Code/Mantid/MantidQt/CustomInterfaces/test/ReflBlankMainViewPresenterTest.h
+++ /dev/null
@@ -1,397 +0,0 @@
-#ifndef MANTID_CUSTOMINTERFACES_REFLBLANKMAINVIEWPRESENTERTEST_H_
-#define MANTID_CUSTOMINTERFACES_REFLBLANKMAINVIEWPRESENTERTEST_H_
-
-#include <cxxtest/TestSuite.h>
-#include <gmock/gmock.h>
-#include <gtest/gtest.h>
-#include <boost/make_shared.hpp>
-#include "MantidDataObjects/TableWorkspace.h"
-#include "MantidAPI/ITableWorkspace.h"
-#include "MantidQtCustomInterfaces/ReflMainView.h"
-#include "MantidAPI/FrameworkManager.h"
-#include "MantidAPI/TableRow.h"
-#include "MantidQtCustomInterfaces/ReflBlankMainViewPresenter.h"
-
-#include "ReflMainViewMockObjects.h"
-
-using namespace MantidQt::CustomInterfaces;
-using namespace Mantid::API;
-using namespace testing;
-
-class ReflBlankMainViewPresenterTest : public CxxTest::TestSuite
-{
-public:
-  // This pair of boilerplate methods prevent the suite being created statically
-  // This means the constructor isn't called when running other tests
-  static ReflBlankMainViewPresenterTest *createSuite() { return new ReflBlankMainViewPresenterTest(); }
-  static void destroySuite( ReflBlankMainViewPresenterTest *suite ) { delete suite; }
-
-  void testEditSave()
-  {
-    MockView mockView;
-    ReflBlankMainViewPresenter presenter(&mockView);
-
-    //Set up some data
-    mockView.addDataForTest();
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
-
-    //The user hits "save" and and enters "Workspace" for a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillRepeatedly(Return("Workspace"));
-    presenter.notify(SaveFlag);
-
-    //Check calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check that the workspace was saved correctly
-    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("Workspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 4);
-    TS_ASSERT_EQUALS(ws->String(0, RunCol), "13460");
-    TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 3);
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("Workspace");
-  }
-
-  void testSaveAs()
-  {
-    MockView mockView;
-    ReflBlankMainViewPresenter presenter(&mockView);
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
-
-    //The user hits "save as" but cancels when choosing a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillRepeatedly(Return(""));
-    presenter.notify(SaveAsFlag);
-
-    //The user hits "save as" and enters "Workspace" for a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillRepeatedly(Return("Workspace"));
-    presenter.notify(SaveAsFlag);
-
-    //Check calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check the workspace was saved
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("Workspace"));
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("Workspace");
-  }
-
-  void testSaveProcess()
-  {
-    MockView mockView;
-    ReflBlankMainViewPresenter presenter(&mockView);
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
-
-    //The user hits "save as" but cancels when choosing a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillRepeatedly(Return(""));
-    presenter.notify(SaveAsFlag);
-
-    //The user hits "save as" and enters "Workspace" for a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillRepeatedly(Return("Workspace"));
-    presenter.notify(SaveAsFlag);
-
-    //The user hits "save" and is not asked for a name
-    EXPECT_CALL(mockView, askUserString(_,_,_)).Times(0);
-    presenter.notify(SaveFlag);
-
-    //Check calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check the workspace was saved
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("Workspace"));
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("Workspace");
-  }
-
-  void testAddRow()
-  {
-    MockView mockView;
-    ReflBlankMainViewPresenter presenter(&mockView);
-
-    //Set up some data
-    mockView.addDataForTest();
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
-
-    //The user hits "add row" twice with no rows selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(2).WillRepeatedly(Return(std::vector<size_t>()));
-    presenter.notify(AddRowFlag);
-    presenter.notify(AddRowFlag);
-
-    //The user hits "save" and enters "Workspace" for a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillRepeatedly(Return("Workspace"));
-    presenter.notify(SaveFlag);
-
-    //Check calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check that the workspace was saved correctly
-    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("Workspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 6);
-    TS_ASSERT_EQUALS(ws->String(1, RunCol), "13462");
-    TS_ASSERT_EQUALS(ws->String(4, RunCol), "");
-    TS_ASSERT_EQUALS(ws->String(5, RunCol), "");
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 3);
-    TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 0);
-    TS_ASSERT_EQUALS(ws->Int(5, GroupCol), 0);
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("Workspace");
-  }
-
-  void testAddRowSpecify()
-  {
-    MockView mockView;
-    ReflBlankMainViewPresenter presenter(&mockView);
-    std::vector<size_t> rowlist;
-    rowlist.push_back(1);
-
-    //Set up some data
-    mockView.addDataForTest();
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
-
-    //The user hits "add row twice" with the second row selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(2).WillRepeatedly(Return(rowlist));
-    presenter.notify(AddRowFlag);
-    presenter.notify(AddRowFlag);
-
-    //The user hits "save" and enters "Workspace" for a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillRepeatedly(Return("Workspace"));
-    presenter.notify(SaveFlag);
-
-    //Check calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check that the workspace was saved correctly
-    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("Workspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 6);
-    TS_ASSERT_EQUALS(ws->String(1, RunCol), "");
-    TS_ASSERT_EQUALS(ws->String(2, RunCol), "");
-    TS_ASSERT_EQUALS(ws->String(4, RunCol), "13469");
-    TS_ASSERT_EQUALS(ws->String(5, RunCol), "13470");
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 0);
-    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 0);
-    TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 1);
-    TS_ASSERT_EQUALS(ws->Int(5, GroupCol), 1);
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("Workspace");
-  }
-
-  void testAddRowSpecifyPlural()
-  {
-    MockView mockView;
-    ReflBlankMainViewPresenter presenter(&mockView);
-    std::vector<size_t> rowlist;
-    rowlist.push_back(1);
-    rowlist.push_back(2);
-    rowlist.push_back(3);
-
-    //Set up some data
-    mockView.addDataForTest();
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
-
-    //The user hits "add row" once with the second, third, and fourth rows selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist));
-    presenter.notify(AddRowFlag);
-
-    //The user hits "save" and enters "Workspace" for a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillRepeatedly(Return("Workspace"));
-    presenter.notify(SaveFlag);
-
-    //Check calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check that the workspace was saved correctly
-    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("Workspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 7);
-    TS_ASSERT_EQUALS(ws->String(1, RunCol), "");
-    TS_ASSERT_EQUALS(ws->String(2, RunCol), "");
-    TS_ASSERT_EQUALS(ws->String(3, RunCol), "");
-    TS_ASSERT_EQUALS(ws->String(4, RunCol), "13462");
-    TS_ASSERT_EQUALS(ws->String(5, RunCol), "13469");
-    TS_ASSERT_EQUALS(ws->String(6, RunCol), "13470");
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 0);
-    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 0);
-    TS_ASSERT_EQUALS(ws->Int(3, GroupCol), 0);
-    TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 3);
-    TS_ASSERT_EQUALS(ws->Int(5, GroupCol), 1);
-    TS_ASSERT_EQUALS(ws->Int(6, GroupCol), 1);
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("Workspace");
-  }
-
-  void testDeleteRowNone()
-  {
-    MockView mockView;
-    ReflBlankMainViewPresenter presenter(&mockView);
-
-    //Set up some data
-    mockView.addDataForTest();
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
-
-    //The usert hits "delete row" with no rows selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(std::vector<size_t>()));
-    presenter.notify(DeleteRowFlag);
-
-    //The user hits "save" and and enters "Workspace" for a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillRepeatedly(Return("Workspace"));
-    presenter.notify(SaveFlag);
-
-    //Check calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check that the workspace was saved correctly
-    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("Workspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 4);
-    TS_ASSERT_EQUALS(ws->String(1, RunCol), "13462");
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 3);
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("Workspace");
-  }
-
-  void testDeleteRowSingle()
-  {
-    MockView mockView;
-    ReflBlankMainViewPresenter presenter(&mockView);
-    std::vector<size_t> rowlist;
-    rowlist.push_back(1);
-
-    //Set up some data
-    mockView.addDataForTest();
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
-
-    //The user hits "delete" with the second row selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist));
-    presenter.notify(DeleteRowFlag);
-
-    //The user hits "save" and and enters "Workspace" for a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillRepeatedly(Return("Workspace"));
-    presenter.notify(SaveFlag);
-
-    //Check calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check that the workspace was saved correctly
-    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("Workspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 3);
-    TS_ASSERT_EQUALS(ws->String(1, RunCol), "13469");
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 1);
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("Workspace");
-  }
-
-  void testDeleteRowPlural()
-  {
-    MockView mockView;
-    ReflBlankMainViewPresenter presenter(&mockView);
-    std::vector<size_t> rowlist;
-    rowlist.push_back(0);
-    rowlist.push_back(1);
-    rowlist.push_back(2);
-
-    //Set up some data
-    mockView.addDataForTest();
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView,  giveUserCritical(_,_)).Times(0);
-
-    //The user hits "delete" with the first three rows selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist));
-    presenter.notify(DeleteRowFlag);
-
-    //The user hits "save" and and enters "Workspace" for a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillRepeatedly(Return("Workspace"));
-    presenter.notify(SaveFlag);
-
-    //Check calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check that the workspace was saved correctly
-    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("Workspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 1);
-    TS_ASSERT_EQUALS(ws->String(0, RunCol), "13470");
-    TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 1);
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("Workspace");
-  }
-
-  void testGroupRows()
-  {
-    MockView mockView;
-    ReflBlankMainViewPresenter presenter(&mockView);
-    std::vector<size_t> rowlist;
-    rowlist.push_back(1);
-    rowlist.push_back(2);
-
-    //Set up some data
-    mockView.addDataForTest();
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
-
-    //The user hits "group rows" with the middle two rows selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist));
-    presenter.notify(GroupRowsFlag);
-
-    //The user hits "save" and and enters "Workspace" for a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillRepeatedly(Return("Workspace"));
-    presenter.notify(SaveFlag);
-
-    //Check that the workspace was saved correctly
-    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("Workspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 4);
-    TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 3);
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 0);
-    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 0);
-    TS_ASSERT_EQUALS(ws->Int(3, GroupCol), 1);
-
-    //Let's do it again, but with different rows
-    rowlist.clear();
-    rowlist.push_back(0);
-    rowlist.push_back(1);
-
-    //The user hits "group rows" with the first two rows selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist));
-    presenter.notify(GroupRowsFlag);
-
-    //The user hits save and is not asked for a workspace name
-    presenter.notify(SaveFlag);
-
-    //Check that the workspace was save correctly
-    ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("Workspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 4);
-    TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 2);
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 2);
-    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 0);
-    TS_ASSERT_EQUALS(ws->Int(3, GroupCol), 1);
-
-    //Check calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("Workspace");
-  }
-};
-
-#endif /* MANTID_CUSTOMINTERFACES_REFLBLANKMAINVIEWPRESENTERTEST_H_ */
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/test/ReflLoadedMainViewPresenterTest.h b/Code/Mantid/MantidQt/CustomInterfaces/test/ReflLoadedMainViewPresenterTest.h
deleted file mode 100644
index 2f36cac4d31a74f5946001d3914ceea62afa81ca..0000000000000000000000000000000000000000
--- a/Code/Mantid/MantidQt/CustomInterfaces/test/ReflLoadedMainViewPresenterTest.h
+++ /dev/null
@@ -1,629 +0,0 @@
-#ifndef MANTID_CUSTOMINTERFACES_REFLLOADEDMAINVIEWPRESENTERTEST_H_
-#define MANTID_CUSTOMINTERFACES_REFLLOADEDMAINVIEWPRESENTERTEST_H_
-
-#include <cxxtest/TestSuite.h>
-#include <gmock/gmock.h>
-#include <gtest/gtest.h>
-#include <boost/make_shared.hpp>
-#include "MantidDataObjects/TableWorkspace.h"
-#include "MantidAPI/ITableWorkspace.h"
-#include "MantidQtCustomInterfaces/ReflMainView.h"
-#include "MantidAPI/AlgorithmManager.h"
-#include "MantidAPI/FrameworkManager.h"
-#include "MantidAPI/TableRow.h"
-#include "MantidQtCustomInterfaces/ReflLoadedMainViewPresenter.h"
-
-#include "ReflMainViewMockObjects.h"
-
-using namespace MantidQt::CustomInterfaces;
-using namespace Mantid::API;
-using namespace testing;
-
-//=====================================================================================
-// Functional tests
-//=====================================================================================
-class ReflLoadedMainViewPresenterTest : public CxxTest::TestSuite
-{
-
-private:
-
-  ITableWorkspace_sptr createWorkspace(const std::string& wsName = "")
-  {
-    ITableWorkspace_sptr ws = WorkspaceFactory::Instance().createTable();
-
-    auto colRuns = ws->addColumn("str","Run(s)");
-    auto colTheta = ws->addColumn("str","ThetaIn");
-    auto colTrans = ws->addColumn("str","TransRun(s)");
-    auto colQmin = ws->addColumn("str","Qmin");
-    auto colQmax = ws->addColumn("str","Qmax");
-    auto colDqq = ws->addColumn("str","dq/q");
-    auto colScale = ws->addColumn("str","Scale");
-    auto colStitch = ws->addColumn("int","StitchGroup");
-    auto colOptions = ws->addColumn("str","Options");
-
-    colRuns->setPlotType(0);
-    colTheta->setPlotType(0);
-    colTrans->setPlotType(0);
-    colQmin->setPlotType(0);
-    colQmax->setPlotType(0);
-    colDqq->setPlotType(0);
-    colScale->setPlotType(0);
-    colStitch->setPlotType(0);
-    colOptions->setPlotType(0);
-
-    if(wsName.length() > 0)
-      AnalysisDataService::Instance().addOrReplace(wsName, ws);
-
-    return ws;
-  }
-
-  ITableWorkspace_sptr createPrefilledWorkspace(const std::string& wsName = "")
-  {
-    auto ws = createWorkspace(wsName);
-
-    TableRow row = ws->appendRow();
-    row << "13460" << "0.7" << "13463,13464" << "0.01" << "0.06" << "0.04" << "1" << 3 << "";
-    row = ws->appendRow();
-    row << "13462" << "2.3" << "13463,13464" << "0.035" << "0.3" << "0.04" << "1" << 3 << "";
-    row = ws->appendRow();
-    row << "13469" << "0.7" << "13463,13464" << "0.01" << "0.06" << "0.04" << "1" << 1 << "";
-    row = ws->appendRow();
-    row << "13470" << "2.3" << "13463,13464" << "0.035" << "0.3" << "0.04" << "1" << 1 << "";
-    return ws;
-  }
-
-  ITableWorkspace_sptr createBadTypedWorkspace()
-  {
-    ITableWorkspace_sptr ws = createWorkspace();
-
-    TableRow row = ws->appendRow();
-    row << "13460" << "0.7" << "13463" << "0.01" << "0.06" << "0.04" << "2" << "1" << "";
-
-    return ws;
-  }
-
-  ITableWorkspace_sptr createBadLengthWorkspace(bool longer)
-  {
-    ITableWorkspace_sptr ws = createWorkspace();
-
-    if(longer)
-      ws->addColumn("str","extracolumn");
-    else
-      ws->removeColumn("Options");
-
-    return ws;
-  }
-
-  Workspace_sptr loadWorkspace(const std::string& filename, const std::string& wsName)
-  {
-    IAlgorithm_sptr algLoad = AlgorithmManager::Instance().create("Load");
-    algLoad->initialize();
-    algLoad->setProperty("Filename", filename);
-    algLoad->setProperty("OutputWorkspace", wsName);
-    algLoad->execute();
-    return algLoad->getProperty("OutputWorkspace");
-  }
-
-public:
-  // This pair of boilerplate methods prevent the suite being created statically
-  // This means the constructor isn't called when running other tests
-  static ReflLoadedMainViewPresenterTest *createSuite() { return new ReflLoadedMainViewPresenterTest(); }
-  static void destroySuite( ReflLoadedMainViewPresenterTest *suite ) { delete suite; }
-  
-  ReflLoadedMainViewPresenterTest()
-  {
-    FrameworkManager::Instance();
-  }
-
-  void testSave()
-  {
-    MockView mockView;
-    ReflLoadedMainViewPresenter presenter(createPrefilledWorkspace("TestWorkspace"),&mockView);
-    presenter.notify(SaveFlag);
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-    AnalysisDataService::Instance().remove("TestWorkspace");
-  }
-
-  void testSaveAs()
-  {
-    MockView mockView;
-    ReflLoadedMainViewPresenter presenter(createPrefilledWorkspace("TestWorkspace"),&mockView);
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView,  giveUserCritical(_,_)).Times(0);
-
-    //The user hits "save as" but cancels when choosing a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillOnce(Return(""));
-    presenter.notify(SaveAsFlag);
-
-    //The user hits "save as" and and enters "Workspace" for a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillOnce(Return("Workspace"));
-    presenter.notify(SaveAsFlag);
-
-    //Check calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check that the workspace was saved
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("Workspace"));
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("TestWorkspace");
-    AnalysisDataService::Instance().remove("Workspace");
-  }
-
-  void testSaveProcess()
-  {
-    MockView mockView;
-    ReflLoadedMainViewPresenter presenter(createPrefilledWorkspace("TestWorkspace"),&mockView);
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView,  giveUserCritical(_,_)).Times(0);
-
-    //The user hits "save as" but cancels when choosing a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillOnce(Return(""));
-    presenter.notify(SaveAsFlag);
-
-    //The user hits "save as" and and enters "Workspace" for a name
-    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillOnce(Return("Workspace"));
-    presenter.notify(SaveAsFlag);
-
-    //The user hits "save" and is not asked to enter a workspace name
-    EXPECT_CALL(mockView, askUserString(_,_,_)).Times(0);
-    presenter.notify(SaveFlag);
-
-    //Check calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check that the workspace was saved
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("Workspace"));
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("TestWorkspace");
-    AnalysisDataService::Instance().remove("Workspace");
-  }
-
-  void testAddRow()
-  {
-    MockView mockView;
-    ReflLoadedMainViewPresenter presenter(createPrefilledWorkspace("TestWorkspace"),&mockView);
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView,  giveUserCritical(_,_)).Times(0);
-
-    //Check the initial state of the table
-    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 4);
-    TS_ASSERT_EQUALS(ws->String(1, RunCol), "13462");
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 3);
-    TS_ASSERT_THROWS(ws->Int(4, GroupCol), std::runtime_error);
-    TS_ASSERT_THROWS(ws->Int(5, GroupCol), std::runtime_error);
-    TS_ASSERT_THROWS(ws->Int(6, GroupCol), std::runtime_error);
-
-    //The user hits "add row" twice with no rows selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(2).WillRepeatedly(Return(std::vector<size_t>()));
-    presenter.notify(AddRowFlag);
-    presenter.notify(AddRowFlag);
-
-    //The user hits "save"
-    presenter.notify(SaveFlag);
-
-    //Check the calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check that the table has been modified correctly
-    ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 6);
-    TS_ASSERT_EQUALS(ws->String(1, RunCol), "13462");
-    TS_ASSERT_EQUALS(ws->String(4, RunCol), "");
-    TS_ASSERT_EQUALS(ws->String(5, RunCol), "");
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 3);
-    TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 0);
-    TS_ASSERT_EQUALS(ws->Int(5, GroupCol), 0);
-    TS_ASSERT_THROWS(ws->Int(6, GroupCol), std::runtime_error);
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("TestWorkspace");
-  }
-
-  void testAddRowSpecify()
-  {
-    MockView mockView;
-    ReflLoadedMainViewPresenter presenter(createPrefilledWorkspace("TestWorkspace"),&mockView);
-    std::vector<size_t> rowlist;
-    rowlist.push_back(1);
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView,  giveUserCritical(_,_)).Times(0);
-
-    //Check the initial state of the table
-    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
-    TS_ASSERT_EQUALS(ws->rowCount(),4);
-    TS_ASSERT_EQUALS(ws->String(1, RunCol), "13462");
-    TS_ASSERT_EQUALS(ws->String(2, RunCol), "13469");
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 3);
-    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 1);
-    TS_ASSERT_THROWS(ws->Int(4, GroupCol), std::runtime_error);
-    TS_ASSERT_THROWS(ws->Int(5, GroupCol), std::runtime_error);
-    TS_ASSERT_THROWS(ws->Int(6, GroupCol), std::runtime_error);
-
-    //The user hits "add row" twice, with the second row selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(2).WillRepeatedly(Return(rowlist));
-    presenter.notify(AddRowFlag);
-    presenter.notify(AddRowFlag);
-
-    //The user hits "save"
-    presenter.notify(SaveFlag);
-
-    //Check the calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check that the table has been modified correctly
-    ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 6);
-    TS_ASSERT_EQUALS(ws->String(1, RunCol), "");
-    TS_ASSERT_EQUALS(ws->String(2, RunCol), "");
-    TS_ASSERT_EQUALS(ws->String(4, RunCol), "13469");
-    TS_ASSERT_EQUALS(ws->String(5, RunCol), "13470");
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 0);
-    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 0);
-    TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 1);
-    TS_ASSERT_EQUALS(ws->Int(5, GroupCol), 1);
-    TS_ASSERT_THROWS(ws->Int(6, GroupCol), std::runtime_error);
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("TestWorkspace");
-  }
-
-  void testAddRowSpecifyPlural()
-  {
-    MockView mockView;
-    ReflLoadedMainViewPresenter presenter(createPrefilledWorkspace("TestWorkspace"),&mockView);
-    std::vector<size_t> rowlist;
-    rowlist.push_back(1);
-    rowlist.push_back(2);
-    rowlist.push_back(3);
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView,  giveUserCritical(_,_)).Times(0);
-
-    //Check the initial state of the table
-    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 4);
-    TS_ASSERT_EQUALS(ws->String(1, RunCol), "13462");
-    TS_ASSERT_EQUALS(ws->String(2, RunCol), "13469");
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 3);
-    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 1);
-    TS_ASSERT_THROWS(ws->Int(4, GroupCol), std::runtime_error);
-    TS_ASSERT_THROWS(ws->Int(5, GroupCol), std::runtime_error);
-    TS_ASSERT_THROWS(ws->Int(6, GroupCol), std::runtime_error);
-    TS_ASSERT_THROWS(ws->Int(7, GroupCol), std::runtime_error);
-
-    //The user hits "add row" once, with the second, third, and fourth row selected.
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist));
-    presenter.notify(AddRowFlag);
-
-    //The user hits "save"
-    presenter.notify(SaveFlag);
-
-    //Check the calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check that the table was modified correctly
-    ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 7);
-    TS_ASSERT_EQUALS(ws->String(1, RunCol), "");
-    TS_ASSERT_EQUALS(ws->String(2, RunCol), "");
-    TS_ASSERT_EQUALS(ws->String(3, RunCol), "");
-    TS_ASSERT_EQUALS(ws->String(4, RunCol), "13462");
-    TS_ASSERT_EQUALS(ws->String(5, RunCol), "13469");
-    TS_ASSERT_EQUALS(ws->String(6, RunCol), "13470");
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 0);
-    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 0);
-    TS_ASSERT_EQUALS(ws->Int(3, GroupCol), 0);
-    TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 3);
-    TS_ASSERT_EQUALS(ws->Int(5, GroupCol), 1);
-    TS_ASSERT_EQUALS(ws->Int(6, GroupCol), 1);
-    TS_ASSERT_THROWS(ws->Int(7, GroupCol), std::runtime_error);
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("TestWorkspace");
-  }
-
-  void testDeleteRowNone()
-  {
-    MockView mockView;
-    ReflLoadedMainViewPresenter presenter(createPrefilledWorkspace("TestWorkspace"),&mockView);
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView,  giveUserCritical(_,_)).Times(0);
-
-    //Check the initial state of the table
-    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 4);
-    TS_ASSERT_EQUALS(ws->String(1, RunCol), "13462");
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 3);
-
-    //The user hits "delete row" with no rows selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(std::vector<size_t>()));
-    presenter.notify(DeleteRowFlag);
-
-    //The user hits save
-    presenter.notify(SaveFlag);
-
-    //Check the calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check that the table was not modified
-    ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 4);
-    TS_ASSERT_EQUALS(ws->String(1, RunCol), "13462");
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 3);
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("TestWorkspace");
-  }
-
-  void testDeleteRowSingle()
-  {
-    MockView mockView;
-    ReflLoadedMainViewPresenter presenter(createPrefilledWorkspace("TestWorkspace"),&mockView);
-    std::vector<size_t> rowlist;
-    rowlist.push_back(1);
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView,  giveUserCritical(_,_)).Times(0);
-
-    //Check the initial state of the table
-    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 4);
-    TS_ASSERT_EQUALS(ws->String(1, RunCol), "13462");
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 3);
-
-    //The user hits "delete row" with the second row selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist));
-    presenter.notify(DeleteRowFlag);
-
-    //The user hits "save"
-    presenter.notify(SaveFlag);
-
-    //Check the calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 3);
-    TS_ASSERT_EQUALS(ws->String(1, RunCol), "13469");
-    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 1);
-    TS_ASSERT_THROWS(ws->Int(3, GroupCol), std::runtime_error);
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("TestWorkspace");
-  }
-
-  void testDeleteRowPlural()
-  {
-    MockView mockView;
-    ReflLoadedMainViewPresenter presenter(createPrefilledWorkspace("TestWorkspace"),&mockView);
-    std::vector<size_t> rowlist;
-    rowlist.push_back(0);
-    rowlist.push_back(1);
-    rowlist.push_back(2);
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView,  giveUserCritical(_,_)).Times(0);
-
-    //Check the initial state of the table
-    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 4);
-    TS_ASSERT_EQUALS(ws->String(0, RunCol), "13460");
-    TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 3);
-
-    //The user hits "delete row" with the first three rows selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist));
-    presenter.notify(DeleteRowFlag);
-
-    //The user hits save
-    presenter.notify(SaveFlag);
-
-    //Check the calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check the rows were deleted as expected
-    ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
-    TS_ASSERT_EQUALS(ws->rowCount(), 1);
-    TS_ASSERT_EQUALS(ws->String(0, RunCol), "13470");
-    TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 1);
-    TS_ASSERT_THROWS(ws->Int(1, GroupCol), std::runtime_error);
-    TS_ASSERT_THROWS(ws->Int(2, GroupCol), std::runtime_error);
-    TS_ASSERT_THROWS(ws->Int(3, GroupCol), std::runtime_error);
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("TestWorkspace");
-  }
-
-  void testProcess()
-  {
-    MockView mockView;
-    ReflLoadedMainViewPresenter presenter(createPrefilledWorkspace("TestWorkspace"),&mockView);
-    std::vector<size_t> rowlist;
-    rowlist.push_back(0);
-    rowlist.push_back(1);
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView,  giveUserCritical(_,_)).Times(0);
-
-    //The user hits the "process" button with the first two rows selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist));
-    EXPECT_CALL(mockView, getProcessInstrument()).WillRepeatedly(Return("INTER"));
-    EXPECT_CALL(mockView, setProgressRange(_,_));
-    EXPECT_CALL(mockView, setProgress(_)).Times(4);
-    presenter.notify(ProcessFlag);
-
-    //Check the calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check output workspaces were created as expected
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsQ_13460"));
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsLam_13460"));
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("TOF_13460"));
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsQ_13462"));
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsLam_13462"));
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("TOF_13462"));
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsQ_13460_13462"));
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("TRANS_13463_13464"));
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("TestWorkspace");
-    AnalysisDataService::Instance().remove("IvsQ_13460");
-    AnalysisDataService::Instance().remove("IvsLam_13460");
-    AnalysisDataService::Instance().remove("TOF_13460");
-    AnalysisDataService::Instance().remove("IvsQ_13462");
-    AnalysisDataService::Instance().remove("IvsLam_13462");
-    AnalysisDataService::Instance().remove("TOF_13462");
-    AnalysisDataService::Instance().remove("IvsQ_13460_13462");
-    AnalysisDataService::Instance().remove("TRANS_13463_13464");
-  }
-
-  /*
-   * Test processing workspaces with non-standard names, with
-   * and without run_number information in the sample log.
-   */
-  void testProcessCustomNames()
-  {
-    auto ws = createWorkspace("TestWorkspace");
-    TableRow row = ws->appendRow();
-    row << "dataA" << "0.7" << "13463,13464" << "0.01" << "0.06" << "0.04" << "1" << 1;
-    row = ws->appendRow();
-    row << "dataB" << "2.3" << "13463,13464" << "0.035" << "0.3" << "0.04" << "1" << 1;
-
-    loadWorkspace("INTER13460", "dataA");
-    loadWorkspace("INTER13462", "dataB");
-
-    //Remove the `run_number` entry from dataA's log so its run number cannot be determined that way
-    IAlgorithm_sptr algDelLog = AlgorithmManager::Instance().create("DeleteLog");
-    algDelLog->initialize();
-    algDelLog->setProperty("Workspace", "dataA");
-    algDelLog->setProperty("Name", "run_number");
-    algDelLog->execute();
-
-    MockView mockView;
-    ReflLoadedMainViewPresenter presenter(ws,&mockView);
-    std::vector<size_t> rowlist;
-    rowlist.push_back(0);
-    rowlist.push_back(1);
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView,  giveUserCritical(_,_)).Times(0);
-
-    //The user hits the "process" button with the first two rows selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist));
-    EXPECT_CALL(mockView, getProcessInstrument()).WillRepeatedly(Return("INTER"));
-    EXPECT_CALL(mockView, setProgressRange(_,_));
-    EXPECT_CALL(mockView, setProgress(_)).Times(4);
-    presenter.notify(ProcessFlag);
-
-    //Check the calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check output workspaces were created as expected
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsQ_dataA"));
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsQ_13462"));
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsQ_dataA_13462"));
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsLam_dataA"));
-    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsLam_13462"));
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("TestWorkspace");
-    AnalysisDataService::Instance().remove("dataA");
-    AnalysisDataService::Instance().remove("dataB");
-    AnalysisDataService::Instance().remove("IvsQ_dataA");
-    AnalysisDataService::Instance().remove("IvsLam_dataA");
-    AnalysisDataService::Instance().remove("IvsQ_13462");
-    AnalysisDataService::Instance().remove("IvsLam_13462");
-    AnalysisDataService::Instance().remove("IvsQ_dataA_13462");
-    AnalysisDataService::Instance().remove("TRANS_13463_13464");
-  }
-
-  /*
-   * Test autofilling workspace values.
-   */
-  void testAutofill()
-  {
-    auto ws = createWorkspace("TestWorkspace");
-    //Autofill everything we can
-    TableRow row = ws->appendRow();
-    row << "13460" << "" << "13463,13464" << "" << "" << "" << "1" << 1;
-    row = ws->appendRow();
-    row << "13462" << "" << "13463,13464" << "" << "" << "" << "1" << 1;
-
-    MockView mockView;
-    ReflLoadedMainViewPresenter presenter(ws,&mockView);
-    std::vector<size_t> rowlist;
-    rowlist.push_back(0);
-    rowlist.push_back(1);
-
-    //We should not receive any errors
-    EXPECT_CALL(mockView,  giveUserCritical(_,_)).Times(0);
-
-    //The user hits the "process" button with the first two rows selected
-    EXPECT_CALL(mockView, getSelectedRowIndexes()).Times(1).WillRepeatedly(Return(rowlist));
-    EXPECT_CALL(mockView, getProcessInstrument()).WillRepeatedly(Return("INTER"));
-    EXPECT_CALL(mockView, setProgressRange(_,_));
-    EXPECT_CALL(mockView, setProgress(_)).Times(4);
-    presenter.notify(ProcessFlag);
-
-    //The user hits the "save" button
-    presenter.notify(SaveFlag);
-
-    //Check the calls were made as expected
-    TS_ASSERT(Mock::VerifyAndClearExpectations(&mockView));
-
-    //Check the table was updated as expected
-    ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
-    TS_ASSERT_EQUALS(ws->String(0, ThetaCol), "0.7");
-    TS_ASSERT_EQUALS(ws->String(0,   DQQCol), "0.0340301");
-    TS_ASSERT_EQUALS(ws->String(0,  QMinCol), "0.009");
-    TS_ASSERT_EQUALS(ws->String(0,  QMaxCol), "0.154");
-
-    TS_ASSERT_EQUALS(ws->String(1, ThetaCol), "2.3");
-    TS_ASSERT_EQUALS(ws->String(1,   DQQCol), "0.0340505");
-    TS_ASSERT_EQUALS(ws->String(1,  QMinCol), "0.03");
-    TS_ASSERT_EQUALS(ws->String(1,  QMaxCol), "0.504");
-
-    //Tidy up
-    AnalysisDataService::Instance().remove("TestWorkspace");
-    AnalysisDataService::Instance().remove("TRANS_13463_13464");
-    AnalysisDataService::Instance().remove("TOF_13460");
-    AnalysisDataService::Instance().remove("TOF_13463");
-    AnalysisDataService::Instance().remove("TOF_13464");
-    AnalysisDataService::Instance().remove("IvsQ_13460");
-    AnalysisDataService::Instance().remove("IvsLam_13460");
-  }
-
-  void testBadWorkspaceName()
-  {
-    MockView mockView;
-    TS_ASSERT_THROWS(ReflLoadedMainViewPresenter presenter(createPrefilledWorkspace(),&mockView), std::runtime_error&);
-  }
-
-  void testBadWorkspaceType()
-  {
-    MockView mockView;
-    TS_ASSERT_THROWS(ReflLoadedMainViewPresenter presenter(createBadTypedWorkspace(),&mockView), std::runtime_error&);
-  }
-
-  void testBadWorkspaceShort()
-  {
-    MockView mockView;
-    TS_ASSERT_THROWS(ReflLoadedMainViewPresenter presenter(createBadLengthWorkspace(false),&mockView), std::runtime_error&);
-  }
-
-  void testBadWorkspaceLong()
-  {
-    MockView mockView;
-    TS_ASSERT_THROWS(ReflLoadedMainViewPresenter presenter(createBadLengthWorkspace(true),&mockView), std::runtime_error&);
-  }
-
-};
-
-
-#endif /* MANTID_CUSTOMINTERFACES_REFLLOADEDMAINVIEWPRESENTERTEST_H_ */
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/test/ReflMainViewMockObjects.h b/Code/Mantid/MantidQt/CustomInterfaces/test/ReflMainViewMockObjects.h
index fbf4504534ccf1cfa07be99869daef35c2547f26..c5948d24299a7c3527493f31431ab3551908add7 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/test/ReflMainViewMockObjects.h
+++ b/Code/Mantid/MantidQt/CustomInterfaces/test/ReflMainViewMockObjects.h
@@ -3,19 +3,12 @@
 
 #include <gmock/gmock.h>
 #include "MantidQtCustomInterfaces/ReflMainView.h"
+#include "MantidQtCustomInterfaces/QReflTableModel.h"
 #include "MantidAPI/TableRow.h"
 
 using namespace MantidQt::CustomInterfaces;
 using namespace Mantid::API;
 
-//Clean flag aliases for use within tests.
-const int SaveAsFlag    = ReflMainView::SaveAsFlag;
-const int SaveFlag      = ReflMainView::SaveFlag;
-const int ProcessFlag   = ReflMainView::ProcessFlag;
-const int AddRowFlag    = ReflMainView::AddRowFlag;
-const int DeleteRowFlag = ReflMainView::DeleteRowFlag;
-const int GroupRowsFlag = ReflMainView::GroupRowsFlag;
-
 //Clean column ids for use within tests
 const int RunCol     = ReflMainViewPresenter::COL_RUNS;
 const int ThetaCol   = ReflMainViewPresenter::COL_ANGLE;
@@ -31,32 +24,32 @@ class MockView : public ReflMainView
 {
 public:
   MockView(){};
-  virtual void showTable(Mantid::API::ITableWorkspace_sptr model){ m_model = model;}
+  virtual ~MockView(){}
+
+  //Prompts
   MOCK_METHOD3(askUserString, std::string(const std::string& prompt, const std::string& title, const std::string& defaultValue));
   MOCK_METHOD2(askUserYesNo, bool(std::string, std::string));
   MOCK_METHOD2(giveUserCritical, void(std::string, std::string));
   MOCK_METHOD2(giveUserInfo, void(std::string, std::string));
   MOCK_METHOD2(giveUserWarning, void(std::string, std::string));
-  MOCK_METHOD2(setProgressRange, void(int, int));
-  MOCK_METHOD1(setProgress, void(int));
-  MOCK_CONST_METHOD0(getSelectedRowIndexes, std::vector<size_t>());
-  MOCK_CONST_METHOD0(getSearchInstrument, std::string());
-  MOCK_CONST_METHOD0(getProcessInstrument, std::string());
-  virtual ~MockView(){}
-  void addDataForTest()
-  {
-    TableRow row = m_model->appendRow();
-    row << "13460" << "0.7" << "13463,13464" << "0.01" << "0.06" << "0.04" << "1" << 3 << "";
-    row = m_model->appendRow();
-    row << "13462" << "2.3" << "13463,13464" << "0.035" << "0.3" << "0.04" << "1" << 3 << "";
-    row = m_model->appendRow();
-    row << "13469" << "0.7" << "13463,13464" << "0.01" << "0.06" << "0.04" << "1" << 1 << "";
-    row = m_model->appendRow();
-    row << "13470" << "2.3" << "13463,13464" << "0.035" << "0.3" << "0.04" << "1" << 1 << "";
-    m_model->removeRow(0);
-  }
-private:
-  Mantid::API::ITableWorkspace_sptr m_model;
+
+  //IO
+  MOCK_CONST_METHOD0(getWorkspaceToOpen, std::string());
+  MOCK_METHOD1(setSelection, void(const std::set<int>& rows));
+  MOCK_CONST_METHOD0(getSelectedRows, std::set<int>());
+  MOCK_METHOD1(setClipboard, void(const std::string& text));
+  MOCK_CONST_METHOD0(getClipboard, std::string());
+
+  //Calls we don't care about
+  virtual void showTable(QReflTableModel_sptr) {};
+  virtual void setOptionsHintStrategy(MantidQt::MantidWidgets::HintStrategy*) {};
+  virtual void setProgressRange(int,int) {};
+  virtual void setProgress(int) {};
+  virtual void setTableList(const std::set<std::string>&) {};
+  virtual void setInstrumentList(const std::vector<std::string>&, const std::string&) {};
+  virtual std::string getProcessInstrument() const {return "FAKE";}
+  virtual std::string getSearchInstrument() const {return "FAKE";}
+  virtual boost::shared_ptr<IReflPresenter> getPresenter() const {return boost::shared_ptr<IReflPresenter>();}
 };
 
 #endif /*MANTID_CUSTOMINTERFACES_REFLMAINVIEWMOCKOBJECTS_H*/
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/test/ReflMainViewPresenterTest.h b/Code/Mantid/MantidQt/CustomInterfaces/test/ReflMainViewPresenterTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..32023be380f318170e4baaa203e3dada1840fefa
--- /dev/null
+++ b/Code/Mantid/MantidQt/CustomInterfaces/test/ReflMainViewPresenterTest.h
@@ -0,0 +1,1193 @@
+#ifndef MANTID_CUSTOMINTERFACES_REFLMAINVIEWPRESENTERTEST_H
+#define MANTID_CUSTOMINTERFACES_REFLMAINVIEWPRESENTERTEST_H
+
+#include <boost/make_shared.hpp>
+#include <cxxtest/TestSuite.h>
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
+#include "MantidAPI/AlgorithmManager.h"
+#include "MantidAPI/FrameworkManager.h"
+#include "MantidAPI/TableRow.h"
+#include "MantidTestHelpers/WorkspaceCreationHelper.h"
+#include "MantidQtCustomInterfaces/ReflMainViewPresenter.h"
+
+#include "ReflMainViewMockObjects.h"
+
+using namespace MantidQt::CustomInterfaces;
+using namespace Mantid::API;
+using namespace Mantid::Kernel;
+using namespace testing;
+
+//=====================================================================================
+// Functional tests
+//=====================================================================================
+class ReflMainViewPresenterTest : public CxxTest::TestSuite
+{
+
+private:
+
+  ITableWorkspace_sptr createWorkspace(const std::string& wsName)
+  {
+    ITableWorkspace_sptr ws = WorkspaceFactory::Instance().createTable();
+
+    auto colRuns = ws->addColumn("str","Run(s)");
+    auto colTheta = ws->addColumn("str","ThetaIn");
+    auto colTrans = ws->addColumn("str","TransRun(s)");
+    auto colQmin = ws->addColumn("str","Qmin");
+    auto colQmax = ws->addColumn("str","Qmax");
+    auto colDqq = ws->addColumn("str","dq/q");
+    auto colScale = ws->addColumn("double","Scale");
+    auto colStitch = ws->addColumn("int","StitchGroup");
+    auto colOptions = ws->addColumn("str","Options");
+
+    colRuns->setPlotType(0);
+    colTheta->setPlotType(0);
+    colTrans->setPlotType(0);
+    colQmin->setPlotType(0);
+    colQmax->setPlotType(0);
+    colDqq->setPlotType(0);
+    colScale->setPlotType(0);
+    colStitch->setPlotType(0);
+    colOptions->setPlotType(0);
+
+    if(wsName.length() > 0)
+      AnalysisDataService::Instance().addOrReplace(wsName, ws);
+
+    return ws;
+  }
+
+  void createTOFWorkspace(const std::string& wsName, const std::string& runNumber = "")
+  {
+    auto tinyWS = WorkspaceCreationHelper::create2DWorkspaceWithReflectometryInstrument();
+    auto inst = tinyWS->getInstrument();
+
+    inst->getParameterMap()->addDouble(inst.get(), "I0MonitorIndex", 1.0);
+    inst->getParameterMap()->addDouble(inst.get(), "PointDetectorStart", 1.0);
+    inst->getParameterMap()->addDouble(inst.get(), "PointDetectorStop", 1.0);
+    inst->getParameterMap()->addDouble(inst.get(), "LambdaMin", 0.0);
+    inst->getParameterMap()->addDouble(inst.get(), "LambdaMax", 10.0);
+    inst->getParameterMap()->addDouble(inst.get(), "MonitorBackgroundMin", 0.0);
+    inst->getParameterMap()->addDouble(inst.get(), "MonitorBackgroundMax", 10.0);
+    inst->getParameterMap()->addDouble(inst.get(), "MonitorIntegralMin", 0.0);
+    inst->getParameterMap()->addDouble(inst.get(), "MonitorIntegralMax", 10.0);
+
+    tinyWS->mutableRun().addLogData(new PropertyWithValue<double>("Theta", 0.12345));
+    if(!runNumber.empty())
+      tinyWS->mutableRun().addLogData(new PropertyWithValue<std::string>("run_number", runNumber));
+
+    AnalysisDataService::Instance().addOrReplace(wsName, tinyWS);
+  }
+
+  ITableWorkspace_sptr createPrefilledWorkspace(const std::string& wsName)
+  {
+    auto ws = createWorkspace(wsName);
+    TableRow row = ws->appendRow();
+    row << "12345" << "0.5" << "" << "0.1" << "1.6" << "0.04" << 1.0 << 0 << "";
+    row = ws->appendRow();
+    row << "12346" << "1.5" << "" << "1.4" << "2.9" << "0.04" << 1.0 << 0 << "";
+    row = ws->appendRow();
+    row << "24681" << "0.5" << "" << "0.1" << "1.6" << "0.04" << 1.0 << 1 << "";
+    row = ws->appendRow();
+    row << "24682" << "1.5" << "" << "1.4" << "2.9" << "0.04" << 1.0 << 1 << "";
+    return ws;
+  }
+
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static ReflMainViewPresenterTest *createSuite() { return new ReflMainViewPresenterTest(); }
+  static void destroySuite( ReflMainViewPresenterTest *suite ) { delete suite; }
+  
+  ReflMainViewPresenterTest()
+  {
+    FrameworkManager::Instance();
+  }
+
+  void testSaveNew()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    presenter.notify(IReflPresenter::NewTableFlag);
+
+    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillOnce(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    TS_ASSERT(AnalysisDataService::Instance().doesExist("TestWorkspace"));
+    AnalysisDataService::Instance().remove("TestWorkspace");
+  }
+
+  void testSaveExisting()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(0);
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    AnalysisDataService::Instance().remove("TestWorkspace");
+  }
+
+  void testSaveAs()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    //The user hits "save as" but cancels when choosing a name
+    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillOnce(Return(""));
+    presenter.notify(IReflPresenter::SaveAsFlag);
+
+    //The user hits "save as" and and enters "Workspace" for a name
+    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillOnce(Return("Workspace"));
+    presenter.notify(IReflPresenter::SaveAsFlag);
+
+    TS_ASSERT(AnalysisDataService::Instance().doesExist("Workspace"));
+
+    AnalysisDataService::Instance().remove("TestWorkspace");
+    AnalysisDataService::Instance().remove("Workspace");
+  }
+
+  void testAppendRow()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    //We should not receive any errors
+    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
+
+    //The user hits "append row" twice with no rows selected
+    EXPECT_CALL(mockView, getSelectedRows()).Times(2).WillRepeatedly(Return(std::set<int>()));
+    presenter.notify(IReflPresenter::AppendRowFlag);
+    presenter.notify(IReflPresenter::AppendRowFlag);
+
+    //The user hits "save"
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    //Check that the table has been modified correctly
+    auto ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 6);
+    TS_ASSERT_EQUALS(ws->String(4, RunCol), "");
+    TS_ASSERT_EQUALS(ws->String(5, RunCol), "");
+    TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 0);
+    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 0);
+    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 1);
+    TS_ASSERT_EQUALS(ws->Int(3, GroupCol), 1);
+    TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 2);
+    TS_ASSERT_EQUALS(ws->Int(5, GroupCol), 3);
+
+    //Tidy up
+    AnalysisDataService::Instance().remove("TestWorkspace");
+  }
+
+  void testAppendRowSpecify()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    std::set<int> rowlist;
+    rowlist.insert(1);
+
+    //We should not receive any errors
+    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
+
+    //The user hits "append row" twice, with the second row selected
+    EXPECT_CALL(mockView, getSelectedRows()).Times(2).WillRepeatedly(Return(rowlist));
+    presenter.notify(IReflPresenter::AppendRowFlag);
+    presenter.notify(IReflPresenter::AppendRowFlag);
+
+    //The user hits "save"
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    //Check that the table has been modified correctly
+    auto ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 6);
+    TS_ASSERT_EQUALS(ws->String(2, RunCol), "");
+    TS_ASSERT_EQUALS(ws->String(3, RunCol), "");
+    TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 0);
+    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 0);
+    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 3);
+    TS_ASSERT_EQUALS(ws->Int(3, GroupCol), 2);
+    TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 1);
+    TS_ASSERT_EQUALS(ws->Int(5, GroupCol), 1);
+
+    //Tidy up
+    AnalysisDataService::Instance().remove("TestWorkspace");
+  }
+
+  void testAppendRowSpecifyPlural()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    std::set<int> rowlist;
+    rowlist.insert(1);
+    rowlist.insert(2);
+
+    //We should not receive any errors
+    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
+
+    //The user hits "append row" once, with the second, third, and fourth row selected.
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist));
+    presenter.notify(IReflPresenter::AppendRowFlag);
+
+    //The user hits "save"
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    //Check that the table was modified correctly
+    auto ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 5);
+    TS_ASSERT_EQUALS(ws->String(3, RunCol), "");
+    TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 0);
+    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 0);
+    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 1);
+    TS_ASSERT_EQUALS(ws->Int(3, GroupCol), 2);
+    TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 1);
+
+    //Tidy up
+    AnalysisDataService::Instance().remove("TestWorkspace");
+  }
+
+  void testPrependRow()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    //We should not receive any errors
+    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
+
+    //The user hits "prepend row" twice with no rows selected
+    EXPECT_CALL(mockView, getSelectedRows()).Times(2).WillRepeatedly(Return(std::set<int>()));
+    presenter.notify(IReflPresenter::PrependRowFlag);
+    presenter.notify(IReflPresenter::PrependRowFlag);
+
+    //The user hits "save"
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    //Check that the table has been modified correctly
+    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 6);
+    TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 3);
+    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 2);
+    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 0);
+    TS_ASSERT_EQUALS(ws->Int(3, GroupCol), 0);
+    TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 1);
+    TS_ASSERT_EQUALS(ws->Int(5, GroupCol), 1);
+
+    //Tidy up
+    AnalysisDataService::Instance().remove("TestWorkspace");
+  }
+
+  void testPrependRowSpecify()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    std::set<int> rowlist;
+    rowlist.insert(1);
+
+    //We should not receive any errors
+    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
+
+    //The user hits "prepend row" twice, with the second row selected
+    EXPECT_CALL(mockView, getSelectedRows()).Times(2).WillRepeatedly(Return(rowlist));
+    presenter.notify(IReflPresenter::PrependRowFlag);
+    presenter.notify(IReflPresenter::PrependRowFlag);
+
+    //The user hits "save"
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    //Check that the table has been modified correctly
+    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 6);
+    TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 0);
+    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 3);
+    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 2);
+    TS_ASSERT_EQUALS(ws->Int(3, GroupCol), 0);
+    TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 1);
+    TS_ASSERT_EQUALS(ws->Int(5, GroupCol), 1);
+
+    //Tidy up
+    AnalysisDataService::Instance().remove("TestWorkspace");
+  }
+
+  void testPrependRowSpecifyPlural()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    std::set<int> rowlist;
+    rowlist.insert(1);
+    rowlist.insert(2);
+    rowlist.insert(3);
+
+    //We should not receive any errors
+    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
+
+    //The user hits "prepend row" once, with the second, third, and fourth row selected.
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist));
+    presenter.notify(IReflPresenter::PrependRowFlag);
+
+    //The user hits "save"
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    //Check that the table was modified correctly
+    ITableWorkspace_sptr ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 5);
+    TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 0);
+    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 2);
+    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 0);
+    TS_ASSERT_EQUALS(ws->Int(3, GroupCol), 1);
+    TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 1);
+
+    //Tidy up
+    AnalysisDataService::Instance().remove("TestWorkspace");
+  }
+
+  void testDeleteRowNone()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    //We should not receive any errors
+    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
+
+    //The user hits "delete row" with no rows selected
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(std::set<int>()));
+    presenter.notify(IReflPresenter::DeleteRowFlag);
+
+    //The user hits save
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    //Check that the table has not lost any rows
+    auto ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 4);
+
+    //Tidy up
+    AnalysisDataService::Instance().remove("TestWorkspace");
+  }
+
+  void testDeleteRowSingle()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    std::set<int> rowlist;
+    rowlist.insert(1);
+
+    //We should not receive any errors
+    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
+
+    //The user hits "delete row" with the second row selected
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist));
+    presenter.notify(IReflPresenter::DeleteRowFlag);
+
+    //The user hits "save"
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    auto ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 3);
+    TS_ASSERT_EQUALS(ws->String(1, RunCol), "24681");
+    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 1);
+
+    //Tidy up
+    AnalysisDataService::Instance().remove("TestWorkspace");
+  }
+
+  void testDeleteRowPlural()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    std::set<int> rowlist;
+    rowlist.insert(0);
+    rowlist.insert(1);
+    rowlist.insert(2);
+
+    //We should not receive any errors
+    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
+
+    //The user hits "delete row" with the first three rows selected
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist));
+    presenter.notify(IReflPresenter::DeleteRowFlag);
+
+    //The user hits save
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    //Check the rows were deleted as expected
+    auto ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 1);
+    TS_ASSERT_EQUALS(ws->String(0, RunCol), "24682");
+    TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 1);
+
+    //Tidy up
+    AnalysisDataService::Instance().remove("TestWorkspace");
+  }
+
+  void testProcess()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    std::set<int> rowlist;
+    rowlist.insert(0);
+    rowlist.insert(1);
+
+    createTOFWorkspace("TOF_12345", "12345");
+    createTOFWorkspace("TOF_12346", "12346");
+
+    //We should not receive any errors
+    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
+
+    //The user hits the "process" button with the first two rows selected
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist));
+    presenter.notify(IReflPresenter::ProcessFlag);
+
+    //Check output workspaces were created as expected
+    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsQ_12345"));
+    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsLam_12345"));
+    TS_ASSERT(AnalysisDataService::Instance().doesExist("TOF_12345"));
+    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsQ_12346"));
+    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsLam_12346"));
+    TS_ASSERT(AnalysisDataService::Instance().doesExist("TOF_12346"));
+    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsQ_12345_12346"));
+
+    //Tidy up
+    AnalysisDataService::Instance().remove("TestWorkspace");
+    AnalysisDataService::Instance().remove("IvsQ_12345");
+    AnalysisDataService::Instance().remove("IvsLam_12345");
+    AnalysisDataService::Instance().remove("TOF_12345");
+    AnalysisDataService::Instance().remove("IvsQ_12346");
+    AnalysisDataService::Instance().remove("IvsLam_12346");
+    AnalysisDataService::Instance().remove("TOF_12346");
+    AnalysisDataService::Instance().remove("IvsQ_12345_12346");
+  }
+
+  /*
+   * Test processing workspaces with non-standard names, with
+   * and without run_number information in the sample log.
+   */
+  void testProcessCustomNames()
+  {
+    auto ws = createWorkspace("TestWorkspace");
+    TableRow row = ws->appendRow();
+    row << "dataA" << "0.7" << "" << "0.1" << "1.6" << "0.04" << 1.0 << 1;
+    row = ws->appendRow();
+    row << "dataB" << "2.3" << "" << "1.4" << "2.9" << "0.04" << 1.0 << 1;
+
+    createTOFWorkspace("dataA");
+    createTOFWorkspace("dataB", "12346");
+
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    std::set<int> rowlist;
+    rowlist.insert(0);
+    rowlist.insert(1);
+
+    //We should not receive any errors
+    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
+
+    //The user hits the "process" button with the first two rows selected
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist));
+    presenter.notify(IReflPresenter::ProcessFlag);
+
+    //Check output workspaces were created as expected
+    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsQ_dataA"));
+    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsQ_12346"));
+    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsQ_dataA_12346"));
+    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsLam_dataA"));
+    TS_ASSERT(AnalysisDataService::Instance().doesExist("IvsLam_12346"));
+
+    //Tidy up
+    AnalysisDataService::Instance().remove("TestWorkspace");
+    AnalysisDataService::Instance().remove("dataA");
+    AnalysisDataService::Instance().remove("dataB");
+    AnalysisDataService::Instance().remove("IvsQ_dataA");
+    AnalysisDataService::Instance().remove("IvsLam_dataA");
+    AnalysisDataService::Instance().remove("IvsQ_12346");
+    AnalysisDataService::Instance().remove("IvsLam_12346");
+    AnalysisDataService::Instance().remove("IvsQ_dataA_12346");
+  }
+
+  void testBadWorkspaceType()
+  {
+    ITableWorkspace_sptr ws = WorkspaceFactory::Instance().createTable();
+
+    //Wrong types
+    ws->addColumn("str","Run(s)");
+    ws->addColumn("str","ThetaIn");
+    ws->addColumn("str","TransRun(s)");
+    ws->addColumn("str","Qmin");
+    ws->addColumn("str","Qmax");
+    ws->addColumn("str","dq/q");
+    ws->addColumn("str","Scale");
+    ws->addColumn("str","StitchGroup");
+    ws->addColumn("str","Options");
+
+    AnalysisDataService::Instance().addOrReplace("TestWorkspace", ws);
+
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    //We should receive an error
+    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(1);
+
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    AnalysisDataService::Instance().remove("TestWorkspace");
+  }
+
+  void testBadWorkspaceLength()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    //Because we to open twice, get an error twice
+    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(2);
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(2).WillRepeatedly(Return("TestWorkspace"));
+
+    ITableWorkspace_sptr ws = WorkspaceFactory::Instance().createTable();
+    ws->addColumn("str","Run(s)");
+    ws->addColumn("str","ThetaIn");
+    ws->addColumn("str","TransRun(s)");
+    ws->addColumn("str","Qmin");
+    ws->addColumn("str","Qmax");
+    ws->addColumn("str","dq/q");
+    ws->addColumn("double","Scale");
+    ws->addColumn("int","StitchGroup");
+    AnalysisDataService::Instance().addOrReplace("TestWorkspace", ws);
+
+    //Try to open with too few columns
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    ws->addColumn("str","OptionsA");
+    ws->addColumn("str","OptionsB");
+    AnalysisDataService::Instance().addOrReplace("TestWorkspace", ws);
+
+    //Try to open with too many columns
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    AnalysisDataService::Instance().remove("TestWorkspace");
+  }
+
+  void testParseKeyValueString()
+  {
+    std::map<std::string,std::string> kvp = ReflMainViewPresenter::parseKeyValueString("a = 1,b=2.0, c=3, d='1,2,3',e=\"4,5,6\",f=1+1=2, g = '\\''");
+
+    TS_ASSERT_EQUALS(kvp["a"], "1");
+    TS_ASSERT_EQUALS(kvp["b"], "2.0");
+    TS_ASSERT_EQUALS(kvp["c"], "3");
+    TS_ASSERT_EQUALS(kvp["d"], "1,2,3");
+    TS_ASSERT_EQUALS(kvp["e"], "4,5,6");
+    TS_ASSERT_EQUALS(kvp["f"], "1+1=2");
+    TS_ASSERT_EQUALS(kvp["g"], "'");
+
+    TS_ASSERT_THROWS(ReflMainViewPresenter::parseKeyValueString("a = 1, b = 2, c = 3,"), std::runtime_error);
+    TS_ASSERT_THROWS(ReflMainViewPresenter::parseKeyValueString("a = 1, b = 2, c = 3,d"), std::runtime_error);
+    TS_ASSERT_THROWS(ReflMainViewPresenter::parseKeyValueString(",a = 1"), std::runtime_error);
+    TS_ASSERT_THROWS(ReflMainViewPresenter::parseKeyValueString(",a = 1 = 2,="), std::runtime_error);
+    TS_ASSERT_THROWS(ReflMainViewPresenter::parseKeyValueString("=,=,="), std::runtime_error);
+  }
+
+  void testPromptSaveAfterAppendRow()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    //User hits "append row"
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(std::set<int>()));
+    presenter.notify(IReflPresenter::AppendRowFlag);
+
+    //The user will decide not to discard their changes
+    EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(1).WillOnce(Return(false));
+
+    //Then hits "new table" without having saved
+    presenter.notify(IReflPresenter::NewTableFlag);
+
+    //The user saves
+    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillOnce(Return("Workspace"));
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    //The user tries to create a new table again, and does not get bothered
+    EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(0);
+    presenter.notify(IReflPresenter::NewTableFlag);
+  }
+
+  void testPromptSaveAfterDeleteRow()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    //User hits "append row" a couple of times
+    EXPECT_CALL(mockView, getSelectedRows()).Times(2).WillRepeatedly(Return(std::set<int>()));
+    presenter.notify(IReflPresenter::AppendRowFlag);
+    presenter.notify(IReflPresenter::AppendRowFlag);
+
+    //The user saves
+    EXPECT_CALL(mockView, askUserString(_,_,"Workspace")).Times(1).WillOnce(Return("Workspace"));
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    //...then deletes the 2nd row
+    std::set<int> rows;
+    rows.insert(1);
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rows));
+    presenter.notify(IReflPresenter::DeleteRowFlag);
+
+    //The user will decide not to discard their changes when asked
+    EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(1).WillOnce(Return(false));
+
+    //Then hits "new table" without having saved
+    presenter.notify(IReflPresenter::NewTableFlag);
+
+    //The user saves
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    //The user tries to create a new table again, and does not get bothered
+    EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(0);
+    presenter.notify(IReflPresenter::NewTableFlag);
+  }
+
+  void testPromptSaveAndDiscard()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    //User hits "append row" a couple of times
+    EXPECT_CALL(mockView, getSelectedRows()).Times(2).WillRepeatedly(Return(std::set<int>()));
+    presenter.notify(IReflPresenter::AppendRowFlag);
+    presenter.notify(IReflPresenter::AppendRowFlag);
+
+    //Then hits "new table", and decides to discard
+    EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(1).WillOnce(Return(true));
+    presenter.notify(IReflPresenter::NewTableFlag);
+
+    //These next two times they don't get prompted - they have a new table
+    presenter.notify(IReflPresenter::NewTableFlag);
+    presenter.notify(IReflPresenter::NewTableFlag);
+  }
+
+  void testPromptSaveOnOpen()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+
+    //User hits "append row"
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(std::set<int>()));
+    presenter.notify(IReflPresenter::AppendRowFlag);
+
+    //and tries to open a workspace, but gets prompted and decides not to discard
+    EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(1).WillOnce(Return(false));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    //the user does it again, but discards
+    EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(1).WillOnce(Return(true));
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    //the user does it one more time, and is not prompted
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    EXPECT_CALL(mockView, askUserYesNo(_,_)).Times(0);
+    presenter.notify(IReflPresenter::OpenTableFlag);
+  }
+
+  void testExpandSelection()
+  {
+    auto ws = createWorkspace("TestWorkspace");
+    TableRow row = ws->appendRow();
+    row << "" << "" << "" << "" << "" << "" << 1.0 << 0 << ""; //Row 0
+    row = ws->appendRow();
+    row << "" << "" << "" << "" << "" << "" << 1.0 << 1 << ""; //Row 1
+    row = ws->appendRow();
+    row << "" << "" << "" << "" << "" << "" << 1.0 << 1 << ""; //Row 2
+    row = ws->appendRow();
+    row << "" << "" << "" << "" << "" << "" << 1.0 << 2 << ""; //Row 3
+    row = ws->appendRow();
+    row << "" << "" << "" << "" << "" << "" << 1.0 << 2 << ""; //Row 4
+    row = ws->appendRow();
+    row << "" << "" << "" << "" << "" << "" << 1.0 << 2 << ""; //Row 5
+    row = ws->appendRow();
+    row << "" << "" << "" << "" << "" << "" << 1.0 << 3 << ""; //Row 6
+    row = ws->appendRow();
+    row << "" << "" << "" << "" << "" << "" << 1.0 << 4 << ""; //Row 7
+    row = ws->appendRow();
+    row << "" << "" << "" << "" << "" << "" << 1.0 << 4 << ""; //Row 8
+    row = ws->appendRow();
+    row << "" << "" << "" << "" << "" << "" << 1.0 << 5 << ""; //Row 9
+
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    //We should not receive any errors
+    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
+
+    std::set<int> selection;
+    std::set<int> expected;
+
+    selection.insert(0);
+    expected.insert(0);
+
+    //With row 0 selected, we shouldn't expand at all
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(selection));
+    EXPECT_CALL(mockView, setSelection(ContainerEq(expected))).Times(1);
+    presenter.notify(IReflPresenter::ExpandSelectionFlag);
+
+    //With 0,1 selected, we should finish with 0,1,2 selected
+    selection.clear();
+    selection.insert(0);
+    selection.insert(1);
+
+    expected.clear();
+    expected.insert(0);
+    expected.insert(1);
+    expected.insert(2);
+
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(selection));
+    EXPECT_CALL(mockView, setSelection(ContainerEq(expected))).Times(1);
+    presenter.notify(IReflPresenter::ExpandSelectionFlag);
+
+    //With 1,6 selected, we should finish with 1,2,6 selected
+    selection.clear();
+    selection.insert(1);
+    selection.insert(6);
+
+    expected.clear();
+    expected.insert(1);
+    expected.insert(2);
+    expected.insert(6);
+
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(selection));
+    EXPECT_CALL(mockView, setSelection(ContainerEq(expected))).Times(1);
+    presenter.notify(IReflPresenter::ExpandSelectionFlag);
+
+    //With 4,8 selected, we should finish with 3,4,5,7,8 selected
+    selection.clear();
+    selection.insert(4);
+    selection.insert(8);
+
+    expected.clear();
+    expected.insert(3);
+    expected.insert(4);
+    expected.insert(5);
+    expected.insert(7);
+    expected.insert(8);
+
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(selection));
+    EXPECT_CALL(mockView, setSelection(ContainerEq(expected))).Times(1);
+    presenter.notify(IReflPresenter::ExpandSelectionFlag);
+
+    //With nothing selected, we should finish with nothing selected
+    selection.clear();
+    expected.clear();
+
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(selection));
+    EXPECT_CALL(mockView, setSelection(ContainerEq(expected))).Times(1);
+    presenter.notify(IReflPresenter::ExpandSelectionFlag);
+
+    //Tidy up
+    AnalysisDataService::Instance().remove("TestWorkspace");
+  }
+
+  void testClearRows()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    std::set<int> rowlist;
+    rowlist.insert(1);
+    rowlist.insert(2);
+
+    //We should not receive any errors
+    EXPECT_CALL(mockView, giveUserCritical(_,_)).Times(0);
+
+    //The user hits "clear selected" with the second and third rows selected
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist));
+    presenter.notify(IReflPresenter::ClearSelectedFlag);
+
+    //The user hits "save"
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    auto ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 4);
+    //Check the unselected rows were unaffected
+    TS_ASSERT_EQUALS(ws->String(0, RunCol), "12345");
+    TS_ASSERT_EQUALS(ws->String(3, RunCol), "24682");
+
+    //Check the group ids have been set correctly
+    TS_ASSERT_EQUALS(ws->Int(0, GroupCol), 0);
+    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 2);
+    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 3);
+    TS_ASSERT_EQUALS(ws->Int(3, GroupCol), 1);
+
+    //Make sure the selected rows are clear
+    TS_ASSERT_EQUALS(ws->String(1, RunCol), "");
+    TS_ASSERT_EQUALS(ws->String(2, RunCol), "");
+    TS_ASSERT_EQUALS(ws->String(1, ThetaCol), "");
+    TS_ASSERT_EQUALS(ws->String(2, ThetaCol), "");
+    TS_ASSERT_EQUALS(ws->String(1, TransCol), "");
+    TS_ASSERT_EQUALS(ws->String(2, TransCol), "");
+    TS_ASSERT_EQUALS(ws->String(1, QMinCol), "");
+    TS_ASSERT_EQUALS(ws->String(2, QMinCol), "");
+    TS_ASSERT_EQUALS(ws->String(1, QMaxCol), "");
+    TS_ASSERT_EQUALS(ws->String(2, QMaxCol), "");
+    TS_ASSERT_EQUALS(ws->String(1, DQQCol), "");
+    TS_ASSERT_EQUALS(ws->String(2, DQQCol), "");
+    TS_ASSERT_EQUALS(ws->Double(1, ScaleCol), 1.0);
+    TS_ASSERT_EQUALS(ws->Double(2, ScaleCol), 1.0);
+
+    //Tidy up
+    AnalysisDataService::Instance().remove("TestWorkspace");
+  }
+
+  void testCopyRow()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    std::set<int> rowlist;
+    rowlist.insert(1);
+
+    const std::string expected = "12346\t1.5\t\t1.4\t2.9\t0.04\t1\t0\t";
+
+    //The user hits "copy selected" with the second and third rows selected
+    EXPECT_CALL(mockView, setClipboard(expected));
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist));
+    presenter.notify(IReflPresenter::CopySelectedFlag);
+  }
+
+  void testCopyRows()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    std::set<int> rowlist;
+    rowlist.insert(0);
+    rowlist.insert(1);
+    rowlist.insert(2);
+    rowlist.insert(3);
+
+    const std::string expected = "12345\t0.5\t\t0.1\t1.6\t0.04\t1\t0\t\n"
+                                 "12346\t1.5\t\t1.4\t2.9\t0.04\t1\t0\t\n"
+                                 "24681\t0.5\t\t0.1\t1.6\t0.04\t1\t1\t\n"
+                                 "24682\t1.5\t\t1.4\t2.9\t0.04\t1\t1\t";
+
+    //The user hits "copy selected" with the second and third rows selected
+    EXPECT_CALL(mockView, setClipboard(expected));
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist));
+    presenter.notify(IReflPresenter::CopySelectedFlag);
+  }
+
+  void testCutRow()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    std::set<int> rowlist;
+    rowlist.insert(1);
+
+    const std::string expected = "12346\t1.5\t\t1.4\t2.9\t0.04\t1\t0\t";
+
+    //The user hits "copy selected" with the second and third rows selected
+    EXPECT_CALL(mockView, setClipboard(expected));
+    EXPECT_CALL(mockView, getSelectedRows()).Times(2).WillRepeatedly(Return(rowlist));
+    presenter.notify(IReflPresenter::CutSelectedFlag);
+
+    //The user hits "save"
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    auto ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 3);
+    //Check the unselected rows were unaffected
+    TS_ASSERT_EQUALS(ws->String(0, RunCol), "12345");
+    TS_ASSERT_EQUALS(ws->String(1, RunCol), "24681");
+    TS_ASSERT_EQUALS(ws->String(2, RunCol), "24682");
+  }
+
+  void testCutRows()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    std::set<int> rowlist;
+    rowlist.insert(0);
+    rowlist.insert(1);
+    rowlist.insert(2);
+
+    const std::string expected = "12345\t0.5\t\t0.1\t1.6\t0.04\t1\t0\t\n"
+                                 "12346\t1.5\t\t1.4\t2.9\t0.04\t1\t0\t\n"
+                                 "24681\t0.5\t\t0.1\t1.6\t0.04\t1\t1\t";
+
+    //The user hits "copy selected" with the second and third rows selected
+    EXPECT_CALL(mockView, setClipboard(expected));
+    EXPECT_CALL(mockView, getSelectedRows()).Times(2).WillRepeatedly(Return(rowlist));
+    presenter.notify(IReflPresenter::CutSelectedFlag);
+
+    //The user hits "save"
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    auto ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 1);
+    //Check the only unselected row is left behind
+    TS_ASSERT_EQUALS(ws->String(0, RunCol), "24682");
+  }
+
+  void testPasteRow()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    std::set<int> rowlist;
+    rowlist.insert(1);
+
+    const std::string clipboard = "123\t0.5\t456\t1.2\t3.4\t3.14\t5\t6\tabc";
+
+    //The user hits "copy selected" with the second and third rows selected
+    EXPECT_CALL(mockView, getClipboard()).Times(1).WillRepeatedly(Return(clipboard));
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist));
+    presenter.notify(IReflPresenter::PasteSelectedFlag);
+
+    //The user hits "save"
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    auto ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 4);
+    //Check the unselected rows were unaffected
+    TS_ASSERT_EQUALS(ws->String(0, RunCol), "12345");
+    TS_ASSERT_EQUALS(ws->String(2, RunCol), "24681");
+    TS_ASSERT_EQUALS(ws->String(3, RunCol), "24682");
+
+    //Check the values were pasted correctly
+    TS_ASSERT_EQUALS(ws->String(1, RunCol), "123");
+    TS_ASSERT_EQUALS(ws->String(1, ThetaCol), "0.5");
+    TS_ASSERT_EQUALS(ws->String(1, TransCol), "456");
+    TS_ASSERT_EQUALS(ws->String(1, QMinCol), "1.2");
+    TS_ASSERT_EQUALS(ws->String(1, QMaxCol), "3.4");
+    TS_ASSERT_EQUALS(ws->String(1, DQQCol), "3.14");
+    TS_ASSERT_EQUALS(ws->Double(1, ScaleCol), 5.0);
+    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 6);
+    TS_ASSERT_EQUALS(ws->String(1, OptionsCol), "abc");
+  }
+
+  void testPasteNewRow()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    const std::string clipboard = "123\t0.5\t456\t1.2\t3.4\t3.14\t5\t6\tabc";
+
+    //The user hits "copy selected" with the second and third rows selected
+    EXPECT_CALL(mockView, getClipboard()).Times(1).WillRepeatedly(Return(clipboard));
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(std::set<int>()));
+    presenter.notify(IReflPresenter::PasteSelectedFlag);
+
+    //The user hits "save"
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    auto ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 5);
+    //Check the unselected rows were unaffected
+    TS_ASSERT_EQUALS(ws->String(0, RunCol), "12345");
+    TS_ASSERT_EQUALS(ws->String(1, RunCol), "12346");
+    TS_ASSERT_EQUALS(ws->String(2, RunCol), "24681");
+    TS_ASSERT_EQUALS(ws->String(3, RunCol), "24682");
+
+    //Check the values were pasted correctly
+    TS_ASSERT_EQUALS(ws->String(4, RunCol), "123");
+    TS_ASSERT_EQUALS(ws->String(4, ThetaCol), "0.5");
+    TS_ASSERT_EQUALS(ws->String(4, TransCol), "456");
+    TS_ASSERT_EQUALS(ws->String(4, QMinCol), "1.2");
+    TS_ASSERT_EQUALS(ws->String(4, QMaxCol), "3.4");
+    TS_ASSERT_EQUALS(ws->String(4, DQQCol), "3.14");
+    TS_ASSERT_EQUALS(ws->Double(4, ScaleCol), 5.0);
+    TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 6);
+    TS_ASSERT_EQUALS(ws->String(4, OptionsCol), "abc");
+  }
+
+  void testPasteRows()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    std::set<int> rowlist;
+    rowlist.insert(1);
+    rowlist.insert(2);
+
+    const std::string clipboard = "123\t0.5\t456\t1.2\t3.4\t3.14\t5\t6\tabc\n"
+                                  "345\t2.7\t123\t2.1\t4.3\t2.17\t3\t2\tdef";
+
+    //The user hits "copy selected" with the second and third rows selected
+    EXPECT_CALL(mockView, getClipboard()).Times(1).WillRepeatedly(Return(clipboard));
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(rowlist));
+    presenter.notify(IReflPresenter::PasteSelectedFlag);
+
+    //The user hits "save"
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    auto ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 4);
+    //Check the unselected rows were unaffected
+    TS_ASSERT_EQUALS(ws->String(0, RunCol), "12345");
+    TS_ASSERT_EQUALS(ws->String(3, RunCol), "24682");
+
+    //Check the values were pasted correctly
+    TS_ASSERT_EQUALS(ws->String(1, RunCol), "123");
+    TS_ASSERT_EQUALS(ws->String(1, ThetaCol), "0.5");
+    TS_ASSERT_EQUALS(ws->String(1, TransCol), "456");
+    TS_ASSERT_EQUALS(ws->String(1, QMinCol), "1.2");
+    TS_ASSERT_EQUALS(ws->String(1, QMaxCol), "3.4");
+    TS_ASSERT_EQUALS(ws->String(1, DQQCol), "3.14");
+    TS_ASSERT_EQUALS(ws->Double(1, ScaleCol), 5.0);
+    TS_ASSERT_EQUALS(ws->Int(1, GroupCol), 6);
+    TS_ASSERT_EQUALS(ws->String(1, OptionsCol), "abc");
+
+    TS_ASSERT_EQUALS(ws->String(2, RunCol), "345");
+    TS_ASSERT_EQUALS(ws->String(2, ThetaCol), "2.7");
+    TS_ASSERT_EQUALS(ws->String(2, TransCol), "123");
+    TS_ASSERT_EQUALS(ws->String(2, QMinCol), "2.1");
+    TS_ASSERT_EQUALS(ws->String(2, QMaxCol), "4.3");
+    TS_ASSERT_EQUALS(ws->String(2, DQQCol), "2.17");
+    TS_ASSERT_EQUALS(ws->Double(2, ScaleCol), 3.0);
+    TS_ASSERT_EQUALS(ws->Int(2, GroupCol), 2);
+    TS_ASSERT_EQUALS(ws->String(2, OptionsCol), "def");
+  }
+
+  void testPasteNewRows()
+  {
+    MockView mockView;
+    ReflMainViewPresenter presenter(&mockView);
+
+    createPrefilledWorkspace("TestWorkspace");
+    EXPECT_CALL(mockView, getWorkspaceToOpen()).Times(1).WillRepeatedly(Return("TestWorkspace"));
+    presenter.notify(IReflPresenter::OpenTableFlag);
+
+    const std::string clipboard = "123\t0.5\t456\t1.2\t3.4\t3.14\t5\t6\tabc\n"
+                                  "345\t2.7\t123\t2.1\t4.3\t2.17\t3\t2\tdef";
+
+    //The user hits "copy selected" with the second and third rows selected
+    EXPECT_CALL(mockView, getClipboard()).Times(1).WillRepeatedly(Return(clipboard));
+    EXPECT_CALL(mockView, getSelectedRows()).Times(1).WillRepeatedly(Return(std::set<int>()));
+    presenter.notify(IReflPresenter::PasteSelectedFlag);
+
+    //The user hits "save"
+    presenter.notify(IReflPresenter::SaveFlag);
+
+    auto ws = AnalysisDataService::Instance().retrieveWS<ITableWorkspace>("TestWorkspace");
+    TS_ASSERT_EQUALS(ws->rowCount(), 6);
+    //Check the unselected rows were unaffected
+    TS_ASSERT_EQUALS(ws->String(0, RunCol), "12345");
+    TS_ASSERT_EQUALS(ws->String(1, RunCol), "12346");
+    TS_ASSERT_EQUALS(ws->String(2, RunCol), "24681");
+    TS_ASSERT_EQUALS(ws->String(3, RunCol), "24682");
+
+    //Check the values were pasted correctly
+    TS_ASSERT_EQUALS(ws->String(4, RunCol), "123");
+    TS_ASSERT_EQUALS(ws->String(4, ThetaCol), "0.5");
+    TS_ASSERT_EQUALS(ws->String(4, TransCol), "456");
+    TS_ASSERT_EQUALS(ws->String(4, QMinCol), "1.2");
+    TS_ASSERT_EQUALS(ws->String(4, QMaxCol), "3.4");
+    TS_ASSERT_EQUALS(ws->String(4, DQQCol), "3.14");
+    TS_ASSERT_EQUALS(ws->Double(4, ScaleCol), 5.0);
+    TS_ASSERT_EQUALS(ws->Int(4, GroupCol), 6);
+    TS_ASSERT_EQUALS(ws->String(4, OptionsCol), "abc");
+
+    TS_ASSERT_EQUALS(ws->String(5, RunCol), "345");
+    TS_ASSERT_EQUALS(ws->String(5, ThetaCol), "2.7");
+    TS_ASSERT_EQUALS(ws->String(5, TransCol), "123");
+    TS_ASSERT_EQUALS(ws->String(5, QMinCol), "2.1");
+    TS_ASSERT_EQUALS(ws->String(5, QMaxCol), "4.3");
+    TS_ASSERT_EQUALS(ws->String(5, DQQCol), "2.17");
+    TS_ASSERT_EQUALS(ws->Double(5, ScaleCol), 3.0);
+    TS_ASSERT_EQUALS(ws->Int(5, GroupCol), 2);
+    TS_ASSERT_EQUALS(ws->String(5, OptionsCol), "def");
+  }
+};
+
+#endif /* MANTID_CUSTOMINTERFACES_REFLMAINVIEWPRESENTERTEST_H */
diff --git a/Code/Mantid/MantidQt/Factory/inc/MantidQtFactory/WidgetFactory.h b/Code/Mantid/MantidQt/Factory/inc/MantidQtFactory/WidgetFactory.h
index 2d603b0f68ce9949ee8534788fa6a75564a064af..e6a8f54f6c7bf7a272d595b097641e33682d1d9f 100644
--- a/Code/Mantid/MantidQt/Factory/inc/MantidQtFactory/WidgetFactory.h
+++ b/Code/Mantid/MantidQt/Factory/inc/MantidQtFactory/WidgetFactory.h
@@ -13,6 +13,10 @@
 
 namespace MantidQt
 {
+  namespace SliceViewer
+  {
+    class SliceViewerWindow;
+  }
 namespace Factory
 {
 
@@ -53,6 +57,7 @@ namespace Factory
     MantidQt::SliceViewer::SliceViewerWindow* createSliceViewerWindow(const QString& wsName, const QString& label);
     MantidQt::SliceViewer::SliceViewerWindow* getSliceViewerWindow(const QString& wsName, const QString& label);
     void closeAllSliceViewerWindows();
+    void closeSliceViewerWindow(SliceViewer::SliceViewerWindow* w);
 
     MantidQt::SliceViewer::SliceViewer* createSliceViewer(const QString& wsName);
 
@@ -61,7 +66,7 @@ namespace Factory
 
   protected:
     /// List of the open SliceViewerWindows
-    std::vector<QPointer<MantidQt::SliceViewer::SliceViewerWindow> > m_windows;
+    std::list<QPointer<MantidQt::SliceViewer::SliceViewerWindow> > m_windows;
     /// Singleton instance
     static WidgetFactory * m_pInstance;
   };
diff --git a/Code/Mantid/MantidQt/Factory/src/WidgetFactory.cpp b/Code/Mantid/MantidQt/Factory/src/WidgetFactory.cpp
index 1313eb702b43d5a5d05c8d6cde7ae22b5be6064f..7005a772e17f5cadfb9876af1d22195b94b4b7d1 100644
--- a/Code/Mantid/MantidQt/Factory/src/WidgetFactory.cpp
+++ b/Code/Mantid/MantidQt/Factory/src/WidgetFactory.cpp
@@ -77,9 +77,7 @@ namespace Factory
    */
   MantidQt::SliceViewer::SliceViewerWindow* WidgetFactory::getSliceViewerWindow(const QString& wsName,  const QString& label)
   {
-
-    std::vector<QPointer<MantidQt::SliceViewer::SliceViewerWindow> >::iterator it;
-    for (it = m_windows.begin(); it != m_windows.end(); ++it)
+    for (auto it = m_windows.begin(); it != m_windows.end(); ++it)
     {
       QPointer<MantidQt::SliceViewer::SliceViewerWindow> window = *it;
       if (window)
@@ -99,8 +97,7 @@ namespace Factory
    */
   void WidgetFactory::closeAllSliceViewerWindows()
   {
-    std::vector<QPointer<MantidQt::SliceViewer::SliceViewerWindow> >::iterator it;
-    for (it = m_windows.begin(); it != m_windows.end(); ++it)
+    for (auto it = m_windows.begin(); it != m_windows.end(); ++it)
     {
       QPointer<MantidQt::SliceViewer::SliceViewerWindow> window = *it;
       if (window)
@@ -110,6 +107,18 @@ namespace Factory
     m_windows.clear();
   }
 
+  /**
+   * Closes one instance
+   */
+  void WidgetFactory::closeSliceViewerWindow(SliceViewerWindow* w)
+  {
+    if (w)
+    {
+      w->close(true);
+      m_windows.remove(w);
+    }
+  }
+
   //----------------------------------------------------------------------------------------------
   /** Create an instance of a bare SliceViewer Widget.
    * This is only capable of doing 2D views, and cannot do line plots
diff --git a/Code/Mantid/MantidQt/MantidWidgets/CMakeLists.txt b/Code/Mantid/MantidQt/MantidWidgets/CMakeLists.txt
index 64ebe528e24219b5c03cd3b499673b8c9d7814b1..d81e332cfdc21f380f59996da1427b0b5a751d01 100644
--- a/Code/Mantid/MantidQt/MantidWidgets/CMakeLists.txt
+++ b/Code/Mantid/MantidQt/MantidWidgets/CMakeLists.txt
@@ -12,6 +12,7 @@ set ( SRC_FILES
 	src/FitPropertyBrowser.cpp
 	src/FormulaDialogEditor.cpp
 	src/FunctionBrowser.cpp
+	src/HintingLineEdit.cpp
 	src/InstrumentSelector.cpp
         src/MantidHelpWindow.cpp
 	src/MWDiag.cpp
@@ -53,6 +54,7 @@ set ( MOC_FILES
     inc/MantidQtMantidWidgets/FindDialog.h
     inc/MantidQtMantidWidgets/FitPropertyBrowser.h
     inc/MantidQtMantidWidgets/FunctionBrowser.h
+    inc/MantidQtMantidWidgets/HintingLineEdit.h
     inc/MantidQtMantidWidgets/CatalogSearch.h
     inc/MantidQtMantidWidgets/CatalogSelector.h
     inc/MantidQtMantidWidgets/InstrumentSelector.h
@@ -87,8 +89,10 @@ set ( MOC_FILES
 # Add the include files are NOT already in MOC_FILES
 set ( INC_FILES
 	${MOC_FILES}
+	inc/MantidQtMantidWidgets/AlgorithmHintStrategy.h
 	inc/MantidQtMantidWidgets/CatalogHelper.h
 	inc/MantidQtMantidWidgets/WidgetDllOption.h
+	inc/MantidQtMantidWidgets/HintStrategy.h
 )
 
 # QtDesigner UI files to process
@@ -113,6 +117,10 @@ set ( TEST_PY_FILES
   test/MWRunFilesTest.py
 )
 
+set ( TEST_FILES
+  AlgorithmHintStrategyTest.h
+)
+
 find_package (Qt4 REQUIRED QtHelp QtWebKit QtNetwork QUIET)
 include(${QT_USE_FILE})
 
@@ -141,12 +149,10 @@ target_link_libraries ( MantidWidgets MantidQtAPI QtPropertyBrowser
     )
 
 ###########################################################################
-# Unit tests setup
+# Testing
 ###########################################################################
 
-if ( PYUNITTEST_FOUND )
-  pyunittest_add_test (${CMAKE_CURRENT_SOURCE_DIR}/test MantidWidgetsTest ${TEST_PY_FILES} )
-endif ()
+add_subdirectory ( test )
 
 ###########################################################################
 # Installation settings
diff --git a/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/AlgorithmHintStrategy.h b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/AlgorithmHintStrategy.h
new file mode 100644
index 0000000000000000000000000000000000000000..760595d9561116f162af880aad35b6eb36de03d8
--- /dev/null
+++ b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/AlgorithmHintStrategy.h
@@ -0,0 +1,67 @@
+#ifndef MANTID_MANTIDWIDGETS_ALGORITHMHINTSTRATEGY_H
+#define MANTID_MANTIDWIDGETS_ALGORITHMHINTSTRATEGY_H
+
+#include "MantidAPI/IAlgorithm.h"
+#include "MantidQtMantidWidgets/HintStrategy.h"
+
+using namespace Mantid::API;
+
+namespace MantidQt
+{
+  namespace MantidWidgets
+  {
+    /** AlgorithmHintStrategy : Produces hints using a given algorithm's properties.
+
+    Copyright &copy; 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+    */
+    class AlgorithmHintStrategy : public HintStrategy
+    {
+    public:
+      AlgorithmHintStrategy(IAlgorithm_sptr algorithm, std::set<std::string> blacklist) : m_algorithm(algorithm), m_blacklist(blacklist)
+      {
+      }
+
+      virtual ~AlgorithmHintStrategy() {};
+
+      virtual std::map<std::string,std::string> createHints()
+      {
+        std::map<std::string,std::string> hints;
+
+        auto properties = m_algorithm->getProperties();
+        for(auto it = properties.begin(); it != properties.end(); ++it)
+        {
+          const std::string name = (*it)->name();
+
+          //If it's not in the blacklist, add the property to our hints
+          if(m_blacklist.find(name) == m_blacklist.end())
+            hints[name] = (*it)->briefDocumentation();
+        }
+
+        return hints;
+      }
+    private:
+      IAlgorithm_sptr m_algorithm;
+      std::set<std::string> m_blacklist;
+    };
+  }
+}
+
+#endif /* MANTID_MANTIDWIDGETS_ALGORITHMHINTSTRATEGY_H */
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflNullMainViewPresenter.h b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintStrategy.h
similarity index 55%
rename from Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflNullMainViewPresenter.h
rename to Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintStrategy.h
index dbb17a024b758e065655a532fa5a98aa5f7466b8..0554ac3609d3a55ec41fa20eb5f0a1e4a8517224 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/ReflNullMainViewPresenter.h
+++ b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintStrategy.h
@@ -1,17 +1,16 @@
-#ifndef MANTID_CUSTOMINTERFACES_REFLNULLMAINVIEWPRESENTER_H
-#define MANTID_CUSTOMINTERFACES_REFLNULLMAINVIEWPRESENTER_H
+#ifndef MANTID_MANTIDWIDGETS_HINTSTRATEGY_H
+#define MANTID_MANTIDWIDGETS_HINTSTRATEGY_H
+
+#include <map>
+#include <string>
 
-#include "MantidKernel/System.h"
-#include "MantidQtCustomInterfaces/IReflPresenter.h"
 namespace MantidQt
 {
-  namespace CustomInterfaces
+  namespace MantidWidgets
   {
-    /** @class ReflNullMainViewPresenter
-
-    ReflNullMainViewPresenter is a Null object that supports all the IReflPresenter interfaces but raises a runtime error if any are called.
+    /** HintStrategy : Provides an interface for generating hints to be used by a HintingLineEdit.
 
-    Copyright &copy; 2011-14 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
+    Copyright &copy; 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
 
     This file is part of Mantid.
 
@@ -28,17 +27,22 @@ namespace MantidQt
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-    File change history is stored at: <https://github.com/mantidproject/mantid>.
+    File change history is stored at: <https://github.com/mantidproject/mantid>
     Code Documentation is available at: <http://doxygen.mantidproject.org>
-*/
-    class DLLExport ReflNullMainViewPresenter: public IReflPresenter
+    */
+    class HintStrategy
     {
     public:
-      virtual ~ReflNullMainViewPresenter();
-      virtual void notify(int flag);
-    private:
+      HintStrategy() {};
+      virtual ~HintStrategy() {};
 
+      /** Create a list of hints for auto completion
+
+          @returns A map of keywords to short descriptions for the keyword.
+       */
+      virtual std::map<std::string,std::string> createHints() = 0;
     };
   }
 }
-#endif
+
+#endif /* MANTID_MANTIDWIDGETS_HINTSTRATEGY_H */
diff --git a/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintingLineEdit.h b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintingLineEdit.h
new file mode 100644
index 0000000000000000000000000000000000000000..76df20b98b42babb2621edfdfe5a5c9932f52133
--- /dev/null
+++ b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintingLineEdit.h
@@ -0,0 +1,67 @@
+#ifndef MANTID_MANTIDWIDGETS_HINTINGLINEEDIT_H_
+#define MANTID_MANTIDWIDGETS_HINTINGLINEEDIT_H_
+
+#include "MantidKernel/System.h"
+#include "MantidAPI/AlgorithmFactory.h"
+#include "WidgetDllOption.h"
+
+#include <map>
+#include <QtGui>
+#include <string>
+
+//------------------------------------------------------------------------------
+// Forward declaration
+//------------------------------------------------------------------------------
+namespace MantidQt
+{
+  namespace MantidWidgets
+  {
+    /** HintingLineEdit : A QLineEdit widget providing autocompletion.
+
+    Copyright &copy; 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+    */
+    class EXPORT_OPT_MANTIDQT_MANTIDWIDGETS HintingLineEdit : public QLineEdit
+    {
+      Q_OBJECT
+    public:
+      HintingLineEdit(QWidget *parent, const std::map<std::string,std::string> &hints);
+      virtual ~HintingLineEdit();
+    protected:
+      virtual void keyPressEvent(QKeyEvent* e);
+      void updateMatches();
+      void showToolTip();
+      void insertSuggestion();
+      void clearSuggestion();
+      void nextSuggestion();
+      void prevSuggestion();
+      std::string m_curKey;
+      std::string m_curMatch;
+      std::map<std::string,std::string> m_matches;
+      std::map<std::string,std::string> m_hints;
+      bool m_dontComplete;
+      QLabel* m_hintLabel;
+    protected slots:
+      void updateHints(const QString& text);
+    };
+  } //namespace MantidWidgets
+} //namepsace MantidQt
+
+#endif /* MANTID_MANTIDWIDGETS_HINTINGLINEEDIT_H_ */
diff --git a/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintingLineEditFactory.h b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintingLineEditFactory.h
new file mode 100644
index 0000000000000000000000000000000000000000..1b14d6e39397726a742eea5333d3131d69fc64cb
--- /dev/null
+++ b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/HintingLineEditFactory.h
@@ -0,0 +1,61 @@
+#ifndef MANTID_MANTIDWIDGETS_HINTINGLINEEDITFACTORY_H
+#define MANTID_MANTIDWIDGETS_HINTINGLINEEDITFACTORY_H
+
+#include <QStyledItemDelegate>
+
+#include "MantidAPI/AlgorithmManager.h"
+#include "MantidQtMantidWidgets/HintingLineEdit.h"
+#include "MantidQtMantidWidgets/HintStrategy.h"
+
+using namespace Mantid::API;
+using namespace Mantid::Kernel;
+using namespace MantidQt::MantidWidgets;
+
+namespace MantidQt
+{
+  namespace CustomInterfaces
+  {
+    /** HintingLineEditFactory : A QStyledItemDelegate that produces HintingLineEdits using the given hint strategy.
+
+    Copyright &copy; 2014 ISIS Rutherford Appleton Laboratory & NScD Oak Ridge National Laboratory
+
+    This file is part of Mantid.
+
+    Mantid is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    Mantid 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+    File change history is stored at: <https://github.com/mantidproject/mantid>
+    Code Documentation is available at: <http://doxygen.mantidproject.org>
+    */
+    class HintingLineEditFactory : public QStyledItemDelegate
+    {
+    public:
+      HintingLineEditFactory(HintStrategy* hintStrategy) : m_strategy(hintStrategy) {};
+      virtual ~HintingLineEditFactory() {};
+      virtual QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
+      {
+        Q_UNUSED(option);
+        Q_UNUSED(index);
+
+        auto editor = new HintingLineEdit(parent, m_strategy->createHints());
+        editor->setFrame(false);
+
+        return editor;
+      }
+    protected:
+      boost::scoped_ptr<HintStrategy> m_strategy;
+    };
+  }
+}
+
+#endif /* MANTID_MANTIDWIDGETS_HINTINGLINEEDITFACTORY_H */
diff --git a/Code/Mantid/MantidQt/MantidWidgets/src/FitPropertyBrowser.cpp b/Code/Mantid/MantidQt/MantidWidgets/src/FitPropertyBrowser.cpp
index 7569e77f952bcddb3d7efc1411384f3c1cdd19a1..50fa40d4746f4349dd3d2ba6566245c6d367284b 100644
--- a/Code/Mantid/MantidQt/MantidWidgets/src/FitPropertyBrowser.cpp
+++ b/Code/Mantid/MantidQt/MantidWidgets/src/FitPropertyBrowser.cpp
@@ -185,11 +185,11 @@ void FitPropertyBrowser::init()
   m_minimizers << "Levenberg-Marquardt"
                << "Levenberg-MarquardtMD"
                << "Simplex"
+               << "FABADA"
                << "Conjugate gradient (Fletcher-Reeves imp.)"
                << "Conjugate gradient (Polak-Ribiere imp.)"
                << "BFGS"
-               << "Damping"
-               << "Fake";
+               << "Damping";
 
   m_ignoreInvalidData = m_boolManager->addProperty("Ignore invalid data");
   setIgnoreInvalidData( settings.value("Ignore invalid data",false).toBool() );
@@ -1100,26 +1100,33 @@ std::string FitPropertyBrowser::minimizer(bool withProperties)const
   {
     foreach(QtProperty* prop,m_minimizerProperties)
     {
-      minimStr += "," + prop->propertyName() + "=";
-      if ( prop->propertyManager() == m_intManager )
+      if ( prop->propertyManager() == m_stringManager )
       {
-        minimStr += QString::number( m_intManager->value(prop) );
-      }
-      else if ( prop->propertyManager() == m_doubleManager )
-      {
-        minimStr += QString::number( m_doubleManager->value(prop) );
-      }
-      else if ( prop->propertyManager() == m_boolManager )
-      {
-        minimStr += QString::number( m_boolManager->value(prop) );
-      }
-      else if ( prop->propertyManager() == m_stringManager )
-      {
-        minimStr += m_stringManager->value(prop);
+        QString value = m_stringManager->value(prop);
+        if ( !value.isEmpty() )
+        {
+          minimStr += "," + prop->propertyName() + "=" + value;
+        }
       }
       else
       {
-        throw std::runtime_error("The fit browser doesn't support the type of minimizer's property " + prop->propertyName().toStdString() );
+        minimStr += "," + prop->propertyName() + "=";
+        if ( prop->propertyManager() == m_intManager )
+        {
+          minimStr += QString::number( m_intManager->value(prop) );
+        }
+        else if ( prop->propertyManager() == m_doubleManager )
+        {
+          minimStr += QString::number( m_doubleManager->value(prop) );
+        }
+        else if ( prop->propertyManager() == m_boolManager )
+        {
+          minimStr += QString::number( m_boolManager->value(prop) );
+        }
+        else
+        {
+          throw std::runtime_error("The fit browser doesn't support the type of minimizer's property " + prop->propertyName().toStdString() );
+        }
       }
     }
   }
@@ -3198,6 +3205,8 @@ void FitPropertyBrowser::minimizerChanged()
         QMessageBox::warning(this,"MantidPlot - Error","Type of minimizer's property " + propName + " is not yet supported by the browser.");
         continue;
     }
+
+    if ( !prop ) continue;
     // set the tooltip from property doc string
     QString toolTip = QString::fromStdString( (**it).documentation() );
     if ( !toolTip.isEmpty() )
@@ -3250,7 +3259,7 @@ void FitPropertyBrowser::functionHelp()
   if ( handler )
   {
     // Create and open the URL of the help page
-    QString url = QString::fromStdString( "http://www.mantidproject.org/" + handler->ifun()->name() );
+    QString url = QString::fromStdString( "http://docs.mantidproject.org/fitfunctions/" + handler->ifun()->name() );
     QDesktopServices::openUrl(QUrl(url));
   }
 }
diff --git a/Code/Mantid/MantidQt/MantidWidgets/src/HintingLineEdit.cpp b/Code/Mantid/MantidQt/MantidWidgets/src/HintingLineEdit.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0c128d66690557795cd762a65db88befb2166fe7
--- /dev/null
+++ b/Code/Mantid/MantidQt/MantidWidgets/src/HintingLineEdit.cpp
@@ -0,0 +1,201 @@
+#include "MantidQtMantidWidgets/HintingLineEdit.h"
+
+#include <boost/algorithm/string.hpp>
+#include <QToolTip>
+
+namespace MantidQt
+{
+  namespace MantidWidgets
+  {
+    HintingLineEdit::HintingLineEdit(QWidget *parent, const std::map<std::string,std::string> &hints) : QLineEdit(parent), m_hints(hints), m_dontComplete(false)
+    {
+      m_hintLabel = new QLabel(this, Qt::ToolTip);
+      m_hintLabel->setMargin(1 + style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth, 0, m_hintLabel));
+      m_hintLabel->setFrameStyle(QFrame::StyledPanel);
+      m_hintLabel->setAlignment(Qt::AlignLeft);
+      m_hintLabel->setWordWrap(true);
+      m_hintLabel->setIndent(1);
+      m_hintLabel->setAutoFillBackground(true);
+      m_hintLabel->setPalette(QToolTip::palette());
+      m_hintLabel->setForegroundRole(QPalette::ToolTipText);
+      m_hintLabel->setBackgroundRole(QPalette::ToolTipBase);
+      m_hintLabel->ensurePolished();
+
+      connect(this, SIGNAL(textEdited(const QString&)), this, SLOT(updateHints(const QString&)));
+    }
+
+    HintingLineEdit::~HintingLineEdit()
+    {
+    }
+
+    /** Handle a key press event.
+
+        @param e : A pointer to the event
+     */
+    void HintingLineEdit::keyPressEvent(QKeyEvent* e)
+    {
+      m_dontComplete = (e->key() == Qt::Key_Backspace || e->key() == Qt::Key_Delete || e->key() == Qt::Key_Space);
+
+      if(e->key() == Qt::Key_Up)
+      {
+        prevSuggestion();
+        return;
+      }
+
+      if(e->key() == Qt::Key_Down)
+      {
+        nextSuggestion();
+        return;
+      }
+      QLineEdit::keyPressEvent(e);
+    }
+
+    /** Rebuild a list of hints whenever the user edits the text, and use the hints
+        to make auto completion suggestions.
+
+        @param text : The new contents of the QLineEdit
+     */
+    void HintingLineEdit::updateHints(const QString& text)
+    {
+      const size_t curPos = (size_t)cursorPosition();
+      const std::string line = text.toStdString();
+
+      //Get everything before the cursor
+      std::string prefix = line.substr(0, curPos);
+
+      //Now remove everything before the last ',' to give us the current word
+      std::size_t startPos = prefix.find_last_of(",");
+      if(startPos != std::string::npos)
+        prefix = prefix.substr(startPos + 1, prefix.size() - (startPos + 1));
+
+      //Remove any leading or trailing whitespace
+      boost::trim(prefix);
+
+      //Set the current key/prefix
+      m_curKey = prefix;
+
+      //Update our current list of matches
+      updateMatches();
+
+      //Show the potential matches in a tooltip
+      showToolTip();
+
+      //Suggest one of them to the user via auto-completion
+      insertSuggestion();
+    }
+
+    /** Updates the list of hints matching the user's current input */
+    void HintingLineEdit::updateMatches()
+    {
+      m_curMatch.clear();
+      m_matches.clear();
+
+      for(auto it = m_hints.begin(); it != m_hints.end(); ++it)
+      {
+        const std::string& hint = it->first;
+
+        if(hint.length() < m_curKey.length())
+          continue;
+
+        const std::string hintPrefix = hint.substr(0, m_curKey.length());
+
+        if(m_curKey == hintPrefix)
+          m_matches[hint] = it->second;
+      }
+    }
+
+    /** Show a tooltip with the current relevant hints */
+    void HintingLineEdit::showToolTip()
+    {
+      QString hintList;
+      for(auto mIt = m_matches.begin(); mIt != m_matches.end(); ++mIt)
+      {
+        hintList += "<b>" + QString::fromStdString(mIt->first) + "</b><br />\n";
+        if(!mIt->second.empty())
+          hintList += QString::fromStdString(mIt->second) + "<br />\n";
+      }
+
+      if(!hintList.trimmed().isEmpty())
+      {
+        m_hintLabel->show();
+        m_hintLabel->setText(hintList.trimmed());
+        m_hintLabel->adjustSize();
+        m_hintLabel->move(mapToGlobal(QPoint(0, height())));
+      }
+      else
+      {
+        m_hintLabel->hide();
+      }
+    }
+
+    /** Insert an auto completion suggestion beneath the user's cursor and select it */
+    void HintingLineEdit::insertSuggestion()
+    {
+      if(m_curKey.length() < 1 || m_matches.size() < 1 || m_dontComplete)
+        return;
+
+      //If we don't have a match, just use the first one in the map
+      if(m_curMatch.empty())
+        m_curMatch = m_matches.begin()->first;
+
+      QString line = text();
+      const int curPos = cursorPosition();
+
+      //Don't perform insertions mid-word
+      if(curPos + 1 < line.size() && line[curPos+1].isLetterOrNumber())
+        return;
+
+      //Insert a suggestion under the cursor, then select it
+      line = line.left(curPos) + QString::fromStdString(m_curMatch).mid((int)m_curKey.size()) + line.mid(curPos);
+
+      setText(line);
+      setSelection(curPos, (int)m_curMatch.size());
+    }
+
+    /** Remove any existing auto completion suggestion */
+    void HintingLineEdit::clearSuggestion()
+    {
+      if(!hasSelectedText())
+        return;
+
+      //Carefully cut out the selected text
+      QString line = text();
+      line = line.left(selectionStart()) + line.mid(selectionStart() + selectedText().length());
+      setText(line);
+    }
+
+    /** Change to the next available auto completion suggestion */
+    void HintingLineEdit::nextSuggestion()
+    {
+      clearSuggestion();
+      //Find the next suggestion in the hint map
+      auto it = m_matches.find(m_curMatch);
+      if(it != m_matches.end())
+      {
+        it++;
+        if(it == m_matches.end())
+          m_curMatch = m_matches.begin()->first;
+        else
+          m_curMatch = it->first;
+        insertSuggestion();
+      }
+    }
+
+    /** Change to the previous auto completion suggestion */
+    void HintingLineEdit::prevSuggestion()
+    {
+      clearSuggestion();
+      //Find the previous suggestion in the hint map
+      auto it = m_matches.find(m_curMatch);
+      if(it != m_matches.end())
+      {
+        it--;
+        if(it == m_matches.end())
+          m_curMatch = m_matches.rbegin()->first;
+        else
+          m_curMatch = it->first;
+        insertSuggestion();
+      }
+    }
+  } //namespace MantidWidgets
+} //namepsace MantidQt
diff --git a/Code/Mantid/MantidQt/MantidWidgets/test/AlgorithmHintStrategyTest.h b/Code/Mantid/MantidQt/MantidWidgets/test/AlgorithmHintStrategyTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..c0da65e6b89c8a987ac3d22d3be527cca037bad7
--- /dev/null
+++ b/Code/Mantid/MantidQt/MantidWidgets/test/AlgorithmHintStrategyTest.h
@@ -0,0 +1,64 @@
+#ifndef MANTID_MANTIDWIDGETS_ALGORITHMHINTSTRATEGYTEST_H
+#define MANTID_MANTIDWIDGETS_ALGORITHMHINTSTRATEGYTEST_H
+
+#include <cxxtest/TestSuite.h>
+#include "MantidAPI/FrameworkManager.h"
+#include "MantidAPI/AlgorithmManager.h"
+#include "MantidQtMantidWidgets/HintStrategy.h"
+#include "MantidQtMantidWidgets/AlgorithmHintStrategy.h"
+
+using namespace MantidQt::MantidWidgets;
+using namespace Mantid::API;
+
+//=====================================================================================
+// Functional tests
+//=====================================================================================
+class AlgorithmHintStrategyTest : public CxxTest::TestSuite
+{
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static AlgorithmHintStrategyTest *createSuite() { return new AlgorithmHintStrategyTest(); }
+  static void destroySuite( AlgorithmHintStrategyTest *suite ) { delete suite; }
+
+  AlgorithmHintStrategyTest()
+  {
+    FrameworkManager::Instance();
+    m_propAlg = AlgorithmManager::Instance().create("PropertyAlgorithm");
+    //Expected hints for PropertyAlgorithm
+    m_propMap["IntValue"]          = "";
+    m_propMap["DoubleValue"]       = "";
+    m_propMap["BoolValue"]         = "";
+    m_propMap["StringValue"]       = "";
+    m_propMap["PositiveIntValue"]  = "";
+    m_propMap["PositiveIntValue1"] = "";
+    m_propMap["IntArray"]          = "";
+    m_propMap["DoubleArray"]       = "";
+    m_propMap["StringArray"]       = "";
+  }
+
+  void testCreateHints()
+  {
+    boost::scoped_ptr<HintStrategy> strategy(new AlgorithmHintStrategy(m_propAlg, std::set<std::string>()));
+    TS_ASSERT_EQUALS(m_propMap, strategy->createHints());
+  }
+
+  void testBlacklist()
+  {
+    std::set<std::string> blacklist;
+    blacklist.insert("DoubleValue");
+    blacklist.insert("IntArray");
+
+    boost::scoped_ptr<HintStrategy> strategy(new AlgorithmHintStrategy(m_propAlg, blacklist));
+    auto expected = m_propMap;
+    expected.erase("DoubleValue");
+    expected.erase("IntArray");
+    TS_ASSERT_EQUALS(expected, strategy->createHints());
+  }
+
+protected:
+  IAlgorithm_sptr m_propAlg;
+  std::map<std::string,std::string> m_propMap;
+};
+
+#endif /*MANTID_MANTIDWIDGETS_ALGORITHMHINTSTRATEGYTEST_H */
diff --git a/Code/Mantid/MantidQt/MantidWidgets/test/CMakeLists.txt b/Code/Mantid/MantidQt/MantidWidgets/test/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..33347b2cbb92e3b61cdf42e47a2eca132b0440dc
--- /dev/null
+++ b/Code/Mantid/MantidQt/MantidWidgets/test/CMakeLists.txt
@@ -0,0 +1,13 @@
+if ( CXXTEST_FOUND )
+  include_directories ( SYSTEM ${CXXTEST_INCLUDE_DIR} ${GMOCK_INCLUDE_DIR} ${GTEST_INCLUDE_DIR} )
+
+  cxxtest_add_test ( MantidWidgetsTest ${TEST_FILES} )
+  target_link_libraries( MantidWidgetsTest MantidWidgets )
+
+  # Add to the 'UnitTests' group in VS
+  set_property( TARGET MantidWidgetsTest PROPERTY FOLDER "UnitTests" )
+endif ()
+
+if ( PYUNITTEST_FOUND )
+  pyunittest_add_test (${CMAKE_CURRENT_SOURCE_DIR} MantidWidgetsTest ${TEST_PY_FILES} )
+endif ()
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefIVConnections.h b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefIVConnections.h
index ef2450fe9112bbf6690a73a2605276d61179c0cd..dd1a37e0c5b17546de841f8717b10820b0474756 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefIVConnections.h
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefIVConnections.h
@@ -12,21 +12,20 @@
 #include "MantidQtSpectrumViewer/GraphDisplay.h"
 #include "DllOption.h"
 
-
 /**
-    @class RefIVConnections 
-  
-       This class provides the connections between the SpectrumView GUI components
+    @class RefIVConnections
+
+    This class provides the connections between the SpectrumView GUI components
     made using QtDesigner and the classes that do the actual work for the
-    SpectrumView.  It basically provides SLOTS that are called by the GUI 
-   components' SIGNALS and in turn call methods on the SpectrumView 
-   implementation objects.
- 
-    @author Dennis Mikkelson 
-    @date   2012-04-03 
-     
+    SpectrumView.  It basically provides SLOTS that are called by the GUI
+    components' SIGNALS and in turn call methods on the SpectrumView
+    implementation objects.
+
+    @author Dennis Mikkelson
+    @date   2012-04-03
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -41,8 +40,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -51,75 +50,73 @@ namespace MantidQt
 namespace RefDetectorViewer
 {
 
-
 class EXPORT_OPT_MANTIDQT_REFDETECTORVIEWER RefIVConnections: public QWidget
 {
   Q_OBJECT
 
 public:
-
   /// Construct the object that links the GUI components to the other specifed
   /// higher level objects.
-  RefIVConnections( Ui_RefImageViewer* ui, 
-                 RefImageView*     image_view,
-                 RefImageDisplay*  image_display,
-                 SpectrumView::GraphDisplay*  h_graph_display,
-                 SpectrumView::GraphDisplay*  v_graph_display );
+  RefIVConnections( Ui_RefImageViewer*          ui,
+                    RefImageView*               imageView,
+                    RefImageDisplay*            imageDisplay,
+                    SpectrumView::GraphDisplay* hGraphDisplay,
+                    SpectrumView::GraphDisplay* vGraphDisplay );
 
   ~RefIVConnections();
 
   /// Set the pix map that shows the color scale from the specified color maps
-  void ShowColorScale( std::vector<QRgb> & positive_color_table,
-                       std::vector<QRgb> & negative_color_table );
+  void showColorScale( std::vector<QRgb> & positiveColorTable,
+                       std::vector<QRgb> & negativeColorTable );
 
 public slots:
-  void close_viewer();
-  void toggle_Hscroll();
-  void toggle_Vscroll();
-  void image_horizontal_range_changed();
-  void graph_range_changed();
-  void v_scroll_bar_moved();
-  void h_scroll_bar_moved();
-  void imageSplitter_moved();
-  void imagePicker_moved();
-  void imagePicker2_moved();
-  void h_graphPicker_moved();
-  void v_graphPicker_moved();
-  void intensity_slider_moved();
-  void heat_color_scale();
-  void gray_color_scale();
-  void negative_gray_color_scale();
-  void green_yellow_color_scale();
-  void rainbow_color_scale();
-  void optimal_color_scale();
-  void multi_color_scale();
-  void spectrum_color_scale();
-  void edit_manual_input();
-  void peak_back_tof_range_update();
-    
-public:
-    signals:
-    void peak_back_tof_range_update(double, double, double, double, double, double);
+  void closeViewer();
+  void toggleHScroll();
+  void toggleVScroll();
+  void imageHorizontalRangeChanged();
+  void graphRangeChanged();
+  void vScrollBarMoved();
+  void hScrollBarMoved();
+  void imageSplitterMoved();
+  void imagePickerMoved();
+  void imagePicker2Moved();
+  void hGraphPickerMoved();
+  void vGraphPickerMoved();
+  void intensitySliderMoved();
+  void editManualInput();
+  void peakBackTofRangeUpdate();
+
+  void heatColorScale();
+  void grayColorScale();
+  void negativeGrayColorScale();
+  void greenYellowColorScale();
+  void rainbowColorScale();
+  void optimalColorScale();
+  void multiColorScale();
+  void spectrumColorScale();
+
+signals:
+  void peakBackTofRangeUpdate(double, double, double, double, double, double);
+
+private:
+  RefIVConnections() {}
 
- private:
-    RefIVConnections() {}
-    
 private:
 
-  Ui_RefImageViewer*   iv_ui;
-  RefImageView*       iv_main_window;
-  RefImageDisplay*    image_display;
-  SpectrumView::GraphDisplay*    h_graph_display;
-  SpectrumView::GraphDisplay*    v_graph_display;
-  SpectrumView::TrackingPicker*  image_picker;
-  SpectrumView::TrackingPicker*  image_picker2;
-  SpectrumView::TrackingPicker*  h_graph_picker;
-  SpectrumView::TrackingPicker*  v_graph_picker;
-  QActionGroup*    color_group;
+  Ui_RefImageViewer*            m_ivUI;
+  RefImageView*                 m_ivMainWindow;
+  RefImageDisplay*              m_imageDisplay;
+  SpectrumView::GraphDisplay*   m_hGraphDisplay;
+  SpectrumView::GraphDisplay*   m_vGraphDisplay;
+  SpectrumView::TrackingPicker* m_imagePicker;
+  SpectrumView::TrackingPicker* m_imagePicker2;
+  SpectrumView::TrackingPicker* m_hGraphPicker;
+  SpectrumView::TrackingPicker* m_vGraphPicker;
+  QActionGroup*                 m_colorGroup;
 
 };
 
 } // namespace RefDetectorViewer
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif  // REF_IV_CONNECTIONS_H
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefImageDisplay.h b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefImageDisplay.h
index c4a50e126a38fa6688c99ebbbefc7b9843e2142a..7be75a2da20e4c278982811ff3a14fe11b86354a 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefImageDisplay.h
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefImageDisplay.h
@@ -34,29 +34,31 @@ namespace RefDetectorViewer
 
     Code Documentation is available at <http://doxygen.mantidproject.org>
  */
+
 class EXPORT_OPT_MANTIDQT_REFDETECTORVIEWER RefImageDisplay : public SpectrumView::SpectrumDisplay
 {
   public:
-     /// Make a SpectrumDisplay to display with the given widgets and controls 
-     RefImageDisplay( QwtPlot*       image_plot, 
-                      RefSliderHandler* slider_handler,
-                      RefRangeHandler*  range_handler,
-                      RefLimitsHandler* limits_handler,
-                      SpectrumView::GraphDisplay*  h_graph,
-                      SpectrumView::GraphDisplay*  v_graph,
-                      QTableWidget*  table_widget);
+     /// Make a SpectrumDisplay to display with the given widgets and controls
+     RefImageDisplay( QwtPlot*                    imagePlot,
+                      RefSliderHandler*           sliderHandler,
+                      RefRangeHandler*            rangeHandler,
+                      RefLimitsHandler*           limitsHandler,
+                      SpectrumView::GraphDisplay* hGraph,
+                      SpectrumView::GraphDisplay* vGraph,
+                      QTableWidget*               tableWidget);
 
      ~RefImageDisplay();
 
      /// Record the point that the user is currently pointing at with the mouse
      /// default right click (mouseClick = 2)
-     QPair<double,double> SetPointedAtPoint( QPoint point, int mouseClick = 2 );
+     QPair<double,double> setPointedAtPoint( QPoint point, int mouseClick = 2 );
 
 private:
      RefLimitsHandler*    m_limitsHandler; // Owned by RefImagePlotItem
+
 };
 
 } // namespace RefDetectorViewer
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif   // REF_IMAGE_DISPLAY_H
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefImagePlotItem.h b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefImagePlotItem.h
index cd0d69fa2bd9ee7f789a0c20a13208f87b0de01a..77a5bc5ee0ae8957e9979974735301c8def7b46e 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefImagePlotItem.h
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefImagePlotItem.h
@@ -31,6 +31,7 @@ namespace RefDetectorViewer
 
     Code Documentation is available at <http://doxygen.mantidproject.org>
  */
+
 class EXPORT_OPT_MANTIDQT_REFDETECTORVIEWER RefImagePlotItem : public SpectrumView::SpectrumPlotItem
 {
 
@@ -39,19 +40,20 @@ public:
   RefImagePlotItem(const RefLimitsHandler * const limitsHandler);
 
   ~RefImagePlotItem();
-  
+
   /// Draw the image (this is called by QWT and must not be called directly.)
   virtual void draw(      QPainter    * painter,
-                    const QwtScaleMap & xMap, 
+                    const QwtScaleMap & xMap,
                     const QwtScaleMap & yMap,
                     const QRect       & canvasRect) const;
 
 private:
   const RefLimitsHandler * const m_limitsHandler;
+
 };
 
 } // namespace RefDetectorViewer
-} // namespace MantidQt 
+} // namespace MantidQt
 
 
-#endif  // REF_IMAGE_PLOT_ITEM_H 
+#endif  // REF_IMAGE_PLOT_ITEM_H
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefImageView.h b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefImageView.h
index 42f71bd46f245414b51be6193b316be876ff7def..8e76609b4d3a3aff591304edb936426deac91488 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefImageView.h
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefImageView.h
@@ -9,17 +9,17 @@
 #include "DllOption.h"
 
 /**
-    @class RefImageView 
-  
-      This is the QMainWindow for the SpectrumView data viewer.  Data is
+    @class RefImageView
+
+    This is the QMainWindow for the SpectrumView data viewer.  Data is
     displayed in an SpectrumView, by constructing the SpectrumView object and
     specifying a particular data source.
- 
-    @author Dennis Mikkelson 
-    @date   2012-04-03 
-     
+
+    @author Dennis Mikkelson
+    @date   2012-04-03
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -34,45 +34,52 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
+namespace Ui
+{
+class RefImageViewer;
+}
+
 namespace MantidQt
 {
 namespace RefDetectorViewer
 {
+class RefSliderHandler;
+class RefRangeHandler;
+class RefImageDisplay;
+class RefIVConnections;
 
-  class RefIVConnections;
 class EXPORT_OPT_MANTIDQT_REFDETECTORVIEWER RefImageView : public QMainWindow
 {
   public:
 
-     /// Construct an RefImageView to display data from the specified data source 
-     RefImageView( SpectrumView::SpectrumDataSource* data_source, int peak_min, int peak_max, int back_min, int back_max, int tof_min, int tof_max);
+     /// Construct an RefImageView to display data from the specified data source
+     RefImageView( SpectrumView::SpectrumDataSource_sptr dataSource,
+                   int peakMin, int peakMax,
+                   int backMin, int backMax,
+                   int tofMin,  int tofMax);
+
+    ~RefImageView();
 
-    ~RefImageView();    
-    
     RefIVConnections* getIVConnections();
 
   private:
-    SpectrumView::GraphDisplay*    h_graph;
-    SpectrumView::GraphDisplay*    v_graph;
-                                 
-    // keep void pointers to the following objects, to avoid having to 
-    // include ui_RefImageView.h, which disappears by the time MantidPlot is
-    // being built.  We need the pointers so we can delete them in the 
-    // destructor.  
-    void*            saved_ui;               // Ui_RefImageViewer*
-    void*            saved_slider_handler;   // SliderHandler*
-    void*            saved_range_handler;    // RangeHandler*
-    void*            saved_image_display;    // RefImageDisplay*
-    //    void*            saved_iv_connections;   // IVConnections*
-    RefIVConnections*            saved_iv_connections;   // IVConnections*
+    SpectrumView::GraphDisplay* m_hGraph;
+    SpectrumView::GraphDisplay* m_vGraph;
+
+    Ui::RefImageViewer* m_ui;
+    RefSliderHandler*   m_sliderHandler;
+    RefRangeHandler*    m_rangeHandler;
+    RefImageDisplay*    m_imageDisplay;
+    RefIVConnections*   m_ivConnections;
+
 };
 
 } // namespace RefDetectorViewer
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif   // REF_IMAGE_VIEW_H
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefLimitsHandler.h b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefLimitsHandler.h
index 7ab3b8de5c76bd6f491245c9aa21dbbbf79797f0..7d0d4d19b727c1b1421b17f936b264bffb00ed94 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefLimitsHandler.h
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefLimitsHandler.h
@@ -28,11 +28,12 @@ namespace RefDetectorViewer
 
     Code Documentation is available at <http://doxygen.mantidproject.org>
  */
+
 class RefLimitsHandler
 {
 public:
   /// Construct object to manage range (peak/back/TOF) controls in the UI
-  RefLimitsHandler( Ui_RefImageViewer* iv_ui );
+  RefLimitsHandler( Ui_RefImageViewer* ivUI );
 
   /// get peak, back and tof values
   int getPeakLeft() const;
@@ -53,6 +54,7 @@ public:
 
 private:
   const Ui_RefImageViewer* const m_ui;
+
 };
 
 } // namespace RefDetectorViewer
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefMatrixWSImageView.h b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefMatrixWSImageView.h
index 8ddab8ee97c259916509f2e7623348b78433f55e..364ac4648e224c610746412350835e4d897c4292 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefMatrixWSImageView.h
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefMatrixWSImageView.h
@@ -7,16 +7,16 @@
 #include "MantidQtRefDetectorViewer/RefImageView.h"
 
 /**
-    @class RefMatrixWSImageView 
-  
-       This is the top level class for showing a matrix workspace
+    @class RefMatrixWSImageView
+
+    This is the top level class for showing a matrix workspace
     using an ImageViewer.
- 
-    @author Dennis Mikkelson 
-    @date   2012-05-08 
-     
+
+    @author Dennis Mikkelson
+    @date   2012-05-08
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -31,8 +31,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -40,27 +40,30 @@ namespace MantidQt
 {
 namespace RefDetectorViewer
 {
+class RefIVConnections;
 
-  class RefIVConnections;
-   class EXPORT_OPT_MANTIDQT_REFDETECTORVIEWER RefMatrixWSImageView
+class EXPORT_OPT_MANTIDQT_REFDETECTORVIEWER RefMatrixWSImageView
 {
-  public:
 
-    /// Construct an image viewer for the specifed MatrixWorkspace
-    RefMatrixWSImageView ( Mantid::API::MatrixWorkspace_sptr /*mat_ws*/ );
+public:
+  /// Construct an image viewer for the specifed MatrixWorkspace
+  RefMatrixWSImageView ( Mantid::API::MatrixWorkspace_sptr /*mat_ws*/ );
+
+  RefMatrixWSImageView( QString wpsName,
+                        int peakMin, int peakMax,
+                        int backMin, int backMax,
+                        int tofMin,  int tofMax);
 
-    RefMatrixWSImageView( QString wps_name, int peak_min, int peak_max, int back_min, int back_max, int tof_min, int tof_max);
-    RefIVConnections* getConnections();
+  RefIVConnections* getConnections();
 
-    ~RefMatrixWSImageView();
+  ~RefMatrixWSImageView();
 
 private:
-    
-    RefImageView *image_view;
-    
+  RefImageView *m_imageView;
+
 };
 
 } // namespace RefDetectorViewer
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif // REF_MATRIX_WS_IMAGE_VIEW_H
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefRangeHandler.h b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefRangeHandler.h
index c251cc3990c3e640dab2230c16ed5eb7d087f12b..ae03e10bafa346f4af65b5be99b828093127f2c4 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefRangeHandler.h
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefRangeHandler.h
@@ -7,16 +7,16 @@
 #include "DllOption.h"
 
 /**
-    @class RangeHandler 
-  
-    This manages the min, max and step range controls for the SpectrumView 
-    data viewer. 
- 
-    @author Dennis Mikkelson 
-    @date   2012-04-25 
-     
+    @class RangeHandler
+
+    This manages the min, max and step range controls for the SpectrumView
+    data viewer.
+
+    @author Dennis Mikkelson
+    @date   2012-04-25
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -31,8 +31,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -41,33 +41,34 @@ namespace MantidQt
 namespace RefDetectorViewer
 {
 
-
 class EXPORT_OPT_MANTIDQT_REFDETECTORVIEWER RefRangeHandler : public SpectrumView::IRangeHandler
 {
   public:
 
     /// Construct object to manage min, max and step controls in the UI
-    RefRangeHandler( Ui_RefImageViewer* iv_ui );
+    RefRangeHandler( Ui_RefImageViewer* ivUI );
 
     /// Configure min, max and step controls for the specified data source
-    void ConfigureRangeControls( SpectrumView::SpectrumDataSource* data_source );
+    void configureRangeControls( SpectrumView::SpectrumDataSource_sptr dataSource );
 
     /// Get the range of data to display in the image, from GUI controls
-    void GetRange( double &min, double &max, double &step );
+    void getRange( double &min, double &max, double &step );
 
     /// Set the values displayed in the GUI controls
-    void SetRange( double min, double max, double step, char type );
+    void setRange( double min, double max, double step, char type );
 
   private:
-    Ui_RefImageViewer* iv_ui;
-    double         total_min_x;
-    double         total_max_x;
-    double         total_max_y;
-    double         total_min_y;
-    size_t         total_n_steps;
+    Ui_RefImageViewer* m_ivUI;
+
+    double m_totalMinX;
+    double m_totalMaxX;
+    double m_totalMaxY;
+    double m_totalMinY;
+    size_t m_totalNSteps;
+
 };
 
 } // namespace RefDetectorViewer
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif // REF_RANGE_HANDLER_H
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefSliderHandler.h b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefSliderHandler.h
index e46b7d818904ea9f581428477b2ad7ce84e7a7b9..d534fb55db2444714d0625b4ad98815ba91e5159 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefSliderHandler.h
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/inc/MantidQtRefDetectorViewer/RefSliderHandler.h
@@ -9,16 +9,16 @@
 #include "MantidQtRefDetectorViewer/DllOption.h"
 
 /**
-    @class SliderHandler 
-  
+    @class SliderHandler
+
     This manages the horizontal and vertical scroll bars for the
-    SpectrumView data viewer. 
- 
-    @author Dennis Mikkelson 
-    @date   2012-04-03 
-     
+    SpectrumView data viewer.
+
+    @author Dennis Mikkelson
+    @date   2012-04-03
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -33,8 +33,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -47,41 +47,41 @@ namespace RefDetectorViewer
 class EXPORT_OPT_MANTIDQT_REFDETECTORVIEWER RefSliderHandler : public SpectrumView::ISliderHandler
 {
   public:
-
     /// Construct object to manage image scrollbars from the specified UI
-  RefSliderHandler( Ui_RefImageViewer* iv_ui );
+    RefSliderHandler( Ui_RefImageViewer* ivUI );
 
     /// Configure the image scrollbars for the specified data and drawing area
-    void ConfigureSliders( QRect            draw_area, 
-                           SpectrumView::SpectrumDataSource* data_source );
+    void configureSliders( QRect drawArea,
+                           SpectrumView::SpectrumDataSource_sptr dataSource );
 
     /// Configure the horizontal scrollbar to cover the specified range
-    void ConfigureHSlider( int         n_data_steps, 
-                           int         n_pixels );
+    void configureHSlider( int nDataSteps,
+                           int nPixels );
 
     /// Return true if the image horizontal scrollbar is enabled.
-    bool HSliderOn();
+    bool hSliderOn();
 
     /// Return true if the image vertical scrollbar is enabled.
-    bool VSliderOn();
+    bool vSliderOn();
 
     /// Get the range of columns to display in the image.
-    void GetHSliderInterval( int &x_min, int &x_max );
+    void getHSliderInterval( int &xMin, int &xMax );
 
     /// Get the range of rows to display in the image.
-    void GetVSliderInterval( int &y_min, int &y_max );
+    void getVSliderInterval( int &yMin, int &yMax );
 
   private:
     /// Configure the specified scrollbar to cover the specified range
-    void ConfigureSlider( QScrollBar* scroll_bar, 
-                          int         n_data_steps,
-                          int         n_pixels,
+    void configureSlider( QScrollBar* scrollBar,
+                          int         nDataSteps,
+                          int         nPixels,
                           int         val );
 
-    Ui_RefImageViewer*   iv_ui;
+    Ui_RefImageViewer*   m_ivUI;
+
 };
 
 } // namespace RefDetectorViewer
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif // REF_SLIDER_HANDLER_H
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefDetectorViewDemo.cpp b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefDetectorViewDemo.cpp
index 8e8317e238b2d42d8035f21abc25774b36ee926a..e2ea0e8b756fe4cea00cad7c259f1c9b67ca2e74 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefDetectorViewDemo.cpp
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefDetectorViewDemo.cpp
@@ -1,7 +1,7 @@
 
 #include <iostream>
 
-#include <qapplication.h>                                                        
+#include <qapplication.h>
 #include <QMainWindow>
 #include <QtGui>
 
@@ -14,30 +14,30 @@ using namespace RefDetectorViewer;
 
 /**
  * Construct an array of test data over the specified region with the
- * specified region using the specified number of rows and columns. 
+ * specified region using the specified number of rows and columns.
  *
  * @param total_xmin   The x-coordinate at the left edge of the data region
  * @param total_xmax   The x-coordinate at the right edge of the data region
  * @param total_ymin   The y-coordinate at the bottom edge of the data region
  * @param total_ymax   The y-coordinate at the top edge of the data region
  * @param total_rows   The number of rows the test data should be divided into
- * @param total_cols   The number of columns the test data should be divided 
+ * @param total_cols   The number of columns the test data should be divided
  *                     into
  */
-float * MakeTestData( double total_xmin, double total_xmax,
-                      double total_ymin, double total_ymax,
-                      size_t total_rows, size_t total_cols )
+std::vector<float> makeTestData( double total_xmin, double total_xmax,
+                                 double total_ymin, double total_ymax,
+                                 size_t total_rows, size_t total_cols )
 {
-                                        // make some test data in array data[]
   double x;
   double y;
-  float* data = new float[total_rows*total_cols];
+  std::vector<float> data(total_rows*total_cols);
+
   for ( size_t row = 0; row < total_rows; row++ )
     for ( size_t col = 0; col < total_cols; col++ )
     {
        x = ((double)col - (double)total_cols/2.0)/(double)total_cols;
        y = ((double)row - (double)total_rows/2.0)/(double)total_rows;
-       data[ row * total_cols + col ] = 
+       data[ row * total_cols + col ] =
                                      (float)(1000.0 * cos( (x*x + y*y)*20.0 ));
     }
                                                 // mark a row 1/4 way up
@@ -75,10 +75,10 @@ int main( int argc, char **argv )
 {
   QApplication a( argc, argv );
 
-  float * data = MakeTestData( 10, 110, 220, 320, 2000, 2000 );
+  std::vector<float> data = makeTestData( 10, 110, 220, 320, 2000, 2000 );
 
-  SpectrumView::ArrayDataSource* source =
-                   new SpectrumView::ArrayDataSource( 10, 110, 220, 320, 2000, 2000, data );
+  SpectrumView::ArrayDataSource_sptr source =
+                   SpectrumView::ArrayDataSource_sptr( new SpectrumView::ArrayDataSource( 10, 110, 220, 320, 2000, 2000, data ) );
 
   MantidQt::RefDetectorViewer::RefImageView image_view( source, 10, 110, 220, 320, 200, 500 );
 
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefIVConnections.cpp b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefIVConnections.cpp
index 9dc227fc497f55a64b6eeec96c2be70ef2b873b1..f79cab72cd2033c555f0e411b87e0e3b0fea424f 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefIVConnections.cpp
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefIVConnections.cpp
@@ -1,17 +1,15 @@
-
 #include <iostream>
 #include <QLineEdit>
 #include <qwt_plot_canvas.h>
 
 #include "MantidQtRefDetectorViewer/RefIVConnections.h"
 #include "MantidQtSpectrumViewer/ColorMaps.h"
-#include "MantidQtSpectrumViewer/ErrorHandler.h"
 
 namespace MantidQt
 {
 namespace RefDetectorViewer
 {
-  using namespace SpectrumView;
+using namespace SpectrumView;
 
 /**
  * Construct the object that links the GUI components to the other specifed
@@ -19,535 +17,536 @@ namespace RefDetectorViewer
  * The objects passed in must be constructed elsewhere and must be deleted
  * elsewhere, when the SpectrumViewer is closed.
  *
- * @param ui               The object containing the gui components for 
- *                         the ImageView viewer.
- * @param iv_main_window   The main window.
- * @param image_display    The SpectrumDisplay object that will dispaly the
- *                         image
- * @param h_graph_display  The GraphDisplay object that will display 
- *                         horizontal cuts through the image
- * @param v_graph_display  The GraphDisplay object that will display 
- *                         vertical cuts through the image
- *
+ * @param ui             The object containing the gui components for
+ *                       the ImageView viewer.
+ * @param ivMainWindow   The main window.
+ * @param imageDisplay   The SpectrumDisplay object that will dispaly the image
+ * @param hGraphDisplay  The GraphDisplay object that will display
+ *                       horizontal cuts through the image
+ * @param vGraphDisplay  The GraphDisplay object that will display
+ *                       vertical cuts through the image
  */
-RefIVConnections::RefIVConnections( Ui_RefImageViewer* ui, 
-                              RefImageView*     iv_main_window,
-                              RefImageDisplay*  image_display,
-                              GraphDisplay*  h_graph_display,
-                              GraphDisplay*  v_graph_display )
+RefIVConnections::RefIVConnections( Ui_RefImageViewer*  ui,
+                                    RefImageView*       ivMainWindow,
+                                    RefImageDisplay*    imageDisplay,
+                                    GraphDisplay*       hGraphDisplay,
+                                    GraphDisplay*       vGraphDisplay ) :
+  m_ivUI(ui),
+  m_ivMainWindow(ivMainWindow),
+  m_imageDisplay(imageDisplay),
+  m_hGraphDisplay(hGraphDisplay),
+  m_vGraphDisplay(vGraphDisplay)
 {
-  iv_ui = ui;
-                              // first disable a few un-implemented controls
-  iv_ui->menuGraph_Selected->setDisabled(true);
-  iv_ui->actionClear_Selections->setDisabled(true);
-  iv_ui->actionOverlaid->setDisabled(true);
-  iv_ui->actionOffset_Vertically->setDisabled(true);
-  iv_ui->actionOffset_Diagonally->setDisabled(true);
-  iv_ui->actionGraph_Rebinned_Data->setDisabled(true);
-  iv_ui->menuHelp->setDisabled(true);
- 
-  this->iv_main_window = iv_main_window;
-  QObject::connect( iv_ui->actionClose, SIGNAL(triggered()),
-                    this, SLOT(close_viewer()) );
- 
-                              // now set up the gui components
-  this->image_display   = image_display;
-  this->h_graph_display = h_graph_display;
-  this->v_graph_display = v_graph_display;
-
+  // First disable a few un-implemented controls
+  m_ivUI->menuGraph_Selected->setDisabled(true);
+  m_ivUI->actionClear_Selections->setDisabled(true);
+  m_ivUI->actionOverlaid->setDisabled(true);
+  m_ivUI->actionOffset_Vertically->setDisabled(true);
+  m_ivUI->actionOffset_Diagonally->setDisabled(true);
+  m_ivUI->actionGraph_Rebinned_Data->setDisabled(true);
+  m_ivUI->menuHelp->setDisabled(true);
+
+  QObject::connect( m_ivUI->actionClose, SIGNAL(triggered()),
+      this, SLOT(closeViewer()) );
+
+  // Now set up the GUI components
   QList<int> image_sizes;
   image_sizes.append( 500 );
   image_sizes.append( 250 );
-  iv_ui->imageSplitter->setSizes( image_sizes );
+  m_ivUI->imageSplitter->setSizes( image_sizes );
   QList<int> vgraph_sizes;
   vgraph_sizes.append( 500 );
   vgraph_sizes.append( 30 );
   vgraph_sizes.append( 220 );
-  iv_ui->vgraphSplitter->setSizes( vgraph_sizes );
+  m_ivUI->vgraphSplitter->setSizes( vgraph_sizes );
 
   QList<int> horiz_sizes;
   horiz_sizes.append( 250 );
   horiz_sizes.append( 750 );
   horiz_sizes.append( 150 );
-  iv_ui->left_right_splitter->setSizes( horiz_sizes );
-
-  iv_ui->imageHorizontalScrollBar->setFocusPolicy( Qt::StrongFocus );
-  iv_ui->imageHorizontalScrollBar->setMinimum(20);
-  iv_ui->imageHorizontalScrollBar->setMaximum(2000);
-  iv_ui->imageHorizontalScrollBar->setPageStep(30);
-  iv_ui->imageHorizontalScrollBar->setSingleStep(30/2);
-
-  iv_ui->imageVerticalScrollBar->setFocusPolicy( Qt::StrongFocus );
-  iv_ui->imageVerticalScrollBar->setMinimum(0);
-  iv_ui->imageVerticalScrollBar->setMaximum(10000000);
-  iv_ui->imageVerticalScrollBar->setPageStep(500);
-  iv_ui->imageVerticalScrollBar->setSingleStep(500/2);
-
-  iv_ui->action_Hscroll->setCheckable(true);
-  iv_ui->action_Hscroll->setChecked(false);
-  iv_ui->imageHorizontalScrollBar->hide();
-  iv_ui->imageHorizontalScrollBar->setEnabled(false);
-
-  iv_ui->action_Vscroll->setCheckable(true);
-  iv_ui->action_Vscroll->setChecked(true);
-  iv_ui->imageVerticalScrollBar->show();
-  iv_ui->imageVerticalScrollBar->setEnabled(true);
-
-  iv_ui->intensity_slider->setTickInterval(10);
-  iv_ui->intensity_slider->setTickPosition(QSlider::TicksBelow);
-  iv_ui->intensity_slider->setSliderPosition(30);
-
-//  iv_ui->graph_max_slider->setTickInterval(10);
-//  iv_ui->graph_max_slider->setTickPosition(QSlider::TicksBelow);
-//  iv_ui->graph_max_slider->setSliderPosition(100);
-
-    image_picker2 = new TrackingPicker( iv_ui->imagePlot->canvas() );
-    image_picker2->setMousePattern(QwtPicker::MouseSelect1, Qt::LeftButton);
-    image_picker2->setTrackerMode(QwtPicker::ActiveOnly);
-    image_picker2->setRubberBandPen(QColor(Qt::gray));
-
-    image_picker = new TrackingPicker( iv_ui->imagePlot->canvas() );
-    image_picker->setMousePattern(QwtPicker::MouseSelect1, Qt::RightButton);
-    image_picker->setTrackerMode(QwtPicker::ActiveOnly);
-    image_picker->setRubberBandPen(QColor(Qt::blue));
-
-    
-/* // point selections & connection works on mouse release
-*/
-  image_picker->setRubberBand(QwtPicker::CrossRubberBand);
-  image_picker->setSelectionFlags(QwtPicker::PointSelection | 
-                                  QwtPicker::DragSelection  );
-
-    image_picker2->setRubberBand(QwtPicker::CrossRubberBand);
-    image_picker2->setSelectionFlags(QwtPicker::PointSelection | 
-                                    QwtPicker::DragSelection  );
-
-    /*
-  QObject::connect( image_picker, SIGNAL(selected(const QwtPolygon &)),
-                    this, SLOT(imagePickerSelectedPoint()) );
-*/
-
-/*  // point selection works on mouse click, NO CROSSHAIRS...
-
-  image_picker->setRubberBand(QwtPicker::CrossRubberBand);
-  image_picker->setSelectionFlags(QwtPicker::PointSelection | 
-                                  QwtPicker::ClickSelection  );
-  QObject::connect( image_picker, SIGNAL(selected(const QwtPolygon &)),
-                    this, SLOT(imagePickerSelectedPoint()) );
-*/
-
-/*  // rect selection calls SLOT on mouse release
-  
-  image_picker->setMousePattern(QwtPicker::MouseSelect1, Qt::MidButton);
-  image_picker->setRubberBand(QwtPicker::RectRubberBand);
-  image_picker->setSelectionFlags(QwtPicker::RectSelection | 
-                                  QwtPicker::DragSelection  );
-  QObject::connect( image_picker, SIGNAL(selected(const QwtPolygon &)),
-                    this, SLOT(imagePickerSelectedPoint()) );
-*/
-
-/*
-  image_picker->setRubberBand(QwtPicker::CrossRubberBand);
-  image_picker->setSelectionFlags(QwtPicker::PointSelection | 
-                                  QwtPicker::ClickSelection  );
-*/
-
-    QObject::connect( image_picker2, SIGNAL(mouseMoved()),
-                     this, SLOT(imagePicker2_moved()) );
-
-    QObject::connect( image_picker, SIGNAL(mouseMoved()),
-                     this, SLOT(imagePicker_moved()) );
-
-    /*
-     * Connections on the peak, back and TOF input boxes
+  m_ivUI->left_right_splitter->setSizes( horiz_sizes );
+
+  m_ivUI->imageHorizontalScrollBar->setFocusPolicy( Qt::StrongFocus );
+  m_ivUI->imageHorizontalScrollBar->setMinimum(20);
+  m_ivUI->imageHorizontalScrollBar->setMaximum(2000);
+  m_ivUI->imageHorizontalScrollBar->setPageStep(30);
+  m_ivUI->imageHorizontalScrollBar->setSingleStep(30/2);
+
+  m_ivUI->imageVerticalScrollBar->setFocusPolicy( Qt::StrongFocus );
+  m_ivUI->imageVerticalScrollBar->setMinimum(0);
+  m_ivUI->imageVerticalScrollBar->setMaximum(10000000);
+  m_ivUI->imageVerticalScrollBar->setPageStep(500);
+  m_ivUI->imageVerticalScrollBar->setSingleStep(500/2);
+
+  m_ivUI->action_Hscroll->setCheckable(true);
+  m_ivUI->action_Hscroll->setChecked(false);
+  m_ivUI->imageHorizontalScrollBar->hide();
+  m_ivUI->imageHorizontalScrollBar->setEnabled(false);
+
+  m_ivUI->action_Vscroll->setCheckable(true);
+  m_ivUI->action_Vscroll->setChecked(true);
+  m_ivUI->imageVerticalScrollBar->show();
+  m_ivUI->imageVerticalScrollBar->setEnabled(true);
+
+  m_ivUI->intensity_slider->setTickInterval(10);
+  m_ivUI->intensity_slider->setTickPosition(QSlider::TicksBelow);
+  m_ivUI->intensity_slider->setSliderPosition(30);
+
+  //  m_ivUI->graph_max_slider->setTickInterval(10);
+  //  m_ivUI->graph_max_slider->setTickPosition(QSlider::TicksBelow);
+  //  m_ivUI->graph_max_slider->setSliderPosition(100);
+
+  m_imagePicker2 = new TrackingPicker( m_ivUI->imagePlot->canvas() );
+  m_imagePicker2->setMousePattern(QwtPicker::MouseSelect1, Qt::LeftButton);
+  m_imagePicker2->setTrackerMode(QwtPicker::ActiveOnly);
+  m_imagePicker2->setRubberBandPen(QColor(Qt::gray));
+
+  m_imagePicker = new TrackingPicker( m_ivUI->imagePlot->canvas() );
+  m_imagePicker->setMousePattern(QwtPicker::MouseSelect1, Qt::RightButton);
+  m_imagePicker->setTrackerMode(QwtPicker::ActiveOnly);
+  m_imagePicker->setRubberBandPen(QColor(Qt::blue));
+
+  // Point selections & connection works on mouse release
+  m_imagePicker->setRubberBand(QwtPicker::CrossRubberBand);
+  m_imagePicker->setSelectionFlags(QwtPicker::PointSelection |
+      QwtPicker::DragSelection  );
+
+  m_imagePicker2->setRubberBand(QwtPicker::CrossRubberBand);
+  m_imagePicker2->setSelectionFlags(QwtPicker::PointSelection |
+      QwtPicker::DragSelection  );
+
+  /*
+     QObject::connect( m_imagePicker, SIGNAL(selected(const QwtPolygon &)),
+     this, SLOT(imagePickerSelectedPoint()) );
+     */
+
+  /*  // point selection works on mouse click, NO CROSSHAIRS...
+
+      m_imagePicker->setRubberBand(QwtPicker::CrossRubberBand);
+      m_imagePicker->setSelectionFlags(QwtPicker::PointSelection |
+      QwtPicker::ClickSelection  );
+      QObject::connect( m_imagePicker, SIGNAL(selected(const QwtPolygon &)),
+      this, SLOT(imagePickerSelectedPoint()) );
+      */
+
+  /*  // rect selection calls SLOT on mouse release
+
+      m_imagePicker->setMousePattern(QwtPicker::MouseSelect1, Qt::MidButton);
+      m_imagePicker->setRubberBand(QwtPicker::RectRubberBand);
+      m_imagePicker->setSelectionFlags(QwtPicker::RectSelection |
+      QwtPicker::DragSelection  );
+      QObject::connect( m_imagePicker, SIGNAL(selected(const QwtPolygon &)),
+      this, SLOT(imagePickerSelectedPoint()) );
+      */
+
+  /*
+     m_imagePicker->setRubberBand(QwtPicker::CrossRubberBand);
+     m_imagePicker->setSelectionFlags(QwtPicker::PointSelection |
+     QwtPicker::ClickSelection  );
      */
-    QObject::connect(iv_ui->lineEdit_peakLeft, SIGNAL(returnPressed()),
-                     this, SLOT(edit_manual_input()) );
-    QObject::connect(iv_ui->lineEdit_peakRight, SIGNAL(returnPressed()),
-                     this, SLOT(edit_manual_input()) );
-    QObject::connect(iv_ui->lineEdit_backLeft, SIGNAL(returnPressed()),
-                     this, SLOT(edit_manual_input()) );
-    QObject::connect(iv_ui->lineEdit_backRight, SIGNAL(returnPressed()),
-                     this, SLOT(edit_manual_input()) );
-    QObject::connect(iv_ui->lineEdit_TOFmin, SIGNAL(returnPressed()),
-                     this, SLOT(edit_manual_input()) );
-    QObject::connect(iv_ui->lineEdit_TOFmax, SIGNAL(returnPressed()),
-                     this, SLOT(edit_manual_input()) );
-                     
-  QObject::connect(iv_ui->imageSplitter, SIGNAL(splitterMoved(int,int)), 
-                   this, SLOT(imageSplitter_moved()) );
-
-  QObject::connect(iv_ui->x_min_input, SIGNAL( returnPressed() ),
-                   this, SLOT(image_horizontal_range_changed()) );
-
-  QObject::connect(iv_ui->x_max_input, SIGNAL( returnPressed() ),
-                   this, SLOT(image_horizontal_range_changed()) );
-
-//  QObject::connect(iv_ui->step_input, SIGNAL( returnPressed() ),
-//                   this, SLOT(image_horizontal_range_changed()) );
-
-  QObject::connect(iv_ui->imageVerticalScrollBar, SIGNAL(valueChanged(int)),
-                   this, SLOT(v_scroll_bar_moved()) );
-
-  QObject::connect(iv_ui->imageHorizontalScrollBar, SIGNAL(valueChanged(int)),
-                   this, SLOT(h_scroll_bar_moved()) );
-
-  QObject::connect(iv_ui->action_Hscroll, SIGNAL(changed()),
-                   this, SLOT(toggle_Hscroll()) );
-
-  QObject::connect(iv_ui->action_Vscroll, SIGNAL(changed()),
-                   this, SLOT(toggle_Vscroll()) );
-
-  QObject::connect(iv_ui->intensity_slider, SIGNAL(valueChanged(int)),
-                   this, SLOT(intensity_slider_moved()) );
-
-//  QObject::connect(iv_ui->graph_max_slider, SIGNAL(valueChanged(int)),
-//                   this, SLOT(graph_range_changed()) );
-
-                                                     // color scale selections 
-  iv_ui->actionHeat->setCheckable(true);
-  iv_ui->actionHeat->setChecked(true);
-  iv_ui->actionGray->setCheckable(true);
-  iv_ui->actionNegative_Gray->setCheckable(true);
-  iv_ui->actionGreen_Yellow->setCheckable(true);
-  iv_ui->actionRainbow->setCheckable(true);
-  iv_ui->actionOptimal->setCheckable(true);
-  iv_ui->actionMulti->setCheckable(true);
-  iv_ui->actionSpectrum->setCheckable(true);
-                                                    // set up initial color
-                                                    // scale display
-  iv_ui->color_scale->setScaledContents(true);
-  iv_ui->color_scale->setMinimumHeight(15);
-  iv_ui->color_scale->setMinimumWidth(15);
-  std::vector<QRgb> positive_color_table;
-  ColorMaps::GetColorMap( ColorMaps::HEAT, 256, positive_color_table );
-
-  std::vector<QRgb> negative_color_table;
-  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negative_color_table );
-
-  ShowColorScale( positive_color_table, negative_color_table );
-
-
-  color_group = new QActionGroup(this);
-  color_group->addAction(iv_ui->actionHeat);
-  color_group->addAction(iv_ui->actionGray);
-  color_group->addAction(iv_ui->actionNegative_Gray);
-  color_group->addAction(iv_ui->actionGreen_Yellow);
-  color_group->addAction(iv_ui->actionRainbow);
-  color_group->addAction(iv_ui->actionOptimal);
-  color_group->addAction(iv_ui->actionMulti);
-  color_group->addAction(iv_ui->actionSpectrum);
-
-  QObject::connect(iv_ui->actionHeat, SIGNAL(triggered()),
-                   this, SLOT(heat_color_scale()) );
-
-  QObject::connect(iv_ui->actionGray, SIGNAL(triggered()),
-                   this, SLOT(gray_color_scale()) );
-
-  QObject::connect(iv_ui->actionNegative_Gray, SIGNAL(triggered()),
-                   this, SLOT(negative_gray_color_scale()) );
-
-  QObject::connect(iv_ui->actionGreen_Yellow, SIGNAL(triggered()),
-                   this, SLOT(green_yellow_color_scale()) );
-
-  QObject::connect(iv_ui->actionRainbow, SIGNAL(triggered()),
-                   this, SLOT(rainbow_color_scale()) );
-
-  QObject::connect(iv_ui->actionOptimal, SIGNAL(triggered()),
-                   this, SLOT(optimal_color_scale()) );
-
-  QObject::connect(iv_ui->actionMulti, SIGNAL(triggered()),
-                   this, SLOT(multi_color_scale()) );
-
-  QObject::connect(iv_ui->actionSpectrum, SIGNAL(triggered()),
-                   this, SLOT(spectrum_color_scale()) );
-
-  h_graph_picker = new TrackingPicker( iv_ui->h_graphPlot->canvas() );
-  h_graph_picker->setMousePattern(QwtPicker::MouseSelect1, Qt::RightButton);
-  h_graph_picker->setTrackerMode(QwtPicker::ActiveOnly);
-  h_graph_picker->setRubberBandPen(QColor(Qt::gray));
-  h_graph_picker->setRubberBand(QwtPicker::CrossRubberBand);
-  h_graph_picker->setSelectionFlags(QwtPicker::PointSelection |
-                                  QwtPicker::DragSelection  );
-  QObject::connect( h_graph_picker, SIGNAL(mouseMoved()),
-                    this, SLOT(h_graphPicker_moved()) );
+
+  QObject::connect( m_imagePicker2, SIGNAL(mouseMoved()),
+      this, SLOT(imagePicker2Moved()) );
+
+  QObject::connect( m_imagePicker, SIGNAL(mouseMoved()),
+      this, SLOT(imagePickerMoved()) );
+
+  /*
+   * Connections on the peak, back and TOF input boxes
+   */
+  QObject::connect(m_ivUI->lineEdit_peakLeft, SIGNAL(returnPressed()),
+      this, SLOT(editManualInput()) );
+  QObject::connect(m_ivUI->lineEdit_peakRight, SIGNAL(returnPressed()),
+      this, SLOT(editManualInput()) );
+  QObject::connect(m_ivUI->lineEdit_backLeft, SIGNAL(returnPressed()),
+      this, SLOT(editManualInput()) );
+  QObject::connect(m_ivUI->lineEdit_backRight, SIGNAL(returnPressed()),
+      this, SLOT(editManualInput()) );
+  QObject::connect(m_ivUI->lineEdit_TOFmin, SIGNAL(returnPressed()),
+      this, SLOT(editManualInput()) );
+  QObject::connect(m_ivUI->lineEdit_TOFmax, SIGNAL(returnPressed()),
+      this, SLOT(editManualInput()) );
+
+  QObject::connect(m_ivUI->imageSplitter, SIGNAL(splitterMoved(int,int)),
+      this, SLOT(imageSplitterMoved()) );
+
+  QObject::connect(m_ivUI->x_min_input, SIGNAL( returnPressed() ),
+      this, SLOT(imageHorizontalRangeChanged()) );
+
+  QObject::connect(m_ivUI->x_max_input, SIGNAL( returnPressed() ),
+      this, SLOT(imageHorizontalRangeChanged()) );
+
+  //  QObject::connect(m_ivUI->step_input, SIGNAL( returnPressed() ),
+  //                   this, SLOT(image_horizontal_range_changed()) );
+
+  QObject::connect(m_ivUI->imageVerticalScrollBar, SIGNAL(valueChanged(int)),
+      this, SLOT(vScrollBarMoved()) );
+
+  QObject::connect(m_ivUI->imageHorizontalScrollBar, SIGNAL(valueChanged(int)),
+      this, SLOT(hScrollBarMoved()) );
+
+  QObject::connect(m_ivUI->action_Hscroll, SIGNAL(changed()),
+      this, SLOT(toggleHScroll()) );
+
+  QObject::connect(m_ivUI->action_Vscroll, SIGNAL(changed()),
+      this, SLOT(toggleVScroll()) );
+
+  QObject::connect(m_ivUI->intensity_slider, SIGNAL(valueChanged(int)),
+      this, SLOT(intensitySliderMoved()) );
+
+  //  QObject::connect(m_ivUI->graph_max_slider, SIGNAL(valueChanged(int)),
+  //                   this, SLOT(graphRangeChanged()) );
+
+  // color scale selections
+  m_ivUI->actionHeat->setCheckable(true);
+  m_ivUI->actionHeat->setChecked(true);
+  m_ivUI->actionGray->setCheckable(true);
+  m_ivUI->actionNegative_Gray->setCheckable(true);
+  m_ivUI->actionGreen_Yellow->setCheckable(true);
+  m_ivUI->actionRainbow->setCheckable(true);
+  m_ivUI->actionOptimal->setCheckable(true);
+  m_ivUI->actionMulti->setCheckable(true);
+  m_ivUI->actionSpectrum->setCheckable(true);
+  // set up initial color
+  // scale display
+  m_ivUI->color_scale->setScaledContents(true);
+  m_ivUI->color_scale->setMinimumHeight(15);
+  m_ivUI->color_scale->setMinimumWidth(15);
+  std::vector<QRgb> positiveColorTable;
+  ColorMaps::GetColorMap( ColorMaps::HEAT, 256, positiveColorTable );
+
+  std::vector<QRgb> negativeColorTable;
+  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negativeColorTable );
+
+  showColorScale( positiveColorTable, negativeColorTable );
+
+
+  m_colorGroup = new QActionGroup(this);
+  m_colorGroup->addAction(m_ivUI->actionHeat);
+  m_colorGroup->addAction(m_ivUI->actionGray);
+  m_colorGroup->addAction(m_ivUI->actionNegative_Gray);
+  m_colorGroup->addAction(m_ivUI->actionGreen_Yellow);
+  m_colorGroup->addAction(m_ivUI->actionRainbow);
+  m_colorGroup->addAction(m_ivUI->actionOptimal);
+  m_colorGroup->addAction(m_ivUI->actionMulti);
+  m_colorGroup->addAction(m_ivUI->actionSpectrum);
+
+  QObject::connect(m_ivUI->actionHeat, SIGNAL(triggered()),
+      this, SLOT(heatColorScale()) );
+
+  QObject::connect(m_ivUI->actionGray, SIGNAL(triggered()),
+      this, SLOT(grayColorScale()) );
+
+  QObject::connect(m_ivUI->actionNegative_Gray, SIGNAL(triggered()),
+      this, SLOT(negative_grayColorScale()) );
+
+  QObject::connect(m_ivUI->actionGreen_Yellow, SIGNAL(triggered()),
+      this, SLOT(green_yellowColorScale()) );
+
+  QObject::connect(m_ivUI->actionRainbow, SIGNAL(triggered()),
+      this, SLOT(rainbowColorScale()) );
+
+  QObject::connect(m_ivUI->actionOptimal, SIGNAL(triggered()),
+      this, SLOT(optimalColorScale()) );
+
+  QObject::connect(m_ivUI->actionMulti, SIGNAL(triggered()),
+      this, SLOT(multiColorScale()) );
+
+  QObject::connect(m_ivUI->actionSpectrum, SIGNAL(triggered()),
+      this, SLOT(spectrumColorScale()) );
+
+  m_hGraphPicker = new TrackingPicker( m_ivUI->h_graphPlot->canvas() );
+  m_hGraphPicker->setMousePattern(QwtPicker::MouseSelect1, Qt::RightButton);
+  m_hGraphPicker->setTrackerMode(QwtPicker::ActiveOnly);
+  m_hGraphPicker->setRubberBandPen(QColor(Qt::gray));
+  m_hGraphPicker->setRubberBand(QwtPicker::CrossRubberBand);
+  m_hGraphPicker->setSelectionFlags(QwtPicker::PointSelection |
+      QwtPicker::DragSelection  );
+  QObject::connect( m_hGraphPicker, SIGNAL(mouseMoved()),
+      this, SLOT(hGraphPickerMoved()) );
 
   // NOTE: This initialization could be a (static?) method in TrackingPicker
-  v_graph_picker = new TrackingPicker( iv_ui->v_graphPlot->canvas() );
-  v_graph_picker->setMousePattern(QwtPicker::MouseSelect1, Qt::RightButton);
-  v_graph_picker->setTrackerMode(QwtPicker::ActiveOnly);
-  v_graph_picker->setRubberBandPen(QColor(Qt::gray));
-  v_graph_picker->setRubberBand(QwtPicker::CrossRubberBand);
-  v_graph_picker->setSelectionFlags(QwtPicker::PointSelection |
-                                    QwtPicker::DragSelection  );
-  QObject::connect( v_graph_picker, SIGNAL(mouseMoved()),
-                    this, SLOT(v_graphPicker_moved()) );
+  m_vGraphPicker = new TrackingPicker( m_ivUI->v_graphPlot->canvas() );
+  m_vGraphPicker->setMousePattern(QwtPicker::MouseSelect1, Qt::RightButton);
+  m_vGraphPicker->setTrackerMode(QwtPicker::ActiveOnly);
+  m_vGraphPicker->setRubberBandPen(QColor(Qt::gray));
+  m_vGraphPicker->setRubberBand(QwtPicker::CrossRubberBand);
+  m_vGraphPicker->setSelectionFlags(QwtPicker::PointSelection |
+      QwtPicker::DragSelection  );
+  QObject::connect( m_vGraphPicker, SIGNAL(mouseMoved()),
+      this, SLOT(vGraphPickerMoved()) );
 }
 
 
 RefIVConnections::~RefIVConnections()
 {
-  // std::cout << "IVConnections destructor called" << std::endl;
-
-  delete image_picker;
-  delete image_picker2;
-  delete h_graph_picker;
-  delete v_graph_picker;
-  delete color_group;
 }
 
 
-void RefIVConnections::close_viewer()
+void RefIVConnections::closeViewer()
 {
-  iv_main_window->close();
+  m_ivMainWindow->close();
 }
 
 
-void RefIVConnections::toggle_Hscroll()
+void RefIVConnections::toggleHScroll()
 {
-  bool is_on = iv_ui->action_Hscroll->isChecked();
-  iv_ui->imageHorizontalScrollBar->setVisible( is_on );
-  iv_ui->imageHorizontalScrollBar->setEnabled( is_on );
-  image_display->UpdateImage();
+  bool is_on = m_ivUI->action_Hscroll->isChecked();
+  m_ivUI->imageHorizontalScrollBar->setVisible( is_on );
+  m_ivUI->imageHorizontalScrollBar->setEnabled( is_on );
+  m_imageDisplay->updateImage();
 }
 
 
-void RefIVConnections::toggle_Vscroll()
+void RefIVConnections::toggleVScroll()
 {
-  bool is_on = iv_ui->action_Vscroll->isChecked();
-  iv_ui->imageVerticalScrollBar->setVisible( is_on );
-  iv_ui->imageVerticalScrollBar->setEnabled( is_on );
-  image_display->UpdateImage();
+  bool is_on = m_ivUI->action_Vscroll->isChecked();
+  m_ivUI->imageVerticalScrollBar->setVisible( is_on );
+  m_ivUI->imageVerticalScrollBar->setEnabled( is_on );
+  m_imageDisplay->updateImage();
 }
 
 
-void RefIVConnections::image_horizontal_range_changed()
+void RefIVConnections::imageHorizontalRangeChanged()
 {
-  image_display->UpdateRange();
+  m_imageDisplay->updateRange();
 }
 
 
-void RefIVConnections::graph_range_changed()
+void RefIVConnections::graphRangeChanged()
 {
-//  double value = (double)iv_ui->graph_max_slider->value();
-//  double min   = (double)iv_ui->graph_max_slider->minimum();
-//  double max   = (double)iv_ui->graph_max_slider->maximum();
-//
-//  double range_scale = (value - min)/(max - min);
-//  if ( range_scale < 0.01 )
-//    range_scale = 0.01;
-//
-//  h_graph_display->SetRangeScale( range_scale );
-//  v_graph_display->SetRangeScale( range_scale );
+  //  double value = (double)m_ivUI->graph_max_slider->value();
+  //  double min   = (double)m_ivUI->graph_max_slider->minimum();
+  //  double max   = (double)m_ivUI->graph_max_slider->maximum();
+  //
+  //  double range_scale = (value - min)/(max - min);
+  //  if ( range_scale < 0.01 )
+  //    range_scale = 0.01;
+  //
+  //  m_hGraphDisplay->setRangeScale( range_scale );
+  //  m_vGraphDisplay->setRangeScale( range_scale );
 }
 
-void RefIVConnections::peak_back_tof_range_update()
+
+void RefIVConnections::peakBackTofRangeUpdate()
 {
-    QLineEdit * peak_left_control = iv_ui->lineEdit_peakLeft;
-    double peakmin = peak_left_control->text().toDouble();
-
-    QLineEdit * peak_right_control = iv_ui->lineEdit_peakRight;
-    double peakmax = peak_right_control->text().toDouble();
-    
-    QLineEdit * back_left_control = iv_ui->lineEdit_backLeft;
-    double backmin = back_left_control->text().toDouble();
-    
-    QLineEdit * back_right_control = iv_ui->lineEdit_backRight;
-    double backmax = back_right_control->text().toDouble();
-    
-    QLineEdit * tof_min_control = iv_ui->lineEdit_TOFmin;
-    double tofmin = tof_min_control->text().toDouble();
-    
-    QLineEdit * tof_max_control = iv_ui->lineEdit_TOFmax;
-    double tofmax = tof_max_control->text().toDouble();
-    
-    emit peak_back_tof_range_update(peakmin, peakmax, backmin, backmax, tofmin, tofmax);
+  QLineEdit * peak_left_control = m_ivUI->lineEdit_peakLeft;
+  double peakmin = peak_left_control->text().toDouble();
+
+  QLineEdit * peak_right_control = m_ivUI->lineEdit_peakRight;
+  double peakmax = peak_right_control->text().toDouble();
+
+  QLineEdit * back_left_control = m_ivUI->lineEdit_backLeft;
+  double backmin = back_left_control->text().toDouble();
+
+  QLineEdit * back_right_control = m_ivUI->lineEdit_backRight;
+  double backmax = back_right_control->text().toDouble();
+
+  QLineEdit * tof_min_control = m_ivUI->lineEdit_TOFmin;
+  double tofmin = tof_min_control->text().toDouble();
+
+  QLineEdit * tof_max_control = m_ivUI->lineEdit_TOFmax;
+  double tofmax = tof_max_control->text().toDouble();
+
+  emit peakBackTofRangeUpdate(peakmin, peakmax, backmin, backmax, tofmin, tofmax);
 }
 
-void RefIVConnections::edit_manual_input()
-{
-    image_display->UpdateImage();
-    peak_back_tof_range_update();
 
+void RefIVConnections::editManualInput()
+{
+  m_imageDisplay->updateImage();
+  peakBackTofRangeUpdate();
 }
-    
-    
-void RefIVConnections::v_scroll_bar_moved()
+
+
+void RefIVConnections::vScrollBarMoved()
 {
-  image_display->UpdateImage();
+  m_imageDisplay->updateImage();
 }
 
 
-void RefIVConnections::h_scroll_bar_moved()
+void RefIVConnections::hScrollBarMoved()
 {
-  image_display->UpdateImage();
+  m_imageDisplay->updateImage();
 }
 
 
-void RefIVConnections::imageSplitter_moved()
+void RefIVConnections::imageSplitterMoved()
 {
-  QList<int> sizes = iv_ui->imageSplitter->sizes();
+  QList<int> sizes = m_ivUI->imageSplitter->sizes();
   QList<int> vgraph_sizes;
   vgraph_sizes.append( sizes[0] );
   vgraph_sizes.append( 30 );
   vgraph_sizes.append( sizes[1] );
-  iv_ui->vgraphSplitter->setSizes( vgraph_sizes );
-  image_display->UpdateImage();
+  m_ivUI->vgraphSplitter->setSizes( vgraph_sizes );
+  m_imageDisplay->updateImage();
 }
 
 
-  //Right click
-void RefIVConnections::imagePicker_moved()
+// Right click
+void RefIVConnections::imagePickerMoved()
 {
-  QwtPolygon selected_points = image_picker->selection();
-  if ( selected_points.size() >= 1 )
+  QwtPolygon selectedPoints = m_imagePicker->selection();
+  if ( selectedPoints.size() >= 1 )
   {
-    int index = selected_points.size() - 1;
-    image_display->SetPointedAtPoint( selected_points[index] );
+    int index = selectedPoints.size() - 1;
+    m_imageDisplay->setPointedAtPoint( selectedPoints[index] );
   }
 }
 
-  //Left click
-void RefIVConnections::imagePicker2_moved()
+
+// Left click
+void RefIVConnections::imagePicker2Moved()
 {
-  QwtPolygon selected_points = image_picker2->selection();
-    if ( selected_points.size() >= 1 )
-    {
-      peak_back_tof_range_update();
-        int index = selected_points.size() - 1;
-        int mouseClick = 1; 
-        image_display->SetPointedAtPoint( selected_points[index], mouseClick );
-        peak_back_tof_range_update();
-
-    }
+  QwtPolygon selectedPoints = m_imagePicker2->selection();
+  if ( selectedPoints.size() >= 1 )
+  {
+    peakBackTofRangeUpdate();
+    int index = selectedPoints.size() - 1;
+    int mouseClick = 1;
+    m_imageDisplay->setPointedAtPoint( selectedPoints[index], mouseClick );
+    peakBackTofRangeUpdate();
+
+  }
 }
 
 
-void RefIVConnections::h_graphPicker_moved()
+void RefIVConnections::hGraphPickerMoved()
 {
-  QwtPolygon selected_points = h_graph_picker->selection();
-  if ( selected_points.size() >= 1 )
+  QwtPolygon selectedPoints = m_hGraphPicker->selection();
+  if ( selectedPoints.size() >= 1 )
   {
-    int index = selected_points.size() - 1;
-    h_graph_display->SetPointedAtPoint( selected_points[index]);
+    int index = selectedPoints.size() - 1;
+    m_hGraphDisplay->setPointedAtPoint( selectedPoints[index]);
   }
 }
 
 
-void RefIVConnections::v_graphPicker_moved()
+void RefIVConnections::vGraphPickerMoved()
 {
-  QwtPolygon selected_points = v_graph_picker->selection();
-  if ( selected_points.size() >= 1 )
+  QwtPolygon selectedPoints = m_vGraphPicker->selection();
+  if ( selectedPoints.size() >= 1 )
   {
-    int index = selected_points.size() - 1;
-    v_graph_display->SetPointedAtPoint( selected_points[index] );
+    int index = selectedPoints.size() - 1;
+    m_vGraphDisplay->setPointedAtPoint( selectedPoints[index] );
   }
 }
 
-void RefIVConnections::intensity_slider_moved()
+
+void RefIVConnections::intensitySliderMoved()
 {
-  double value = (double)iv_ui->intensity_slider->value();
-  double min   = (double)iv_ui->intensity_slider->minimum();
-  double max   = (double)iv_ui->intensity_slider->maximum();
+  double value = (double)m_ivUI->intensity_slider->value();
+  double min   = (double)m_ivUI->intensity_slider->minimum();
+  double max   = (double)m_ivUI->intensity_slider->maximum();
 
-  double scaled_value = 100.0*(value - min)/(max - min);
-  image_display->SetIntensity( scaled_value );
+  double scaledValue = 100.0*(value - min)/(max - min);
+  m_imageDisplay->setIntensity( scaledValue );
 }
 
-void RefIVConnections::heat_color_scale()
+
+/* COLOUR MAP SLOTS */
+
+void RefIVConnections::heatColorScale()
 {
-  std::vector<QRgb> positive_color_table;
-  ColorMaps::GetColorMap( ColorMaps::HEAT, 256, positive_color_table );
+  std::vector<QRgb> positiveColorTable;
+  ColorMaps::GetColorMap( ColorMaps::HEAT, 256, positiveColorTable );
 
-  std::vector<QRgb> negative_color_table;
-  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negative_color_table );
+  std::vector<QRgb> negativeColorTable;
+  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negativeColorTable );
 
-  image_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_imageDisplay->setColorScales( positiveColorTable, negativeColorTable );
+  showColorScale( positiveColorTable, negativeColorTable );
 }
 
-void RefIVConnections::gray_color_scale()
+
+void RefIVConnections::grayColorScale()
 {
-  std::vector<QRgb> positive_color_table;
-  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, positive_color_table );
+  std::vector<QRgb> positiveColorTable;
+  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, positiveColorTable );
 
-  std::vector<QRgb> negative_color_table;
-  ColorMaps::GetColorMap( ColorMaps::HEAT, 256, negative_color_table );
+  std::vector<QRgb> negativeColorTable;
+  ColorMaps::GetColorMap( ColorMaps::HEAT, 256, negativeColorTable );
 
-  image_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_imageDisplay->setColorScales( positiveColorTable, negativeColorTable );
+  showColorScale( positiveColorTable, negativeColorTable );
 }
 
-void RefIVConnections::negative_gray_color_scale()
+
+void RefIVConnections::negativeGrayColorScale()
 {
-  std::vector<QRgb> positive_color_table;
-  ColorMaps::GetColorMap( ColorMaps::NEGATIVE_GRAY,256, positive_color_table);
+  std::vector<QRgb> positiveColorTable;
+  ColorMaps::GetColorMap( ColorMaps::NEGATIVE_GRAY,256, positiveColorTable);
 
-  std::vector<QRgb> negative_color_table;
-  ColorMaps::GetColorMap( ColorMaps::HEAT, 256, negative_color_table );
+  std::vector<QRgb> negativeColorTable;
+  ColorMaps::GetColorMap( ColorMaps::HEAT, 256, negativeColorTable );
 
-  image_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_imageDisplay->setColorScales( positiveColorTable, negativeColorTable );
+  showColorScale( positiveColorTable, negativeColorTable );
 }
 
-void RefIVConnections::green_yellow_color_scale()
+
+void RefIVConnections::greenYellowColorScale()
 {
-  std::vector<QRgb> positive_color_table;
-  ColorMaps::GetColorMap( ColorMaps::GREEN_YELLOW, 256, positive_color_table);
+  std::vector<QRgb> positiveColorTable;
+  ColorMaps::GetColorMap( ColorMaps::GREEN_YELLOW, 256, positiveColorTable);
 
-  std::vector<QRgb> negative_color_table;
-  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negative_color_table );
+  std::vector<QRgb> negativeColorTable;
+  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negativeColorTable );
 
-  image_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_imageDisplay->setColorScales( positiveColorTable, negativeColorTable );
+  showColorScale( positiveColorTable, negativeColorTable );
 }
 
-void RefIVConnections::rainbow_color_scale()
+
+void RefIVConnections::rainbowColorScale()
 {
-  std::vector<QRgb> positive_color_table;
-  ColorMaps::GetColorMap( ColorMaps::RAINBOW, 256, positive_color_table );
+  std::vector<QRgb> positiveColorTable;
+  ColorMaps::GetColorMap( ColorMaps::RAINBOW, 256, positiveColorTable );
 
-  std::vector<QRgb> negative_color_table;
-  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negative_color_table );
+  std::vector<QRgb> negativeColorTable;
+  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negativeColorTable );
 
-  image_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_imageDisplay->setColorScales( positiveColorTable, negativeColorTable );
+  showColorScale( positiveColorTable, negativeColorTable );
 }
 
-void RefIVConnections::optimal_color_scale()
+
+void RefIVConnections::optimalColorScale()
 {
-  std::vector<QRgb> positive_color_table;
-  ColorMaps::GetColorMap( ColorMaps::OPTIMAL, 256, positive_color_table );
+  std::vector<QRgb> positiveColorTable;
+  ColorMaps::GetColorMap( ColorMaps::OPTIMAL, 256, positiveColorTable );
 
-  std::vector<QRgb> negative_color_table;
-  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negative_color_table );
+  std::vector<QRgb> negativeColorTable;
+  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negativeColorTable );
 
-  image_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_imageDisplay->setColorScales( positiveColorTable, negativeColorTable );
+  showColorScale( positiveColorTable, negativeColorTable );
 }
 
-void RefIVConnections::multi_color_scale()
+
+void RefIVConnections::multiColorScale()
 {
-  std::vector<QRgb> positive_color_table;
-  ColorMaps::GetColorMap( ColorMaps::MULTI, 256, positive_color_table );
+  std::vector<QRgb> positiveColorTable;
+  ColorMaps::GetColorMap( ColorMaps::MULTI, 256, positiveColorTable );
 
-  std::vector<QRgb> negative_color_table;
-  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negative_color_table );
+  std::vector<QRgb> negativeColorTable;
+  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negativeColorTable );
 
-  image_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_imageDisplay->setColorScales( positiveColorTable, negativeColorTable );
+  showColorScale( positiveColorTable, negativeColorTable );
 }
 
-void RefIVConnections::spectrum_color_scale()
+
+void RefIVConnections::spectrumColorScale()
 {
-  std::vector<QRgb> positive_color_table;
-  ColorMaps::GetColorMap( ColorMaps::SPECTRUM, 256, positive_color_table );
+  std::vector<QRgb> positiveColorTable;
+  ColorMaps::GetColorMap( ColorMaps::SPECTRUM, 256, positiveColorTable );
 
-  std::vector<QRgb> negative_color_table;
-  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negative_color_table );
+  std::vector<QRgb> negativeColorTable;
+  ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negativeColorTable );
 
-  image_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_imageDisplay->setColorScales( positiveColorTable, negativeColorTable );
+  showColorScale( positiveColorTable, negativeColorTable );
 }
 
 
@@ -555,43 +554,40 @@ void RefIVConnections::spectrum_color_scale()
  *  Set the pix map that shows the color scale from the specified positive
  *  and negative color tables.
  *
- *  @param positive_color_table  The new color table used to map positive data 
+ *  @param positiveColorTable  The new color table used to map positive data
  *                               values to an RGB color.
- *  @param negative_color_table  The new color table used to map negative data 
+ *  @param negativeColorTable  The new color table used to map negative data
  *                               values to an RGB color.  This must have the
  *                               same number of entries as the positive
  *                               color table.
  */
-void RefIVConnections::ShowColorScale( std::vector<QRgb> & positive_color_table,
-                                    std::vector<QRgb> & negative_color_table )
+void RefIVConnections::showColorScale( std::vector<QRgb> & positiveColorTable,
+                                       std::vector<QRgb> & negativeColorTable )
 {
-  size_t total_colors = positive_color_table.size() + 
-                        negative_color_table.size();
+  size_t totalColors = positiveColorTable.size() + negativeColorTable.size();
 
-  unsigned int *rgb_data = new unsigned int[ total_colors ];
+  QImage image((int)totalColors, 1, QImage::Format_RGB32);
+  int index = 0;
 
-  size_t index = 0;
-  size_t n_colors = negative_color_table.size();
-  for ( size_t i = 0; i < n_colors; i++ )
+  size_t numColors = negativeColorTable.size();
+  for(size_t i = 0; i < numColors; i++)
   {
-    rgb_data[index] = negative_color_table[ n_colors - 1 - i ];
+    unsigned int pixel = static_cast<unsigned int>(negativeColorTable[numColors - 1 - i]);
+    image.setPixel(index, 0, pixel);
     index++;
   }
 
-  n_colors = positive_color_table.size();
-  for ( size_t i = 0; i < n_colors; i++ )
+  numColors = positiveColorTable.size();
+  for(size_t i = 0; i < numColors; i++)
   {
-    rgb_data[index] = positive_color_table[i];
+    unsigned int pixel = static_cast<unsigned int>(positiveColorTable[i]);
+    image.setPixel(index, 0, pixel);
     index++;
   }
 
-  uchar *buffer = (uchar*)rgb_data;
-  QImage image( buffer, (int)total_colors, 1, QImage::Format_RGB32 );
   QPixmap pixmap = QPixmap::fromImage(image);
-  iv_ui->color_scale->setPixmap( pixmap );
-
-  delete[] rgb_data;
+  m_ivUI->color_scale->setPixmap(pixmap);
 }
 
 } // namespace RefDetectorViewer
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefImageDisplay.cpp b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefImageDisplay.cpp
index dcb895af65e0e03249d449bc7098dd645b7384dd..1bfa27e37eb2cf3bae0468e4152793df9812498d 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefImageDisplay.cpp
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefImageDisplay.cpp
@@ -12,34 +12,34 @@ namespace RefDetectorViewer
   using namespace SpectrumView;
 
 /**
- * Make an RefImageDisplay to display with the given widgets and controls.
+ * Make a RefImageDisplay to display with the given widgets and controls.
  *
- * @param image_plot      The QwtPlot that will hold the image
- * @param slider_handler  The object that manages interaction with the
- *                        horizontal and vertical scroll bars
- * @param range_handler   The object that manages the data range
- * @param limits_handler  The object that manages the limits
- * @param h_graph         The GraphDisplay for the graph showing horizontal
- *                        cuts through the image at the bottom of the image.
- * @param v_graph         The GraphDisplay for the graph showing vertical 
- *                        cuts through the image at the left side of the image.
- * @param table_widget    The widget where the information about a pointed
- *                        at location will be displayed.
+ * @param imagePlot      The QwtPlot that will hold the image
+ * @param sliderHandler  The object that manages interaction with the
+ *                       horizontal and vertical scroll bars
+ * @param rangeHandler   The object that manages the data range
+ * @param limitsHandler  The object that manages the limits
+ * @param hGraph         The GraphDisplay for the graph showing horizontal
+ *                       cuts through the image at the bottom of the image.
+ * @param vGraph         The GraphDisplay for the graph showing vertical
+ *                       cuts through the image at the left side of the image.
+ * @param tableWidget    The widget where the information about a pointed
+ *                       at location will be displayed.
  */
-RefImageDisplay::RefImageDisplay(  QwtPlot*       image_plot,
-                             RefSliderHandler* slider_handler,
-                             RefRangeHandler*  range_handler,
-                             RefLimitsHandler* limits_handler,
-                             GraphDisplay*  h_graph,
-                             GraphDisplay*  v_graph,
-                             QTableWidget*  table_widget)
-  : SpectrumView::SpectrumDisplay(image_plot,slider_handler,range_handler,h_graph,v_graph,table_widget),
-    m_limitsHandler(limits_handler)
+RefImageDisplay::RefImageDisplay( QwtPlot*          imagePlot,
+                                  RefSliderHandler* sliderHandler,
+                                  RefRangeHandler*  rangeHandler,
+                                  RefLimitsHandler* limitsHandler,
+                                  GraphDisplay*     hGraph,
+                                  GraphDisplay*     vGraph,
+                                  QTableWidget*     tableWidget)
+  : SpectrumView::SpectrumDisplay(imagePlot, sliderHandler, rangeHandler, hGraph, vGraph, tableWidget),
+    m_limitsHandler(limitsHandler)
 {
   // We need a different SpectrumPlotItem class, so delete the one created in the
   // base class constructor and create the one we want
-  delete spectrum_plot_item;
-  spectrum_plot_item = new RefImagePlotItem(limits_handler);
+  delete m_spectrumPlotItem;
+  m_spectrumPlotItem = new RefImagePlotItem(limitsHandler);
   setupSpectrumPlotItem();
 }
 
@@ -52,25 +52,25 @@ RefImageDisplay::~RefImageDisplay()
  * show those as graphs in the horizontal and vertical graphs and show
  * information about the specified point.
  *
- * @param point  The point that the user is currently pointing at with 
+ * @param point  The point that the user is currently pointing at with
  *               the mouse.
  * @param mouseClick Which mouse button was clicked
  * @return A pair containing the (x,y) values in the graph of the point
  */
-QPair<double,double> RefImageDisplay::SetPointedAtPoint( QPoint point, int mouseClick)
+QPair<double,double> RefImageDisplay::setPointedAtPoint( QPoint point, int mouseClick)
 {
   // Call the base class method for most of the work
-  QPair<double,double> xy = SpectrumDisplay::SetPointedAtPoint( point, mouseClick );
+  QPair<double,double> xy = SpectrumDisplay::setPointedAtPoint( point, mouseClick );
 
   // Now, for a left click, set the position in the appropriate lineedit
   if (mouseClick == 1)  //left click
   {
     m_limitsHandler->setActiveValue( xy.first, xy.second );
-    UpdateImage(); //force refresh of the plot
+    updateImage(); //force refresh of the plot
   }
-  
+
   return xy;
 }
 
 } // namespace RefDetectorViewer
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefImagePlotItem.cpp b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefImagePlotItem.cpp
index b4696bee11cfa33c681b696f7104a22f2fd9f384..a3ed6ee58c268ad12443c56995e0f82137af167a 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefImagePlotItem.cpp
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefImagePlotItem.cpp
@@ -4,12 +4,13 @@ namespace MantidQt
 {
 namespace RefDetectorViewer
 {
- 
+
 RefImagePlotItem::RefImagePlotItem(const RefLimitsHandler * const limitsHandler)
   : SpectrumView::SpectrumPlotItem(), m_limitsHandler(limitsHandler)
 {
 }
 
+
 RefImagePlotItem::~RefImagePlotItem()
 {
   delete m_limitsHandler;
@@ -25,35 +26,31 @@ RefImagePlotItem::~RefImagePlotItem()
  *                      columns in the actual displayed image
  *  @param  yMap        The QwtScaleMap used by QWT to map y-values to pixel
  *                      rows in the actual displayed image
- *  @param  canvasRect  rectangle containing the pixel region where QWT will 
+ *  @param  canvasRect  rectangle containing the pixel region where QWT will
  *                      draw the image.  This rectangle is slightly larger
  *                      than the actual rectangle used for the image.  This
  *                      parameter is NOT USED by the SpectrumPlotItem, but is
- *                      passed in when QWT calls this method. 
+ *                      passed in when QWT calls this method.
  */
-void RefImagePlotItem::draw(       QPainter    * painter,
-                          const QwtScaleMap & xMap, 
-                          const QwtScaleMap & yMap,
-                          const QRect       & canvasRect) const
+void RefImagePlotItem::draw( QPainter    * painter,
+                       const QwtScaleMap & xMap,
+                       const QwtScaleMap & yMap,
+                       const QRect       & canvasRect) const
 {
   SpectrumPlotItem::draw(painter,xMap,yMap,canvasRect);
 
   //////////////////////////////////////////////////////////////////////////////////
   // TODO: Eliminate the code duplication (from SpectrumPlotItem::draw) in this section
-  SpectrumView::DataArray* data_array;
-  if ( buffer_ID == 0 )
-  {
-    data_array = data_array_0;
-  }
+  SpectrumView::DataArray_const_sptr data_array;
+  if ( m_bufferID == 0 )
+    data_array = m_dataArray0;
   else
-  {
-    data_array = data_array_1;
-  }
+    data_array = m_dataArray1;
 
-  const double x_min  = data_array->GetXMin();
-  const double x_max  = data_array->GetXMax();
-  const double y_min  = data_array->GetYMin();
-  const double y_max  = data_array->GetYMax();
+  const double x_min  = data_array->getXMin();
+  const double x_max  = data_array->getXMax();
+  const double y_min  = data_array->getYMin();
+  const double y_max  = data_array->getYMax();
 
                                             // find the actual plot region
                                             // using the scale maps.
@@ -129,8 +126,7 @@ void RefImagePlotItem::draw(       QPainter    * painter,
     tof_value = int(coeff_left * coeff_bottom_right + float(pix_x_min));
     painter->drawLine(QPoint(tof_value,pix_y_min), QPoint(tof_value,pix_y_max));
   }
-
 }
 
 } // namespace RefDetectorViewer
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefImageView.cpp b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefImageView.cpp
index b6a59ffcd799b74020b4345a35d3774fc1bc76bd..d5385cb4dfabf1705b33836cfad1a80b317c0b04 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefImageView.cpp
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefImageView.cpp
@@ -16,7 +16,6 @@ namespace MantidQt
 namespace RefDetectorViewer
 {
 
-
 /**
  *  Construct an SpectrumView to display data from the specified data source.
  *  The specified SpectrumDataSource must be constructed elsewhere and passed
@@ -25,111 +24,90 @@ namespace RefDetectorViewer
  *  parts of the SpectrumView are constructed here and are deleted when the
  *  SpectrumView destructor is called.
  *
- *  @param data_source  The source of the data that will be displayed. 
- *  @param peak_min The min peak value
- *  @param peak_max The max peak value
- *  @param back_min The min background value
- *  @param back_max The max background value
- *  @param tof_min The min time of flight value
- *  @param tof_max  The max time of flight value
+ *  @param dataSource  The source of the data that will be displayed.
+ *  @param peakMin     The min peak value
+ *  @param peakMax     The max peak value
+ *  @param backMin     The min background value
+ *  @param backMax     The max background value
+ *  @param tofMin      The min time of flight value
+ *  @param tofMax      The max time of flight value
  */
-RefImageView::RefImageView( SpectrumView::SpectrumDataSource* data_source, int peak_min, int peak_max, int back_min, int back_max, int tof_min, int tof_max)
+RefImageView::RefImageView( SpectrumView::SpectrumDataSource_sptr dataSource,
+                            int peakMin, int peakMax,
+                            int backMin, int backMax,
+                            int tofMin,  int tofMax)
+  : m_ui(new Ui::RefImageViewer())
 {
-  Ui_RefImageViewer* ui = new Ui_RefImageViewer();
-  saved_ui          = ui; 
-
   QMainWindow* window = this;
 
-  ui->setupUi( window );
+  m_ui->setupUi( window );
   window->resize( 1050, 800 );
   window->show();
   window->setAttribute(Qt::WA_DeleteOnClose);  // We just need to close the
-                                               // window to trigger the 
+                                               // window to trigger the
                                                // destructor and clean up
   window->setWindowTitle(QString::fromUtf8("Reflector Detector Viewer"));
 
-  RefSliderHandler* slider_handler = new RefSliderHandler( ui );
-  saved_slider_handler = slider_handler;
-
-  RefRangeHandler* range_handler = new RefRangeHandler( ui );
-  saved_range_handler = range_handler;
+  m_sliderHandler = new RefSliderHandler( m_ui );
+  m_rangeHandler = new RefRangeHandler( m_ui );
 
   // Create the handler for comminicating peak/background/tof values to/from the ui
   // This ends up being owned by the RefImagePlotItem instance
-  RefLimitsHandler* limits_handler = new RefLimitsHandler(ui);
+  RefLimitsHandler* limits_handler = new RefLimitsHandler(m_ui);
 
-  h_graph = new SpectrumView::GraphDisplay( ui->h_graphPlot, NULL, false );
-  v_graph = new SpectrumView::GraphDisplay( ui->v_graphPlot, NULL, true );
+  m_hGraph = new SpectrumView::GraphDisplay( m_ui->h_graphPlot, NULL, false );
+  m_vGraph = new SpectrumView::GraphDisplay( m_ui->v_graphPlot, NULL, true );
 
+  m_imageDisplay = new RefImageDisplay( m_ui->imagePlot,
+                                        m_sliderHandler,
+                                        m_rangeHandler,
+                                        limits_handler,
+                                        m_hGraph, m_vGraph,
+                                        m_ui->image_table);
 
-  RefImageDisplay* image_display = new RefImageDisplay( ui->imagePlot,
-                                                  slider_handler,
-                                                  range_handler,
-                                                  limits_handler,
-                                                  h_graph, v_graph,
-                                                  ui->image_table);
-  saved_image_display = image_display;
+  RefIVConnections * iv_connections = new RefIVConnections( m_ui, this,
+                                                            m_imageDisplay,
+                                                            m_hGraph, m_vGraph );
 
-  RefIVConnections * iv_connections = new RefIVConnections( ui, this, 
-                                                     image_display, 
-                                                     h_graph, v_graph );
-  
   // Set validators on the QLineEdits to restrict them to integers
-  ui->lineEdit_peakLeft->setValidator(new QIntValidator(this));
-  ui->lineEdit_peakRight->setValidator(new QIntValidator(this));
-  ui->lineEdit_backLeft->setValidator(new QIntValidator(this));
-  ui->lineEdit_backRight->setValidator(new QIntValidator(this));
-  ui->lineEdit_TOFmin->setValidator(new QIntValidator(this));
-  ui->lineEdit_TOFmax->setValidator(new QIntValidator(this));
+  m_ui->lineEdit_peakLeft->setValidator(new QIntValidator(this));
+  m_ui->lineEdit_peakRight->setValidator(new QIntValidator(this));
+  m_ui->lineEdit_backLeft->setValidator(new QIntValidator(this));
+  m_ui->lineEdit_backRight->setValidator(new QIntValidator(this));
+  m_ui->lineEdit_TOFmin->setValidator(new QIntValidator(this));
+  m_ui->lineEdit_TOFmax->setValidator(new QIntValidator(this));
 
   //populate widgets with peak, back and tof values
-  limits_handler->setPeakLeft(peak_min);
-  limits_handler->setPeakRight(peak_max);
-  limits_handler->setBackLeft(back_min);
-  limits_handler->setBackRight(back_max);
-  limits_handler->setTOFmin(tof_min);
-  limits_handler->setTOFmax(tof_max);
-    
-  saved_iv_connections = iv_connections;
-
-    image_display->UpdateImage();
-    iv_connections->peak_back_tof_range_update();
-
-    
-  image_display->SetDataSource( data_source );
-}
-    
-  RefIVConnections* RefImageView::getIVConnections()
-  {
-    return saved_iv_connections;
-  }
+  limits_handler->setPeakLeft(peakMin);
+  limits_handler->setPeakRight(peakMax);
+  limits_handler->setBackLeft(backMin);
+  limits_handler->setBackRight(backMax);
+  limits_handler->setTOFmin(tofMin);
+  limits_handler->setTOFmax(tofMax);
 
-RefImageView::~RefImageView()
-{
-//  std::cout << "RefImageView destructor called" << std::endl;
+  m_ivConnections = iv_connections;
 
-  delete  h_graph;
-  delete  v_graph;
+  m_imageDisplay->updateImage();
+  iv_connections->peakBackTofRangeUpdate();
 
-  RefImageDisplay* image_display = static_cast<RefImageDisplay*>(saved_image_display);
-  delete  image_display;
+  m_imageDisplay->setDataSource( dataSource );
+}
 
-  RefSliderHandler* slider_handler =
-                             static_cast<RefSliderHandler*>(saved_slider_handler);
-  delete  slider_handler;
 
-  RefRangeHandler* range_handler =
-                             static_cast<RefRangeHandler*>(saved_range_handler);
-  delete  range_handler;
+RefImageView::~RefImageView()
+{
+  delete m_imageDisplay;
+  delete m_sliderHandler;
+  delete m_rangeHandler;
+  delete m_ivConnections;
+  delete m_ui;
+}
 
-  RefIVConnections* iv_connections = 
-                             static_cast<RefIVConnections*>(saved_iv_connections);
-  delete  iv_connections;
 
-  Ui_RefImageViewer* ui = static_cast<Ui_RefImageViewer*>(saved_ui);
-  delete  ui;
+RefIVConnections* RefImageView::getIVConnections()
+{
+  return m_ivConnections;
 }
 
-
 } // namespace RefDetectorViewer
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefLimitsHandler.cpp b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefLimitsHandler.cpp
index b21e02ae7dc838a7ed76efe2f130d3689d0e5ff7..10b63406866709ba05b0e1619a78c6fdc05b9d47 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefLimitsHandler.cpp
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefLimitsHandler.cpp
@@ -5,7 +5,7 @@ namespace MantidQt
 namespace RefDetectorViewer
 {
 
-RefLimitsHandler::RefLimitsHandler( Ui_RefImageViewer* iv_ui ) : m_ui(iv_ui)
+RefLimitsHandler::RefLimitsHandler( Ui_RefImageViewer* ivUI ) : m_ui(ivUI)
 {
 }
 
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefMatrixWSImageView.cpp b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefMatrixWSImageView.cpp
index 558a8d6fab8760d541e5d7c9c5e99f0006ab54df..9fd85f6ace04c194cd05c03541d91a9030591245 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefMatrixWSImageView.cpp
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefMatrixWSImageView.cpp
@@ -20,72 +20,60 @@ using namespace Mantid::API;
  */
 RefMatrixWSImageView::RefMatrixWSImageView( MatrixWorkspace_sptr /*mat_ws*/ )
 {
-    return;
-    //  RefMatrixWSDataSource* source = new RefMatrixWSDataSource( mat_ws );
+  return;
+  //  RefMatrixWSDataSource* source = new RefMatrixWSDataSource( mat_ws );
 //  image_view = new RefImageView( source );  // this is the QMainWindow
 //                                         // for the viewer.  It is
 //                                         // deleted when the window
 //                                         // is closed
 }
 
-RefMatrixWSImageView::RefMatrixWSImageView( QString wps_name, int peak_min, int peak_max, int back_min, int back_max, int tof_min, int tof_max)
+RefMatrixWSImageView::RefMatrixWSImageView( QString wpsName,
+                                            int peakMin, int peakMax,
+                                            int backMin, int backMax,
+                                            int tofMin,  int tofMax)
 {
+  IEventWorkspace_sptr ws;
+  ws = AnalysisDataService::Instance().retrieveWS<IEventWorkspace>(wpsName.toStdString());
 
-    IEventWorkspace_sptr ws;
-    ws = AnalysisDataService::Instance().retrieveWS<IEventWorkspace>(wps_name.toStdString());
+  const double totalYMin = 0.0;
+  const double totalYMax = 255.0; //303
+  const size_t totalRows = 256;   //304
 
-    const double total_ymin = 0.0;
-    const double total_ymax = 255.0;
-    const size_t total_rows = 256;
-//    const double total_ymax = 303;
-//    const size_t total_rows = 304;
-    
-    
-    std::vector<double> xaxis = ws->readX(0);
-    const size_t sz = xaxis.size()-1;
-    const size_t total_cols = sz;
-    
-    double total_xmin = xaxis[0];
-    double total_xmax = xaxis[sz];
-    
-    float *data = new float[static_cast<size_t>(total_ymax) * sz];
-    
-//    std::cout << "Starting the for loop " << std::endl;
-//    std::cout << "total_xmax: " << total_xmax << std::endl;
-//    std::cout << "sz is : " << sz << std::endl;
-    
-    std::vector<double> yaxis;
-    for (size_t px=0; px<total_ymax; px++)
-    {
-        //retrieve data now
-        yaxis = ws->readY(px);
-        for (size_t tof=0; tof<sz; tof++)
-        {
-            data[px*sz + tof] = static_cast<float>(yaxis[tof]);
-        }
-    }
-    
-    SpectrumView::ArrayDataSource* source = new SpectrumView::ArrayDataSource(total_xmin, total_xmax,
-                                                        total_ymin, total_ymax,
-                                                        total_rows, total_cols,
-                                                        data);
-    
-//    std::cout << "ws->readX(0).size(): " << ws->readX(0).size() << std::endl;
+  std::vector<double> xAxis = ws->readX(0);
+  const size_t sz = xAxis.size() - 1;
+  const size_t totalCols = sz;
 
-    
-    
-    image_view = new RefImageView( source,
-                                  peak_min, peak_max,
-                                  back_min, back_max,
-                                  tof_min, tof_max);
+  double totalXMin = xAxis[0];
+  double totalXMax = xAxis[sz];
 
+  std::vector<float> data(static_cast<size_t>(totalYMax) * sz);
+
+  std::vector<double> yAxis;
+  for (size_t px = 0; px < totalYMax; px++)
+  {
+    // Retrieve data now
+    yAxis = ws->readY(px);
+    for (size_t tof = 0; tof < sz; tof++)
+      data[px * sz + tof] = static_cast<float>(yAxis[tof]);
+  }
+
+  SpectrumView::ArrayDataSource_sptr source =
+    SpectrumView::ArrayDataSource_sptr( new SpectrumView::ArrayDataSource(totalXMin, totalXMax,
+                                                                          totalYMin, totalYMax,
+                                                                          totalRows, totalCols,
+                                                                          data) );
+
+  m_imageView = new RefImageView( source,
+                                  peakMin, peakMax,
+                                  backMin, backMax,
+                                  tofMin,  tofMax);
 }
 
 
 RefIVConnections* RefMatrixWSImageView::getConnections()
 {
-  return image_view->getIVConnections();
-
+  return m_imageView->getIVConnections();
 }
 
 
@@ -93,4 +81,3 @@ RefMatrixWSImageView::~RefMatrixWSImageView()
 {
   // nothing to do here, since image_view is deleted when the window closes
 }
-
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefRangeHandler.cpp b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefRangeHandler.cpp
index b0aaee7835317ff3334a67bb2c903004a6f23553..ec36c81c7b99cba466b0591a80755e3c6796a49a 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefRangeHandler.cpp
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefRangeHandler.cpp
@@ -1,65 +1,62 @@
-
 #include <iostream>
 #include <QLineEdit>
 
 #include "MantidQtRefDetectorViewer/RefRangeHandler.h"
 #include "MantidQtSpectrumViewer/QtUtils.h"
 #include "MantidQtSpectrumViewer/SVUtils.h"
-#include "MantidQtSpectrumViewer/ErrorHandler.h"
+#include "MantidKernel/Logger.h"
+
+
+namespace
+{
+  Mantid::Kernel::Logger g_log("SpectrumView");
+}
+
 
 namespace MantidQt
 {
 namespace RefDetectorViewer
 {
-  using namespace SpectrumView;
+
+using namespace SpectrumView;
 
 /**
  *  Construct a RefRangeHandler object to manage min, max and step controls
  *  in the specified UI
  */
-RefRangeHandler::RefRangeHandler( Ui_RefImageViewer* iv_ui )
+RefRangeHandler::RefRangeHandler( Ui_RefImageViewer* ivUI ) : m_ivUI(ivUI)
 {
-  this->iv_ui = iv_ui;
 }
 
 
 /**
  * Configure the min, max and step controls for the specified data source.
  *
- * @param data_source  SpectrumDataSource that provides the data to be drawn
+ * @param dataSource  SpectrumDataSource that provides the data to be drawn
  */
-void RefRangeHandler::ConfigureRangeControls( SpectrumDataSource* data_source )
+void RefRangeHandler::configureRangeControls( SpectrumDataSource_sptr dataSource )
 {
-  
-    //x axis
-  total_min_x   = data_source->GetXMin();
-  total_max_x   = data_source->GetXMax();
-  total_n_steps = data_source->GetNCols();
-  total_min_y   = data_source->GetYMin();
-  total_max_y   = data_source->GetYMax();
-
-  double defaultx_step = (total_max_x - total_min_x)/(double)total_n_steps;
-  if ( total_n_steps > 2000 )
-  {
-    defaultx_step = (total_max_x - total_min_x)/2000.0;
-  }
+  // X axis
+  m_totalMinX   = dataSource->getXMin();
+  m_totalMaxX   = dataSource->getXMax();
+  m_totalNSteps = dataSource->getNCols();
 
-  SetRange( total_min_x, total_max_x, defaultx_step, 'x');
+  double defaultStepX = (m_totalMaxX - m_totalMinX) / (double)m_totalNSteps;
+  if(m_totalNSteps > 2000)
+    defaultStepX = (m_totalMaxX - m_totalMinX) / 2000.0;
 
-    //y axis
-    total_min_y   = data_source->GetYMin();
-    total_max_y   = data_source->GetYMax();
-    total_n_steps = data_source->GetNCols();
-    
-    double defaulty_step = (total_max_y - total_min_y)/(double)total_n_steps;
-    if ( total_n_steps > 2000 )
-    {
-        defaulty_step = (total_max_y - total_min_y)/2000.0;
-    }
-    
-    SetRange( total_min_y, total_max_y, defaulty_step, 'y' );
+  setRange(m_totalMinX, m_totalMaxX, defaultStepX, 'x');
+
+  // Y axis
+  m_totalMinY   = dataSource->getYMin();
+  m_totalMaxY   = dataSource->getYMax();
+  m_totalNSteps = dataSource->getNCols();
 
+  double defaultStepY = (m_totalMaxY - m_totalMinY) / (double)m_totalNSteps;
+  if(m_totalNSteps > 2000)
+    defaultStepY = (m_totalMaxY - m_totalMinY) / 2000.0;
 
+  setRange(m_totalMinY, m_totalMaxY, defaultStepY, 'y' );
 }
 
 
@@ -71,7 +68,7 @@ void RefRangeHandler::ConfigureRangeControls( SpectrumDataSource* data_source )
  *
  * @param min     On input, this should be the default value that the
  *                min should be set to, if getting the range fails.
- *                On output this is will be set to the x value at the 
+ *                On output this is will be set to the x value at the
  *                left edge of the first bin to display, if getting the
  *                range succeeds.
  * @param max     On input, this should be the default value that the
@@ -79,152 +76,142 @@ void RefRangeHandler::ConfigureRangeControls( SpectrumDataSource* data_source )
  *                On output, if getting the range succeeds, this will
  *                be set an x value at the right edge of the last bin
  *                to display.  This will be adjusted so that it is larger
- *                than min by an integer number of steps.  
+ *                than min by an integer number of steps.
  * @param step    On input this should be the default number of steps
  *                to use if getting the range information fails.
  *                On output, this is size of the step to use between
- *                min and max.  If it is less than zero, a log scale 
+ *                min and max.  If it is less than zero, a log scale
  *                is requested.
  */
-void RefRangeHandler::GetRange( double &min, double &max, double &step )
-{ 
-   double original_min  = min;
-  double original_max  = max;
-  double original_step = step;
+void RefRangeHandler::getRange( double &min, double &max, double &step )
+{
+  double originalMin  = min;
+  double originalMax  = max;
+  double originalStep = step;
 
-  QLineEdit* min_control  = iv_ui->x_min_input;
-  QLineEdit* max_control  = iv_ui->x_max_input;
-//  QLineEdit* step_control = iv_ui->step_input;
+  QLineEdit* min_control  = m_ivUI->x_min_input;
+  QLineEdit* max_control  = m_ivUI->x_max_input;
 
-  if ( !SVUtils::StringToDouble(  min_control->text().toStdString(), min ) )
+  bool minIsNumber = false;
+  bool maxIsNumber = false;
+
+  min = min_control->text().toDouble(&minIsNumber);
+  max = max_control->text().toDouble(&maxIsNumber);
+
+  if(!minIsNumber)
   {
-    ErrorHandler::Error("X Min is not a NUMBER! Value reset.");
-    min = original_min;
+    g_log.information("X Min is not a NUMBER! Value reset.");
+    min = originalMin;
   }
-  if ( !SVUtils::StringToDouble(  max_control->text().toStdString(), max ) )
+
+  if(!maxIsNumber)
   {
-    ErrorHandler::Error("X Max is not a NUMBER! Value reset.");
-    max = original_max;
+    g_log.information("X Max is not a NUMBER! Value reset.");
+    max = originalMax;
   }
-//  if ( !SVUtils::StringToDouble(  step_control->text().toStdString(), step ) )
-//  {
-//    ErrorHandler::Error("Step is not a NUMBER! Value reset.");
-//    step = original_step;
-//  }
-
-                                 // just require step to be non-zero, no other
-                                 // bounds. If zero, take a default step size  
-  if ( step == 0 ) 
+
+  // Just require step to be non-zero, no other bounds. If zero, take a default step size
+  if ( step == 0 )
   {
-    ErrorHandler::Error("Step = 0, resetting to default step");
-    step = original_step;
+    g_log.information("Step = 0, resetting to default step");
+    step = originalStep;
   }
 
   if ( step > 0 )
   {
     if ( !SVUtils::FindValidInterval( min, max ) )
     {
-      ErrorHandler::Warning( 
-             "In GetRange: [Min,Max] interval invalid, values adjusted" );
-      min  = original_min;
-      max  = original_max;
-      step = original_step;
+      g_log.information("In GetRange: [Min,Max] interval invalid, values adjusted");
+      min  = originalMin;
+      max  = originalMax;
+      step = originalStep;
     }
   }
   else
   {
     if ( !SVUtils::FindValidLogInterval( min, max ) )
     {
-      ErrorHandler::Warning(
-          "In GetRange: [Min,Max] log interval invalid, values adjusted");
-      min  = original_min;
-      max  = original_max;
-      step = original_step;
+      g_log.information("In GetRange: [Min,Max] log interval invalid, values adjusted");
+      min  = originalMin;
+      max  = originalMax;
+      step = originalStep;
     }
   }
 
-  SetRange( min, max, step, 'x' );
+  setRange( min, max, step, 'x' );
 }
 
 
 /**
- * Adjust the values to be consistent with the available data and 
+ * Adjust the values to be consistent with the available data and
  * diplay them in the controls.
  *
  * @param min     This is the x value at the left edge of the first bin.
  * @param max     This is an x value at the right edge of the last bin.
- * @param step    This is size of the step to use between min and max. 
+ * @param step    This is size of the step to use between min and max.
  *                If it is less than zero, a log scale is requested.
  * @param type    x or y
  */
-void RefRangeHandler::SetRange( double min, double max, double step, char type )
+void RefRangeHandler::setRange( double min, double max, double step, char type )
 {
-    if (type == 'x') {  
-    
-  if ( !SVUtils::FindValidInterval( min, max ) )
-  {
-    ErrorHandler::Warning( 
-            "In SetRange: [XMin,XMax] interval invalid, values adjusted" );
-  }
+  if (type == 'x') {
 
-  if ( min < total_min_x || min > total_max_x )
-  {
-//    ErrorHandler::Warning("X Min out of range, resetting to range min.");
-    min = total_min_x;
-  }
+    if ( !SVUtils::FindValidInterval( min, max ) )
+      g_log.information("In setRange: [XMin,XMax] interval invalid, values adjusted");
 
-  if ( max < total_min_x || max > total_max_x )
-  {
-//    ErrorHandler::Warning("X Max out of range, resetting to range max.");
-    max = total_max_x;
-  }
+    if ( min < m_totalMinX || min > m_totalMaxX )
+    {
+      g_log.information("X Min out of range, resetting to range min.");
+      min = m_totalMinX;
+    }
+
+    if ( max < m_totalMinX || max > m_totalMaxX )
+    {
+      g_log.information("X Max out of range, resetting to range max.");
+      max = m_totalMaxX;
+    }
+
+    if ( step == 0 )
+    {
+      g_log.information("Step = 0, resetting to default step");
+      step = (max-min)/2000.0;
+    }
+
+    QtUtils::SetText( 8, 2, min, m_ivUI->x_min_input );
+    QtUtils::SetText( 8, 2, max, m_ivUI->x_max_input );
+    //  QtUtils::SetText( 8, 4, step, m_ivUI->step_input );
 
-  if ( step == 0 )
-  {
-    ErrorHandler::Error("Step = 0, resetting to default step");
-    step = (max-min)/2000.0;
   }
 
-  QtUtils::SetText( 8, 2, min, iv_ui->x_min_input );
-  QtUtils::SetText( 8, 2, max, iv_ui->x_max_input );
-//  QtUtils::SetText( 8, 4, step, iv_ui->step_input );
-        
-    } 
-    
-    if (type == 'y') {  
-        
-        if ( !SVUtils::FindValidInterval( min, max ) )
-        {
-            ErrorHandler::Warning( 
-                                  "In SetRange: [YMin,YMax] interval invalid, values adjusted" );
-        }
-        
-        if ( min < total_min_y || min > total_max_y )
-        {
-            //    ErrorHandler::Warning("Y Min out of range, resetting to range min.");
-            min = total_min_y;
-        }
-        
-        if ( max < total_min_y || max > total_max_y )
-        {
-            //    ErrorHandler::Warning("Y Max out of range, resetting to range max.");
-            max = total_max_y;
-        }
-        
-        if ( step == 0 )
-        {
-            ErrorHandler::Error("Step = 0, resetting to default step");
-            step = (max-min)/2000.0;
-        }
-        
-        QtUtils::SetText( 8, 2, min, iv_ui->y_min_input );
-        QtUtils::SetText( 8, 2, max, iv_ui->y_max_input );
-        //  QtUtils::SetText( 8, 4, step, iv_ui->step_input );
-        
-    } 
-    
+  if (type == 'y') {
+
+    if ( !SVUtils::FindValidInterval( min, max ) )
+      g_log.information("In setRange: [YMin,YMax] interval invalid, values adjusted");
+
+    if ( min < m_totalMinY || min > m_totalMaxY )
+    {
+      g_log.information("Y Min out of range, resetting to range min.");
+      min = m_totalMinY;
+    }
+
+    if ( max < m_totalMinY || max > m_totalMaxY )
+    {
+      g_log.information("Y Max out of range, resetting to range max.");
+      max = m_totalMaxY;
+    }
+
+    if ( step == 0 )
+    {
+      g_log.information("Step = 0, resetting to default step");
+      step = (max-min)/2000.0;
+    }
+
+    QtUtils::SetText( 8, 2, min, m_ivUI->y_min_input );
+    QtUtils::SetText( 8, 2, max, m_ivUI->y_max_input );
+    //  QtUtils::SetText( 8, 4, step, m_ivUI->step_input );
+  }
 }
 
 
 } // namespace RefDetectorViewer
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefSliderHandler.cpp b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefSliderHandler.cpp
index 60bf13210049d939aefe93523bea9cd81909409a..2fc6a2faef46f94b33b14e63c443c04e88a27983 100644
--- a/Code/Mantid/MantidQt/RefDetectorViewer/src/RefSliderHandler.cpp
+++ b/Code/Mantid/MantidQt/RefDetectorViewer/src/RefSliderHandler.cpp
@@ -13,157 +13,147 @@ namespace RefDetectorViewer
  *  Construct a RefSliderHandler object to manage the image scrollbars from the
  *  specified UI.
  */
-RefSliderHandler::RefSliderHandler( Ui_RefImageViewer* iv_ui )
+RefSliderHandler::RefSliderHandler( Ui_RefImageViewer* ivUI ) : m_ivUI(ivUI)
 {
-  this->iv_ui = iv_ui;
 }
 
 
 /**
  * Configure the image scrollbars for the specified data and drawing area.
  *
- * @param draw_area    Rectangle specifiying the region where the image will
- *                     be drawn
- * @param data_source  SpectrumDataSource that provides the data to be drawn
+ * @param drawArea    Rectangle specifiying the region where the image will
+ *                    be drawn
+ * @param dataSource  SpectrumDataSource that provides the data to be drawn
  */
-void RefSliderHandler::ConfigureSliders( QRect            draw_area,
-                                      SpectrumView::SpectrumDataSource* data_source )
+void RefSliderHandler::configureSliders( QRect drawArea,
+                                         SpectrumView::SpectrumDataSource_sptr dataSource )
 {
-  QScrollBar* v_scroll = iv_ui->imageVerticalScrollBar;
-  int n_rows = (int)data_source->GetNRows();
-  ConfigureSlider( v_scroll, n_rows, draw_area.height(), n_rows );
+  QScrollBar* v_scroll = m_ivUI->imageVerticalScrollBar;
+  int n_rows = (int)dataSource->getNRows();
+  configureSlider( v_scroll, n_rows, drawArea.height(), n_rows );
 
-  ConfigureHSlider( 2000, draw_area.width() );   // initial default, 2000 bins
+  configureHSlider( 2000, drawArea.width() );   // initial default, 2000 bins
 }
 
 
 /**
- *  Public method to configure the horizontal scrollbar to cover the 
+ *  Public method to configure the horizontal scrollbar to cover the
  *  specified range of data columns, displayed in the specified number of
- *  pixels.  
+ *  pixels.
  *
- *  @param n_data_steps  The number of columns in the data that should be 
- *                       displayed
- *  @param n_pixels      The number of pixels avaliable to show the data
+ *  @param nDataSteps  The number of columns in the data that should be
+ *                     displayed
+ *  @param nPixels     The number of pixels avaliable to show the data
  */
-void RefSliderHandler::ConfigureHSlider( int         n_data_steps,
-                                      int         n_pixels )
+void RefSliderHandler::configureHSlider( int         nDataSteps,
+                                         int         nPixels )
 {
-  QScrollBar* h_scroll = iv_ui->imageHorizontalScrollBar;
-  ConfigureSlider( h_scroll, n_data_steps, n_pixels, 0 );
+  QScrollBar* h_scroll = m_ivUI->imageHorizontalScrollBar;
+  configureSlider( h_scroll, nDataSteps, nPixels, 0 );
 }
 
 
 /**
  *  Configure the specified scrollbar to cover the specified range of data
- *  steps, displayed in the specified number of pixels.  
+ *  steps, displayed in the specified number of pixels.
  *
- *  @param scroll_bar    The scroll bar that will be configured
- *  @param n_data_steps  The number of bins in the data that should be 
- *                       displayed
- *  @param n_pixels      The number of pixels avaliable to show the data
- *  @param val           The initial position of the scrollbar, between 0 and
- *                       n_data_steps.
+ *  @param scrollBar   The scroll bar that will be configured
+ *  @param nDataSteps  The number of bins in the data that should be
+ *                     displayed
+ *  @param nPixels     The number of pixels avaliable to show the data
+ *  @param val         The initial position of the scrollbar, between 0 and
+ *                     nDataSteps.
  */
-void RefSliderHandler::ConfigureSlider( QScrollBar* scroll_bar,
-                                     int         n_data_steps, 
-                                     int         n_pixels, 
-                                     int         val )
+void RefSliderHandler::configureSlider( QScrollBar* scrollBar,
+                                        int         nDataSteps,
+                                        int         nPixels,
+                                        int         val )
 {
-  int step = n_pixels;
-  if ( step > n_data_steps )
-  {
-    step = n_data_steps;
-  }
+  int step = nPixels;
+  if ( step > nDataSteps )
+    step = nDataSteps;
+
   if ( step <= 0 )
-  {
     step = 1;
-  }
 
-  int max  = n_data_steps - step;
+  int max  = nDataSteps - step;
   if ( max <= 0 )
-  {
     max = 0;
-  }
 
   if ( val < 0 )
-  {
     val = 0;
-  }
 
   if ( val > max )
-  {
     val = max;
-  }
 
-  scroll_bar->setMinimum( 0 );
-  scroll_bar->setMaximum( max );
-  scroll_bar->setPageStep( step );
-  scroll_bar->setValue( val );
+  scrollBar->setMinimum( 0 );
+  scrollBar->setMaximum( max );
+  scrollBar->setPageStep( step );
+  scrollBar->setValue( val );
 }
 
 
 /**
  * Return true if the image horizontal scrollbar is enabled.
  */
-bool RefSliderHandler::HSliderOn()
+bool RefSliderHandler::hSliderOn()
 {
-  return iv_ui->imageHorizontalScrollBar->isEnabled();
+  return m_ivUI->imageHorizontalScrollBar->isEnabled();
 }
 
 
 /**
  * Return true if the image vertical scrollbar is enabled.
  */
-bool RefSliderHandler::VSliderOn()
+bool RefSliderHandler::vSliderOn()
 {
-  return iv_ui->imageVerticalScrollBar->isEnabled();
+  return m_ivUI->imageVerticalScrollBar->isEnabled();
 }
 
 
 /**
- * Get the range of columns to display in the image.  NOTE: x_min will be
+ * Get the range of columns to display in the image.  NOTE: xMin will be
  * the smaller column number in the array, corresponding to lower values on
  * the calibrated x-scale.
  *
- * @param x_min   This will be set to the first bin number to display in the
+ * @param xMin   This will be set to the first bin number to display in the
  *                x direction.
- * @param x_max   This will be set to the last bin number to display in the
+ * @param xMax   This will be set to the last bin number to display in the
  *                x direction
  */
-void RefSliderHandler::GetHSliderInterval( int &x_min, int &x_max )
+void RefSliderHandler::getHSliderInterval( int &xMin, int &xMax )
 {
-  QScrollBar* h_scroll = iv_ui->imageHorizontalScrollBar;
+  QScrollBar* h_scroll = m_ivUI->imageHorizontalScrollBar;
   int step  = h_scroll->pageStep();
   int value = h_scroll->value();
 
-  x_min = value;     
-  x_max = x_min + step;       
+  xMin = value;
+  xMax = xMin + step;
 }
 
 
 /**
- * Get the range of rows to display in the image.  NOTE: y_min will be
+ * Get the range of rows to display in the image.  NOTE: yMin will be
  * the smaller row number in the array, corresponding to lower values on
  * the calibrated y-scale.
  *
- * @param y_min   This will be set to the first bin number to display in the
+ * @param yMin   This will be set to the first bin number to display in the
  *                y direction.
- * @param y_max   This will be set to the last bin number to display in the
+ * @param yMax   This will be set to the last bin number to display in the
  *                y direction
  */
-void RefSliderHandler::GetVSliderInterval( int &y_min, int &y_max )
+void RefSliderHandler::getVSliderInterval( int &yMin, int &yMax )
 {
-  QScrollBar* v_scroll = iv_ui->imageVerticalScrollBar;
+  QScrollBar* v_scroll = m_ivUI->imageVerticalScrollBar;
   int max   = v_scroll->maximum();
   int step  = v_scroll->pageStep();
   int value = v_scroll->value();
-                                
-  y_min = max - value;        // invert value since scale increases from 
-  y_max = y_min + step;       // bottom to top, but scroll bar increases
+
+  yMin = max - value;       // invert value since scale increases from
+  yMax = yMin + step;       // bottom to top, but scroll bar increases
                               // the other way.
 }
 
 
 } // namespace RefDetectorViewer
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/SliceViewer/src/LineViewer.cpp b/Code/Mantid/MantidQt/SliceViewer/src/LineViewer.cpp
index afb51d9a38a768399454fa52a7c0424a342f28ab..ee376586af0c109648e6ba0585faea7ce7f94d4b 100644
--- a/Code/Mantid/MantidQt/SliceViewer/src/LineViewer.cpp
+++ b/Code/Mantid/MantidQt/SliceViewer/src/LineViewer.cpp
@@ -301,7 +301,8 @@ IAlgorithm_sptr LineViewer::applyMatrixWorkspace(Mantid::API::MatrixWorkspace_sp
     if (getPlanarWidth() <= 0)
       throw std::runtime_error("Planar Width must be > 0");
 
-    IAlgorithm_sptr alg = AlgorithmManager::Instance().create("Rebin2D");
+    IAlgorithm_sptr alg = AlgorithmManager::Instance().createUnmanaged("Rebin2D");
+    alg->initialize();
     alg->setProperty("InputWorkspace", ws);
     alg->setPropertyValue("OutputWorkspace", m_integratedWSName);
     if(ws->id() == "RebinnedOutput")
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/CMakeLists.txt b/Code/Mantid/MantidQt/SpectrumViewer/CMakeLists.txt
index 125ef94307c62c97d09b576036664927554f4060..5f26803546b3be934e7083b2d5e1a92155797f85 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/CMakeLists.txt
+++ b/Code/Mantid/MantidQt/SpectrumViewer/CMakeLists.txt
@@ -1,22 +1,21 @@
 set ( SRC_FILES
-       src/ColorMaps.cpp        
-       src/SpectrumDisplay.cpp   
-       src/SVUtils.cpp        
+       src/ColorMaps.cpp
+       src/SpectrumDisplay.cpp
+       src/SVUtils.cpp
        src/TrackingPicker.cpp
-       src/DataArray.cpp        
-       src/SpectrumPlotItem.cpp  
+       src/DataArray.cpp
+       src/SpectrumPlotItem.cpp
        src/QtUtils.cpp
-       src/GraphDisplay.cpp     
-       src/SpectrumView.cpp      
+       src/GraphDisplay.cpp
+       src/SpectrumView.cpp
        src/SliderHandler.cpp
        src/RangeHandler.cpp
        src/EModeHandler.cpp
-       src/SpectrumDataSource.cpp  
-       src/SVConnections.cpp 
+       src/SpectrumDataSource.cpp
+       src/SVConnections.cpp
        src/MatrixWSDataSource.cpp
        src/MatrixWSSpectrumView.cpp
        src/ArrayDataSource.cpp
-       src/ErrorHandler.cpp
 )
 
 # Include files aren't required, but this makes them appear in Visual Studio
@@ -40,21 +39,20 @@ set ( INC_FILES
        inc/MantidQtSpectrumViewer/MatrixWSDataSource.h
        inc/MantidQtSpectrumViewer/MatrixWSSpectrumView.h
        inc/MantidQtSpectrumViewer/ArrayDataSource.h
-       inc/MantidQtSpectrumViewer/ErrorHandler.h
 )
 
-set ( MOC_FILES 
+set ( MOC_FILES
        inc/MantidQtSpectrumViewer/SpectrumView.h
        inc/MantidQtSpectrumViewer/SVConnections.h
        inc/MantidQtSpectrumViewer/TrackingPicker.h
 )
 
-set ( UI_FILES 
+set ( UI_FILES
        inc/MantidQtSpectrumViewer/SpectrumView.ui
 )
 
 # Python unit tests
-set ( TEST_PY_FILES 
+set ( TEST_PY_FILES
 )
 
 include_directories ( inc )
@@ -70,7 +68,7 @@ qt4_wrap_cpp ( MOCCED_FILES ${MOC_FILES} )
 
 set ( ALL_SRC ${SRC_FILES} ${MOCCED_FILES} )
 
-qt4_wrap_ui ( UI_HDRS ${UI_FILES} ) 
+qt4_wrap_ui ( UI_HDRS ${UI_FILES} )
 
 include_directories ( ${CMAKE_CURRENT_BINARY_DIR} )
 
@@ -84,22 +82,6 @@ add_library ( MantidQtSpectrumViewer ${ALL_SRC} ${INC_FILES} ${UI_HDRS} )
 target_link_libraries ( MantidQtSpectrumViewer
                         MantidQtAPI MantidWidgets ${CORE_MANTIDLIBS} ${QT_LIBRARIES} ${QWT_LIBRARIES} )
 
-###########################################################################
-# DEMO/GUI TESTING APPLICATIONS
-###########################################################################
-
-if ( NOT WIN32 )
-add_executable ( SpectrumViewDemo EXCLUDE_FROM_ALL src/SpectrumViewDemo.cpp )
-target_link_libraries ( SpectrumViewDemo MantidQtSpectrumViewer )
-
-add_executable ( SpectrumViewNxEventFile EXCLUDE_FROM_ALL src/SpectrumViewNxEventFile.cpp )
-target_link_libraries ( SpectrumViewNxEventFile MantidQtSpectrumViewer )
-endif ()
-
-###########################################################################
-# Unit tests setup
-###########################################################################
-
 
 ###########################################################################
 # Installation settings
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/ArrayDataSource.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/ArrayDataSource.h
index 8c4d915b7308b2693b0246ffc2eaa6800238b3b4..62b9b418c654cd889326419cc69bd5b4d7d17e61 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/ArrayDataSource.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/ArrayDataSource.h
@@ -6,17 +6,17 @@
 #include "MantidQtSpectrumViewer/SpectrumDataSource.h"
 
 /**
-    @class ArrayDataSource 
-  
+    @class ArrayDataSource
+
     This class provides a wrapper around a simple 2-D array of doubles
     stored in row-major order in a 1-D array, so that the array can be
     viewed using the SpectrumView data viewer.
- 
-    @author Dennis Mikkelson 
-    @date   2012-05-14 
-     
+
+    @author Dennis Mikkelson
+    @date   2012-05-14
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -31,8 +31,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -49,7 +49,7 @@ class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER ArrayDataSource: public SpectrumDataSou
     ArrayDataSource( double total_xmin, double total_xmax,
                      double total_ymin, double total_ymax,
                      size_t total_rows, size_t total_cols,
-                     float* data );
+                     std::vector<float> data );
 
     ~ArrayDataSource();
 
@@ -57,26 +57,31 @@ class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER ArrayDataSource: public SpectrumDataSou
                          const boost::shared_ptr<Mantid::API::Workspace> ws);
 
     /// Get DataArray covering full range of data in x, and y directions
-    DataArray * GetDataArray( bool is_log_x );
+    DataArray_const_sptr getDataArray( bool is_log_x );
 
-    /// Get DataArray covering restricted range of data 
-    DataArray * GetDataArray( double  xmin,
-                              double  xmax,
-                              double  ymin,
-                              double  ymax,
-                              size_t  n_rows,
-                              size_t  n_cols,
-                              bool    is_log_x );
+    /// Get DataArray covering restricted range of data
+    DataArray_const_sptr getDataArray( double  xMin,
+                                       double  xMax,
+                                       double  yMin,
+                                       double  yMax,
+                                       size_t  nRows,
+                                       size_t  nCols,
+                                       bool    isLogX );
 
     /// Get a list containing pairs of strings with information about x,y
-    void GetInfoList( double x,
+    void getInfoList( double x,
                       double y,
                       std::vector<std::string> &list );
+
   private:
-    float* data;  
+    std::vector<float> m_data;
+
 };
 
+typedef boost::shared_ptr<ArrayDataSource> ArrayDataSource_sptr;
+typedef boost::shared_ptr<const ArrayDataSource> ArrayDataSource_const_sptr;
+
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif // ARRAY_DATA_SOURCE_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/DataArray.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/DataArray.h
index 1c08949a6e36268f08814a678ec209e431b5c968..f7fe3cdd4bfcf342f07814d26fe571755ada0d12 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/DataArray.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/DataArray.h
@@ -2,20 +2,23 @@
 #define DATA_ARRAY_H
 
 #include <cstddef>
+#include <vector>
+
+#include <boost/shared_ptr.hpp>
 
 #include "MantidQtSpectrumViewer/DllOptionSV.h"
 
 /**
-    @class DataArray 
-  
+    @class DataArray
+
        This class provides a simple immutable wrapper around a block of data
     returned from an SpectrumDataSource.
- 
-    @author Dennis Mikkelson 
-    @date   2012-04-03 
-     
+
+    @author Dennis Mikkelson
+    @date   2012-04-03
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -30,8 +33,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -45,91 +48,95 @@ class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER DataArray
   public:
 
     /// Construct a DataArray "wrapper" around the data and region info
-    DataArray( double xmin,     double xmax,
-               double ymin,     double ymax,
-               bool   is_log_x,
-               size_t n_rows,   size_t n_cols,
-               float *data );
+    DataArray( double xMin,    double xMax,
+               double yMin,    double yMax,
+               bool   isLogX,
+               size_t nRows,   size_t nCols,
+               std::vector<float> data );
 
     ~DataArray();
 
     /// Get the smallest 'x' value actually covered by this DataArray
-    double GetXMin()    const;
+    double getXMin() const;
 
     /// Get the largest 'x' value actually covered by this DataArray
-    double GetXMax()    const;
+    double getXMax() const;
 
     /// Get the smallest 'y' value actually covered by this DataArray
-    double GetYMin()    const;
+    double getYMin() const;
 
     /// Get the largest 'y' value actually covered by this DataArray
-    double GetYMax()    const;
+    double getYMax() const;
 
     /// Check if the returned array is binned logarithmically in 'x'
-    bool IsLogX()  const;
+    bool isLogX() const;
 
     /// Get smallest value recorded in this DataArray
-    double GetDataMin() const;
+    double getDataMin() const;
 
     /// Get largest value recorded in this DataArray
-    double GetDataMax() const;
+    double getDataMax() const;
 
     // Get the actual number of rows in this DataArray
-    size_t GetNRows()   const;
+    size_t getNRows() const;
 
     /// Get the actual number of columns in this DataArray
-    size_t GetNCols()   const;
+    size_t getNCols() const;
 
-    /// Get simple array containing all values, packed in a 1-D array
-    float* GetData()    const;
+    /// Get vector containing all values, packed in a 1-D array
+    std::vector<float> getData() const;
 
     /// Get the value at the specified row and column
-    double GetValue( int row, int col ) const;
+    double getValue( int row, int col ) const;
 
     /// Get the value from the row and column containing the specified point
-    double GetValue( double x, double y ) const;
+    double getValue( double x, double y ) const;
 
     /// Clamp x to the interval of x-values covered by this DataArray
-    void RestrictX( double & x ) const;
-  
+    void restrictX( double & x ) const;
+
     /// Clamp y to the interval of y-values covered by this DataArray
-    void RestrictY( double & y ) const;
+    void restrictY( double & y ) const;
 
     /// Clamp row to a valid row number for this DataArray
-    void RestrictRow( int & row ) const;
+    void restrictRow( int & row ) const;
 
     /// Clamp col to a valid column number for this DataArray
-    void RestrictCol( int & col ) const;
+    void restrictCol( int & col ) const;
 
     /// Calculate the column number containing the specified x
-    size_t ColumnOfX( double x ) const;
+    size_t columnOfX( double x ) const;
 
     /// Calculate the x-value at the center of the specified column
-    double XOfColumn( size_t col ) const;
+    double xOfColumn( size_t col ) const;
 
     /// Calculate the row number containing the specified y
-    size_t RowOfY( double y ) const;
+    size_t rowOfY( double y ) const;
 
-    /// Calculate the y-value at the center of the specified row 
-    double YOfRow( size_t row ) const;
+    /// Calculate the y-value at the center of the specified row
+    double yOfRow( size_t row ) const;
 
 
   private:
-    double xmin; 
-    double xmax;
-    double ymin;
-    double ymax;
-    bool   is_log_x;
-    double data_min; 
-    double data_max;
-    size_t n_rows;   
-    size_t n_cols;
-    float *data;        // This is given a reference to the data block,
-                        // which is allocated in the SpectrumDataSource,
-                        // but will be deleted in this object's Destructor
+    double m_xMin;
+    double m_xMax;
+    double m_yMin;
+    double m_yMax;
+    bool   m_isLogX;
+    size_t m_nRows;
+    size_t m_nCols;
+
+    double m_dataMin;
+    double m_dataMax;
+
+    std::vector<float> m_data;
+
 };
 
+typedef boost::shared_ptr<DataArray> DataArray_sptr;
+typedef boost::shared_ptr<const DataArray> DataArray_const_sptr;
+
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif // DATA_ARRAY_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/EModeHandler.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/EModeHandler.h
index 0b7c3a56ca0ef48af1bca01adfb987724ba84ff0..2e5c33da7faea1b85f953987ac8fc740bc5d68b8 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/EModeHandler.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/EModeHandler.h
@@ -6,16 +6,16 @@
 #include "MantidQtSpectrumViewer/DllOptionSV.h"
 
 /**
-    @class EModeHandler 
-  
-      This manages the instrument type combo box (emode) and E Fixed controls 
-    for the SpectrumView data viewer. 
- 
-    @author Dennis Mikkelson 
+    @class EModeHandler
+
+    This manages the instrument type combo box (emode) and E Fixed controls
+    for the SpectrumView data viewer.
+
+    @author Dennis Mikkelson
     @date   2012-10-12
-     
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -30,8 +30,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -40,30 +40,31 @@ namespace MantidQt
 namespace SpectrumView
 {
 
-class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER EModeHandler 
+class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER EModeHandler
 {
   public:
 
     /// Construct object to manage E Mode controls in the UI
-    EModeHandler(Ui_SpectrumViewer* sv_ui );
+    EModeHandler( Ui_SpectrumViewer* sv_ui );
 
     /// Get the E Mode to control units calculation, from the combo box
-    int GetEMode();
+    int getEMode();
 
     /// Set the E Mode to control units calculation, in the combo box
-    void SetEMode( const int mode );
+    void setEMode( const int mode );
 
     /// Get the E Fixed value from the GUI
-    double GetEFixed();
+    double getEFixed();
 
     /// Set the E Fixed value in the GUI
-    void SetEFixed( const double efixed );
+    void setEFixed( const double efixed );
 
   private:
-    Ui_SpectrumViewer* sv_ui;
+    Ui_SpectrumViewer* m_svUI;
+
 };
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif // EMODE_HANDLER_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/ErrorHandler.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/ErrorHandler.h
deleted file mode 100644
index 7667f0686714dead8251ac68ede56a66c26b0960..0000000000000000000000000000000000000000
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/ErrorHandler.h
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef  ERROR_HANDLER_H
-#define  ERROR_HANDLER_H
-
-#include "MantidQtSpectrumViewer/DllOptionSV.h"
-
-/**
-    @class ErrorHandler 
-  
-      This class has static methods that do various basic calculations 
-    needed by other parts of the SpectrumView package.
- 
-    @author Dennis Mikkelson 
-    @date   2012-05-18 
-     
-    Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
-    This file is part of Mantid.
-
-    Mantid is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 3 of the License, or
-    (at your option) any later version.
-
-    Mantid 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 General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
-                 <http://doxygen.mantidproject.org>
- */
-
-namespace MantidQt
-{
-namespace SpectrumView
-{
-
-
-class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER ErrorHandler 
-{
-  public:
-
-    /// Display the specified string in an error message 
-    static void Error( std::string  text );
-
-    /// Display the specified string in a warning message 
-    static void Warning( std::string  text );
-
-    /// Display the specified string in a notice message 
-    static void Notice( std::string  text );
-
-};
-
-} // namespace SpectrumView
-} // namespace MantidQt 
-
-#endif   // ERROR_HANLDER_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/GraphDisplay.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/GraphDisplay.h
index 2b32c02ab1abc98f309c221e9e4e051dc1555424..9a84c535fa4a0a4493532d05d5ac18ab77369020 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/GraphDisplay.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/GraphDisplay.h
@@ -9,16 +9,16 @@
 #include "MantidQtSpectrumViewer/DllOptionSV.h"
 
 /**
-    @class GraphDisplay 
-  
+    @class GraphDisplay
+
     This class handles the display of vertical and horizontal cuts
     through the data in an SpectrumView display.
- 
-    @author Dennis Mikkelson 
-    @date   2012-04-03 
-     
+
+    @author Dennis Mikkelson
+    @date   2012-04-03
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -33,8 +33,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -43,58 +43,59 @@ namespace MantidQt
 namespace SpectrumView
 {
 
-class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER GraphDisplay 
+class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER GraphDisplay
 {
   public:
 
-   /// Construct a GraphDisplay to display in the specifed plot and table    
-   GraphDisplay( QwtPlot*      graph_plot, 
-                 QTableWidget* graph_table,
-                 bool          is_vertical );
+   /// Construct a GraphDisplay to display in the specifed plot and table
+   GraphDisplay( QwtPlot*      graphPlot,
+                 QTableWidget* graphTable,
+                 bool          isVertical );
 
-  ~GraphDisplay();
+   ~GraphDisplay();
 
-   /// Set the source of information for the table of position information 
-   void SetDataSource( SpectrumDataSource* data_source );
+   /// Set the source of information for the table of position information
+   void setDataSource( SpectrumDataSource_sptr dataSource );
 
    /// Set the actual data that will be displayed on the graph
-   void SetData( const QVector<double> & xData,
+   void setData( const QVector<double> & xData,
                  const QVector<double> & yData,
-                       double            cut_value );
+                       double            cutValue );
 
    /// Clear the graph(s) off the display
-   void Clear();
+   void clear();
 
-   /// Set up axes using the specified scale factor and replot the graph 
-   void SetRangeScale( double range_scale );
+   /// Set up axes using the specified scale factor and replot the graph
+   void setRangeScale( double rangeScale );
 
    /// Set flag indicating whether or not to use a log scale on the x-axis
-   void SetLogX( bool is_log_x );
+   void setLogX( bool isLogX );
 
    /// Record the point that the user is currently pointing at with the mouse
-   void SetPointedAtPoint( QPoint point );
+   void setPointedAtPoint( QPoint point );
 
   private:
    /// Show information about the point (x, y) on the graph, in the info table
-   void ShowInfoList( double x, double y );
-
-   QwtPlot*          graph_plot;
-   QwtPlotCurve*     curve;
-   QTableWidget*     graph_table;
-   SpectrumDataSource*  data_source;
-
-   bool    is_vertical;
-   bool    is_log_x;
-   double  image_x;
-   double  image_y;
-   double  range_scale;         // fraction of data range to be graphed  
-   double  min_x,
-           max_x;
-   double  min_y,
-           max_y;
+   void showInfoList( double x, double y );
+
+   QwtPlot            * m_graphPlot;
+   QwtPlotCurve       * m_curve;
+   QTableWidget       * m_graphTable;
+   SpectrumDataSource_sptr m_dataSource;
+
+   bool   m_isVertical;
+   bool   m_isLogX;
+   double m_imageX;
+   double m_imageY;
+   double m_rangeScale;  // Fraction of data range to be graphed
+   double m_minX;
+   double m_maxX;
+   double m_minY;
+   double m_maxY;
+
 };
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif   // GRAPH_DISPLAY_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/IRangeHandler.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/IRangeHandler.h
index c0de659597cedfa9463278844a3a53a50fedb9d6..a92b32eeb4994c13c11e68da3f133f01bb838cd2 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/IRangeHandler.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/IRangeHandler.h
@@ -8,6 +8,7 @@ namespace MantidQt
 {
 namespace SpectrumView
 {
+
 /** An interface to the RangeHandler class, which manages the min, max and step
     range controls for the SpectrumView data viewer.
 
@@ -30,20 +31,24 @@ namespace SpectrumView
 
     Code Documentation is available at <http://doxygen.mantidproject.org>
  */
+
 class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER IRangeHandler
 {
+
 public:
   /// Construct object to manage min, max and step controls in the UI
   IRangeHandler() {}
   virtual ~IRangeHandler() {}
 
   /// Configure min, max and step controls for the specified data source
-  virtual void ConfigureRangeControls( SpectrumDataSource* data_source ) = 0;
+  virtual void configureRangeControls( SpectrumDataSource_sptr dataSource ) = 0;
+
   /// Get the range of data to display in the image, from GUI controls
-  virtual void GetRange( double &min, double &max, double &step ) = 0;
+  virtual void getRange( double &min, double &max, double &step ) = 0;
+
 };
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif // IRANGE_HANDLER_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/ISliderHandler.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/ISliderHandler.h
index 4223243d67fbb823f1b8e423fe3b21c45fdadf01..4c837ac813d037fb6f19249d161dbf6c62d34fe0 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/ISliderHandler.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/ISliderHandler.h
@@ -9,6 +9,7 @@ namespace MantidQt
 {
 namespace SpectrumView
 {
+
 /** An interface to the SliderHandler, which manages the horizontal and vertical
     scroll bars for the SpectrumView data viewer.
 
@@ -31,30 +32,37 @@ namespace SpectrumView
 
     Code Documentation is available at <http://doxygen.mantidproject.org>
  */
+
 class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER ISliderHandler
 {
+
 public:
   /// Construct object to manage image scrollbars from the specified UI
   ISliderHandler() {}
   virtual ~ISliderHandler() {}
 
   /// Configure the image scrollbars for the specified data and drawing area
-  virtual void ConfigureSliders( QRect            draw_area,
-                                 SpectrumDataSource* data_source ) = 0;
+  virtual void configureSliders( QRect drawArea,
+                                 SpectrumDataSource_sptr dataSource ) = 0;
+
   /// Configure the horizontal scrollbar to cover the specified range
-  virtual void ConfigureHSlider( int         n_data_steps,
-				 int         n_pixels ) = 0;
+  virtual void configureHSlider( int         nDataSteps,
+                                 int         nPixels ) = 0;
+
   /// Return true if the image horizontal scrollbar is enabled.
-  virtual bool HSliderOn() = 0;
+  virtual bool hSliderOn() = 0;
+
   /// Return true if the image vertical scrollbar is enabled.
-  virtual bool VSliderOn() = 0;
+  virtual bool vSliderOn() = 0;
+
   /// Get the range of columns to display in the image.
-  virtual void GetHSliderInterval( int &x_min, int &x_max ) = 0;
+  virtual void getHSliderInterval( int &xMin, int &xMax ) = 0;
+
   /// Get the range of rows to display in the image.
-  virtual void GetVSliderInterval( int &y_min, int &y_max ) = 0;
+  virtual void getVSliderInterval( int &yMin, int &yMax ) = 0;
 };
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif // ISLIDER_HANDLER_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/MatrixWSDataSource.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/MatrixWSDataSource.h
index 8711b5d46d015753732cde28917ef45ca659fbe0..e042d6058e92ceb5e1c8441b1070c9332f3cb24e 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/MatrixWSDataSource.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/MatrixWSDataSource.h
@@ -5,22 +5,21 @@
 
 #include "MantidQtSpectrumViewer/DataArray.h"
 #include "MantidQtSpectrumViewer/SpectrumDataSource.h"
-#include "MantidQtSpectrumViewer/EModeHandler.h"
 #include "MantidQtSpectrumViewer/DllOptionSV.h"
 
 #include "MantidAPI/MatrixWorkspace.h"
 
 /**
-    @class MatrixWSDataSource 
-  
-       This class provides a concrete implementation of an SpectrumDataSource
+    @class MatrixWSDataSource
+
+    This class provides a concrete implementation of an SpectrumDataSource
     that gets it's data from a matrix workspace.
- 
-    @author Dennis Mikkelson 
-    @date   2012-05-08 
-     
+
+    @author Dennis Mikkelson
+    @date   2012-05-08
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -35,8 +34,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -44,57 +43,62 @@ namespace MantidQt
 {
 namespace SpectrumView
 {
+class EModeHandler;
 
 class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER MatrixWSDataSource: public SpectrumDataSource
 {
   public:
 
     /// Construct a DataSource object around the specifed MatrixWorkspace
-    MatrixWSDataSource( Mantid::API::MatrixWorkspace_const_sptr mat_ws );
+    MatrixWSDataSource( Mantid::API::MatrixWorkspace_const_sptr matWs );
 
-   ~MatrixWSDataSource();
+    ~MatrixWSDataSource();
 
     virtual bool hasData(const std::string& wsName, const boost::shared_ptr<Mantid::API::Workspace> ws);
 
     /// OVERRIDES: Get the smallest 'x' value covered by the data
-    virtual double GetXMin();
+    virtual double getXMin();
 
     /// OVERRIDES: Get the largest 'x' value covered by the data
-    virtual double GetXMax();
+    virtual double getXMax();
 
     /// OVERRIDES: Get the largest 'y' value covered by the data
-    virtual double GetYMax();
+    virtual double getYMax();
 
     /// OVERRIDES: Get the total number of rows of data
-    virtual size_t GetNRows();
+    virtual size_t getNRows();
 
     /// Get DataArray covering full range of data in x, and y directions
-    DataArray * GetDataArray( bool is_log_x );
+    DataArray_const_sptr getDataArray( bool isLogX );
 
-    /// Get DataArray covering restricted range of data 
-    DataArray * GetDataArray( double  xmin,
-                              double  xmax,
-                              double  ymin,
-                              double  ymax,
-                              size_t  n_rows,
-                              size_t  n_cols,
-                              bool    is_log_x );
+    /// Get DataArray covering restricted range of data
+    DataArray_const_sptr getDataArray( double  xMin,
+                                       double  xMax,
+                                       double  yMin,
+                                       double  yMax,
+                                       size_t  nRows,
+                                       size_t  nCols,
+                                       bool    isLogX );
 
     /// Set the class that gets the emode & efixed info from the user.
-    void SetEModeHandler( EModeHandler* emode_handler );
+    void setEModeHandler( EModeHandler* emodeHandler );
 
     /// Get a list containing pairs of strings with information about x,y
-    void GetInfoList( double x,
+    void getInfoList( double x,
                       double y,
                       std::vector<std::string> &list );
 
 
   private:
-    Mantid::API::MatrixWorkspace_const_sptr  mat_ws;
-    EModeHandler* saved_emode_handler;
+    Mantid::API::MatrixWorkspace_const_sptr m_matWs;
+    EModeHandler* m_emodeHandler;
+
 };
 
+typedef boost::shared_ptr<MatrixWSDataSource> MatrixWSDataSource_sptr;
+typedef boost::shared_ptr<const MatrixWSDataSource> MatrixWSDataSource_const_sptr;
+
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif // MATRIX_WS_DATA_SOURCE_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/QtUtils.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/QtUtils.h
index 5fb439e824c383c2bea7186bd12bf9bc0d0ca5ea..a9cc8650935b60904755d323adfc20cf9451faf3 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/QtUtils.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/QtUtils.h
@@ -7,16 +7,16 @@
 #include "MantidQtSpectrumViewer/DllOptionSV.h"
 
 /**
-    @class QtUtils 
-  
+    @class QtUtils
+
     This class has some static methods to simplify interaction with
     Qt and Qwt for the SpectrumView data viewer.
- 
-    @author Dennis Mikkelson 
-    @date   2012-04-03 
-     
+
+    @author Dennis Mikkelson
+    @date   2012-04-03
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -31,8 +31,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -46,14 +46,14 @@ class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER QtUtils
 {
   public:
   /// enter the specified string in the table
-  static void SetTableEntry(       int           row, 
-                                   int           col, 
+  static void SetTableEntry(       int           row,
+                                   int           col,
                              const std::string & string,
                                    QTableWidget* table );
 
   /// enter the specified double, formatted, in the table
-  static void SetTableEntry( int           row, 
-                             int           col, 
+  static void SetTableEntry( int           row,
+                             int           col,
                              int           width,
                              int           precision,
                              double        value,
@@ -61,16 +61,16 @@ class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER QtUtils
 
   /// Set the specified string into the specified QLineEdit widget.
   static void SetText( const std::string & string,
-                             QLineEdit*    q_line_edit );
+                             QLineEdit*    lineEdit );
 
   /// enter the specified double, formatted, in the QLineEdit control
   static void SetText( int        width,
                        int        precision,
                        double     value,
-                       QLineEdit* q_line_edit );
+                       QLineEdit* lineEdit );
 };
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif   // QT_UTILS_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/RangeHandler.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/RangeHandler.h
index d0ec0b35a50fd6d5226d55e14d73b008b27bf034..f92406d17c7d751514862de1eb41f07ae970351e 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/RangeHandler.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/RangeHandler.h
@@ -7,16 +7,16 @@
 #include "MantidQtSpectrumViewer/DllOptionSV.h"
 
 /**
-    @class RangeHandler 
-  
-      This manages the min, max and step range controls for the SpectrumView 
-    data viewer. 
- 
-    @author Dennis Mikkelson 
-    @date   2012-04-25 
-     
+    @class RangeHandler
+
+    This manages the min, max and step range controls for the SpectrumView
+    data viewer.
+
+    @author Dennis Mikkelson
+    @date   2012-04-25
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -31,8 +31,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -41,31 +41,30 @@ namespace MantidQt
 namespace SpectrumView
 {
 
-
 class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER RangeHandler : public IRangeHandler
 {
   public:
-
     /// Construct object to manage min, max and step controls in the UI
-    RangeHandler( Ui_SpectrumViewer* sv_ui );
+    RangeHandler( Ui_SpectrumViewer* svUI );
 
     /// Configure min, max and step controls for the specified data source
-    void ConfigureRangeControls( SpectrumDataSource* data_source );
+    void configureRangeControls( SpectrumDataSource_sptr dataSource );
 
     /// Get the range of data to display in the image, from GUI controls
-    void GetRange( double &min, double &max, double &step );
+    void getRange( double &min, double &max, double &step );
 
     /// Set the values displayed in the GUI controls
-    void SetRange( double min, double max, double step );
+    void setRange( double min, double max, double step );
 
   private:
-    Ui_SpectrumViewer* sv_ui;
-    double         total_min_x;
-    double         total_max_x;
-    size_t         total_n_steps;
+    Ui_SpectrumViewer* m_svUI;
+    double             m_totalMinX;
+    double             m_totalMaxX;
+    size_t             m_totalNSteps;
+
 };
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif // RANGE_HANDLER_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SVConnections.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SVConnections.h
index 089b0d66577a175b7339529f241eb08a639a4122..144d416d4384225326328e7a849a49479ed1e080 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SVConnections.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SVConnections.h
@@ -14,19 +14,19 @@
 
 
 /**
-    @class SVConnections 
-  
-       This class provides the connections between the SpectrumView GUI components
+    @class SVConnections
+
+    This class provides the connections between the SpectrumView GUI components
     made using QtDesigner and the classes that do the actual work for the
-    SpectrumView.  It basically provides SLOTS that are called by the GUI 
-   components' SIGNALS and in turn call methods on the SpectrumView 
-   implementation objects.
- 
-    @author Dennis Mikkelson 
-    @date   2012-04-03 
-     
+    SpectrumView.  It basically provides SLOTS that are called by the GUI
+    components' SIGNALS and in turn call methods on the SpectrumView
+    implementation objects.
+
+    @author Dennis Mikkelson
+    @date   2012-04-03
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -41,8 +41,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -51,7 +51,6 @@ namespace MantidQt
 namespace SpectrumView
 {
 
-
 class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SVConnections: public QWidget
 {
   Q_OBJECT
@@ -60,63 +59,66 @@ public:
 
   /// Construct the object that links the GUI components to the other specifed
   /// higher level objects.
-  SVConnections( Ui_SpectrumViewer* ui, 
-                 SpectrumView*     spectrum_view,
-                 SpectrumDisplay*  spectrum_display,
-                 GraphDisplay*  h_graph_display,
-                 GraphDisplay*  v_graph_display );
+  SVConnections( Ui_SpectrumViewer* ui,
+                 SpectrumView*      spectrumView,
+                 SpectrumDisplay*   spectrumDisplay,
+                 GraphDisplay*      hGraphDisplay,
+                 GraphDisplay*      vGraphDisplay );
 
   ~SVConnections();
 
   /// Set the pix map that shows the color scale from the specified color maps
-  void ShowColorScale( std::vector<QRgb> & positive_color_table,
-                       std::vector<QRgb> & negative_color_table );
+  void showColorScale( std::vector<QRgb> & positiveColorTable,
+                       std::vector<QRgb> & negativeColorTable );
 
 public slots:
-  void close_viewer();
-  void toggle_Hscroll();
-  void toggle_Vscroll();
-  void image_horizontal_range_changed();
-  void graph_range_changed();
-  void v_scroll_bar_moved();
-  void h_scroll_bar_moved();
-  void imageSplitter_moved();
-  void imagePicker_moved(const QPoint &point);
-  void h_graphPicker_moved(const QPoint &point);
-  void v_graphPicker_moved(const QPoint & point);
-  void intensity_slider_moved();
-  void heat_color_scale();
-  void gray_color_scale();
-  void negative_gray_color_scale();
-  void green_yellow_color_scale();
-  void rainbow_color_scale();
-  void optimal_color_scale();
-  void multi_color_scale();
-  void spectrum_color_scale();
-  void load_color_map();
-  void online_help_slot();
- 
+  void closeViewer();
+  void toggleHScroll();
+  void toggleVScroll();
+  void imageHorizontalRangeChanged();
+  void graphRangeChanged();
+  void scrollBarMoved();
+  void imageSplitterMoved();
+  void vgraphSplitterMoved();
+  void imagePickerMoved(const QPoint &point);
+  void hGraphPickerMoved(const QPoint &point);
+  void vGraphPickerMoved(const QPoint &point);
+  void intensitySliderMoved();
+  void loadColorMap();
+  void openOnlineHelp();
+
+  void heatColorScale();
+  void grayColorScale();
+  void negativeGrayColorScale();
+  void greenYellowColorScale();
+  void rainbowColorScale();
+  void optimalColorScale();
+  void multiColorScale();
+  void spectrumColorScale();
+
 private:
   /// Event filter for mouse wheel capture
   bool eventFilter(QObject *object, QEvent *event);
 
-  Ui_SpectrumViewer*  sv_ui;
-  SpectrumView*       sv_main_window;
-  SpectrumDisplay*    spectrum_display;
-  GraphDisplay*    h_graph_display;
-  GraphDisplay*    v_graph_display;
-  TrackingPicker*  image_picker;
-  TrackingPicker*  h_graph_picker;
-  TrackingPicker*  v_graph_picker;
-  QActionGroup*    color_group;
+  Ui_SpectrumViewer*  m_svUI;
+  SpectrumView*       m_svMainWindow;
+  SpectrumDisplay*    m_spectrumDisplay;
+  GraphDisplay*       m_hGraphDisplay;
+  GraphDisplay*       m_vGraphDisplay;
+  TrackingPicker*     m_imagePicker;
+  TrackingPicker*     m_hGraphPicker;
+  TrackingPicker*     m_vGraphPicker;
+  QActionGroup*       m_colorGroup;
+
   /// Last known cursor position in the data (x-direction).
-  int m_picker_x;
+  int m_pickerX;
+
   /// Last known cursor position in the data (y-direction).
-  int m_picker_y;
+  int m_pickerY;
 
 };
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif  // SV_CONNECTIONS_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SVUtils.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SVUtils.h
index 7e26f2a28f1d93755f15a9f2ba450e09577bbbdb..22eb2fb1fac07060b6e3953a11b3cf8f2286d79d 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SVUtils.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SVUtils.h
@@ -6,16 +6,16 @@
 #include "MantidQtSpectrumViewer/DllOptionSV.h"
 
 /**
-    @class SVUtils 
-  
-      This class has static methods that do various basic calculations 
+    @class SVUtils
+
+    This class has static methods that do various basic calculations
     needed by other parts of the SpectrumView package.
- 
-    @author Dennis Mikkelson 
-    @date   2012-04-03 
-     
+
+    @author Dennis Mikkelson
+    @date   2012-04-03
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -30,8 +30,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -40,20 +40,13 @@ namespace MantidQt
 namespace SpectrumView
 {
 
-
 class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SVUtils
 {
   public:
-
-    /// Get the double value stored in a string, if possible 
-    static bool StringToDouble( std::string  text,
-                                double      &value );
-                                 
-
     /// Get a formatted string representation of a double
-    static void Format( int            width, 
-                        int            precision, 
-                        double         value, 
+    static void Format( int            width,
+                        int            precision,
+                        double         value,
                         std::string  & str );
 
     /// push a name, value pair onto a vector of strings
@@ -63,7 +56,7 @@ class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SVUtils
                                      double                      value,
                                      std::vector<std::string>  & list );
 
-    /// find a non-degenerate interval containing all the specified values 
+    /// find a non-degenerate interval containing all the specified values
     static bool FindValidInterval( const QVector<double>  & values,
                                          double           & min,
                                          double           & max );
@@ -84,31 +77,31 @@ class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SVUtils
     static bool Interpolate( double   min,
                              double   max,
                              double   val,
-                             double   new_min,
-                             double   new_max,
-                             double & new_val );
+                             double   newMin,
+                             double   newMax,
+                             double & newVal );
 
     /// Find the value in [new_min,new_max] on a logarithmic scale that
-    /// would correspond to the point val on a linear scale on [min,max]. 
+    /// would correspond to the point val on a linear scale on [min,max].
     static bool LogInterpolate( double   min,
                                 double   max,
                                 double   val,
-                                double   new_min,
-                                double   new_max,
-                                double & new_val );
+                                double   newMin,
+                                double   newMax,
+                                double & newVal );
 
     /// adjust the values defining a subinterval to match the boundaries of
     /// the global data. (Currently only for uniformly spaced bins.)
-    static bool CalculateInterval( double   global_min,
-                                   double   global_max,
-                                   size_t   global_steps,
-                                   size_t & first_index,
+    static bool CalculateInterval( double   globalMin,
+                                   double   globalMax,
+                                   size_t   globalSteps,
+                                   size_t & firstIndex,
                                    double & min,
                                    double & max,
                                    size_t & steps );
 };
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif   // SV_UTILS_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SliderHandler.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SliderHandler.h
index c4e7b2199168301f87329ad567d739f3b837c137..95531114d6c2d0e47aaa6b88ea3927d0f0a0da58 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SliderHandler.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SliderHandler.h
@@ -9,16 +9,16 @@
 #include "MantidQtSpectrumViewer/DllOptionSV.h"
 
 /**
-    @class SliderHandler 
-  
-      This manages the horizontal and vertical scroll bars for the
-    SpectrumView data viewer. 
- 
-    @author Dennis Mikkelson 
-    @date   2012-04-03 
-     
+    @class SliderHandler
+
+    This manages the horizontal and vertical scroll bars for the
+    SpectrumView data viewer.
+
+    @author Dennis Mikkelson
+    @date   2012-04-03
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -33,8 +33,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -43,45 +43,48 @@ namespace MantidQt
 namespace SpectrumView
 {
 
-
 class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SliderHandler : public ISliderHandler
 {
   public:
 
     /// Construct object to manage image scrollbars from the specified UI
-    SliderHandler( Ui_SpectrumViewer* sv_ui );
+    SliderHandler( Ui_SpectrumViewer* svUI );
 
     /// Configure the image scrollbars for the specified data and drawing area
-    void ConfigureSliders( QRect            draw_area, 
-                           SpectrumDataSource* data_source );
+    void configureSliders( QRect drawArea,
+                           SpectrumDataSource_sptr dataSource );
+
+    /// Configure the image scrollbars for the specified drawing area
+    void reConfigureSliders( QRect drawArea,
+                             SpectrumDataSource_sptr dataSource );
 
     /// Configure the horizontal scrollbar to cover the specified range
-    void ConfigureHSlider( int         n_data_steps, 
-                           int         n_pixels );
+    void configureHSlider( int nDataSteps,
+                           int nPixels );
 
     /// Return true if the image horizontal scrollbar is enabled.
-    bool HSliderOn();
+    bool hSliderOn();
 
     /// Return true if the image vertical scrollbar is enabled.
-    bool VSliderOn();
+    bool vSliderOn();
 
     /// Get the range of columns to display in the image.
-    void GetHSliderInterval( int &x_min, int &x_max );
+    void getHSliderInterval( int &xMin, int &xMax );
 
     /// Get the range of rows to display in the image.
-    void GetVSliderInterval( int &y_min, int &y_max );
+    void getVSliderInterval( int &yMin, int &yMax );
 
   private:
     /// Configure the specified scrollbar to cover the specified range
-    void ConfigureSlider( QScrollBar* scroll_bar, 
-                          int         n_data_steps,
-                          int         n_pixels,
+    void configureSlider( QScrollBar* scrollBar,
+                          int         nDataSteps,
+                          int         nPixels,
                           int         val );
 
-    Ui_SpectrumViewer*   sv_ui;
+    Ui_SpectrumViewer* m_svUI;
 };
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif // SLIDER_HANDLER_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumDataSource.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumDataSource.h
index d4b8bd84063e5e941da0c7c0309a143d8fef6aa8..c5899cd1de514f3d93d342b48eb6fa0590666446 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumDataSource.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumDataSource.h
@@ -10,16 +10,16 @@
 #include "MantidQtSpectrumViewer/DllOptionSV.h"
 
 /**
-    @class SpectrumDataSource 
-  
-       This class is an abstract base class for classes that can provide 
+    @class SpectrumDataSource
+
+    This class is an abstract base class for classes that can provide
     data to be displayed in an SpectrumView data viewer.
- 
-    @author Dennis Mikkelson 
-    @date   2012-04-03 
-     
+
+    @author Dennis Mikkelson
+    @date   2012-04-03
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -34,8 +34,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -44,15 +44,14 @@ namespace MantidQt
 namespace SpectrumView
 {
 
-
 class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SpectrumDataSource
 {
   public:
 
-    /// construct data source with specified total range and data size
-    SpectrumDataSource( double total_xmin, double total_xmax,
-			double total_ymin, double total_ymax,
-			size_t total_rows, size_t total_cols );
+    /// Construct data source with specified total range and data size
+    SpectrumDataSource( double totalXmin, double totalXmax,
+                        double totalYmin, double totalYmax,
+                        size_t totalRows, size_t totalCols );
 
     virtual ~SpectrumDataSource();
 
@@ -60,63 +59,68 @@ class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SpectrumDataSource
                          const boost::shared_ptr<Mantid::API::Workspace> ws) = 0;
 
     /// Get the smallest 'x' value covered by the data
-    virtual double GetXMin();
+    virtual double getXMin();
 
     /// Get the largest 'x' value covered by the data
-    virtual double GetXMax();
+    virtual double getXMax();
 
     /// Get the smallest 'y' value covered by the data
-    virtual double GetYMin();
+    virtual double getYMin();
 
     /// Get the largest 'y' value covered by the data
-    virtual double GetYMax();
+    virtual double getYMax();
 
     /// Get the total number of rows of data
-    virtual size_t GetNRows();
+    virtual size_t getNRows();
 
     /// Get the total number of columns of data
-    virtual size_t GetNCols();
+    virtual size_t getNCols();
 
     /// Clamp x to the interval of x-values covered by this DataSource
-    virtual void RestrictX( double & x );
+    virtual void restrictX( double & x );
 
     /// Clamp y to the interval of y-values covered by this DataSource
-    virtual void RestrictY( double & y );
+    virtual void restrictY( double & y );
 
     /// Clamp row to a valid row number for this DataSource
-    virtual void RestrictRow( int & row );
+    virtual void restrictRow( int & row );
 
     /// Clamp col to a valid column number for this dataSource
-    virtual void RestrictCol( int & col );
+    virtual void restrictCol( int & col );
 
     /// Get a DataArray roughly spaning the specified rectangle.  NOTE: The
-    /// actual size and number of steps returned in the DataArray will be  
+    /// actual size and number of steps returned in the DataArray will be
     /// adjusted to match the underlying data.
-    virtual DataArray* GetDataArray( double  xmin,
-                                     double  xmax,
-                                     double  ymin,
-                                     double  ymax,
-                                     size_t  n_rows,
-                                     size_t  n_cols,
-                                     bool    is_log_x ) = 0;
+    virtual DataArray_const_sptr getDataArray( double  xMin,
+                                               double  xMax,
+                                               double  yMin,
+                                               double  yMax,
+                                               size_t  nRows,
+                                               size_t  nCols,
+                                               bool    isLogX ) = 0;
 
     /// Convenience method to get data covering the full range at max resolution
-    virtual DataArray* GetDataArray( bool is_log_x );
+    virtual DataArray_const_sptr getDataArray( bool is_log_x );
 
     /// Get list of pairs of strings with info about the data at location x, y
-    virtual void GetInfoList( double x, 
+    virtual void getInfoList( double x,
                               double y,
                               std::vector<std::string> &list ) = 0;
+
   protected:
-    double total_xmin;
-    double total_xmax;
-    double total_ymin;
-    double total_ymax;
-    size_t total_rows;
-    size_t total_cols;
+    double m_totalXMin;
+    double m_totalXMax;
+    double m_totalYMin;
+    double m_totalYMax;
+    size_t m_totalRows;
+    size_t m_totalCols;
+
 };
 
+typedef boost::shared_ptr<SpectrumDataSource> SpectrumDataSource_sptr;
+typedef boost::shared_ptr<const SpectrumDataSource> SpectrumDataSource_const_sptr;
+
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif // SPECTRUM_DATA_SOURCE_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumDisplay.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumDisplay.h
index 1023476010caa50bd15e243e1961fb116b91301a..6a464403e7f7009b661309ae5fd62c51c3b1be2e 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumDisplay.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumDisplay.h
@@ -15,16 +15,16 @@
 #include "MantidQtSpectrumViewer/DllOptionSV.h"
 
 /**
-    @class SpectrumDisplay 
-  
+    @class SpectrumDisplay
+
     This class provides the image display and coordinates the image and
     graph displays for the SpectrumView data viewer.
- 
-    @author Dennis Mikkelson 
-    @date   2012-04-03 
-     
+
+    @author Dennis Mikkelson
+    @date   2012-04-03
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -39,8 +39,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -49,18 +49,17 @@ namespace MantidQt
 namespace SpectrumView
 {
 
-
 class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SpectrumDisplay
 {
   public:
 
-     /// Make an SpectrumDisplay to display with the given widgets and controls 
-     SpectrumDisplay( QwtPlot*       spectrum_plot,
-                   ISliderHandler* slider_handler,
-                   IRangeHandler*  range_handler,
-                   GraphDisplay*  h_graph,
-                   GraphDisplay*  v_graph,
-                   QTableWidget*  table_widget );
+     /// Make an SpectrumDisplay to display with the given widgets and controls
+     SpectrumDisplay( QwtPlot*        spectrumPlot,
+                      ISliderHandler* sliderHandler,
+                      IRangeHandler*  rangeHandler,
+                      GraphDisplay*   hGraph,
+                      GraphDisplay*   vGraph,
+                      QTableWidget*   tableWidget );
 
      virtual ~SpectrumDisplay();
 
@@ -71,72 +70,89 @@ class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SpectrumDisplay
      void setupSpectrumPlotItem();
 
      /// Set the source of the image data and information for the table
-     void SetDataSource( SpectrumDataSource* data_source );
+     void setDataSource( SpectrumDataSource_sptr dataSource );
 
      /// Rebuild the scroll bars and image due to change of xmin, xmax, step
-     void UpdateRange();
+     void updateRange();
+
+     /// Updates scroll bars when window is resized
+     void handleResize();
 
      /// Rebuild image from data source, due to resize or scroll bar movement
-     void UpdateImage();
+     void updateImage();
 
      /// Change the color tables used to map intensity to color
-     void SetColorScales( std::vector<QRgb> & positive_color_table,
-                          std::vector<QRgb> & negative_color_table );
+     void setColorScales( std::vector<QRgb> & positiveColorTable,
+                          std::vector<QRgb> & negativeColorTable );
 
      /// Change the control parameter (0...100) used to brighten the image
-     void SetIntensity( double control_parameter );
-   
+     void setIntensity( double controlParameter );
+
      /// Record the point that the user is currently pointing at with the mouse
-     virtual QPair<double,double> SetPointedAtPoint( QPoint point, int mouseClick = 2 );
+     virtual QPair<double,double> setPointedAtPoint( QPoint point, int mouseClick = 2 );
 
      /// Set horizontal graph wit data from the array at the specified y value
-     void SetHGraph( double y );
+     void setHGraph( double y );
 
      /// Set vertical graph with data from the array at the specified x value
-     void SetVGraph( double x );
+     void setVGraph( double x );
+
+     /// Show information about the point (x, y) on the image in the table
+     std::vector<std::string> showInfoList( double x, double y );
+
+     /// Gets a point on the graph area for a set of axis values
+     QPoint getPlotTransform( QPair<double, double> values );
+
+     /// Gets a set of axis values for a point on the graph area
+     QPair<double, double> getPlotInvTransform( QPoint point );
+
+     // Gets the X value pointed at
+     double getPointedAtX();
+
+     // Gets the Y value pointed at
+     double getPointedAtY();
 
   protected:
-     SpectrumPlotItem*       spectrum_plot_item;
+     SpectrumPlotItem*    m_spectrumPlotItem;
 
   private:
      /// Check if the DataSource has been changed under us
-     bool DataSourceRangeChanged();
+     bool dataSourceRangeChanged();
 
      /// Get the rectangle currently covered by the image in pixel coordinates
-     void GetDisplayRectangle( QRect &rect );
+     void getDisplayRectangle( QRect &rect );
 
-     /// Show information about the point (x, y) on the image in the table
-     void ShowInfoList( double x, double y );
+     std::vector<QRgb>    m_positiveColorTable;
+     std::vector<QRgb>    m_negativeColorTable;
+     std::vector<double>  m_intensityTable;
+
+     SpectrumDataSource_sptr m_dataSource;
+     DataArray_const_sptr m_dataArray;
 
-     std::vector<QRgb>    positive_color_table;
-     std::vector<QRgb>    negative_color_table;
-     std::vector<double>  intensity_table;
+     QwtPlot*             m_spectrumPlot;
 
-     SpectrumDataSource*     data_source;
-     DataArray*           data_array;
+     ISliderHandler*      m_sliderHandler;
+     IRangeHandler*       m_rangeHandler;
 
-     QwtPlot*             spectrum_plot;
+     GraphDisplay*        m_hGraphDisplay;
+     GraphDisplay*        m_vGraphDisplay;
 
-     ISliderHandler*       slider_handler;
-     IRangeHandler*        range_handler;
+     double               m_pointedAtX;
+     double               m_pointedAtY;
 
-     GraphDisplay*        h_graph_display;
-     GraphDisplay*        v_graph_display;
+     /* Save current total data range */
+     /* so we can reset the data source */
+     /* if we detect a change of range */
+     QTableWidget*        m_imageTable;
 
-     double               pointed_at_x;
-     double               pointed_at_y;
+     double               m_totalYMin;
+     double               m_totalYMax;
+     double               m_totalXMin;
+     double               m_totalXMax;
 
-     QTableWidget*        image_table;
-                                           // save current total data range
-                                           // so we can reset the data source
-                                           // if we detect a change of range
-     double               total_y_min;
-     double               total_y_max;
-     double               total_x_min;
-     double               total_x_max;
 };
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif   // SPECTRUM_DISPLAY_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumPlotItem.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumPlotItem.h
index 56551b6b17571b4bccfa536e786879ffb19d334c..22ae48d89de8c933db14f2e2ea20102733f6dc8e 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumPlotItem.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumPlotItem.h
@@ -11,16 +11,16 @@
 #include "MantidQtSpectrumViewer/DllOptionSV.h"
 
 /**
-    @class SpectrumPlotItem 
-  
-       This class is responsible for actually drawing the image data onto
+    @class SpectrumPlotItem
+
+    This class is responsible for actually drawing the image data onto
     a QwtPlot for the SpectrumView data viewer.
- 
-    @author Dennis Mikkelson 
-    @date   2012-04-03 
-     
+
+    @author Dennis Mikkelson
+    @date   2012-04-03
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -35,8 +35,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -45,47 +45,46 @@ namespace MantidQt
 namespace SpectrumView
 {
 
-
 class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SpectrumPlotItem : public QwtPlotItem
 {
 
 public:
-  
+
   /// Construct basic plot item with NO data to plot.
   SpectrumPlotItem();
 
   virtual ~SpectrumPlotItem();
-  
+
   /// Specify the data to be plotted and the color table to use
-  void SetData( DataArray* data_array, 
-                std::vector<QRgb>* positive_color_table,
-                std::vector<QRgb>* negative_color_table );
+  void setData( DataArray_const_sptr dataArray,
+                std::vector<QRgb>* positiveColorTable,
+                std::vector<QRgb>* negativeColorTable );
 
   /// Set a non-linear lookup table to scale data values before mapping to color
-  void SetIntensityTable( std::vector<double>*  intensity_table );
+  void setIntensityTable( std::vector<double>*  intensityTable );
 
   /// Draw the image (this is called by QWT and must not be called directly.)
   virtual void draw(      QPainter    * painter,
-                    const QwtScaleMap & xMap, 
+                    const QwtScaleMap & xMap,
                     const QwtScaleMap & yMap,
                     const QRect       & canvasRect) const;
 
 protected:
-  int                   buffer_ID;        // set to 0 or 1 to select buffer 
-  DataArray*            data_array_0;     // these provide double buffers
-  DataArray*            data_array_1;     // for the float data.
+  int m_bufferID;       // set to 0 or 1 to select buffer
+  DataArray_const_sptr m_dataArray0;     // these provide double buffers
+  DataArray_const_sptr m_dataArray1;     // for the float data.
 
 private:
-                                          // This class just uses the following
-                                          // but they are created and deleted
-                                          // in the upper level classes
-  std::vector<QRgb>*    positive_color_table;
-  std::vector<QRgb>*    negative_color_table;
-  std::vector<double>*  intensity_table;
+  /* This class just uses the following */
+  /* but they are created and deleted */
+  /* in the upper level classes */
+  std::vector<QRgb>   * m_positiveColorTable;
+  std::vector<QRgb>   * m_negativeColorTable;
+  std::vector<double> * m_intensityTable;
 
 };
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif  // SPECTRUM_PLOT_ITEM_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumView.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumView.h
index 346a1eddf1696aa76f30898df726307192ef47b7..4fbfa10fa6d0333ba2f10b1f325bf0006c65a092 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumView.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumView.h
@@ -9,20 +9,21 @@
 #include "MantidQtAPI/WorkspaceObserver.h"
 #include "MantidQtSpectrumViewer/GraphDisplay.h"
 #include "MantidQtSpectrumViewer/SpectrumDataSource.h"
+#include "MantidQtSpectrumViewer/MatrixWSDataSource.h"
 #include "MantidQtSpectrumViewer/DllOptionSV.h"
 
 /**
-    @class SpectrumView 
-  
-      This is the QMainWindow for the SpectrumView data viewer.  Data is
+    @class SpectrumView
+
+    This is the QMainWindow for the SpectrumView data viewer.  Data is
     displayed in an SpectrumView, by constructing the SpectrumView object and
     specifying a particular data source.
- 
-    @author Dennis Mikkelson 
-    @date   2012-04-03 
-     
+
+    @author Dennis Mikkelson
+    @date   2012-04-03
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -37,14 +38,14 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
 namespace Ui
 {
-class SpectrumViewer; // forward declaration of ui file
+class SpectrumViewer; // Forward declaration of UI file
 }
 
 namespace MantidQt
@@ -52,20 +53,21 @@ namespace MantidQt
 namespace SpectrumView
 {
 
-// forward declarations
+// Forward declarations
 class EModeHandler;
 class RangeHandler;
 class SliderHandler;
 class SpectrumDisplay;
 class SVConnections;
+class MatrixWSDataSource;
 
 class EXPORT_OPT_MANTIDQT_SPECTRUMVIEWER SpectrumView : public QMainWindow, public MantidQt::API::WorkspaceObserver
 {
   Q_OBJECT
-public:
 
-  /// Construct an SpectrumView to display data from the specified data source
-  SpectrumView( QWidget * parent = 0);
+public:
+  /// Construct a SpectrumView to display data from the specified data source
+  SpectrumView( QWidget * parent = 0 );
 
   ~SpectrumView();
   void renderWorkspace(Mantid::API::MatrixWorkspace_const_sptr wksp);
@@ -75,25 +77,25 @@ protected slots:
   void updateWorkspace();
 
 protected:
-  void preDeleteHandle(const std::string& wsName,const boost::shared_ptr<Mantid::API::Workspace> ws);
-  void afterReplaceHandle(const std::string& wsName,const boost::shared_ptr<Mantid::API::Workspace> ws);
+  virtual void resizeEvent(QResizeEvent * event);
+  void preDeleteHandle(const std::string& wsName, const boost::shared_ptr<Mantid::API::Workspace> ws);
+  void afterReplaceHandle(const std::string& wsName, const boost::shared_ptr<Mantid::API::Workspace> ws);
 
 private:
-  void init(SpectrumDataSource* data_source);
-  void updateHandlers(SpectrumDataSource* data_source);
-  GraphDisplay*    h_graph;
-  GraphDisplay*    v_graph;
-
-  // keep void pointers to the following objects, to avoid having to
-  // include ui_SpectrumView.h, which disappears by the time MantidPlot is
-  // being built.  We need the pointers so we can delete them in the
-  // destructor.
-  Ui::SpectrumViewer *m_ui; ///< Ui_SpectrumViewer*
-  SliderHandler      *m_slider_handler;   // SliderHandler*
-  RangeHandler       *m_range_handler;    // RangeHandler*
-  SpectrumDisplay    *m_spectrum_display; // SpectrumDisplay*
-  SVConnections      *m_sv_connections;   // SVConnections*
-  EModeHandler       *m_emode_handler;    // EModeHandler*
+  void init(SpectrumDataSource_sptr dataSource);
+  void updateHandlers(SpectrumDataSource_sptr dataSource);
+
+  GraphDisplay* m_hGraph;
+  GraphDisplay* m_vGraph;
+
+  MatrixWSDataSource_sptr m_dataSource;
+
+  Ui::SpectrumViewer *m_ui;
+  SliderHandler      *m_sliderHandler;
+  RangeHandler       *m_rangeHandler;
+  SpectrumDisplay    *m_spectrumDisplay;
+  SVConnections      *m_svConnections;
+  EModeHandler       *m_emodeHandler;
 
 signals:
   void needToClose();
@@ -101,6 +103,6 @@ signals:
 };
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif   // SPECTRUM_VIEW_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumView.ui b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumView.ui
index dd3afc5470b13079fb94d1d1f63daf5027df7078..34c4368a443fa1a5755b8ccd702875c7fc0869da 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumView.ui
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/SpectrumView.ui
@@ -21,16 +21,41 @@
        <enum>Qt::Horizontal</enum>
       </property>
       <widget class="QSplitter" name="vgraphSplitter">
+       <property name="enabled">
+        <bool>true</bool>
+       </property>
        <property name="orientation">
         <enum>Qt::Vertical</enum>
        </property>
-       <widget class="QwtPlot" name="v_graphPlot"/>
-       <widget class="QLabel" name="label_8">
-        <property name="text">
-         <string>Vertical Graph Info</string>
+       <widget class="QwtPlot" name="v_graphPlot">
+        <property name="enabled">
+         <bool>true</bool>
+        </property>
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
         </property>
        </widget>
-       <widget class="QTableWidget" name="v_graph_table"/>
+       <widget class="QWidget" name="verticalLayoutWidget">
+        <layout class="QVBoxLayout" name="v_graphInfo">
+         <item>
+          <widget class="QLabel" name="v_graphInfoLabel">
+           <property name="text">
+            <string>Vertical Graph Info</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QTableWidget" name="v_graph_table">
+           <property name="enabled">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
       </widget>
       <widget class="QSplitter" name="imageSplitter">
        <property name="orientation">
@@ -57,7 +82,29 @@
          </item>
         </layout>
        </widget>
-       <widget class="QwtPlot" name="h_graphPlot"/>
+       <widget class="QWidget" name="layoutWidget2">
+        <layout class="QHBoxLayout" name="h_graphLayout">
+         <item>
+          <widget class="QwtPlot" name="h_graphPlot"/>
+         </item>
+         <item>
+          <spacer name="h_scrollBarSpace">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeType">
+            <enum>QSizePolicy::Fixed</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>16</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </widget>
       </widget>
       <widget class="QWidget" name="layoutWidget_grid4">
        <layout class="QGridLayout" name="gridLayout_4">
@@ -143,23 +190,37 @@
         </item>
         <item row="7" column="0">
          <widget class="QLabel" name="table_label">
+          <property name="enabled">
+           <bool>true</bool>
+          </property>
           <property name="text">
            <string>Image Info</string>
           </property>
          </widget>
         </item>
         <item row="8" column="0">
-         <widget class="QTableWidget" name="image_table"/>
+         <widget class="QTableWidget" name="image_table">
+          <property name="enabled">
+           <bool>true</bool>
+          </property>
+         </widget>
         </item>
         <item row="9" column="0">
          <widget class="QLabel" name="label">
+          <property name="enabled">
+           <bool>true</bool>
+          </property>
           <property name="text">
            <string>Horizontal Graph Info</string>
           </property>
          </widget>
         </item>
         <item row="10" column="0">
-         <widget class="QTableWidget" name="h_graph_table"/>
+         <widget class="QTableWidget" name="h_graph_table">
+          <property name="enabled">
+           <bool>true</bool>
+          </property>
+         </widget>
         </item>
         <item row="5" column="0">
          <widget class="QComboBox" name="emode_combo_box">
@@ -210,7 +271,7 @@
      <x>0</x>
      <y>0</y>
      <width>1251</width>
-     <height>26</height>
+     <height>20</height>
     </rect>
    </property>
    <widget class="QMenu" name="menuFile">
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/TrackingPicker.h b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/TrackingPicker.h
index f4703fdcb9649a14ddaf5e61eebc7d4900e43879..9139d1569aee437ec6178fb4ea8dd0fbd6548f24 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/TrackingPicker.h
+++ b/Code/Mantid/MantidQt/SpectrumViewer/inc/MantidQtSpectrumViewer/TrackingPicker.h
@@ -5,17 +5,17 @@
 #include <qwt_plot_canvas.h>
 #include "MantidQtSpectrumViewer/DllOptionSV.h"
 
-/** 
-   @class TrackingPicker
-
-      This class is a QwtPlotPicker that will emit a signal whenever the 
-    mouse is moved.  It was adapted from the SliceViewer's CustomPicker 
-  
-    @author Dennis Mikkelson 
-    @date   2012-04-03 
-     
+/**
+    @class TrackingPicker
+
+    This class is a QwtPlotPicker that will emit a signal whenever the
+    mouse is moved.  It was adapted from the SliceViewer's CustomPicker
+
+    @author Dennis Mikkelson
+    @date   2012-04-03
+
     Copyright © 2012 ORNL, STFC Rutherford Appleton Laboratories
-  
+
     This file is part of Mantid.
 
     Mantid is free software; you can redistribute it and/or modify
@@ -30,8 +30,8 @@
 
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    
-    Code Documentation is available at 
+
+    Code Documentation is available at
                  <http://doxygen.mantidproject.org>
  */
 
@@ -52,7 +52,7 @@ public:
   /// Disable (or enable) position readout at cursor position, even if
   /// tracking is ON.  Tracking MUST be on for the mouseMoved signal to be
   /// emitted.
-  void HideReadout( bool hide );
+  void hideReadout( bool hide );
 
 signals:
   /// This signal will be emitted for each mouse moved event
@@ -65,11 +65,11 @@ protected:
   QwtText trackerText( const QwtDoublePoint & pos) const;
 
 private:
-  bool hide_readout;
+  bool m_hideReadout;
 
 };
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
 
 #endif  // TRACKING_PICKER_H
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/ArrayDataSource.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/ArrayDataSource.cpp
index ac905e0bbea5b78ca0eea7ab42cfbabc7b07dbef..f07a4d1fff274132afedc075123d55301a0956df 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/ArrayDataSource.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/ArrayDataSource.cpp
@@ -16,39 +16,38 @@ namespace SpectrumView
  * when this class is deleted.  The calling code should not change the
  * values in the array or delete it!
  *
- * @param total_xmin   The x-coordinate at the left edge of the first column
- *                     of data. 
- * @param total_xmax   The x-coordinate at the right edge of the last column
- *                     of data. 
- * @param total_ymin   The y-coordinate at the bottom edge of bottom row of
+ * @param m_totalXMin   The x-coordinate at the left edge of the first column
+ *                     of data.
+ * @param m_totalXMax   The x-coordinate at the right edge of the last column
+ *                     of data.
+ * @param m_totalYMin   The y-coordinate at the bottom edge of bottom row of
  *                     the data region.
- * @param total_ymax   The y-coordinate at the top edge of the top row of
+ * @param m_totalYMax   The y-coordinate at the top edge of the top row of
  *                     the data region
- * @param total_rows   The number of rows the data values are divided into.
- * @param total_cols   The number of columns the test values are divided 
+ * @param m_totalRows   The number of rows the data values are divided into.
+ * @param m_totalCols   The number of columns the test values are divided
  *                     into.
  * @param data         The list of floats holding the data to be displayed,
- *                     stored in row major order.                    
+ *                     stored in row major order.
  */
-ArrayDataSource::ArrayDataSource( double total_xmin, double total_xmax,
-                                  double total_ymin, double total_ymax,
-                                  size_t total_rows, size_t total_cols,
-                                  float* data )
-                :SpectrumDataSource( total_xmin, total_xmax,
-				     total_ymin, total_ymax,
-				     total_rows, total_cols )
+ArrayDataSource::ArrayDataSource( double m_totalXMin, double m_totalXMax,
+                                  double m_totalYMin, double m_totalYMax,
+                                  size_t m_totalRows, size_t m_totalCols,
+                                  std::vector<float> data ) :
+  SpectrumDataSource( m_totalXMin, m_totalXMax,
+                      m_totalYMin, m_totalYMax,
+                      m_totalRows, m_totalCols ),
+  m_data(data)
 {
-  this->data       = data;
 }
 
 
 ArrayDataSource::~ArrayDataSource()
 {
-  delete[] data;
 }
 
 bool ArrayDataSource::hasData(const std::string& wsName,
-                     const boost::shared_ptr<Mantid::API::Workspace> ws)
+                              const boost::shared_ptr<Mantid::API::Workspace> ws)
 {
   UNUSED_ARG(wsName);
   UNUSED_ARG(ws);
@@ -57,66 +56,73 @@ bool ArrayDataSource::hasData(const std::string& wsName,
 
 /**
  * Get a data array covering the specified range of data, at the specified
- * resolution.  NOTE: The calling code is responsible for deleting the 
+ * resolution.  NOTE: The calling code is responsible for deleting the
  * DataArray that is returned, when it is no longer needed.
  *
- * @param xmin      Left edge of region to be covered.
- * @param xmax      Right edge of region to be covered.
- * @param ymin      Bottom edge of region to be covered.
- * @param ymax      Top edge of region to be covered.
- * @param n_rows    Number of rows to return. If the number of rows is less
- *                  than the actual number of data rows in [ymin,ymax], the 
- *                  data will be subsampled, and only the specified number 
+ * @param xMin      Left edge of region to be covered.
+ * @param xMax      Right edge of region to be covered.
+ * @param yMin      Bottom edge of region to be covered.
+ * @param yMax      Top edge of region to be covered.
+ * @param nRows    Number of rows to return. If the number of rows is less
+ *                  than the actual number of data rows in [yMin,yMax], the
+ *                  data will be subsampled, and only the specified number
  *                  of rows will be returned.
- * @param n_cols    The event data will be rebinned using the specified
+ * @param nCols    The event data will be rebinned using the specified
  *                  number of colums.
- * @param is_log_x  Flag indicating whether or not the data should be
+ * @param isLogX  Flag indicating whether or not the data should be
  *                  binned logarithmically in the X-direction.  This
  *                  DataSource does not support rebinning to a log axis, so
- *                  the DataArray is always returned with is_log_x = false. 
+ *                  the DataArray is always returned with isLogX = false.
  */
-DataArray * ArrayDataSource::GetDataArray( double xmin,   double  xmax,
-                                           double ymin,   double  ymax,
-                                           size_t n_rows, size_t  n_cols,
-                                           bool   is_log_x )
+DataArray_const_sptr ArrayDataSource::getDataArray( double xMin,   double  xMax,
+                                                    double yMin,   double  yMax,
+                                                    size_t nRows,  size_t  nCols,
+                                                    bool   isLogX )
 {
-  size_t first_col;
-  SVUtils::CalculateInterval( total_xmin, total_xmax, total_cols,
-                              first_col, xmin, xmax, n_cols );
-
-  size_t first_row;
-  SVUtils::CalculateInterval( total_ymin, total_ymax, total_rows,
-                              first_row, ymin, ymax, n_rows );
-
-  float* new_data = new float[n_rows * n_cols];   // This is deleted in the
-                                                  // DataArray destructor
-
-  double x_step = (xmax - xmin) / (double)n_cols;
-  double y_step = (ymax - ymin) / (double)n_rows;
-  double d_x_index,
-         d_y_index;
-  size_t index = 0;                               // get data for middle of
-  for ( size_t row = 0; row < n_rows; row++ )     // each destination position
+  size_t firstCol;
+  SVUtils::CalculateInterval( m_totalXMin, m_totalXMax, m_totalCols,
+                              firstCol, xMin, xMax, nCols );
+
+  size_t firstRow;
+  SVUtils::CalculateInterval( m_totalYMin, m_totalYMax, m_totalRows,
+                              firstRow, yMin, yMax, nRows );
+
+  std::vector<float> newData(nRows * nCols);
+
+  double xStep = (xMax - xMin) / (double)nCols;
+  double yStep = (yMax - yMin) / (double)nRows;
+
+  double xIndex;
+  double yIndex;
+  size_t index = 0;
+
+  /* Get data for middle of */
+  /* each destination position */
+  for ( size_t row = 0; row < nRows; row++ )
   {
-    double mid_y = ymin + ((double)row + 0.5) * y_step;
-    SVUtils::Interpolate( total_ymin, total_ymax, mid_y,
-                                 0.0, (double)total_rows, d_y_index );
-    size_t source_row = (size_t)d_y_index;
-    for ( size_t col = 0; col < n_cols; col++ )
+    double midY = yMin + ((double)row + 0.5) * yStep;
+    SVUtils::Interpolate( m_totalYMin, m_totalYMax,         midY,
+                          0.0,         (double)m_totalRows, yIndex );
+
+    size_t sourceRow = (size_t)yIndex;
+    for ( size_t col = 0; col < nCols; col++ )
     {
-      double mid_x = xmin + ((double)col + 0.5) * x_step;
-      SVUtils::Interpolate( total_xmin, total_xmax, mid_x,
-                                   0.0, (double)total_cols, d_x_index );
-      size_t source_col = (size_t)d_x_index;             
-      new_data[index] = data[source_row * total_cols + source_col];
+      double midX = xMin + ((double)col + 0.5) * xStep;
+      SVUtils::Interpolate( m_totalXMin, m_totalXMax,         midX,
+                            0.0,         (double)m_totalCols, xIndex );
+
+      size_t sourceCol = (size_t)xIndex;
+
+      newData[index] = m_data[sourceRow * m_totalCols + sourceCol];
       index++;
-    } 
+    }
   }
-                                           // The calling code is responsible
-  is_log_x = false;                        // for deleting the DataArray
-  DataArray* new_data_array = new DataArray( xmin, xmax, ymin, ymax, 
-                                           is_log_x, n_rows, n_cols, new_data);
-  return new_data_array;
+
+  // The calling code is responsible for deleting the DataArray
+  isLogX = false;
+  DataArray_const_sptr newDataArray( new DataArray( xMin, xMax, yMin, yMax,
+                                           isLogX, nRows, nCols, newData) );
+  return newDataArray;
 }
 
 
@@ -125,22 +131,22 @@ DataArray * ArrayDataSource::GetDataArray( double xmin,   double  xmax,
  * NOTE: The calling code is responsible for deleting the DataArray that is
  * returned, when it is no longer needed.
  *
- * @param is_log_x  Flag indicating whether or not the data should be
- *                  binned logarithmically.  This DataSource does not 
- *                  support rebinning to a log axis, so the DataArray is 
- *                  always returned with is_log_x = false.
+ * @param isLogX  Flag indicating whether or not the data should be
+ *                binned logarithmically.  This DataSource does not
+ *                support rebinning to a log axis, so the DataArray is
+ *                always returned with isLogX = false.
  */
-DataArray * ArrayDataSource::GetDataArray( bool is_log_x )
+DataArray_const_sptr ArrayDataSource::getDataArray( bool isLogX )
 {
-  is_log_x = false;
-  return GetDataArray( total_xmin, total_xmax, total_ymin, total_ymax,
-                       total_rows, total_cols, is_log_x );
+  isLogX = false;
+  return getDataArray( m_totalXMin, m_totalXMax, m_totalYMin, m_totalYMax,
+                       m_totalRows, m_totalCols, isLogX );
 }
 
 
 /**
  * Clear the vector of strings and then add pairs of strings giving information
- * about the specified point, x, y.  The first string in a pair should 
+ * about the specified point, x, y.  The first string in a pair should
  * generally be a string describing the value being presented and the second
  * string should contain the value.
  *
@@ -148,7 +154,7 @@ DataArray * ArrayDataSource::GetDataArray( bool is_log_x )
  * @param y    The y-coordinate of the point of interest in the data.
  * @param list Vector that will be filled out with the information strings.
  */
-void ArrayDataSource::GetInfoList( double x, 
+void ArrayDataSource::getInfoList( double x,
                                    double y,
                                    std::vector<std::string> &list )
 {
@@ -159,4 +165,4 @@ void ArrayDataSource::GetInfoList( double x,
 }
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/ColorMaps.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/ColorMaps.cpp
index 7cc440bba05a42e68904b041272c60f8c3c8b6de..9b09dc5da6ff87ffbf88eb1e6993e5262301410e 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/ColorMaps.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/ColorMaps.cpp
@@ -11,17 +11,17 @@ namespace SpectrumView
 {
 
 /**
- * Get a color map of the specified type, with the specified number of 
+ * Get a color map of the specified type, with the specified number of
  * colors by interpolating between key colors.
  * @param name         The name of the color scale as listed in the
  *                     enum ColorMaps::ColorScale
- * @param n_colors     The number of colors to use when forming the 
+ * @param n_colors     The number of colors to use when forming the
  *                     color map.  The number of colors must be at least 7
  *                     for some of the constructed color maps.
- * @param color_table  Vector of colors that will be cleard and filled out 
+ * @param color_table  Vector of colors that will be cleard and filled out
  *                     with the requested color map.
  */
-void ColorMaps::GetColorMap( ColorScale          name, 
+void ColorMaps::GetColorMap( ColorScale          name,
                              size_t              n_colors,
                              std::vector<QRgb> & color_table )
 {
@@ -31,7 +31,7 @@ void ColorMaps::GetColorMap( ColorScale          name,
     double base_green[]  = { 20,   0, 127, 180, 255 };
     double base_blue[]   = { 20,   0,   0,  77, 255 };
     size_t n_base_colors = 5;
-    InterpolateColorScale( base_red, base_green, base_blue, 
+    InterpolateColorScale( base_red, base_green, base_blue,
                            n_base_colors, n_colors, color_table );
   }
   else if ( name == GRAY )
@@ -104,14 +104,14 @@ void ColorMaps::GetColorMap( ColorScale          name,
  * Get an intensity lookup table to adjust the apparent brightness of a
  * displayed image.  The lookup table makes an adjustment to the image
  * intensity similar to a gamma correction, but over a wide range.  The
- * table will be created with the specified number of entries and the 
+ * table will be created with the specified number of entries and the
  * entries will increase monotonically (but non-linearly) from 0 to 1.
  *
  * @param control_s        Control parameter between 0 and 100.  When
  *                         the parameter is at 0, the look up table is
  *                         linear.  As the parameter increases, low
  *                         intensity values will increasingly get larger
- *                         scale factors. 
+ *                         scale factors.
  * @param n_entries        The number of entries to create in the table.
  *                         This controls the resolution of the mapping and
  *                         should be quite large (10,000-100,000) to preserve
@@ -144,45 +144,45 @@ void ColorMaps::GetIntensityMap( double                control_s,
       intensity_table[i] = (double)i / (double)(n_entries - 1);
     }
   }
-  else                                   // build log-shaped correction scale 
+  else                                   // build log-shaped correction scale
   {
-                                         // first map control value 
-                                         // exponentially to make the control 
+                                         // first map control value
+                                         // exponentially to make the control
                                          // parameter act more linearly
     double s     = exp( 20.0 * control_s / MAX_CONTROL ) + 0.1;
-    double scale = 1.0 / log( s ); 
+    double scale = 1.0 / log( s );
     for ( size_t i = 0; i < n_entries - 1; i++ )
     {
-      intensity_table[i] = scale * 
+      intensity_table[i] = scale *
                        log( 1.0+((s-1.0)*(double)i) / (double)(n_entries-1) );
     }
     intensity_table[n_entries - 1] = 1.0;  // this could have been calculated
-                                           // by running the loop one step 
-                                           // further, but due to rounding 
+                                           // by running the loop one step
+                                           // further, but due to rounding
                                            // errors, it might exceed 1.
   }
 }
 
 
-  /** 
+  /**
    *  Build a color table by interpolating between a base set of colors.
    *  The "base" color arrays must all be of the same length ( the length
    *  being the number of base colors given.  The base color values must
    *  be between 0 and 255.  The arrays of base colors must be of length
    *  two or more.
-   *  The calling routine must provide red, green and blue arrays, each 
-   *  of the same length (n_colors) to hold the color table being 
-   *  constructed.  
+   *  The calling routine must provide red, green and blue arrays, each
+   *  of the same length (n_colors) to hold the color table being
+   *  constructed.
    *
    *  @param base_red       Red components of the base colors to interpolate.
    *  @param base_green     Green components of the base colors to interpolate.
    *  @param base_blue      Blue components of the base colors to interpolate.
    *  @param n_base_colors  The number of key colors that will be interpolated
-   *                        form the color table. 
+   *                        form the color table.
    *  @param n_colors       The number of colors to be created in the output
    *                        color table.
-   *  @param color_table    Vector containing n_colors qRgb colors, 
-   *                        interpolated from the specified base colors. 
+   *  @param color_table    Vector containing n_colors qRgb colors,
+   *                        interpolated from the specified base colors.
    */
 
 void ColorMaps::InterpolateColorScale( double base_red[],
@@ -195,15 +195,15 @@ void ColorMaps::InterpolateColorScale( double base_red[],
   color_table.clear();
   color_table.resize( n_colors );
                                       // first output color is first base color
-  color_table[0] = qRgb( (unsigned char)base_red[0], 
-                         (unsigned char)base_green[0], 
+  color_table[0] = qRgb( (unsigned char)base_red[0],
+                         (unsigned char)base_green[0],
                          (unsigned char)base_blue[0]  );
 
                                       // last output color is last base color
-  size_t last_out = n_colors - 1;         
+  size_t last_out = n_colors - 1;
   size_t last_in  = n_base_colors - 1;
-  color_table[last_out] = qRgb( (unsigned char)base_red[last_in],       
-                                (unsigned char)base_green[last_in],      
+  color_table[last_out] = qRgb( (unsigned char)base_red[last_in],
+                                (unsigned char)base_green[last_in],
                                 (unsigned char)base_blue[last_in]  );
 
                                        // interpolate remaining output colors
@@ -212,7 +212,7 @@ void ColorMaps::InterpolateColorScale( double base_red[],
                                       // fraction of way along output indices
     double t_out = (double)i / (double)last_out;
 
-    double float_index = t_out * (double)last_in; 
+    double float_index = t_out * (double)last_in;
                                           // corresponding "floating point"
                                           // index in array of input colors
     int base_index = (int)float_index;
@@ -229,7 +229,5 @@ void ColorMaps::InterpolateColorScale( double base_red[],
   }
 }
 
-
-
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/DataArray.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/DataArray.cpp
index 9898c991f145000fa1d8af6434f5ebe9cf2037e7..e869d8da3869e98a007efe4d1a268bce319bd6aa 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/DataArray.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/DataArray.cpp
@@ -13,123 +13,118 @@ namespace SpectrumView
 {
 
 /**
- * Construct a DataArray "wrapper" around the data and region info.  The 
+ * Construct a DataArray "wrapper" around the data and region info.  The
  * actual data must be provided in a one-dimensional array, with n_rows*n_cols
- * entries.  The data corresponds to the "real" region [xmin,xmax]X[ymin,ymax].
+ * entries.  The data corresponds to the "real" region [xMin,xMax]X[yMin,yMax].
  * Xmin must correspond to the left edge of the first column and xmax must
- * correspond to the right edge of the last column.  Simiarly, ymin must 
- * correspond to the outer edge of the first row and ymax must correspond to 
+ * correspond to the right edge of the last column.  Simiarly, ymin must
+ * correspond to the outer edge of the first row and ymax must correspond to
  * the outer edge of the last row.
  *
- * @param xmin       Left edge of data region
- * @param xmax       Right edge of data region
- * @param ymin       Bottom edge of data region
- * @param ymax       Top edge of data region
- * @param is_log_x   Flag indication whether or not the data is binned
+ * @param xMin       Left edge of data region
+ * @param xMax       Right edge of data region
+ * @param yMin       Bottom edge of data region
+ * @param yMax       Top edge of data region
+ * @param isLogX     Flag indication whether or not the data is binned
  *                   logarithmically in the 'x' direction.
- * @param n_rows     Number of rows in the data array
- * @param n_cols     Number of columns in the data array
- * @param data       Pointer to start of memory block holding the actual 
+ * @param nRows      Number of rows in the data array
+ * @param nCols      Number of columns in the data array
+ * @param data       Pointer to start of memory block holding the actual
  *                   data as a list of floats.
  */
-DataArray::DataArray( double xmin,     double xmax,
-                      double ymin,     double ymax,
-                      bool   is_log_x,
-                      size_t n_rows,   size_t n_cols,
-                      float *data )
+DataArray::DataArray( double xMin,     double xMax,
+                      double yMin,     double yMax,
+                      bool   isLogX,
+                      size_t nRows,    size_t nCols,
+                      std::vector<float> data ):
+  m_xMin(xMin), m_xMax(xMax),
+  m_yMin(yMin), m_yMax(yMax),
+  m_isLogX(isLogX),
+  m_nRows(nRows), m_nCols(nCols),
+  m_dataMin(data[0]), m_dataMax(data[0]),
+  m_data(data)
 {
-  this->xmin = xmin;
-  this->xmax = xmax;
-  this->ymin = ymin;
-  this->ymax = ymax;
-  this->is_log_x = is_log_x;
-  this->n_rows = n_rows;
-  this->n_cols = n_cols;
-  this->data = data;
-
-  data_min = data[0];
-  data_max = data[0];
   double value;
   size_t index = 0;
-  for ( size_t row = 0; row < n_rows; row++ )
-    for ( size_t col = 0; col < n_cols; col++ )
+
+  for ( size_t row = 0; row < nRows; row++ )
+  {
+    for ( size_t col = 0; col < nCols; col++ )
     {
       value = data[index];
-      if ( value < data_min )
-        data_min = value;
-      else if ( value > data_max )
-        data_max = value;
+
+      if ( value < m_dataMin )
+        m_dataMin = value;
+
+      else if ( value > m_dataMax )
+        m_dataMax = value;
+
       index++;
     }
+  }
 }
 
 DataArray::~DataArray()
 {
-//  std::cout << "DataArray destructor called" << std::endl;
-
-  if ( data )
-  {
-    delete[] data;
-  }
 }
 
 /**
  * Get the value corresponding to the left edge of the array.
  */
-double DataArray::GetXMin() const
+double DataArray::getXMin() const
 {
-  return xmin;
+  return m_xMin;
 }
 
 /**
  * Get the value corresponding to the right edge of the array.
  */
-double DataArray::GetXMax() const
+double DataArray::getXMax() const
 {
-  return xmax;
+  return m_xMax;
 }
 
 /**
  * Get the value corresponding to the bottom edge of the array (outer edge
  * of first row).
  */
-double DataArray::GetYMin() const
+double DataArray::getYMin() const
 {
-  return ymin;
+  return m_yMin;
 }
 
 /**
  * Get the value corresponding to the top edge of the array (outer edge
  * of last row).
  */
-double DataArray::GetYMax() const
+double DataArray::getYMax() const
 {
-  return ymax;
+  return m_yMax;
 }
 
 /**
  * Check if the returned array is binned logarithmically in 'x'.
  */
-bool DataArray::IsLogX() const
+bool DataArray::isLogX() const
 {
-  return is_log_x;
+  return m_isLogX;
 }
 
 /**
  * Get smallest value recorded in this DataArray
  */
-double DataArray::GetDataMin() const
+double DataArray::getDataMin() const
 {
-  return data_min;
+  return m_dataMin;
 }
 
 
 /**
  * Get largest value recorded in this DataArray
  */
-double DataArray::GetDataMax() const
+double DataArray::getDataMax() const
 {
-  return data_max;
+  return m_dataMax;
 }
 
 
@@ -137,27 +132,27 @@ double DataArray::GetDataMax() const
  * Get the actual number of rows in this DataArray
  *
  */
-size_t DataArray::GetNRows() const
+size_t DataArray::getNRows() const
 {
-  return n_rows;
+  return m_nRows;
 }
 
 
 /**
  * Get the actual number of columns in this DataArray
  */
-size_t DataArray::GetNCols() const
+size_t DataArray::getNCols() const
 {
-  return n_cols;
+  return m_nCols;
 }
 
 
 /**
  * Get the list of all values, packed in a 1-D array, in row-major order
  */
-float * DataArray::GetData() const
+std::vector<float> DataArray::getData() const
 {
-  return data;
+  return m_data;
 }
 
 
@@ -166,92 +161,73 @@ float * DataArray::GetData() const
  * value is outside of the array, a value from the edge of the array
  * will be returned.  That is, the row and column numbers are "clamped"
  * to always lie in the range of valid values.
+ *
+ * @param row Row of data to get
+ * @param col Columns of data to get
+ * @returns Data at [row,col]
  */
-double DataArray::GetValue( int row, int col ) const
+double DataArray::getValue( int row, int col ) const
 {
   if ( row < 0 )
-  {
     row = 0;
-  }
-  if ( row > (int)n_rows - 1 )
-  {
-    row = (int)n_rows - 1;
-  }
+
+  if ( row > (int)m_nRows - 1 )
+    row = (int)m_nRows - 1;
+
   if ( col < 0 )
-  {
     col = 0;
-  }
-  if ( col > (int)n_cols - 1 )
-  {
-    col = (int)n_cols - 1;
-  }
 
-  return data[ row * n_cols + col ];
+  if ( col > (int)m_nCols - 1 )
+    col = (int)m_nCols - 1;
+
+  return m_data[ row * m_nCols + col ];
 }
 
 
 /**
  * Get the value from the row and column containing the specified point.
  * If the specified point (x,y) is off the edge of the array, a value
- * from the edge of the array will be returned. 
+ * from the edge of the array will be returned.
+ *
+ * @param x X value of data to get
+ * @param y Y value of data to get
+ * @returns Data at [x,y]
  */
-double DataArray::GetValue( double x, double y ) const
+double DataArray::getValue( double x, double y ) const
 {
-/*
-  int col = 0;
-  if ( is_log_x )
-  {
-    col = (int)((double)n_cols * log(x/xmin)/log(xmax/xmin) );
-  }
-  else
-  {
-    double relative_x = (x - xmin) / (xmax - xmin);
-    col = (int)( relative_x * (double)n_cols );
-  }
+  size_t col = columnOfX( x );
+  size_t row = rowOfY( y );
 
-  double relative_y = (y - ymin) / (ymax - ymin);
-  int row = (int)( relative_y * (double)n_rows );
-*/
-  size_t col = ColumnOfX( x );
-  size_t row = RowOfY( y );
-
-  return GetValue( (int)row, (int)col );
+  return getValue( (int)row, (int)col );
 }
 
 
 /**
  * Clamp x to the interval of x-values covered by this DataArray.
- * @param x   If x is more than xmax it will be set to xmax. If x is less 
- *            than xmin, it will be set to xmin.
+ *
+ * @param x If x is more than xmax it will be set to xmax. If x is less
+ *          than xmin, it will be set to xmin.
  */
-void DataArray::RestrictX( double & x ) const
+void DataArray::restrictX( double & x ) const
 {
-  if ( x > xmax )
-  {
-    x = xmax;
-  }
-  else if ( x < xmin )
-  {
-    x = xmin;
-  }
+  if ( x > m_xMax )
+    x = m_xMax;
+  else if ( x < m_xMin )
+    x = m_xMin;
 }
 
 
 /**
  * Clamp y to the interval of y-values covered by this DataArray.
- * @param y   If y is more than ymax it will be set to ymax. If y is less 
+ * @param y   If y is more than ymax it will be set to ymax. If y is less
  *            than ymin, it will be set to ymin.
  */
-void DataArray::RestrictY( double & y ) const
+void DataArray::restrictY( double & y ) const
 {
-  if ( y > ymax )
-  {
-    y = ymax;
-  }
-  else if ( y < ymin )
-  {
-    y = ymin;
-  }
+  if ( y > m_yMax )
+    y = m_yMax;
+  else if ( y < m_yMin )
+    y = m_yMin;
 }
 
 
@@ -260,16 +236,12 @@ void DataArray::RestrictY( double & y ) const
  * @param row  If row is more than n_rows-1, it is set to n_rows-1.  If
  *             row < 0 it is set to zero.
  */
-void DataArray::RestrictRow( int & row ) const
+void DataArray::restrictRow( int & row ) const
 {
-  if ( row >= (int)n_rows )
-  {
-    row = (int)n_rows - 1;
-  }
+  if ( row >= (int)m_nRows )
+    row = (int)m_nRows - 1;
   else if ( row < 0 )
-  {
     row = 0;
-  }
 }
 
 
@@ -278,16 +250,12 @@ void DataArray::RestrictRow( int & row ) const
  * @param col  If col is more than n_cols-1, it is set to n_cols-1.  If
  *             col < 0 it is set to zero.
  */
-void DataArray::RestrictCol( int & col ) const
+void DataArray::restrictCol( int & col ) const
 {
-  if ( col >= (int)n_cols )
-  {
-    col = (int)n_cols - 1;
-  }
+  if ( col >= (int)m_nCols )
+    col = (int)m_nCols - 1;
   else if ( col < 0 )
-  {
     col = 0;
-  }
 }
 
 
@@ -303,25 +271,21 @@ void DataArray::RestrictCol( int & col ) const
  * @return A valid column number, containing x, if x is in range, or the
  *         first or last column number if x is out of range.
  */
-size_t DataArray::ColumnOfX( double x ) const
+size_t DataArray::columnOfX( double x ) const
 {
   int col;
-  if ( is_log_x )
-  {
-    col = (int)((double)n_cols * log(x/xmin)/log(xmax/xmin));
-  }
+  if ( m_isLogX )
+    col = (int)((double)m_nCols * log(x / m_xMin) / log(m_xMax / m_xMin));
   else
-  {
-    col = (int)((double)n_cols * (x-xmin)/(xmax-xmin));
-  }
+    col = (int)((double)m_nCols * (x - m_xMin) / (m_xMax - m_xMin));
 
-  RestrictCol( col );
+  restrictCol( col );
   return (size_t)col;
 }
 
 
 /*
- * Calculate the x-value at the center of the specified column.  If the 
+ * Calculate the x-value at the center of the specified column.  If the
  * column number is too large, xmax is returned.  If the column number is
  * too small, xmin is returned.  This method uses the is_log_x flag to
  * determine whether to use a "log" tranformation to map the column to x.
@@ -330,60 +294,56 @@ size_t DataArray::ColumnOfX( double x ) const
  *
  * @return A corresponding x value between xmin and xmax.
  */
-double DataArray::XOfColumn( size_t col ) const
+double DataArray::xOfColumn( size_t col ) const
 {
-  double xval;
-  if ( is_log_x )
-  {
-    xval = xmin * exp( ((double)col+0.5)/(double)n_cols * log(xmax/xmin));
-  }
+  double xVal;
+  if ( m_isLogX )
+    xVal = m_xMin * exp(((double)col + 0.5)/(double)m_nCols * log(m_xMax / m_xMin));
   else
-  {
-    xval = ((double)col+0.5)/(double)n_cols * (xmax-xmin) + xmin;
-  }
- 
-  RestrictX( xval );
-  return xval;
+    xVal = ((double)col + 0.5)/(double)m_nCols * (m_xMax - m_xMin) + m_xMin;
+
+  restrictX( xVal );
+  return xVal;
 }
 
 
 /**
  * Calculate the row number containing the specified y value.  If the
  * specified value is less than ymin, 0 is returned.  If the specified
- * value is more than or equal to ymax, n_rows-1 is returned. 
+ * value is more than or equal to ymax, n_rows-1 is returned.
  *
  * @param y  The y value to map to a row number
  *
  * @return A valid row number, containing y, if y is in range, or the
  *         first or last row number if y is out of range.
  */
-size_t DataArray::RowOfY( double y ) const
+size_t DataArray::rowOfY( double y ) const
 {
-  int row = (int)((double)n_rows * (y-ymin)/(ymax-ymin));
+  int row = (int)((double)m_nRows * (y - m_yMin) / (m_yMax - m_yMin));
 
-  RestrictRow( row );
+  restrictRow( row );
   return (size_t)row;
 }
 
 
 /*
- * Calculate the y-value at the center of the specified row.  If the 
+ * Calculate the y-value at the center of the specified row.  If the
  * row number is too large, ymax is returned.  If the row number is
- * too small, ymin is returned.  
+ * too small, ymin is returned.
  *
  * @param row  The row number to map to an y-value.
  *
  * @return A corresponding y value between ymin and ymax.
  */
-double DataArray::YOfRow( size_t row ) const
+double DataArray::yOfRow( size_t row ) const
 {
-  double yval;
-  yval = ((double)row+0.5)/(double)n_rows * (ymax-ymin) + ymin;
+  double yVal;
+  yVal = ((double)row + 0.5)/(double)m_nRows * (m_yMax - m_yMin) + m_yMin;
 
-  RestrictY( yval );
-  return yval;
+  restrictY( yVal );
+  return yVal;
 }
 
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/EModeHandler.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/EModeHandler.cpp
index 0f5dd40cc8bd855536c8aa91ab061d658f1ddf3a..2024410a29538f31dbdb36451c2ba55bfc7ee3ea 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/EModeHandler.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/EModeHandler.cpp
@@ -1,11 +1,16 @@
-
 #include <iostream>
 #include <QLineEdit>
 
 #include "MantidQtSpectrumViewer/EModeHandler.h"
 #include "MantidQtSpectrumViewer/QtUtils.h"
-#include "MantidQtSpectrumViewer/SVUtils.h"
-#include "MantidQtSpectrumViewer/ErrorHandler.h"
+#include "MantidKernel/Logger.h"
+
+
+namespace
+{
+  Mantid::Kernel::Logger g_log("SpectrumView");
+}
+
 
 namespace MantidQt
 {
@@ -13,90 +18,87 @@ namespace SpectrumView
 {
 
 /**
- *  Construct an EModeHandler object to manage the E Mode and E Fixed controls 
+ *  Construct an EModeHandler object to manage the E Mode and E Fixed controls
  *  in the specified UI
  */
-EModeHandler::EModeHandler( Ui_SpectrumViewer* sv_ui )
+EModeHandler::EModeHandler( Ui_SpectrumViewer* svUI ):
+  m_svUI(svUI)
 {
-  this->sv_ui = sv_ui;
 }
 
 
 /**
  * Get the EMode value (0,1,2) from the GUI.
  */
-int EModeHandler::GetEMode()
+int EModeHandler::getEMode()
 {
-  return sv_ui->emode_combo_box->currentIndex();
+  return m_svUI->emode_combo_box->currentIndex();
 }
 
 
 /**
  * Set the EMode to display in the GUI.
  *
- * @param mode   Integer code for the emode type, 
+ * @param mode   Integer code for the emode type,
  *               0 = Diffractometer
  *               1 = Direct Geometry Spectrometer
  *               2 = Indirect Geometry Spectrometer
  *               NOTE: Any other value will be interpreted as 0
  *               and the gui will not be changed.
  */
-void EModeHandler::SetEMode( const int mode )
+void EModeHandler::setEMode( const int mode )
 {
-  if ( mode >= 0 && mode <= 2 )
-  {
-     sv_ui->emode_combo_box->setCurrentIndex( mode );
-  }
+  if(mode >= 0 && mode <= 2)
+    m_svUI->emode_combo_box->setCurrentIndex( mode );
   else
-  {
-    ErrorHandler::Error("Mode number invalid: " + mode );
-  }
+    g_log.error() << "Mode number invalid: " << QString::number(mode).toStdString() << std::endl;
 }
 
 
 /**
- *  Return the user specified EFixed value, OR 0, if no valid 
+ *  Return the user specified EFixed value, OR 0, if no valid
  *  EFixed value was set.
  */
-double EModeHandler::GetEFixed()
+double EModeHandler::getEFixed()
 {
-  double efixed;
-  std::string text = sv_ui->efixed_control->text().toStdString();
-  if ( !SVUtils::StringToDouble( text, efixed ) )
+  QString text = m_svUI->efixed_control->text();
+  bool isNumber = false;
+  double eFixed = text.toDouble(&isNumber);
+  if(!isNumber)
   {
-    ErrorHandler::Error("E Fixed is not a NUMBER! Value reset to default.");
-    efixed = 0;
+    g_log.information("E Fixed is not a NUMBER! Value reset to default.");
+    eFixed = 0;
   }
-  else if ( efixed < 0 )
+  else if ( eFixed < 0 )
   {
-    ErrorHandler::Error("E Fixed is negative, Value reset to default.");
-    efixed = 0;
+    g_log.information("E Fixed is negative, Value reset to default.");
+    eFixed = 0;
   }
 
-  SetEFixed( efixed );
-  return efixed;
+  setEFixed( eFixed );
+  return eFixed;
 }
 
 
 /**
  *  Set the EFixed value that is displayed in the UI.
  *
- *  @param efixed  The new efixed value to display in the
+ *  @param eFixed  The new efixed value to display in the
  *                 UI.  This must be positive, or the
  *                 displayed value will be set to zero.
  */
-void EModeHandler::SetEFixed( const double efixed )
+void EModeHandler::setEFixed( const double eFixed )
 {
-  double new_value = efixed;
-  if ( efixed < 0 )
+  double newValue = eFixed;
+  if ( eFixed < 0 )
   {
-    ErrorHandler::Error("E Fixed is negative, reset to default.");
-    new_value = 0;
+    g_log.information("E Fixed is negative, reset to default.");
+    newValue = 0;
   }
 
-  QtUtils::SetText( 10, 4, new_value, sv_ui->efixed_control );
+  QtUtils::SetText( 10, 4, newValue, m_svUI->efixed_control );
 }
 
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/ErrorHandler.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/ErrorHandler.cpp
deleted file mode 100644
index dbc6f588e725ca5fb796ea8a8f39c8f55f035fa2..0000000000000000000000000000000000000000
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/ErrorHandler.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <iostream>
-
-#include "MantidKernel/Logger.h"
-
-#include "MantidQtSpectrumViewer/ErrorHandler.h"
-
-namespace MantidQt
-{
-namespace SpectrumView
-{
-
-using namespace Mantid;
-
-  namespace
-  {
-    ///static logger
-    Kernel::Logger g_log("SpectrumView");
-  }
-
-/**
- * Display the specified string in an error message.
- * 
- * @param text   The string containing the text of the error message 
- */
-void ErrorHandler::Error( std::string  text )
-{
-  g_log.error( "ERROR: " + text );
-}
-
-
-/**
- * Display the specified string in a warning message.
- * 
- * @param text   The string containing the text of the warning message 
- */
-void ErrorHandler::Warning( std::string  text )
-{
-  g_log.warning( "WARNING: " + text );
-}
-
-
-/**
- * Display the specified string in a warning message.
- * 
- * @param text   The string containing the text of the warning message 
- */
-void ErrorHandler::Notice( std::string  text )
-{
-  g_log.notice( "Notice: " + text );
-}
-
-
-} // namespace SpectrumView
-} // namespace MantidQt 
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/GraphDisplay.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/GraphDisplay.cpp
index f7afa51747f056cdf19e5aa8984efe2842a9d5ad..a791cb8d5542edb1c98c35c34178ebdc263363a1 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/GraphDisplay.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/GraphDisplay.cpp
@@ -1,4 +1,3 @@
-
 #include <iostream>
 #include <QtGui>
 #include <QVector>
@@ -15,43 +14,35 @@ namespace SpectrumView
 {
 
 /**
- *  Construct a GraphDisplay to display selected graph on the specifed plot 
+ *  Construct a GraphDisplay to display selected graph on the specifed plot
  *  and to disply information in the specified table.
  *
- *  @param graph_plot    The QwtPlot where the graph will be displayed.
- *  @param graph_table   The QTableWidget where information about a 
- *                       pointed at location will be displayed.
- *                       Can be NULL (e.g. the RefDetectorViewer doesn't use it).
- *  @param is_vertical   Flag indicating whether this graph displays the
- *                       vertical or horizontal cut through the image.
+ *  @param graphPlot   The QwtPlot where the graph will be displayed.
+ *  @param graphTable  The QTableWidget where information about a
+ *                     pointed at location will be displayed.
+ *                     Can be NULL (e.g. the RefDetectorViewer doesn't use it).
+ *  @param isVertical  Flag indicating whether this graph displays the
+ *                     vertical or horizontal cut through the image.
  */
-GraphDisplay::GraphDisplay( QwtPlot*      graph_plot, 
-                            QTableWidget* graph_table,
-                            bool          is_vertical )
+GraphDisplay::GraphDisplay( QwtPlot*      graphPlot,
+                            QTableWidget* graphTable,
+                            bool          isVertical ) :
+  m_graphPlot(graphPlot),
+  m_curve(new QwtPlotCurve("Curve 1")),
+  m_graphTable(graphTable),
+  m_isVertical(isVertical),
+  m_isLogX(false),
+  m_imageX(0.0), m_imageY(0.0),
+  m_rangeScale(1.0)
 {
-  this->graph_plot  = graph_plot;
-  this->graph_table = graph_table;
-  this->data_source = 0;
-  this->is_vertical = is_vertical;
-
-  is_log_x    = false;
-  image_x     = 0;
-  image_y     = 0;
-  range_scale = 1.0;
-
-  if ( is_vertical )
-  {
-    graph_plot->setAxisMaxMajor( QwtPlot::xBottom, 3 );
-  }
-
-  curve = new QwtPlotCurve("Curve 1");
+  if(isVertical)
+    graphPlot->setAxisMaxMajor( QwtPlot::xBottom, 3 );
 }
 
 
 GraphDisplay::~GraphDisplay()
 {
-  // std::cout << "GraphDisplay destructor called" << std::endl;
-  delete curve;
+  delete m_curve;
 }
 
 
@@ -59,91 +50,90 @@ GraphDisplay::~GraphDisplay()
  * Set the data source from which the table information will be obtained
  * (must be set to allow information to be displayed in the table.)
  *
- * @param data_source The SpectrumDataSource that provides information for
- *                    the table.
+ * @param dataSource The SpectrumDataSource that provides information for
+ *                   the table.
  */
-void GraphDisplay::SetDataSource( SpectrumDataSource* data_source )
+void GraphDisplay::setDataSource( SpectrumDataSource_sptr dataSource )
 {
-  this->data_source = data_source;
+  m_dataSource = dataSource;
 }
 
 
 /**
  * Set flag indicating whether or not to use a log scale on the x-axis
  *
- * @param is_log_x  Pass in true to use a log scale on the x-axis and false
- *                  to use a linear scale. 
+ * @param isLogX  Pass in true to use a log scale on the x-axis and false
+ *                to use a linear scale.
  */
-void GraphDisplay::SetLogX( bool is_log_x )
+void GraphDisplay::setLogX( bool isLogX )
 {
-  this->is_log_x = is_log_x;
+  m_isLogX = isLogX;
 }
 
 
 /**
- * Set the actual data that will be displayed on the graph and the 
+ * Set the actual data that will be displayed on the graph and the
  * coordinates on the image corresponding to this data.  The image
  * coordinates are needed to determine the point of interest, when the
  * user points at a location on the graph.
  *
- * @param xData    Vector of x coordinates of points to plot
- * @param yData    Vector of y coordinates of points to plot.  This should
- *                 be the same size as the xData vector.
- * @param cut_value  the cut value
+ * @param xData     Vector of x coordinates of points to plot
+ * @param yData     Vector of y coordinates of points to plot.  This should
+ *                  be the same size as the xData vector.
+ * @param cutValue  the cut value
  */
-void GraphDisplay::SetData(const QVector<double> & xData, 
+void GraphDisplay::setData(const QVector<double> & xData,
                            const QVector<double> & yData,
-                                 double            cut_value )
+                                 double            cutValue )
 {
   if ( xData.size() == 0 ||          // ignore invalid data vectors
        yData.size() == 0 ||
-       xData.size() != yData.size()    )
+       xData.size() != yData.size() )
   {
     return;
   }
 
-
-  curve->attach(0);                 // detach from any plot, before changing
+  m_curve->attach(0);               // detach from any plot, before changing
                                     // the data and attaching
-  if ( is_vertical )
+  if ( m_isVertical )
   {
-    this->image_x = cut_value;
-    min_y = yData[0];
-    max_y = yData[yData.size()-1];
-    SVUtils::FindValidInterval( xData, min_x, max_x );
+    m_imageX = cutValue;
+    m_minY = yData[0];
+    m_maxY = yData[yData.size()-1];
+    SVUtils::FindValidInterval( xData, m_minX, m_maxX );
   }
   else
   {
-    this->image_y = cut_value;
-    min_x = xData[0];
-    max_x = xData[xData.size()-1];
-    SVUtils::FindValidInterval( yData, min_y, max_y );
+    m_imageY = cutValue;
+    m_minX = xData[0];
+    m_maxX = xData[xData.size()-1];
+    SVUtils::FindValidInterval( yData, m_minY, m_maxY );
 
-    if ( is_log_x )                // only set log scale for x if NOT vertical
+    if ( m_isLogX )                // only set log scale for x if NOT vertical
     {
       QwtLog10ScaleEngine* log_engine = new QwtLog10ScaleEngine();
-      graph_plot->setAxisScaleEngine( QwtPlot::xBottom, log_engine );
+      m_graphPlot->setAxisScaleEngine( QwtPlot::xBottom, log_engine );
     }
     else
     {
       QwtLinearScaleEngine* linear_engine = new QwtLinearScaleEngine();
-      graph_plot->setAxisScaleEngine( QwtPlot::xBottom, linear_engine );
+      m_graphPlot->setAxisScaleEngine( QwtPlot::xBottom, linear_engine );
     }
   }
 
-  curve->setData( xData, yData );
-  curve->attach( graph_plot );
+  m_curve->setData( xData, yData );
+  m_curve->attach( m_graphPlot );
 
-  SetRangeScale( range_scale );
+  setRangeScale( m_rangeScale );
 
-  graph_plot->setAutoReplot(true);
+  m_graphPlot->setAutoReplot(true);
 }
 
 
-void GraphDisplay::Clear()
+void GraphDisplay::clear()
 {
-  curve->attach(0);                 // detach from plot
-  graph_plot->replot();
+  m_curve->attach(0);                 // detach from plot
+  m_graphPlot->replot();
 }
 
 
@@ -152,61 +142,62 @@ void GraphDisplay::Clear()
  *  This is useful for seeing low-level values, by clipping off the higher
  *  magnitude values.
  *
- *  @param range_scale Value between 0 and 1 indicating what fraction of
+ *  @param rangeScale Value between 0 and 1 indicating what fraction of
  *         graph value range should be plotted.
  */
-void GraphDisplay::SetRangeScale( double range_scale )
+void GraphDisplay::setRangeScale( double rangeScale )
 {
-  this->range_scale = range_scale;
-  if ( is_vertical )
+  m_rangeScale = rangeScale;
+
+  if ( m_isVertical )
   {
-    double axis_max = range_scale * ( max_x - min_x ) + min_x;
-    graph_plot->setAxisScale( QwtPlot::xBottom, min_x, axis_max ); 
-    graph_plot->setAxisScale( QwtPlot::yLeft, min_y, max_y );
+    double axis_max = m_rangeScale * ( m_maxX - m_minX ) + m_minX;
+    m_graphPlot->setAxisScale( QwtPlot::xBottom, m_minX, axis_max );
+    m_graphPlot->setAxisScale( QwtPlot::yLeft, m_minY, m_maxY );
   }
   else
   {
-    double axis_max = range_scale * ( max_y - min_y ) + min_y;
-    graph_plot->setAxisScale( QwtPlot::yLeft, min_y, axis_max );
-    graph_plot->setAxisScale( QwtPlot::xBottom, min_x, max_x );
+    double axis_max = m_rangeScale * ( m_maxY - m_minY ) + m_minY;
+    m_graphPlot->setAxisScale( QwtPlot::yLeft, m_minY, axis_max );
+    m_graphPlot->setAxisScale( QwtPlot::xBottom, m_minX, m_maxX );
   }
-  graph_plot->replot();
+  m_graphPlot->replot();
 }
 
 
 /**
  * Show information about the specified point.
  *
- * @param point  The point that the user is currently pointing at with 
+ * @param point  The point that the user is currently pointing at with
  *               the mouse.
  */
-void GraphDisplay::SetPointedAtPoint( QPoint point )
+void GraphDisplay::setPointedAtPoint( QPoint point )
 {
-  if ( data_source == 0 )
+  if ( m_dataSource == 0 )
   {
     return;
   }
-  double x = graph_plot->invTransform( QwtPlot::xBottom, point.x() );
-  double y = graph_plot->invTransform( QwtPlot::yLeft, point.y() );
+  double x = m_graphPlot->invTransform( QwtPlot::xBottom, point.x() );
+  double y = m_graphPlot->invTransform( QwtPlot::yLeft, point.y() );
 
-  if ( is_vertical )             // x can be anywhere on graph, y must be
+  if ( m_isVertical )             // x can be anywhere on graph, y must be
   {                              // a valid data source position, vertically
-    data_source->RestrictY( y );
+    m_dataSource->restrictY( y );
   }
   else                           // y can be anywhere on graph, x must be
   {                              // a valid data source position, horizontally
-    data_source->RestrictX( x );
+    m_dataSource->restrictX( x );
   }
 
-  ShowInfoList( x, y );
+  showInfoList( x, y );
 }
 
 
 /**
  *  Get the information about a pointed at location and show it in the
  *  table.  NOTE: If this is the "horizontal" graph, the relevant coordinates
- *  are x and the image_y that generated the graph.  If this is the "vertical"
- *  graph, the relevant coordinates are y and the image_x that generated 
+ *  are x and the m_imageY that generated the graph.  If this is the "vertical"
+ *  graph, the relevant coordinates are y and the m_imageX that generated
  *  the graph.
  *  The method is a no-op if the table is not being used (e.g. as in the
  *  case of the RefDetectorViewer).
@@ -214,23 +205,23 @@ void GraphDisplay::SetPointedAtPoint( QPoint point )
  *  @param x  The x coordinate of the pointed at location on the graph.
  *  @param y  The y coordinate of the pointed at location on the graph.
  */
-void GraphDisplay::ShowInfoList( double x, double y )
+void GraphDisplay::showInfoList( double x, double y )
 {
   // This whole method is a no-op if no table object was injected on construction
-  if ( graph_table != NULL )
+  if ( m_graphTable != NULL )
   {
     int n_infos = 0;
     int n_rows  = 1;
     std::vector<std::string> info_list;
-    if ( data_source != 0 )
+    if ( m_dataSource != 0 )
     {
-      if ( is_vertical )
+      if ( m_isVertical )
       {
-        data_source->GetInfoList( image_x, y, info_list );
+        m_dataSource->getInfoList( m_imageX, y, info_list );
       }
       else
       {
-        data_source->GetInfoList( x, image_y, info_list );
+        m_dataSource->getInfoList( x, m_imageY, info_list );
       }
     }
     else
@@ -240,34 +231,34 @@ void GraphDisplay::ShowInfoList( double x, double y )
     n_infos = (int)info_list.size()/2;
     n_rows += n_infos;
 
-    graph_table->setRowCount(n_rows);
-    graph_table->setColumnCount(2);
-    graph_table->verticalHeader()->hide();
-    graph_table->horizontalHeader()->hide();
+    m_graphTable->setRowCount(n_rows);
+    m_graphTable->setColumnCount(2);
+    m_graphTable->verticalHeader()->hide();
+    m_graphTable->horizontalHeader()->hide();
 
     int width = 9;
     int prec  = 3;
 
-    if ( is_vertical )
+    if ( m_isVertical )
     {
-      QtUtils::SetTableEntry( 0, 0, "Value", graph_table );
-      QtUtils::SetTableEntry( 0, 1, width, prec, x, graph_table );
+      QtUtils::SetTableEntry( 0, 0, "Value", m_graphTable );
+      QtUtils::SetTableEntry( 0, 1, width, prec, x, m_graphTable );
     }
     else
     {
-      QtUtils::SetTableEntry( 0, 0, "Value", graph_table );
-      QtUtils::SetTableEntry( 0, 1, width, prec, y, graph_table );
+      QtUtils::SetTableEntry( 0, 0, "Value", m_graphTable );
+      QtUtils::SetTableEntry( 0, 1, width, prec, y, m_graphTable );
     }
 
     for ( int i = 0; i < n_infos; i++ )
     {
-      QtUtils::SetTableEntry( i+1, 0, info_list[2*i], graph_table );
-      QtUtils::SetTableEntry( i+1, 1, info_list[2*i+1], graph_table );
+      QtUtils::SetTableEntry( i+1, 0, info_list[2*i], m_graphTable );
+      QtUtils::SetTableEntry( i+1, 1, info_list[2*i+1], m_graphTable );
     }
 
-    graph_table->resizeColumnsToContents();
+    m_graphTable->resizeColumnsToContents();
   }
 }
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/MatrixWSDataSource.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/MatrixWSDataSource.cpp
index ba24e6921032ff58ef70ea5e1ea8a50f68591531..812f0be942dc170bbb514bdd5f7709442548c455 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/MatrixWSDataSource.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/MatrixWSDataSource.cpp
@@ -10,19 +10,28 @@
 #include <QThread>
 
 #include "MantidQtSpectrumViewer/MatrixWSDataSource.h"
+#include "MantidQtSpectrumViewer/EModeHandler.h"
 #include "MantidQtSpectrumViewer/SVUtils.h"
 #include "MantidAPI/ISpectrum.h"
 #include "MantidGeometry/Instrument/Detector.h"
 #include "MantidGeometry/Instrument.h"
+#include "MantidKernel/Logger.h"
 #include "MantidKernel/UnitFactory.h"
 #include "MantidAPI/Run.h"
-#include "MantidQtSpectrumViewer/ErrorHandler.h"
+
 
 using namespace Mantid;
 using namespace Kernel;
 using namespace API;
 using namespace Geometry;
 
+
+namespace
+{
+  Kernel::Logger g_log("SpectrumView");
+}
+
+
 namespace MantidQt
 {
 namespace SpectrumView
@@ -31,24 +40,21 @@ namespace SpectrumView
 /**
  * Construct a DataSource object around the specifed MatrixWorkspace.
  *
- * @param mat_ws  Shared pointer to the matrix workspace being "wrapped"
+ * @param matWs  Shared pointer to the matrix workspace being "wrapped"
  */
-MatrixWSDataSource::MatrixWSDataSource( MatrixWorkspace_const_sptr mat_ws )
-                 :SpectrumDataSource( 0.0, 1.0, 0.0, 1.0, 0, 0 )  // some defaults
+MatrixWSDataSource::MatrixWSDataSource( MatrixWorkspace_const_sptr matWs ) :
+  SpectrumDataSource( 0.0, 1.0, 0.0, 1.0, 0, 0 ),
+  m_matWs(matWs),
+  m_emodeHandler(NULL)
 {
-  this->mat_ws = mat_ws;
-
-  total_xmin = mat_ws->getXMin();
-  total_xmax = mat_ws->getXMax();
-
-  total_ymin = 0;                 // y direction is spectrum index
-  total_ymax = (double)mat_ws->getNumberHistograms();
+  m_totalXMin = matWs->getXMin();
+  m_totalXMax = matWs->getXMax();
 
-  total_rows = mat_ws->getNumberHistograms();
+  m_totalYMin = 0;  // Y direction is spectrum index
+  m_totalYMax = (double)matWs->getNumberHistograms();
 
-  total_cols = 1000000;              // Default data resolution
-
-  saved_emode_handler = 0;
+  m_totalRows = matWs->getNumberHistograms();
+  m_totalCols = 1000000;  // Default data resolution
 }
 
 
@@ -56,28 +62,29 @@ MatrixWSDataSource::~MatrixWSDataSource()
 {
 }
 
+
 bool MatrixWSDataSource::hasData(const std::string& wsName,
                                  const boost::shared_ptr<Mantid::API::Workspace> ws)
 {
-  if (mat_ws->getName() == wsName)
+  if (m_matWs->getName() == wsName)
     return true;
 
-  Mantid::API::MatrixWorkspace_const_sptr other
-      = boost::dynamic_pointer_cast<const MatrixWorkspace>(ws);
+  Mantid::API::MatrixWorkspace_const_sptr other = boost::dynamic_pointer_cast<const MatrixWorkspace>(ws);
   if (!other)
     return false;
 
-  return (mat_ws == other);
+  return (m_matWs == other);
 }
 
+
 /**
  * Get the smallest 'x' value covered by the data.  Must override base class
  * method, since the DataSource can be changed!
  */
-double MatrixWSDataSource::GetXMin()
+double MatrixWSDataSource::getXMin()
 {
-  total_xmin = mat_ws->getXMin();
-  return total_xmin;
+  m_totalXMin = m_matWs->getXMin();
+  return m_totalXMin;
 }
 
 
@@ -85,10 +92,10 @@ double MatrixWSDataSource::GetXMin()
  * Get the largest 'x' value covered by the data.  Must override base class
  * method, since the DataSource can be changed!
  */
-double MatrixWSDataSource::GetXMax()
+double MatrixWSDataSource::getXMax()
 {
-  total_xmax = mat_ws->getXMax();
-  return total_xmax;
+  m_totalXMax = m_matWs->getXMax();
+  return m_totalXMax;
 }
 
 
@@ -96,10 +103,10 @@ double MatrixWSDataSource::GetXMax()
  * Get the largest 'y' value covered by the data.  Must override base class
  * method, since the DataSource can be changed!
  */
-double MatrixWSDataSource::GetYMax()
+double MatrixWSDataSource::getYMax()
 {
-  total_ymax = (double)mat_ws->getNumberHistograms();
-  return total_ymax;
+  m_totalYMax = (double)m_matWs->getNumberHistograms();
+  return m_totalYMax;
 }
 
 
@@ -107,10 +114,10 @@ double MatrixWSDataSource::GetYMax()
  * Get the total number of rows the data is divided into.  Must override base
  * class method, since the DataSource can be changed!
  */
-size_t MatrixWSDataSource::GetNRows()
+size_t MatrixWSDataSource::getNRows()
 {
-  total_ymax = (double)mat_ws->getNumberHistograms();
-  return total_rows;
+  m_totalYMax = (double)m_matWs->getNumberHistograms();
+  return m_totalRows;
 }
 
 
@@ -119,119 +126,110 @@ size_t MatrixWSDataSource::GetNRows()
  * resolution.  NOTE: The calling code is responsible for deleting the
  * DataArray that is constructed in and returned by this method.
  *
- * @param xmin      Left edge of region to be covered.
- * @param xmax      Right edge of region to be covered.
- * @param ymin      Bottom edge of region to be covered.
- * @param ymax      Top edge of region to be covered.
- * @param n_rows    Number of rows to return. If the number of rows is less
- *                  than the actual number of data rows in [ymin,ymax], the
- *                  data will be subsampled, and only the specified number
- *                  of rows will be returned.
- * @param n_cols    The specrum data will be rebinned using the specified
- *                  number of colums.
- * @param is_log_x  Flag indicating whether or not the data should be
- *                  binned logarithmically.
+ * @param xMin    Left edge of region to be covered.
+ * @param xMax    Right edge of region to be covered.
+ * @param yMin    Bottom edge of region to be covered.
+ * @param yMax    Top edge of region to be covered.
+ * @param numRows Number of rows to return. If the number of rows is less
+ *                than the actual number of data rows in [yMin,yMax], the
+ *                data will be subsampled, and only the specified number
+ *                of rows will be returned.
+ * @param numCols The specrum data will be rebinned using the specified
+ *                number of colums.
+ * @param isLogX  Flag indicating whether or not the data should be
+ *                binned logarithmically.
  */
-DataArray* MatrixWSDataSource::GetDataArray( double xmin,   double  xmax,
-                                             double ymin,   double  ymax,
-                                             size_t n_rows, size_t  n_cols,
-                                             bool   is_log_x )
+DataArray_const_sptr MatrixWSDataSource::getDataArray( double xMin,    double  xMax,
+                                                       double yMin,    double  yMax,
+                                                       size_t numRows, size_t  numCols,
+                                                       bool   isLogX )
 {
-/*
-  std::cout << "Start MatrixWSDataSource::GetDataArray " << std::endl;
-  std::cout << "  xmin   = " << xmin
-            << "  xmax   = " << xmax
-            << "  ymin   = " << ymin
-            << "  ymax   = " << ymax
-            << "  n_rows = " << n_rows
-            << "  n_cols = " << n_cols << std::endl;
-*/
-                                                  // since we're rebinning, the
-                                                  // columns can be arbitrary
-                                                  // but rows must be aligned
-                                                  // to get whole spectra
+  /* Since we're rebinning, the columns can be arbitrary */
+  /* but rows must be aligned to get whole spectra */
   size_t first_row;
-  SVUtils::CalculateInterval( total_ymin, total_ymax, total_rows,
-                              first_row, ymin, ymax, n_rows );
-
-  float* new_data = new float[n_rows * n_cols];   // this array is deleted in
-                                                  // the DataArrray destructor
-  MantidVec x_scale;
-  x_scale.resize(n_cols+1);
-  if ( is_log_x )
+  SVUtils::CalculateInterval( m_totalYMin, m_totalYMax, m_totalRows,
+                              first_row, yMin, yMax, numRows );
+
+  std::vector<float> newData(numRows * numCols);
+
+  MantidVec xScale;
+  xScale.resize(numCols + 1);
+  if ( isLogX )
   {
-    for ( size_t i = 0; i < n_cols+1; i++ )
+    for ( size_t i = 0; i < numCols+1; i++ )
     {
-      x_scale[i] = xmin * exp ( (double)i / (double)n_cols * log(xmax/xmin) );
+      xScale[i] = xMin * exp ( (double)i / (double)numCols * log(xMax/xMin) );
     }
   }
   else
   {
-    double dx = (xmax - xmin)/((double)n_cols + 1.0);
-    for ( size_t i = 0; i < n_cols+1; i++ )
+    double dx = (xMax - xMin) / ((double)numCols + 1.0);
+    for ( size_t i = 0; i < numCols+1; i++ )
     {
-      x_scale[i] = xmin + (double)i * dx;
+      xScale[i] = xMin + (double)i * dx;
     }
-  }                                                // choose spectra from
-                                                   // required range of
-                                                   // spectrum indexes
-  double y_step = (ymax - ymin) / (double)n_rows;
-  double d_y_index;
+  }
 
-  MantidVec y_vals;
+  // Choose spectra from required range of spectrum indexes
+  double yStep = (yMax - yMin) / (double)numRows;
+  double dYIndex;
+
+  MantidVec yVals;
   MantidVec err;
-  y_vals.resize(n_cols);
-  err.resize(n_cols);
+  yVals.resize(numCols);
+  err.resize(numCols);
   size_t index = 0;
-  for ( size_t i = 0; i < n_rows; i++ )
+  for ( size_t i = 0; i < numRows; i++ )
   {
-    double mid_y = ymin + ((double)i + 0.5) * y_step;
-    SVUtils::Interpolate( total_ymin, total_ymax, mid_y,
-                                 0.0, (double)total_rows, d_y_index );
-    size_t source_row = (size_t)d_y_index;
-    y_vals.clear();
+    double midY = yMin + ((double)i + 0.5) * yStep;
+    SVUtils::Interpolate( m_totalYMin, m_totalYMax,         midY,
+                          0.0,         (double)m_totalRows, dYIndex );
+    size_t sourceRow = (size_t)dYIndex;
+    yVals.clear();
     err.clear();
-    y_vals.resize(n_cols,0);
-    err.resize(n_cols,0);
+    yVals.resize(numCols, 0);
+    err.resize(numCols, 0);
 
-    mat_ws->generateHistogram( source_row, x_scale, y_vals, err, true );
-    for ( size_t col = 0; col < n_cols; col++ )
+    m_matWs->generateHistogram( sourceRow, xScale, yVals, err, true );
+    for ( size_t col = 0; col < numCols; col++ )
     {
-      new_data[index] = (float)y_vals[col];
+      newData[index] = (float)yVals[col];
       index++;
     }
   }
-                                // The calling code is responsible for deleting
-                                // the DataArray when it is done with it
-  DataArray* new_data_array = new DataArray( xmin, xmax, ymin, ymax,
-                                             is_log_x,
-                                             n_rows, n_cols, new_data);
-  return new_data_array;
+
+  // The calling code is responsible for deleting the DataArray when it is done with it
+  DataArray_const_sptr newDataArray( new DataArray( xMin, xMax, yMin, yMax,
+                                                    isLogX,
+                                                    numRows, numCols,
+                                                    newData) );
+
+  return newDataArray;
 }
 
 
 /**
  * Get a data array covering the full range of data.
  *
- * @param is_log_x  Flag indicating whether or not the data should be
- *                  binned logarithmically.
+ * @param isLogX  Flag indicating whether or not the data should be
+ *                binned logarithmically.
  */
-DataArray * MatrixWSDataSource::GetDataArray( bool is_log_x )
+DataArray_const_sptr MatrixWSDataSource::getDataArray( bool isLogX )
 {
-  return GetDataArray( total_xmin, total_xmax, total_ymin, total_ymax,
-                       total_rows, total_cols, is_log_x );
+  return getDataArray( m_totalXMin, m_totalXMax, m_totalYMin, m_totalYMax,
+                       m_totalRows, m_totalCols, isLogX );
 }
 
 
 /**
  * Set the class that gets the emode & efixed info from the user.
  *
- * @param emode_handler  Pointer to the user interface handler that
- *                       can provide user values for emode and efixed.
+ * @param emodeHandler  Pointer to the user interface handler that
+ *                      can provide user values for emode and efixed.
  */
-void MatrixWSDataSource::SetEModeHandler( EModeHandler* emode_handler )
+void MatrixWSDataSource::setEModeHandler( EModeHandler* emodeHandler )
 {
-  saved_emode_handler = emode_handler;
+  m_emodeHandler = emodeHandler;
 }
 
 
@@ -245,23 +243,23 @@ void MatrixWSDataSource::SetEModeHandler( EModeHandler* emode_handler )
  * @param y    The y-coordinate of the point of interest in the data.
  * @param list Vector that will be filled out with the information strings.
  */
-void MatrixWSDataSource::GetInfoList( double x,
+void MatrixWSDataSource::getInfoList( double x,
                                       double y,
                                       std::vector<std::string> &list )
 {
+  // First get the info that is always available for any matrix workspace
   list.clear();
-                                        // first get the info that is always
-                                        // available for any matrix workspace
+
   int row = (int)y;
-  RestrictRow( row );
+  restrictRow( row );
 
-  const ISpectrum* spec = mat_ws->getSpectrum( row );
+  const ISpectrum* spec = m_matWs->getSpectrum( row );
 
   double spec_num = spec->getSpectrumNo();
   SVUtils::PushNameValue( "Spec Num", 8, 0, spec_num, list );
 
   std::string x_label = "";
-  Unit_sptr& old_unit = mat_ws->getAxis(0)->unit();
+  Unit_sptr& old_unit = m_matWs->getAxis(0)->unit();
   if ( old_unit != 0 )
   {
     x_label = old_unit->caption();
@@ -276,50 +274,50 @@ void MatrixWSDataSource::GetInfoList( double x,
     list.push_back(boost::lexical_cast<std::string>(id));
   }
 
-  IDetector_const_sptr det;          // now try to do various unit conversions
-  try                                // to get equivalent info
-  {                                  // first make sure we can get the needed
-                                     // information
+  /* Now try to do various unit conversions to get equivalent info */
+  /* first make sure we can get the needed information */
+  IDetector_const_sptr det;
+  try
+  {
+
     if ( old_unit == 0 )
     {
-      ErrorHandler::Error("No UNITS on MatrixWorkspace X-axis");
+      g_log.debug("No UNITS on MatrixWorkspace X-axis");
       return;
     }
 
-    Instrument_const_sptr instrument = mat_ws->getInstrument();
+    Instrument_const_sptr instrument = m_matWs->getInstrument();
     if ( instrument == 0 )
     {
-      ErrorHandler::Error("No INSTRUMENT on MatrixWorkspace");
+      g_log.debug("No INSTRUMENT on MatrixWorkspace");
       return;
     }
 
     IComponent_const_sptr source = instrument->getSource();
     if ( source == 0 )
     {
-      ErrorHandler::Error("No SOURCE on instrument in MatrixWorkspace");
+      g_log.debug("No SOURCE on instrument in MatrixWorkspace");
       return;
     }
 
     IComponent_const_sptr sample = instrument->getSample();
     if ( sample == 0 )
     {
-      ErrorHandler::Error("No SAMPLE on instrument in MatrixWorkspace");
+      g_log.debug("No SAMPLE on instrument in MatrixWorkspace");
       return;
     }
 
-    det = mat_ws->getDetector( row );
+    det = m_matWs->getDetector( row );
     if ( det == 0 )
     {
-      std::ostringstream message;
-      message << "No DETECTOR for row " << row << " in MatrixWorkspace";
-      ErrorHandler::Error( message.str() );
+      g_log.debug() << "No DETECTOR for row " << row << " in MatrixWorkspace" << std::endl;
       return;
     }
 
     double l1        = source->getDistance(*sample);
-    double l2        = 0.;
-    double two_theta = 0.;
-    double azi       = 0.;
+    double l2        = 0.0;
+    double two_theta = 0.0;
+    double azi       = 0.0;
     if ( det->isMonitor() )
     {
       l2 = det->getDistance(*source);
@@ -328,45 +326,40 @@ void MatrixWSDataSource::GetInfoList( double x,
     else
     {
       l2 = det->getDistance(*sample);
-      two_theta = mat_ws->detectorTwoTheta(det);
+      two_theta = m_matWs->detectorTwoTheta(det);
       azi = det->getPhi();
     }
     SVUtils::PushNameValue( "L2", 8, 4, l2, list );
     SVUtils::PushNameValue( "TwoTheta", 8, 2, two_theta*180./M_PI, list );
     SVUtils::PushNameValue( "Azimuthal", 8, 2, azi*180./M_PI, list );
 
-                        // For now, only support diffractometers and monitors.
-                        // We need a portable way to determine emode and
-                        // and efixed that will work for any matrix workspace!
+    /* For now, only support diffractometers and monitors. */
+    /* We need a portable way to determine emode and */
+    /* and efixed that will work for any matrix workspace! */
     int    emode  = 0;
-    double efixed = 0.;
-    double delta  = 0.;
+    double efixed = 0.0;
+    double delta  = 0.0;
 
-//  std::cout << "Start of checks for emode" << std::endl;
-
-                        // First try to get emode & efixed from the user
-    if ( saved_emode_handler != 0 )
+    // First try to get emode & efixed from the user
+    if ( m_emodeHandler != NULL )
     {
-      efixed = saved_emode_handler->GetEFixed();
+      efixed = m_emodeHandler->getEFixed();
       if ( efixed != 0 )
       {
-        emode = saved_emode_handler->GetEMode();
+        emode = m_emodeHandler->getEMode();
         if ( emode == 0 )
         {
-          ErrorHandler::Error("EMode invalid, spectrometer needed if emode != 0");
-          ErrorHandler::Error("Assuming Direct Geometry Spectrometer....");
+          g_log.information("EMode invalid, spectrometer needed if emode != 0");
+          g_log.information("Assuming Direct Geometry Spectrometer....");
           emode = 1;
         }
       }
     }
 
-//  std::cout << "Done with calls to GetEFixed and GetEMode" << std::endl;
-//  std::cout << "EMode  = " << emode  << std::endl;
-//  std::cout << "EFixed = " << efixed << std::endl;
-
-    if ( efixed == 0 )    // Did NOT get emode & efixed from user, try getting
-    {                     // direct geometry information from the run object
-      const API::Run & run = mat_ws->run();
+    // Did NOT get emode & efixed from user, try getting direct geometry information from the run object
+    if ( efixed == 0 )
+    {
+      const API::Run & run = m_matWs->run();
       if ( run.hasProperty("Ei") )
       {
         Kernel::Property* prop = run.getProperty("Ei");
@@ -387,17 +380,14 @@ void MatrixWSDataSource::GetInfoList( double x,
       }
     }
 
-//  std::cout << "Done with getting info from run" << std::endl;
-//  std::cout << "EMode  = " << emode  << std::endl;
-//  std::cout << "EFixed = " << efixed << std::endl;
-
-    if ( efixed == 0 )    // finally, try getting indirect geometry information
-    {                     // from the detector object
+    // Finally, try getting indirect geometry information from the detector object
+    if ( efixed == 0 )
+    {
       if ( !(det->isMonitor() && det->hasParameter("Efixed")))
       {
         try
         {
-          const ParameterMap& pmap = mat_ws->constInstrumentParameters();
+          const ParameterMap& pmap = m_matWs->constInstrumentParameters();
           Parameter_sptr par = pmap.getRecursive(det.get(),"Efixed");
           if (par)
           {
@@ -407,36 +397,26 @@ void MatrixWSDataSource::GetInfoList( double x,
         }
         catch ( std::runtime_error& )
         {
-          std::ostringstream message;
-          message << "Failed to get Efixed from detector ID: "
-                  << det->getID() << " in MatrixWSDataSource";
-          ErrorHandler::Error( message.str() );
+          g_log.debug() << "Failed to get Efixed from detector ID: "
+                        << det->getID() << " in MatrixWSDataSource" << std::endl;
           efixed = 0;
         }
       }
     }
 
-//  std::cout << "Done with getting info from detector" << std::endl;
-//  std::cout << "EMode  = " << emode  << std::endl;
-//  std::cout << "EFixed = " << efixed << std::endl;
-
     if ( efixed == 0 )
-    {
       emode = 0;
-    }
 
-    if ( saved_emode_handler != 0 )
+    if ( m_emodeHandler != NULL )
     {
-      saved_emode_handler -> SetEFixed( efixed );
-      saved_emode_handler -> SetEMode ( emode );
+      m_emodeHandler -> setEFixed( efixed );
+      m_emodeHandler -> setEMode ( emode );
     }
 
     double tof = old_unit->convertSingleToTOF( x, l1, l2, two_theta,
                                                emode, efixed, delta );
     if ( ! (x_label == "Time-of-flight") )
-    {
       SVUtils::PushNameValue( "Time-of-flight", 8, 1, tof, list );
-    }
 
     if ( ! (x_label == "Wavelength") )
     {
@@ -480,8 +460,7 @@ void MatrixWSDataSource::GetInfoList( double x,
   }
   catch (std::exception & e)
   {
-    ErrorHandler::Notice("Failed to get information from Workspace:");
-    ErrorHandler::Notice( e.what() );
+    g_log.debug() << "Failed to get information from Workspace:" << e.what() << std::endl;
   }
 }
 
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/MatrixWSSpectrumView.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/MatrixWSSpectrumView.cpp
index c8d995c67453d44ebbf593a0b79b702357d4b923..f98607a191658ffab63eb0a71f0f2682d0139357 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/MatrixWSSpectrumView.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/MatrixWSSpectrumView.cpp
@@ -6,26 +6,23 @@ using Mantid::API::MatrixWorkspace_const_sptr;
 using namespace MantidQt;
 using namespace SpectrumView;
 
+
 /**
  * Construct an SpectrumView for the specified matrix workspace
  */
 MatrixWSSpectrumView::MatrixWSSpectrumView( MatrixWorkspace_const_sptr mat_ws )
 {
-  spectrum_view = new SpectrumView();  // this is the QMainWindow
-                                               // for the viewer.  It is
-                                               // deleted when the window
-                                               // is closed
-
-  std::string title = std::string("SpectrumView ( ") + 
-                                   mat_ws->getTitle() + 
-                      std::string(" )");
+  /* This is the QMainWindow for the viewer. */
+  /* It is deleted when the window is closed. */
+  spectrum_view = new SpectrumView();
 
+  std::string title = "SpectrumView (" + mat_ws->getTitle() + ")";
   QString qtitle = QString::fromStdString(title);
-
   spectrum_view->setCaption( qtitle );
   spectrum_view->renderWorkspace(mat_ws);
 }
 
+
 MatrixWSSpectrumView::~MatrixWSSpectrumView()
 {
   // nothing to do here, since spectrum_view is deleted when the window closes
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/QtUtils.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/QtUtils.cpp
index edc3348cf7cb19b43e891ae4f114fb32033b8986..ed1c3a2d250ae2e682d9bbf6bb4f08dd8ce91834 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/QtUtils.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/QtUtils.cpp
@@ -1,5 +1,4 @@
-
-#include "MantidQtSpectrumViewer/QtUtils.h" 
+#include "MantidQtSpectrumViewer/QtUtils.h"
 #include "MantidQtSpectrumViewer/SVUtils.h"
 
 namespace MantidQt
@@ -16,19 +15,19 @@ namespace SpectrumView
  * @param string  The string that will be placed in the table.
  * @param table   Pointer to the table
  */
-void QtUtils::SetTableEntry(       int           row, 
-                                   int           col, 
+void QtUtils::SetTableEntry(       int           row,
+                                   int           col,
                              const std::string & string,
                                    QTableWidget* table )
 {
-  QString q_string = QString::fromStdString( string );
-  QTableWidgetItem *item = new QTableWidgetItem( q_string );
+  QString qString = QString::fromStdString( string ).simplified();
+  QTableWidgetItem *item = new QTableWidgetItem( qString );
   table->setItem( row, col, item );
 }
 
 
 /**
- * Format and set the specified double as the entry at the specified row 
+ * Format and set the specified double as the entry at the specified row
  * and col of the specified table.
  *
  * @param row       The row number where the string should appear.
@@ -39,8 +38,8 @@ void QtUtils::SetTableEntry(       int           row,
  * @param value     The number to be formatted and placed in the table.
  * @param table     Pointer to the table
  */
-void  QtUtils::SetTableEntry( int           row, 
-                              int           col, 
+void  QtUtils::SetTableEntry( int           row,
+                              int           col,
                               int           width,
                               int           precision,
                               double        value,
@@ -53,39 +52,38 @@ void  QtUtils::SetTableEntry( int           row,
 
 
 /**
- * Set the specified string into the specified QLineEdit widget. 
+ * Set the specified string into the specified QLineEdit widget.
  *
- * @param string       The string that will be placed in the widget.
- * @param q_line_edit  Pointer to the QLineEdit widget.
+ * @param string    The string that will be placed in the widget.
+ * @param lineEdit  Pointer to the QLineEdit widget.
  */
 void  QtUtils::SetText( const std::string & string,
-                              QLineEdit*    q_line_edit )
+                              QLineEdit*    lineEdit )
 {
-  QString q_string = QString::fromStdString( string );
-  q_line_edit->setText( q_string );
+  QString qString = QString::fromStdString( string );
+  lineEdit->setText( qString.trimmed() );
 }
 
 
 /**
- * Format and set the specified double as the text in the specified  
- * QLineEdit widget. 
+ * Format and set the specified double as the text in the specified
+ * QLineEdit widget.
  *
- * @param width       The number of spaces to use when formatting the value.
- * @param precision    The number of significant figures to use when formatting
- *                    the value.
- * @param value       The number to be formatted and placed in the table.
- * @param q_line_edit Pointer to the QLineEdit widget.
+ * @param width      The number of spaces to use when formatting the value.
+ * @param precision  The number of significant figures to use when formatting
+ *                   the value.
+ * @param value      The number to be formatted and placed in the table.
+ * @param lineEdit   Pointer to the QLineEdit widget.
  */
 void  QtUtils::SetText( int        width,
                         int        precision,
                         double     value,
-                        QLineEdit* q_line_edit )
+                        QLineEdit* lineEdit )
 {
   std::string str;
   SVUtils::Format( width, precision, value, str );
-  SetText( str, q_line_edit );
+  SetText( str, lineEdit );
 }
 
-
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/RangeHandler.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/RangeHandler.cpp
index 73238c78f25381521f8dc0708fee2fa2c578681a..1323f46d9255a225ea52019ca1f896f5b50a0fd1 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/RangeHandler.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/RangeHandler.cpp
@@ -1,11 +1,17 @@
-
 #include <iostream>
 #include <QLineEdit>
 
 #include "MantidQtSpectrumViewer/RangeHandler.h"
 #include "MantidQtSpectrumViewer/QtUtils.h"
 #include "MantidQtSpectrumViewer/SVUtils.h"
-#include "MantidQtSpectrumViewer/ErrorHandler.h"
+#include "MantidKernel/Logger.h"
+
+
+namespace
+{
+  Mantid::Kernel::Logger g_log("SpectrumView");
+}
+
 
 namespace MantidQt
 {
@@ -13,34 +19,31 @@ namespace SpectrumView
 {
 
 /**
- *  Construct a RangeHandler object to manage min, max and step controls 
+ *  Construct a RangeHandler object to manage min, max and step controls
  *  in the specified UI
  */
-RangeHandler::RangeHandler( Ui_SpectrumViewer* sv_ui ) : IRangeHandler()
+RangeHandler::RangeHandler( Ui_SpectrumViewer* svUI )
+  : IRangeHandler(), m_svUI(svUI)
 {
-  this->sv_ui = sv_ui;
 }
 
 
 /**
  * Configure the min, max and step controls for the specified data source.
  *
- * @param data_source  SpectrumDataSource that provides the data to be drawn
+ * @param dataSource  SpectrumDataSource that provides the data to be drawn
  */
-void RangeHandler::ConfigureRangeControls( SpectrumDataSource* data_source )
+void RangeHandler::configureRangeControls( SpectrumDataSource_sptr dataSource )
 {
-  
-  total_min_x   = data_source->GetXMin();
-  total_max_x   = data_source->GetXMax();
-  total_n_steps = data_source->GetNCols();
+  m_totalMinX   = dataSource->getXMin();
+  m_totalMaxX   = dataSource->getXMax();
+  m_totalNSteps = dataSource->getNCols();
 
-  double default_step = (total_max_x - total_min_x)/(double)total_n_steps;
-  if ( total_n_steps > 2000 )
-  {
-    default_step = (total_max_x - total_min_x)/2000.0;
-  }
+  double defaultStep = (m_totalMaxX - m_totalMinX) / (double)m_totalNSteps;
+  if ( m_totalNSteps > 2000 )
+    defaultStep = (m_totalMaxX - m_totalMinX) / 2000.0;
 
-  SetRange( total_min_x, total_max_x, default_step );
+  setRange( m_totalMinX, m_totalMaxX, defaultStep );
 }
 
 
@@ -52,7 +55,7 @@ void RangeHandler::ConfigureRangeControls( SpectrumDataSource* data_source )
  *
  * @param min     On input, this should be the default value that the
  *                min should be set to, if getting the range fails.
- *                On output this is will be set to the x value at the 
+ *                On output this is will be set to the x value at the
  *                left edge of the first bin to display, if getting the
  *                range succeeds.
  * @param max     On input, this should be the default value that the
@@ -60,114 +63,118 @@ void RangeHandler::ConfigureRangeControls( SpectrumDataSource* data_source )
  *                On output, if getting the range succeeds, this will
  *                be set an x value at the right edge of the last bin
  *                to display.  This will be adjusted so that it is larger
- *                than min by an integer number of steps.  
+ *                than min by an integer number of steps.
  * @param step    On input this should be the default number of steps
  *                to use if getting the range information fails.
  *                On output, this is size of the step to use between
- *                min and max.  If it is less than zero, a log scale 
+ *                min and max.  If it is less than zero, a log scale
  *                is requested.
  */
-void RangeHandler::GetRange( double &min, double &max, double &step )
+void RangeHandler::getRange( double &min, double &max, double &step )
 {
-  double original_min  = min;
-  double original_max  = max;
-  double original_step = step;
+  double originalMin  = min;
+  double originalMax  = max;
+  double originalStep = step;
 
-  QLineEdit* min_control  = sv_ui->x_min_input;
-  QLineEdit* max_control  = sv_ui->x_max_input;
-  QLineEdit* step_control = sv_ui->step_input;
+  QLineEdit* minControl  = m_svUI->x_min_input;
+  QLineEdit* maxControl  = m_svUI->x_max_input;
+  QLineEdit* stepControl = m_svUI->step_input;
 
-  if ( !SVUtils::StringToDouble(  min_control->text().toStdString(), min ) )
+  bool minIsNumber = false;
+  bool maxIsNumber = false;
+  bool stepIsNumber = false;
+
+  min = minControl->text().toDouble(&minIsNumber);
+  max = maxControl->text().toDouble(&maxIsNumber);
+  step = stepControl->text().toDouble(&stepIsNumber);
+
+  if(!minIsNumber)
   {
-    ErrorHandler::Error("X Min is not a NUMBER! Value reset.");
-    min = original_min;
+    g_log.information("X Min is not a NUMBER! Value reset.");
+    min = originalMin;
   }
-  if ( !SVUtils::StringToDouble(  max_control->text().toStdString(), max ) )
+
+  if(!maxIsNumber)
   {
-    ErrorHandler::Error("X Max is not a NUMBER! Value reset.");
-    max = original_max;
+    g_log.information("X Max is not a NUMBER! Value reset.");
+    max = originalMax;
   }
-  if ( !SVUtils::StringToDouble(  step_control->text().toStdString(), step ) )
+
+  if(!stepIsNumber)
   {
-    ErrorHandler::Error("Step is not a NUMBER! Value reset.");
-    step = original_step;
+    g_log.information("Step is not a NUMBER! Value reset.");
+    step = originalStep;
   }
 
-                                 // just require step to be non-zero, no other
-                                 // bounds. If zero, take a default step size  
-  if ( step == 0 ) 
+  // Just require step to be non-zero, no other bounds. If zero, take a default step size
+  if ( step == 0 )
   {
-    ErrorHandler::Error("Step = 0, resetting to default step");
-    step = original_step;
+    g_log.information("Step = 0, resetting to default step");
+    step = originalStep;
   }
 
   if ( step > 0 )
   {
     if ( !SVUtils::FindValidInterval( min, max ) )
     {
-      ErrorHandler::Warning( 
-             "In GetRange: [Min,Max] interval invalid, values adjusted" );
-      min  = original_min;
-      max  = original_max;
-      step = original_step;
+      g_log.information( "In GetRange: [Min,Max] interval invalid, values adjusted" );
+      min  = originalMin;
+      max  = originalMax;
+      step = originalStep;
     }
   }
   else
   {
     if ( !SVUtils::FindValidLogInterval( min, max ) )
     {
-      ErrorHandler::Warning(
-          "In GetRange: [Min,Max] log interval invalid, values adjusted");
-      min  = original_min;
-      max  = original_max;
-      step = original_step;
+      g_log.information( "In GetRange: [Min,Max] log interval invalid, values adjusted");
+      min  = originalMin;
+      max  = originalMax;
+      step = originalStep;
     }
   }
 
-  SetRange( min, max, step );
+  setRange( min, max, step );
 }
 
 
 /**
- * Adjust the values to be consistent with the available data and 
+ * Adjust the values to be consistent with the available data and
  * diplay them in the controls.
  *
  * @param min     This is the x value at the left edge of the first bin.
  * @param max     This is an x value at the right edge of the last bin.
- * @param step    This is size of the step to use between min and max. 
+ * @param step    This is size of the step to use between min and max.
  *                If it is less than zero, a log scale is requested.
  */
-void RangeHandler::SetRange( double min, double max, double step )
+void RangeHandler::setRange( double min, double max, double step )
 {
   if ( !SVUtils::FindValidInterval( min, max ) )
-  {
-    ErrorHandler::Warning( 
-            "In SetRange: [Min,Max] interval invalid, values adjusted" );
-  }
+    g_log.information("In SetRange: [Min,Max] interval invalid, values adjusted" );
 
-  if ( min < total_min_x || min > total_max_x )
+  if ( min < m_totalMinX || min > m_totalMaxX )
   {
-//    ErrorHandler::Warning("X Min out of range, resetting to range min.");
-    min = total_min_x;
+    g_log.information("X Min out of range, resetting to range min.");
+    min = m_totalMinX;
   }
 
-  if ( max < total_min_x || max > total_max_x )
+  if ( max < m_totalMinX || max > m_totalMaxX )
   {
-//    ErrorHandler::Warning("X Max out of range, resetting to range max.");
-    max = total_max_x;
+    g_log.information("X Max out of range, resetting to range max.");
+    max = m_totalMaxX;
   }
 
   if ( step == 0 )
   {
-    ErrorHandler::Error("Step = 0, resetting to default step");
-    step = (max-min)/2000.0;
+    g_log.information("Step = 0, resetting to default step");
+    step = (max - min) / 2000.0;
   }
 
-  QtUtils::SetText( 8, 2, min, sv_ui->x_min_input );
-  QtUtils::SetText( 8, 2, max, sv_ui->x_max_input );
-  QtUtils::SetText( 8, 6, step, sv_ui->step_input );
+  QtUtils::SetText( 8, 2, min, m_svUI->x_min_input );
+  QtUtils::SetText( 8, 2, max, m_svUI->x_max_input );
+  QtUtils::SetText( 8, 6, step, m_svUI->step_input );
 }
 
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/SVConnections.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/SVConnections.cpp
index daa4f1203634fe869d5cb39d6c51789d660cf31d..da2401a047dc6fc246f02141b26f77e74b264b88 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/SVConnections.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/SVConnections.cpp
@@ -1,4 +1,3 @@
-
 #include <iostream>
 #include <qwt_plot_canvas.h>
 
@@ -20,265 +19,266 @@ namespace SpectrumView
  * The objects passed in must be constructed elsewhere and must be deleted
  * elsewhere, when the SpectrumViewer is closed.
  *
- * @param ui               The object containing the gui components for 
- *                         the SpectrumView viewer.
- * @param spectrum_view    The main window.
- * @param spectrum_display The SpectrumDisplay object that will display the
- *                         image
- * @param h_graph_display  The GraphDisplay object that will display 
- *                         horizontal cuts through the image
- * @param v_graph_display  The GraphDisplay object that will display 
- *                         vertical cuts through the image
+ * @param ui              The object containing the gui components for
+ *                        the SpectrumView viewer.
+ * @param spectrumView    The main window.
+ * @param spectrumDisplay The SpectrumDisplay object that will display the
+ *                        image
+ * @param hGraphDisplay   The GraphDisplay object that will display
+ *                        horizontal cuts through the image
+ * @param vGraphDisplay   The GraphDisplay object that will display
+ *                        vertical cuts through the image
  *
  */
-SVConnections::SVConnections( Ui_SpectrumViewer* ui, 
-                              SpectrumView*      spectrum_view,
-                              SpectrumDisplay*   spectrum_display,
-                              GraphDisplay*   h_graph_display,
-                              GraphDisplay*   v_graph_display ) :
-  m_picker_x(-1), m_picker_y(-1)
+SVConnections::SVConnections( Ui_SpectrumViewer* ui,
+                              SpectrumView*      spectrumView,
+                              SpectrumDisplay*   spectrumDisplay,
+                              GraphDisplay*      hGraphDisplay,
+                              GraphDisplay*      vGraphDisplay ) :
+  m_svUI(ui),
+  m_svMainWindow(spectrumView),
+  m_spectrumDisplay(spectrumDisplay),
+  m_hGraphDisplay(hGraphDisplay),
+  m_vGraphDisplay(vGraphDisplay),
+  m_pickerX(-1), m_pickerY(-1)
 {
-  sv_ui = ui;
-                              // first disable a few un-implemented controls
-  sv_ui->menuGraph_Selected->setDisabled(true);
-  sv_ui->actionClear_Selections->setDisabled(true);
-  sv_ui->actionOverlaid->setDisabled(true);
-  sv_ui->actionOffset_Vertically->setDisabled(true);
-  sv_ui->actionOffset_Diagonally->setDisabled(true);
-  sv_ui->actionGraph_Rebinned_Data->setDisabled(true);
-  sv_ui->menuHelp->setDisabled(false);
- 
-  this->sv_main_window = spectrum_view;
-  QObject::connect( sv_ui->actionClose, SIGNAL(triggered()),
-                    this, SLOT(close_viewer()) );
- 
-                              // now set up the gui components
-  this->spectrum_display   = spectrum_display;
-  this->h_graph_display = h_graph_display;
-  this->v_graph_display = v_graph_display;
-
+  // First disable a few un-implemented controls
+  m_svUI->menuGraph_Selected->setDisabled(true);
+  m_svUI->actionClear_Selections->setDisabled(true);
+  m_svUI->actionOverlaid->setDisabled(true);
+  m_svUI->actionOffset_Vertically->setDisabled(true);
+  m_svUI->actionOffset_Diagonally->setDisabled(true);
+  m_svUI->actionGraph_Rebinned_Data->setDisabled(true);
+  m_svUI->menuHelp->setDisabled(false);
+
+  QObject::connect( m_svUI->actionClose, SIGNAL(triggered()),
+                    this, SLOT(closeViewer()) );
+
+  // Now set up the GUI components
   QList<int> image_sizes;
   image_sizes.append( 500 );
   image_sizes.append( 250 );
-  sv_ui->imageSplitter->setSizes( image_sizes );
+  m_svUI->imageSplitter->setSizes( image_sizes );
   QList<int> vgraph_sizes;
   vgraph_sizes.append( 500 );
   vgraph_sizes.append( 30 );
   vgraph_sizes.append( 220 );
-  sv_ui->vgraphSplitter->setSizes( vgraph_sizes );
+  m_svUI->vgraphSplitter->setSizes( vgraph_sizes );
 
   QList<int> horiz_sizes;
   horiz_sizes.append( 250 );
   horiz_sizes.append( 750 );
   horiz_sizes.append( 150 );
-  sv_ui->left_right_splitter->setSizes( horiz_sizes );
-
-  sv_ui->imageHorizontalScrollBar->setFocusPolicy( Qt::StrongFocus );
-  sv_ui->imageHorizontalScrollBar->setMouseTracking(true);
-  sv_ui->imageHorizontalScrollBar->setMinimum(20);
-  sv_ui->imageHorizontalScrollBar->setMaximum(2000);
-  sv_ui->imageHorizontalScrollBar->setPageStep(30);
-  sv_ui->imageHorizontalScrollBar->setSingleStep(30/2);
-
-  sv_ui->imageVerticalScrollBar->setFocusPolicy( Qt::StrongFocus );
-  sv_ui->imageVerticalScrollBar->setMouseTracking(true);
-  sv_ui->imageVerticalScrollBar->setMinimum(0);
-  sv_ui->imageVerticalScrollBar->setMaximum(10000000);
-  sv_ui->imageVerticalScrollBar->setPageStep(500);
-  sv_ui->imageVerticalScrollBar->setSingleStep(500/2);
+  m_svUI->left_right_splitter->setSizes( horiz_sizes );
+
+  m_svUI->imageHorizontalScrollBar->setFocusPolicy( Qt::StrongFocus );
+  m_svUI->imageHorizontalScrollBar->setMouseTracking(true);
+  m_svUI->imageHorizontalScrollBar->setMinimum(20);
+  m_svUI->imageHorizontalScrollBar->setMaximum(2000);
+  m_svUI->imageHorizontalScrollBar->setPageStep(30);
+  m_svUI->imageHorizontalScrollBar->setSingleStep(30/2);
+
+  m_svUI->imageVerticalScrollBar->setFocusPolicy( Qt::StrongFocus );
+  m_svUI->imageVerticalScrollBar->setMouseTracking(true);
+  m_svUI->imageVerticalScrollBar->setMinimum(0);
+  m_svUI->imageVerticalScrollBar->setMaximum(10000000);
+  m_svUI->imageVerticalScrollBar->setPageStep(500);
+  m_svUI->imageVerticalScrollBar->setSingleStep(500/2);
 
   // for forwarding scroll wheel events
-  sv_ui->spectrumPlot->canvas()->installEventFilter(this);
+  m_svUI->spectrumPlot->canvas()->installEventFilter(this);
 
-  sv_ui->action_Hscroll->setCheckable(true);
-  sv_ui->action_Hscroll->setChecked(false);
-  sv_ui->imageHorizontalScrollBar->hide();
-  sv_ui->imageHorizontalScrollBar->setEnabled(false);
+  m_svUI->action_Hscroll->setCheckable(true);
+  m_svUI->action_Hscroll->setChecked(false);
+  m_svUI->imageHorizontalScrollBar->hide();
+  m_svUI->imageHorizontalScrollBar->setEnabled(false);
 
-  sv_ui->action_Vscroll->setCheckable(true);
-  sv_ui->action_Vscroll->setChecked(true);
-  sv_ui->imageVerticalScrollBar->show();
-  sv_ui->imageVerticalScrollBar->setEnabled(true);
+  m_svUI->action_Vscroll->setCheckable(true);
+  m_svUI->action_Vscroll->setChecked(true);
+  m_svUI->imageVerticalScrollBar->show();
+  m_svUI->imageVerticalScrollBar->setEnabled(true);
 
-  sv_ui->intensity_slider->setTickInterval(10);
-  sv_ui->intensity_slider->setTickPosition(QSlider::TicksBelow);
-  sv_ui->intensity_slider->setSliderPosition(30);
+  m_svUI->intensity_slider->setTickInterval(10);
+  m_svUI->intensity_slider->setTickPosition(QSlider::TicksBelow);
+  m_svUI->intensity_slider->setSliderPosition(30);
 
-  sv_ui->graph_max_slider->setTickInterval(10);
-  sv_ui->graph_max_slider->setTickPosition(QSlider::TicksBelow);
-  sv_ui->graph_max_slider->setSliderPosition(100);
+  m_svUI->graph_max_slider->setTickInterval(10);
+  m_svUI->graph_max_slider->setTickPosition(QSlider::TicksBelow);
+  m_svUI->graph_max_slider->setSliderPosition(100);
 
-  image_picker = new TrackingPicker( sv_ui->spectrumPlot->canvas() );
-  image_picker->setMousePattern(QwtPicker::MouseSelect1, Qt::LeftButton);
-  image_picker->setTrackerMode(QwtPicker::ActiveOnly);
-  image_picker->setRubberBandPen(QColor(Qt::gray));
+  m_imagePicker = new TrackingPicker( m_svUI->spectrumPlot->canvas() );
+  m_imagePicker->setMousePattern(QwtPicker::MouseSelect1, Qt::LeftButton);
+  m_imagePicker->setTrackerMode(QwtPicker::ActiveOnly);
+  m_imagePicker->setRubberBandPen(QColor(Qt::gray));
 
 /* // point selections & connection works on mouse release
 */
-  image_picker->setRubberBand(QwtPicker::CrossRubberBand);
-  image_picker->setSelectionFlags(QwtPicker::PointSelection | 
+  m_imagePicker->setRubberBand(QwtPicker::CrossRubberBand);
+  m_imagePicker->setSelectionFlags(QwtPicker::PointSelection |
                                   QwtPicker::DragSelection  );
 /*
-  QObject::connect( image_picker, SIGNAL(selected(const QwtPolygon &)),
+  QObject::connect( m_imagePicker, SIGNAL(selected(const QwtPolygon &)),
                     this, SLOT(imagePickerSelectedPoint()) );
 */
 
 /*  // point selection works on mouse click, NO CROSSHAIRS...
 
-  image_picker->setRubberBand(QwtPicker::CrossRubberBand);
-  image_picker->setSelectionFlags(QwtPicker::PointSelection | 
+  m_imagePicker->setRubberBand(QwtPicker::CrossRubberBand);
+  m_imagePicker->setSelectionFlags(QwtPicker::PointSelection |
                                   QwtPicker::ClickSelection  );
-  QObject::connect( image_picker, SIGNAL(selected(const QwtPolygon &)),
+  QObject::connect( m_imagePicker, SIGNAL(selected(const QwtPolygon &)),
                     this, SLOT(imagePickerSelectedPoint()) );
 */
 
 /*  // rect selection calls SLOT on mouse release
-  
-  image_picker->setMousePattern(QwtPicker::MouseSelect1, Qt::MidButton);
-  image_picker->setRubberBand(QwtPicker::RectRubberBand);
-  image_picker->setSelectionFlags(QwtPicker::RectSelection | 
+
+  m_imagePicker->setMousePattern(QwtPicker::MouseSelect1, Qt::MidButton);
+  m_imagePicker->setRubberBand(QwtPicker::RectRubberBand);
+  m_imagePicker->setSelectionFlags(QwtPicker::RectSelection |
                                   QwtPicker::DragSelection  );
-  QObject::connect( image_picker, SIGNAL(selected(const QwtPolygon &)),
+  QObject::connect( m_imagePicker, SIGNAL(selected(const QwtPolygon &)),
                     this, SLOT(imagePickerSelectedPoint()) );
 */
 
 /*
-  image_picker->setRubberBand(QwtPicker::CrossRubberBand);
-  image_picker->setSelectionFlags(QwtPicker::PointSelection | 
+  m_imagePicker->setRubberBand(QwtPicker::CrossRubberBand);
+  m_imagePicker->setSelectionFlags(QwtPicker::PointSelection |
                                   QwtPicker::ClickSelection  );
 */
-  QObject::connect( image_picker, SIGNAL(mouseMoved(const QPoint &)),
-                    this, SLOT(imagePicker_moved(const QPoint &)) );
+  QObject::connect( m_imagePicker, SIGNAL(mouseMoved(const QPoint &)),
+                    this, SLOT(imagePickerMoved(const QPoint &)) );
 
-  QObject::connect(sv_ui->imageSplitter, SIGNAL(splitterMoved(int,int)),
-                   this, SLOT(imageSplitter_moved()) );
+  QObject::connect(m_svUI->imageSplitter, SIGNAL(splitterMoved(int, int)),
+                   this, SLOT(imageSplitterMoved()) );
 
-  QObject::connect(sv_ui->x_min_input, SIGNAL( returnPressed() ),
-                   this, SLOT(image_horizontal_range_changed()) );
+  QObject::connect(m_svUI->vgraphSplitter, SIGNAL(splitterMoved(int, int)),
+                   this, SLOT(vgraphSplitterMoved()) );
 
-  QObject::connect(sv_ui->x_max_input, SIGNAL( returnPressed() ),
-                   this, SLOT(image_horizontal_range_changed()) );
+  QObject::connect(m_svUI->x_min_input, SIGNAL( returnPressed() ),
+                   this, SLOT(imageHorizontalRangeChanged()) );
 
-  QObject::connect(sv_ui->step_input, SIGNAL( returnPressed() ),
-                   this, SLOT(image_horizontal_range_changed()) );
+  QObject::connect(m_svUI->x_max_input, SIGNAL( returnPressed() ),
+                   this, SLOT(imageHorizontalRangeChanged()) );
 
-  QObject::connect(sv_ui->imageVerticalScrollBar, SIGNAL(valueChanged(int)),
-                   this, SLOT(v_scroll_bar_moved()) );
+  QObject::connect(m_svUI->step_input, SIGNAL( returnPressed() ),
+                   this, SLOT(imageHorizontalRangeChanged()) );
 
-  QObject::connect(sv_ui->imageHorizontalScrollBar, SIGNAL(valueChanged(int)),
-                   this, SLOT(h_scroll_bar_moved()) );
+  QObject::connect(m_svUI->imageVerticalScrollBar, SIGNAL(valueChanged(int)),
+                   this, SLOT(scrollBarMoved()) );
 
-  QObject::connect(sv_ui->action_Hscroll, SIGNAL(changed()),
-                   this, SLOT(toggle_Hscroll()) );
+  QObject::connect(m_svUI->imageHorizontalScrollBar, SIGNAL(valueChanged(int)),
+                   this, SLOT(scrollBarMoved()) );
 
-  QObject::connect(sv_ui->action_Vscroll, SIGNAL(changed()),
-                   this, SLOT(toggle_Vscroll()) );
+  QObject::connect(m_svUI->action_Hscroll, SIGNAL(changed()),
+                   this, SLOT(toggleHScroll()) );
 
-  QObject::connect(sv_ui->intensity_slider, SIGNAL(valueChanged(int)),
-                   this, SLOT(intensity_slider_moved()) );
+  QObject::connect(m_svUI->action_Vscroll, SIGNAL(changed()),
+                   this, SLOT(toggleVScroll()) );
 
-  QObject::connect(sv_ui->graph_max_slider, SIGNAL(valueChanged(int)),
-                   this, SLOT(graph_range_changed()) );
+  QObject::connect(m_svUI->intensity_slider, SIGNAL(valueChanged(int)),
+                   this, SLOT(intensitySliderMoved()) );
 
-                                                     // color scale selections 
-  sv_ui->actionHeat->setCheckable(true);
-  sv_ui->actionHeat->setChecked(true);
-  sv_ui->actionGray->setCheckable(true);
-  sv_ui->actionNegative_Gray->setCheckable(true);
-  sv_ui->actionGreen_Yellow->setCheckable(true);
-  sv_ui->actionRainbow->setCheckable(true);
-  sv_ui->actionOptimal->setCheckable(true);
-  sv_ui->actionMulti->setCheckable(true);
-  sv_ui->actionSpectrum->setCheckable(true);
-  sv_ui->actionLoadColormap->setCheckable(true);
+  QObject::connect(m_svUI->graph_max_slider, SIGNAL(valueChanged(int)),
+                   this, SLOT(graphRangeChanged()) );
+
+  // Color scale selections
+  m_svUI->actionHeat->setCheckable(true);
+  m_svUI->actionHeat->setChecked(true);
+  m_svUI->actionGray->setCheckable(true);
+  m_svUI->actionNegative_Gray->setCheckable(true);
+  m_svUI->actionGreen_Yellow->setCheckable(true);
+  m_svUI->actionRainbow->setCheckable(true);
+  m_svUI->actionOptimal->setCheckable(true);
+  m_svUI->actionMulti->setCheckable(true);
+  m_svUI->actionSpectrum->setCheckable(true);
+  m_svUI->actionLoadColormap->setCheckable(true);
                                                     // set up initial color
                                                     // scale display
-  sv_ui->color_scale->setScaledContents(true);
-  sv_ui->color_scale->setMinimumHeight(15);
-  sv_ui->color_scale->setMinimumWidth(15);
+  m_svUI->color_scale->setScaledContents(true);
+  m_svUI->color_scale->setMinimumHeight(15);
+  m_svUI->color_scale->setMinimumWidth(15);
   std::vector<QRgb> positive_color_table;
   ColorMaps::GetColorMap( ColorMaps::HEAT, 256, positive_color_table );
 
   std::vector<QRgb> negative_color_table;
   ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negative_color_table );
 
-  ShowColorScale( positive_color_table, negative_color_table );
+  showColorScale( positive_color_table, negative_color_table );
 
-  color_group = new QActionGroup(this);
-  color_group->addAction(sv_ui->actionHeat);
-  color_group->addAction(sv_ui->actionGray);
-  color_group->addAction(sv_ui->actionNegative_Gray);
-  color_group->addAction(sv_ui->actionGreen_Yellow);
-  color_group->addAction(sv_ui->actionRainbow);
-  color_group->addAction(sv_ui->actionOptimal);
-  color_group->addAction(sv_ui->actionMulti);
-  color_group->addAction(sv_ui->actionSpectrum);
-  color_group->addAction(sv_ui->actionLoadColormap);
+  m_colorGroup = new QActionGroup(this);
+  m_colorGroup->addAction(m_svUI->actionHeat);
+  m_colorGroup->addAction(m_svUI->actionGray);
+  m_colorGroup->addAction(m_svUI->actionNegative_Gray);
+  m_colorGroup->addAction(m_svUI->actionGreen_Yellow);
+  m_colorGroup->addAction(m_svUI->actionRainbow);
+  m_colorGroup->addAction(m_svUI->actionOptimal);
+  m_colorGroup->addAction(m_svUI->actionMulti);
+  m_colorGroup->addAction(m_svUI->actionSpectrum);
+  m_colorGroup->addAction(m_svUI->actionLoadColormap);
 
-  QObject::connect(sv_ui->actionHeat, SIGNAL(triggered()),
-                   this, SLOT(heat_color_scale()) );
+  QObject::connect(m_svUI->actionHeat, SIGNAL(triggered()),
+                   this, SLOT(heatColorScale()) );
 
-  QObject::connect(sv_ui->actionGray, SIGNAL(triggered()),
-                   this, SLOT(gray_color_scale()) );
+  QObject::connect(m_svUI->actionGray, SIGNAL(triggered()),
+                   this, SLOT(grayColorScale()) );
 
-  QObject::connect(sv_ui->actionNegative_Gray, SIGNAL(triggered()),
-                   this, SLOT(negative_gray_color_scale()) );
+  QObject::connect(m_svUI->actionNegative_Gray, SIGNAL(triggered()),
+                   this, SLOT(negativeGrayColorScale()) );
 
-  QObject::connect(sv_ui->actionGreen_Yellow, SIGNAL(triggered()),
-                   this, SLOT(green_yellow_color_scale()) );
+  QObject::connect(m_svUI->actionGreen_Yellow, SIGNAL(triggered()),
+                   this, SLOT(greenYellowColorScale()) );
 
-  QObject::connect(sv_ui->actionRainbow, SIGNAL(triggered()),
-                   this, SLOT(rainbow_color_scale()) );
+  QObject::connect(m_svUI->actionRainbow, SIGNAL(triggered()),
+                   this, SLOT(rainbowColorScale()) );
 
-  QObject::connect(sv_ui->actionOptimal, SIGNAL(triggered()),
-                   this, SLOT(optimal_color_scale()) );
+  QObject::connect(m_svUI->actionOptimal, SIGNAL(triggered()),
+                   this, SLOT(optimalColorScale()) );
 
-  QObject::connect(sv_ui->actionMulti, SIGNAL(triggered()),
-                   this, SLOT(multi_color_scale()) );
+  QObject::connect(m_svUI->actionMulti, SIGNAL(triggered()),
+                   this, SLOT(multiColorScale()) );
 
-  QObject::connect(sv_ui->actionSpectrum, SIGNAL(triggered()),
-                   this, SLOT(spectrum_color_scale()) );
+  QObject::connect(m_svUI->actionSpectrum, SIGNAL(triggered()),
+                   this, SLOT(spectrumColorScale()) );
 
-  QObject::connect(sv_ui->actionLoadColormap, SIGNAL(triggered()),
-                   this, SLOT(load_color_map()) );
+  QObject::connect(m_svUI->actionLoadColormap, SIGNAL(triggered()),
+                   this, SLOT(loadColorMap()) );
 
 
-  h_graph_picker = new TrackingPicker( sv_ui->h_graphPlot->canvas() );
-  h_graph_picker->setMousePattern(QwtPicker::MouseSelect1, Qt::LeftButton);
-  h_graph_picker->setTrackerMode(QwtPicker::ActiveOnly);
-  h_graph_picker->setRubberBandPen(QColor(Qt::gray));
-  h_graph_picker->setRubberBand(QwtPicker::CrossRubberBand);
-  h_graph_picker->setSelectionFlags(QwtPicker::PointSelection |
+  m_hGraphPicker = new TrackingPicker( m_svUI->h_graphPlot->canvas() );
+  m_hGraphPicker->setMousePattern(QwtPicker::MouseSelect1, Qt::LeftButton);
+  m_hGraphPicker->setTrackerMode(QwtPicker::ActiveOnly);
+  m_hGraphPicker->setRubberBandPen(QColor(Qt::gray));
+  m_hGraphPicker->setRubberBand(QwtPicker::CrossRubberBand);
+  m_hGraphPicker->setSelectionFlags(QwtPicker::PointSelection |
                                   QwtPicker::DragSelection  );
-  QObject::connect( h_graph_picker, SIGNAL(mouseMoved(const QPoint &)),
-                    this, SLOT(h_graphPicker_moved(const QPoint &)) );
+  QObject::connect( m_hGraphPicker, SIGNAL(mouseMoved(const QPoint &)),
+                    this, SLOT(hGraphPickerMoved(const QPoint &)) );
 
   // NOTE: This initialization could be a (static?) method in TrackingPicker
-  v_graph_picker = new TrackingPicker( sv_ui->v_graphPlot->canvas() );
-  v_graph_picker->setMousePattern(QwtPicker::MouseSelect1, Qt::LeftButton);
-  v_graph_picker->setTrackerMode(QwtPicker::ActiveOnly);
-  v_graph_picker->setRubberBandPen(QColor(Qt::gray));
-  v_graph_picker->setRubberBand(QwtPicker::CrossRubberBand);
-  v_graph_picker->setSelectionFlags(QwtPicker::PointSelection |
+  m_vGraphPicker = new TrackingPicker( m_svUI->v_graphPlot->canvas() );
+  m_vGraphPicker->setMousePattern(QwtPicker::MouseSelect1, Qt::LeftButton);
+  m_vGraphPicker->setTrackerMode(QwtPicker::ActiveOnly);
+  m_vGraphPicker->setRubberBandPen(QColor(Qt::gray));
+  m_vGraphPicker->setRubberBand(QwtPicker::CrossRubberBand);
+  m_vGraphPicker->setSelectionFlags(QwtPicker::PointSelection |
                                     QwtPicker::DragSelection  );
-  QObject::connect( v_graph_picker, SIGNAL(mouseMoved(const QPoint &)),
-                    this, SLOT(v_graphPicker_moved(const QPoint &)) );
+  QObject::connect( m_vGraphPicker, SIGNAL(mouseMoved(const QPoint &)),
+                    this, SLOT(vGraphPickerMoved(const QPoint &)) );
 
-  QObject::connect( sv_ui->actionOnline_Help_Page, SIGNAL(triggered()),
-                    this, SLOT(online_help_slot()) );
+  QObject::connect( m_svUI->actionOnline_Help_Page, SIGNAL(triggered()),
+                    this, SLOT(openOnlineHelp()) );
 
 }
 
 
 SVConnections::~SVConnections()
 {
-  delete image_picker;
-  delete h_graph_picker;
-  delete v_graph_picker;
-  delete color_group;
 }
 
+
 /**
+ * Handle events.
+ *
  * @param object Object that the event came from.
  * @param event The event being filtered.
  * @return true if the event was consumed.
@@ -294,62 +294,72 @@ bool SVConnections::eventFilter(QObject *object, QEvent *event)
     {
       if (wheelEvent->orientation() == Qt::Orientation::Vertical)
       {
-        return sv_ui->imageVerticalScrollBar->event(wheelEvent);
+        return m_svUI->imageVerticalScrollBar->event(wheelEvent);
       }
       else if (wheelEvent->orientation() == Qt::Orientation::Horizontal)
       {
-        return sv_ui->imageHorizontalScrollBar->event(wheelEvent);
+        return m_svUI->imageHorizontalScrollBar->event(wheelEvent);
       }
     }
   }
   else if (event->type() == QEvent::KeyPress)
   {
     // don't bother if the values aren't set
-    if (m_picker_x < 0) return false;
-    if (m_picker_y < 0) return false;
+    if (m_pickerX < 0) return false;
+    if (m_pickerY < 0) return false;
 
-    // temporary variables so we can step back to previous state
-    int newX = m_picker_x;
-    int newY = m_picker_y;
+    // Convert Y position to values so that a change of 1 corresponds to a change in spec. no by 1
+    int newX = m_pickerX;
+    double lastY = m_spectrumDisplay->getPointedAtY();
 
     QKeyEvent *keyEvent = dynamic_cast<QKeyEvent *>(event);
     int key = keyEvent->key();
     switch (key)
     {
     case Qt::Key_Up:
-      newY += -1;
+      lastY += 1.0;
       break;
     case Qt::Key_Down:
-      newY += 1;
+      lastY -= 1.0;
       break;
     case Qt::Key_Left:
-      newX += -1;
+      newX--;
       break;
     case Qt::Key_Right:
-      newX += 1;
+      newX++;
       break;
     default:
       // this is not the event we were looking for
       return false;
     }
 
-    // see if we should react
+    // Convert Y position back to unsigned pixel position
+    QPoint newPoint = m_spectrumDisplay->getPlotTransform(qMakePair(0.0, lastY));
+    int newY = newPoint.y();
+
+    // Ignore the event if the position is outside of the plot area
     if (newX < 0) return false;
     if (newY < 0) return false;
-    const QSize canvasSize = sv_ui->spectrumPlot->canvas()->size();
+    const QSize canvasSize = m_svUI->spectrumPlot->canvas()->size();
     if (newX > canvasSize.width()) return false;
     if (newY > canvasSize.height()) return false;
 
     // make the changes real
-    m_picker_x = newX;
-    m_picker_y = newY;
+    m_pickerX = newX;
+    m_pickerY = newY;
 
     // determine where the canvas is in global coords
-    QPoint canvasPos = sv_ui->spectrumPlot->canvas()->mapToGlobal(QPoint(0,0));
+    QPoint canvasPos = m_svUI->spectrumPlot->canvas()->mapToGlobal(QPoint(0,0));
     // move the cursor to the correct position
-    sv_ui->spectrumPlot->canvas()->cursor().setPos(QPoint(canvasPos.x()+m_picker_x, canvasPos.y()+m_picker_y));
-    // update the pointed at position
-    spectrum_display->SetPointedAtPoint( QPoint(m_picker_x, m_picker_y) );
+    m_svUI->spectrumPlot->canvas()->cursor().setPos(QPoint(canvasPos.x()+m_pickerX, canvasPos.y()+m_pickerY));
+
+    QPair<double, double> transPoints = m_spectrumDisplay->getPlotInvTransform(QPoint(newX, newY));
+
+    m_spectrumDisplay->setHGraph( lastY );
+    m_spectrumDisplay->setVGraph( transPoints.first );
+
+    m_spectrumDisplay->showInfoList( transPoints.first, lastY );
+
     // consume the event
     return true;
   }
@@ -359,117 +369,169 @@ bool SVConnections::eventFilter(QObject *object, QEvent *event)
 }
 
 
-void SVConnections::close_viewer()
+/**
+ * Slot to handle closing the window.
+ */
+void SVConnections::closeViewer()
 {
-  this->sv_main_window->close();
+  m_svMainWindow->close();
 }
 
 
-void SVConnections::toggle_Hscroll()
+/**
+ * Toggles the horizontal scroll bar.
+ */
+void SVConnections::toggleHScroll()
 {
-  bool is_on = sv_ui->action_Hscroll->isChecked();
-  sv_ui->imageHorizontalScrollBar->setVisible( is_on );
-  sv_ui->imageHorizontalScrollBar->setEnabled( is_on );
-  spectrum_display->UpdateImage();
+  bool is_on = m_svUI->action_Hscroll->isChecked();
+  m_svUI->imageHorizontalScrollBar->setVisible( is_on );
+  m_svUI->imageHorizontalScrollBar->setEnabled( is_on );
+  m_spectrumDisplay->updateImage();
+  m_spectrumDisplay->handleResize();
 }
 
 
-void SVConnections::toggle_Vscroll()
+/**
+ * Toggles the vertical scroll bar.
+ */
+void SVConnections::toggleVScroll()
 {
-  bool is_on = sv_ui->action_Vscroll->isChecked();
-  sv_ui->imageVerticalScrollBar->setVisible( is_on );
-  sv_ui->imageVerticalScrollBar->setEnabled( is_on );
-  spectrum_display->UpdateImage();
+  bool is_on = m_svUI->action_Vscroll->isChecked();
+  m_svUI->imageVerticalScrollBar->setVisible( is_on );
+  m_svUI->imageVerticalScrollBar->setEnabled( is_on );
+  m_spectrumDisplay->updateImage();
+  m_spectrumDisplay->handleResize();
 }
 
 
-void SVConnections::image_horizontal_range_changed()
+/**
+ * Update X range when range selection changed.
+ */
+void SVConnections::imageHorizontalRangeChanged()
 {
-  spectrum_display->UpdateRange();
+  m_spectrumDisplay->updateRange();
 }
 
 
-void SVConnections::graph_range_changed()
+void SVConnections::graphRangeChanged()
 {
-  double value = (double)sv_ui->graph_max_slider->value();
-  double min   = (double)sv_ui->graph_max_slider->minimum();
-  double max   = (double)sv_ui->graph_max_slider->maximum();
+  double value = (double)m_svUI->graph_max_slider->value();
+  double min   = (double)m_svUI->graph_max_slider->minimum();
+  double max   = (double)m_svUI->graph_max_slider->maximum();
 
   double range_scale = (value - min)/(max - min);
   if ( range_scale < 0.01 )
     range_scale = 0.01;
 
-  h_graph_display->SetRangeScale( range_scale );
-  v_graph_display->SetRangeScale( range_scale );
+  m_hGraphDisplay->setRangeScale( range_scale );
+  m_vGraphDisplay->setRangeScale( range_scale );
 }
 
 
-void SVConnections::v_scroll_bar_moved()
+/**
+ * Handles updating the image when a scroll bar is moved.
+ */
+void SVConnections::scrollBarMoved()
 {
-  spectrum_display->UpdateImage();
+  m_spectrumDisplay->updateImage();
 }
 
 
-void SVConnections::h_scroll_bar_moved()
+/**
+ * Handle the image splitter being moved.
+ *
+ * This moves the vertical graph slitter to the same position
+ * in ordetr to keep the graphs in alignment.
+ */
+void SVConnections::imageSplitterMoved()
 {
-  spectrum_display->UpdateImage();
+  QList<int> sizes = m_svUI->imageSplitter->sizes();
+
+  QList<int> vgraph_sizes;
+  vgraph_sizes.append( sizes[0] );
+  vgraph_sizes.append( sizes[1] );
+
+  m_svUI->vgraphSplitter->setSizes( vgraph_sizes );
+
+  m_spectrumDisplay->updateImage();
+  m_spectrumDisplay->handleResize();
 }
 
 
-void SVConnections::imageSplitter_moved()
+/**
+ * Handle the vertical graph splitter being moved.
+ *
+ * This moves the image slitter to the same position
+ * in ordetr to keep the graphs in alignment.
+ */
+void SVConnections::vgraphSplitterMoved()
 {
-  QList<int> sizes = sv_ui->imageSplitter->sizes();
+  QList<int> sizes = m_svUI->vgraphSplitter->sizes();
+
   QList<int> vgraph_sizes;
   vgraph_sizes.append( sizes[0] );
-  vgraph_sizes.append( 30 );
   vgraph_sizes.append( sizes[1] );
-  sv_ui->vgraphSplitter->setSizes( vgraph_sizes );
-  spectrum_display->UpdateImage();
+
+  m_svUI->imageSplitter->setSizes( vgraph_sizes );
+
+  m_spectrumDisplay->updateImage();
+  m_spectrumDisplay->handleResize();
 }
 
+
 /**
- * Update the pointed at position for the image_picker.
+ * Update the pointed at position for the m_imagePicker.
  *
  * @param point The position moved to.
  */
-void SVConnections::imagePicker_moved(const QPoint & point)
+void SVConnections::imagePickerMoved(const QPoint & point)
 {
-  m_picker_x = point.x();
-  m_picker_y = point.y();
-  spectrum_display->SetPointedAtPoint( point );
+  m_pickerX = point.x();
+  m_pickerY = point.y();
+  m_spectrumDisplay->setPointedAtPoint( point );
 }
 
+
 /**
- * Update the pointed at position for the h_graph_display.
+ * Update the pointed at position for the m_hGraphDisplay.
  *
  * @param point The position moved to.
  */
-void SVConnections::h_graphPicker_moved(const QPoint & point)
+void SVConnections::hGraphPickerMoved(const QPoint & point)
 {
-  h_graph_display->SetPointedAtPoint(point);
+  m_hGraphDisplay->setPointedAtPoint(point);
 }
 
+
 /**
- * Update the pointed at position for the v_graph_display.
+ * Update the pointed at position for the m_vGraphDisplay.
  *
  * @param point The position moved to.
  */
-void SVConnections::v_graphPicker_moved(const QPoint & point)
+void SVConnections::vGraphPickerMoved(const QPoint & point)
 {
-  v_graph_display->SetPointedAtPoint(point);
+  m_vGraphDisplay->setPointedAtPoint(point);
 }
 
-void SVConnections::intensity_slider_moved()
+
+/**
+ * Slot to handle the intensity slider being moved.
+ */
+void SVConnections::intensitySliderMoved()
 {
-  double value = (double)sv_ui->intensity_slider->value();
-  double min   = (double)sv_ui->intensity_slider->minimum();
-  double max   = (double)sv_ui->intensity_slider->maximum();
+  double value = (double)m_svUI->intensity_slider->value();
+  double min   = (double)m_svUI->intensity_slider->minimum();
+  double max   = (double)m_svUI->intensity_slider->maximum();
 
   double scaled_value = 100.0*(value - min)/(max - min);
-  spectrum_display->SetIntensity( scaled_value );
+  m_spectrumDisplay->setIntensity( scaled_value );
 }
 
-void SVConnections::heat_color_scale()
+
+/**
+ * Set the heat color scale.
+ */
+void SVConnections::heatColorScale()
 {
   std::vector<QRgb> positive_color_table;
   ColorMaps::GetColorMap( ColorMaps::HEAT, 256, positive_color_table );
@@ -477,11 +539,15 @@ void SVConnections::heat_color_scale()
   std::vector<QRgb> negative_color_table;
   ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negative_color_table );
 
-  spectrum_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_spectrumDisplay->setColorScales( positive_color_table, negative_color_table );
+  showColorScale( positive_color_table, negative_color_table );
 }
 
-void SVConnections::gray_color_scale()
+
+/**
+ * Set the gray color scale.
+ */
+void SVConnections::grayColorScale()
 {
   std::vector<QRgb> positive_color_table;
   ColorMaps::GetColorMap( ColorMaps::GRAY, 256, positive_color_table );
@@ -489,11 +555,15 @@ void SVConnections::gray_color_scale()
   std::vector<QRgb> negative_color_table;
   ColorMaps::GetColorMap( ColorMaps::HEAT, 256, negative_color_table );
 
-  spectrum_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_spectrumDisplay->setColorScales( positive_color_table, negative_color_table );
+  showColorScale( positive_color_table, negative_color_table );
 }
 
-void SVConnections::negative_gray_color_scale()
+
+/**
+ * Set the inverse gray color scale.
+ */
+void SVConnections::negativeGrayColorScale()
 {
   std::vector<QRgb> positive_color_table;
   ColorMaps::GetColorMap( ColorMaps::NEGATIVE_GRAY,256, positive_color_table);
@@ -501,11 +571,15 @@ void SVConnections::negative_gray_color_scale()
   std::vector<QRgb> negative_color_table;
   ColorMaps::GetColorMap( ColorMaps::HEAT, 256, negative_color_table );
 
-  spectrum_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_spectrumDisplay->setColorScales( positive_color_table, negative_color_table );
+  showColorScale( positive_color_table, negative_color_table );
 }
 
-void SVConnections::green_yellow_color_scale()
+
+/**
+ * Set the green and yellow color scale.
+ */
+void SVConnections::greenYellowColorScale()
 {
   std::vector<QRgb> positive_color_table;
   ColorMaps::GetColorMap( ColorMaps::GREEN_YELLOW, 256, positive_color_table);
@@ -513,11 +587,15 @@ void SVConnections::green_yellow_color_scale()
   std::vector<QRgb> negative_color_table;
   ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negative_color_table );
 
-  spectrum_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_spectrumDisplay->setColorScales( positive_color_table, negative_color_table );
+  showColorScale( positive_color_table, negative_color_table );
 }
 
-void SVConnections::rainbow_color_scale()
+
+/**
+ * Set the rainbow color scale.
+ */
+void SVConnections::rainbowColorScale()
 {
   std::vector<QRgb> positive_color_table;
   ColorMaps::GetColorMap( ColorMaps::RAINBOW, 256, positive_color_table );
@@ -525,11 +603,15 @@ void SVConnections::rainbow_color_scale()
   std::vector<QRgb> negative_color_table;
   ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negative_color_table );
 
-  spectrum_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_spectrumDisplay->setColorScales( positive_color_table, negative_color_table );
+  showColorScale( positive_color_table, negative_color_table );
 }
 
-void SVConnections::optimal_color_scale()
+
+/**
+ * Set the optimal color scale.
+ */
+void SVConnections::optimalColorScale()
 {
   std::vector<QRgb> positive_color_table;
   ColorMaps::GetColorMap( ColorMaps::OPTIMAL, 256, positive_color_table );
@@ -537,11 +619,15 @@ void SVConnections::optimal_color_scale()
   std::vector<QRgb> negative_color_table;
   ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negative_color_table );
 
-  spectrum_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_spectrumDisplay->setColorScales( positive_color_table, negative_color_table );
+  showColorScale( positive_color_table, negative_color_table );
 }
 
-void SVConnections::multi_color_scale()
+
+/**
+ * Set the multi color scale.
+ */
+void SVConnections::multiColorScale()
 {
   std::vector<QRgb> positive_color_table;
   ColorMaps::GetColorMap( ColorMaps::MULTI, 256, positive_color_table );
@@ -549,11 +635,15 @@ void SVConnections::multi_color_scale()
   std::vector<QRgb> negative_color_table;
   ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negative_color_table );
 
-  spectrum_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_spectrumDisplay->setColorScales( positive_color_table, negative_color_table );
+  showColorScale( positive_color_table, negative_color_table );
 }
 
-void SVConnections::spectrum_color_scale()
+
+/**
+ * Set the spectrum color scale.
+ */
+void SVConnections::spectrumColorScale()
 {
   std::vector<QRgb> positive_color_table;
   ColorMaps::GetColorMap( ColorMaps::SPECTRUM, 256, positive_color_table );
@@ -561,14 +651,17 @@ void SVConnections::spectrum_color_scale()
   std::vector<QRgb> negative_color_table;
   ColorMaps::GetColorMap( ColorMaps::GRAY, 256, negative_color_table );
 
-  spectrum_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_spectrumDisplay->setColorScales( positive_color_table, negative_color_table );
+  showColorScale( positive_color_table, negative_color_table );
 }
 
 
-void SVConnections::load_color_map()
+/**
+ * Slot to handle loading a color map from file.
+ */
+void SVConnections::loadColorMap()
 {
-  QString file_name = MantidColorMap::loadMapDialog( "", this->sv_main_window );
+  QString file_name = MantidColorMap::loadMapDialog( "", m_svMainWindow );
 
   MantidColorMap* mantid_color_map = new MantidColorMap( file_name, GraphOptions::Linear );
 
@@ -586,8 +679,8 @@ void SVConnections::load_color_map()
   std::vector<QRgb> negative_color_table;
   ColorMaps::GetColorMap( ColorMaps::GRAY, n_colors, negative_color_table );
 
-  spectrum_display->SetColorScales( positive_color_table, negative_color_table );
-  ShowColorScale( positive_color_table, negative_color_table );
+  m_spectrumDisplay->setColorScales( positive_color_table, negative_color_table );
+  showColorScale( positive_color_table, negative_color_table );
 }
 
 
@@ -595,50 +688,49 @@ void SVConnections::load_color_map()
  *  Set the pix map that shows the color scale from the specified positive
  *  and negative color tables.
  *
- *  @param positive_color_table  The new color table used to map positive data 
- *                               values to an RGB color.
- *  @param negative_color_table  The new color table used to map negative data 
- *                               values to an RGB color.  This must have the
- *                               same number of entries as the positive
- *                               color table.
+ *  @param positiveColorTable  The new color table used to map positive data
+ *                             values to an RGB color.
+ *  @param negativeColorTable  The new color table used to map negative data
+ *                             values to an RGB color.  This must have the
+ *                             same number of entries as the positive
+ *                             color table.
  */
-void SVConnections::ShowColorScale( std::vector<QRgb> & positive_color_table,
-                                    std::vector<QRgb> & negative_color_table )
+void SVConnections::showColorScale( std::vector<QRgb> & positiveColorTable,
+                                    std::vector<QRgb> & negativeColorTable )
 {
-  size_t total_colors = positive_color_table.size() + 
-                        negative_color_table.size();
+  size_t totalColors = positiveColorTable.size() + negativeColorTable.size();
 
-  unsigned int *rgb_data = new unsigned int[ total_colors ];
+  QImage image((int)totalColors, 1, QImage::Format_RGB32);
+  int index = 0;
 
-  size_t index = 0;
-  size_t n_colors = negative_color_table.size();
-  for ( size_t i = 0; i < n_colors; i++ )
+  size_t numColors = negativeColorTable.size();
+  for(size_t i = 0; i < numColors; i++)
   {
-    rgb_data[index] = negative_color_table[ n_colors - 1 - i ];
+    unsigned int pixel = static_cast<unsigned int>(negativeColorTable[numColors - 1 - i]);
+    image.setPixel(index, 0, pixel);
     index++;
   }
 
-  n_colors = positive_color_table.size();
-  for ( size_t i = 0; i < n_colors; i++ )
+  numColors = positiveColorTable.size();
+  for(size_t i = 0; i < numColors; i++)
   {
-    rgb_data[index] = positive_color_table[i];
+    unsigned int pixel = static_cast<unsigned int>(positiveColorTable[i]);
+    image.setPixel(index, 0, pixel);
     index++;
   }
 
-  uchar *buffer = (uchar*)rgb_data;
-  QImage image( buffer, (int)total_colors, 1, QImage::Format_RGB32 );
   QPixmap pixmap = QPixmap::fromImage(image);
-  sv_ui->color_scale->setPixmap( pixmap );
-
-  delete[] rgb_data;
+  m_svUI->color_scale->setPixmap( pixmap );
 }
 
 
-void SVConnections::online_help_slot()
+/**
+ * Slot to open the online help webapge for the interface.
+ */
+void SVConnections::openOnlineHelp()
 {
   QDesktopServices::openUrl(QUrl("http://www.mantidproject.org/MantidPlot:_ImageViewer"));
-
 }
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/SVUtils.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/SVUtils.cpp
index 81926bcb02d08e26f66d2eb57272c4deffdcfd5e..e8a2528a8e36456124676074513b699c18e8e6f8 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/SVUtils.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/SVUtils.cpp
@@ -9,33 +9,12 @@ namespace MantidQt
 namespace SpectrumView
 {
 
-/**
- * Extract a double from the specified string, if possible.
- * 
- * @param text   The string containing a double value
- * @param value  Set to the value from the string if the conversion
- *               worked.
- * @return true if the string could be successfully converted to a double,
- *         and return false otherwise.
- */
-bool SVUtils::StringToDouble( std::string  text,
-                              double      &value )
-{
-  std::istringstream strs(text);
-  if ( strs >> value )
-  {
-    return true;
-  }
-  return false;
-}
-
-
 /**
  *  Get a formatted string form of the specified double precision value.
  *
- *  @param width     The total number of characters to be used in the 
+ *  @param width     The total number of characters to be used in the
  *                   formatted string
- *  @param precision  The number of significant figures to use 
+ *  @param precision  The number of significant figures to use
  *  @param value     The double precsion number to be formatted
  *  @param str       String that will be set to the formatted number
  */
@@ -60,7 +39,7 @@ void SVUtils::Format( int            width,
  *  to a string using the specified width and precision.
  *
  *  @param name      String name that is first pushed on the list
- *  @param width     The total number of characters to be used when formatting 
+ *  @param width     The total number of characters to be used when formatting
  *                   the value
  *  @param precision The number of significant figures to use
  *  @param value     The double precsion number to be formatted and pushed on
@@ -83,7 +62,7 @@ void SVUtils::PushNameValue( const std::string               & name,
 
 /**
  * Find a non-degenerate interval containing all the specified values.
- * If there are more than one values in the list, min will be set to 
+ * If there are more than one values in the list, min will be set to
  * the smallest value and max will be set to the largest value.  If there
  * is only on value in the list, min will be set to 90% of that value and
  * max will be set to 110% of that value.  If the only value in the list
@@ -117,11 +96,11 @@ bool SVUtils::FindValidInterval( const QVector<double>  & values,
 
 /**
  * Adjust min and max so that min is strictly less than max.  If min > max
- * the values are swapped.  If min = max != 0, they will be shifted off from 
+ * the values are swapped.  If min = max != 0, they will be shifted off from
  * their initial common value by 10%.  If min = max = 0, they will be set
  * to -1 and 1, respectively.
  *
- * @param min     Set to be strictly less than max. 
+ * @param min     Set to be strictly less than max.
  * @param max     Set to be strictly greater than min.
  *
  * @return true if the original values were OK and are unchanged, return
@@ -130,11 +109,11 @@ bool SVUtils::FindValidInterval( const QVector<double>  & values,
 bool SVUtils::FindValidInterval( double  & min,
                                  double  & max )
 {
-  bool values_OK = true;
+  bool valuesOK = true;
 
-  if ( max == min )           // adjust values so they are not equal
+  if ( max == min )  // adjust values so they are not equal
   {
-    values_OK = false;
+    valuesOK = false;
     if ( min == 0 )
     {
       min = -1,
@@ -147,25 +126,25 @@ bool SVUtils::FindValidInterval( double  & min,
     }
   }
 
-  if ( min > max )            // fix the order
+  if ( min > max )  // fix the order
   {
-    values_OK = false;
+    valuesOK = false;
     double temp = min;
     min = max;
     max = temp;
   }
 
-  return values_OK;
+  return valuesOK;
 }
 
 
 /**
  * Adjust min and max so that min is strictly less than max, and both are
- * greater than 0.  If min > max the values are swapped.  If min = max > 0, 
- * they will be shifted off from their initial common value by factors of 10.  
+ * greater than 0.  If min > max the values are swapped.  If min = max > 0,
+ * they will be shifted off from their initial common value by factors of 10.
  * If min = max = 0, they will be set to 0.1 and 10, respectively.
  *
- * @param min     Set to be strictly less than max and more than 0. 
+ * @param min     Set to be strictly less than max and more than 0.
  * @param max     Set to be strictly greater than min.
  *
  * @return true if the original values were OK and are unchanged, return
@@ -174,39 +153,40 @@ bool SVUtils::FindValidInterval( double  & min,
 bool SVUtils::FindValidLogInterval( double  & min,
                                     double  & max )
 {
-  bool values_OK = true;
+  bool valuesOK = true;
   if ( min < 0 )
   {
     std::cout << "min < 0 " << min << std::endl;
-    values_OK = false;
+    valuesOK = false;
     min = -min;
   }
 
   if ( max < 0 )
   {
     std::cout << "max < 0 " << max << std::endl;
-    values_OK = false;
+    valuesOK = false;
     max = -max;
   }
 
-  if ( min > max )            // fix the order
+  if ( min > max )  // Fix the order
   {
     std::cout << "min > max " << min << " > " << max << std::endl;
-    values_OK = false;
+    valuesOK = false;
     double temp = min;
     min = max;
     max = temp;
   }
 
-  if ( min == 0 && max > 0 )  // raise min, so the interval covers 2 orders
-  {                           // of magnitude
+  // Raise min, so the interval covers 2 orders of magnitude
+  if ( min == 0 && max > 0 )
+  {
     std::cout << "min == 0, max > 0 " << min << ", " << max << std::endl;
-    values_OK = false;
+    valuesOK = false;
     min = 0.01 * max;
   }
-  else if ( max == min )      // adjust values so they are not equal
+  else if ( max == min )  // Adjust values so they are not equal
   {
-    values_OK = false;
+    valuesOK = false;
     std::cout << "min == max " << min << " == " << max << std::endl;
     if ( min == 0 )
     {
@@ -220,7 +200,7 @@ bool SVUtils::FindValidLogInterval( double  & min,
     }
   }
 
-  return values_OK;
+  return valuesOK;
 }
 
 
@@ -240,7 +220,7 @@ bool SVUtils::FindValidLogInterval( double  & min,
  */
 int SVUtils::NumSteps( double min, double max, double step )
 {
-  int n_bins = 0;
+  int numBins = 0;
 
   if ( step == 0 || (max-min) <= 0 || (step < 0 && min <= 0) )
   {
@@ -249,54 +229,54 @@ int SVUtils::NumSteps( double min, double max, double step )
 
   if ( step > 0 )                          // uniform steps
   {
-    n_bins = (int)(( max - min ) / step);
+    numBins = (int)(( max - min ) / step);
   }
   else if ( step < 0 )                     // log steps
   {
-//
-//  Interpret step as the negative of the fractional increase in the
-//  first bin boundary, relative to the zeroth bin boundary (min).
-//  This is the convention followed by the Rebin() algorithm in Mantid.
-//
-    n_bins = (int)ceil( (log(max) - log(min))/log(1 - step) );
-    if ( n_bins < 1 )
-      n_bins = 1;
-//
-//  This formula assumes a negative step indicates a log scale with 
-//  the size of the first bin specified by |step|.  This is not the
-//  convention used in the Rebin() algorithm, so we have commented
-//  this out and use the Mantid convention.
-//
-//  n_bins = (int)ceil( (log(max) - log(min))/log(1 - step/min) );
+
+  /* Interpret step as the negative of the fractional increase in the */
+  /* first bin boundary, relative to the zeroth bin boundary (min). */
+  /* This is the convention followed by the Rebin() algorithm in Mantid. */
+
+    numBins = (int)ceil( (log(max) - log(min))/log(1 - step) );
+    if ( numBins < 1 )
+      numBins = 1;
+
+  /* This formula assumes a negative step indicates a log scale with */
+  /* the size of the first bin specified by |step|.  This is not the */
+  /* convention used in the Rebin algorithm, so we have commented */
+  /* this out and use the Mantid convention. */
+
+  //numBins = (int)ceil( (log(max) - log(min))/log(1 - step/min) );
   }
 
-  return n_bins; 
+  return numBins;
 }
 
 
 /**
- * Calculate a point in [new_min,new_max] by linear interpolation, and
- * clamp the result to be in the interval [new_min,new_max].
+ * Calculate a point in [newMin,newMax] by linear interpolation, and
+ * clamp the result to be in the interval [newMin,newMax].
  * @param min       Left endpoint of original interval
  * @param max       Right endpoint of original interval
  * @param val       Reference point in orignal interval
- * @param new_min   Left endpoint of new interval
- * @param new_max   Right endpoint of new interval
- * @param new_val   Point in new interval that is placed in [new_min,new_max]
- *                  in the same proportion as val is in [min,max]. 
- * @return true if the calculated value is in [new_min,new_max] and false
+ * @param newMin   Left endpoint of new interval
+ * @param newMax   Right endpoint of new interval
+ * @param newVal   Point in new interval that is placed in [newMin,newMax]
+ *                  in the same proportion as val is in [min,max].
+ * @return true if the calculated value is in [newMin,newMax] and false
  *         if it is outside of the interval.
  */
 bool SVUtils::Interpolate( double   min,
                            double   max,
                            double   val,
-                           double   new_min,
-                           double   new_max,
-                           double & new_val )
+                           double   newMin,
+                           double   newMax,
+                           double & newVal )
 {
-  new_val = (val - min)/( max - min ) * (new_max - new_min) + new_min;
+  newVal = (val - min)/( max - min ) * (newMax - newMin) + newMin;
 
-  if ( new_val < new_min || new_val > new_max )
+  if ( newVal < newMin || newVal > newMax )
     return false;
   else
     return true;
@@ -304,32 +284,32 @@ bool SVUtils::Interpolate( double   min,
 
 
 /**
- * Calculate the value in [new_min,new_max] on a logarithmic scale that
+ * Calculate the value in [newMin,newMax] on a logarithmic scale that
  * would correspond to the point val on a linear scale on [min,max].
  * For example, if val was half way from min to max, and the log scale
- * extended from new_min = 1 to new_max = 100, then new_val would return 10,
+ * extended from newMin = 1 to newMax = 100, then newVal would return 10,
  * since 10 is half way along a log scale from 1 to 100.
- * Clamp the result to be in the interval [new_min,new_max].
+ * Clamp the result to be in the interval [newMin,newMax].
  * @param min       Left endpoint of original interval with linear scale
  * @param max       Right endpoint of original interval with linear scale
  * @param val       Reference point in orignal interval
- * @param new_min   Left endpoint of new interval with log scale
- * @param new_max   Right endpoint of new interval with log scale
- * @param new_val   Point in new interval that is placed in [new_min,new_max]
+ * @param newMin   Left endpoint of new interval with log scale
+ * @param newMax   Right endpoint of new interval with log scale
+ * @param newVal   Point in new interval that is placed in [newMin,newMax]
  *                  in the same proportion as val is in [min,max].
- * @return true if the calculated value is in [new_min,new_max] and false
+ * @return true if the calculated value is in [newMin,newMax] and false
  *         if it is outside of the interval.
  */
 bool SVUtils::LogInterpolate( double   min,
                               double   max,
                               double   val,
-                              double   new_min,
-                              double   new_max,
-                              double & new_val )
+                              double   newMin,
+                              double   newMax,
+                              double & newVal )
 {
-  new_val = new_min * exp( (val-min)/(max-min) * log ( new_max/new_min ));
+  newVal = newMin * exp( (val-min)/(max-min) * log ( newMax/newMin ));
 
-  if ( new_val < new_min || new_val > new_max )
+  if ( newVal < newMin || newVal > newMax )
     return false;
   else
     return true;
@@ -338,68 +318,71 @@ bool SVUtils::LogInterpolate( double   min,
 
 /**
  *  Find a new interval [min,max] with boundaries aligned with the underlying
- *  data bin boundaries, then set first_index to the index of the bin, 
+ *  data bin boundaries, then set firstIndex to the index of the bin,
  *  corresponding to the min value and set the number of steps to the smaller
  *  of the number of steps in the data, and the initial value of the number
  *  of steps.  NOTE: This calculation is needed for displaying a fixed array
  *  of data that should not be rebinned.
  *
- *  @param global_min   Smallest value covered by the underlying data
- *  @param global_max   Largest value covered by the underlying data
- *  @param global_steps Number of uniform bins the underlying data is 
- *                      divided into on the interval [global_min,global_max].
- *  @param first_index  This will be set to the bin number containing the
+ *  @param globalMin    Smallest value covered by the underlying data
+ *  @param globalMax    Largest value covered by the underlying data
+ *  @param globalSteps  Number of uniform bins the underlying data is
+ *                      divided into on the interval [globalMin,globalMax].
+ *  @param firstIndex   This will be set to the bin number containing the
  *                      specified min value.
- *  @param min          On input this should be smallest value of interest 
- *                      in the interval.  This will be adjusted to be the 
+ *  @param min          On input this should be smallest value of interest
+ *                      in the interval.  This will be adjusted to be the
  *                      left bin boundary of the bin containing the specified
  *                      min value.
- *  @param max          On input this should be largest value of interest 
- *                      in the interval.  This will be adjusted to be the 
+ *  @param max          On input this should be largest value of interest
+ *                      in the interval.  This will be adjusted to be the
  *                      right bin boundary of the bin containing the specified
  *                      max value, if max is in the interior of a bin.
  *  @param steps        On input this should be the number of bins desired
  *                      between the min and max values.  This will be adjusted
  *                      to be no more than the number of steps available.
  */
-bool SVUtils::CalculateInterval( double   global_min,
-                                 double   global_max,
-                                 size_t   global_steps,
-                                 size_t & first_index,
+bool SVUtils::CalculateInterval( double   globalMin,
+                                 double   globalMax,
+                                 size_t   globalSteps,
+                                 size_t & firstIndex,
                                  double & min,
                                  double & max,
                                  size_t & steps )
 {
-  double d_index;
-                                         // find bin containing min.......
-  Interpolate( global_min, global_max,   min,
-                      0.0, (double)global_steps, d_index );
+  double index;
+
+  // Find bin containing min
+  Interpolate( globalMin, globalMax,           min,
+               0.0,       (double)globalSteps, index );
+
+  // min_index is the number of the bin containing min
+  int min_index = (int)floor(index);
 
-  int min_index = (int)floor(d_index);   // min_index is the number of the bin
-                                         // containing min
   if ( min_index < 0 )
     min_index = 0;
-                                         // now set min to the value at the 
-                                         // left edge of bin at min_index
-  Interpolate( 0.0,        (double)global_steps, (double)min_index,
-               global_min, global_max,   min );
 
-                                         // find bin containing max........ 
-  Interpolate( global_min, global_max,   max,
-                      0.0, (double)global_steps, d_index );
+  // Now set min to the value at the left edge of bin at min_index
+  Interpolate( 0.0,       (double)globalSteps, (double)min_index,
+               globalMin, globalMax,           min );
+
+  // Find bin containing max
+  Interpolate( globalMin, globalMax,           max,
+               0.0,       (double)globalSteps, index );
+
+  /* max_index is the number of the bin */
+  /* containing max, or with max as */
+  /* right hand endpoint */
+  int max_index = (int)ceil(index) - 1;
 
-  int max_index = (int)ceil(d_index) - 1;// max index is the number of the bin
-                                         // containing max, or with max as
-                                         // right hand endpoint
-  if ( max_index >= (int)global_steps )
-    max_index = (int)global_steps - 1;
+  if ( max_index >= (int)globalSteps )
+    max_index = (int)globalSteps - 1;
 
-                                         // now set max to the value at the
-                                         // right edge of bin max_index
-  Interpolate( 0,          (double)global_steps, (double)(max_index + 1),
-               global_min, global_max,   max );
+  // Now set max to the value at the right edge of bin max_index
+  Interpolate( 0,         (double)globalSteps, (double)(max_index + 1),
+               globalMin, globalMax,           max );
 
-  first_index = min_index;
+  firstIndex = min_index;
 
   size_t source_steps = max_index - min_index + 1;
   if ( steps > source_steps )
@@ -409,4 +392,4 @@ bool SVUtils::CalculateInterval( double   global_min,
 }
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/SliderHandler.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/SliderHandler.cpp
index e2ce4353c19ef72b9889a0931611e44b828356cd..d5fec750d75f7ff095511da02ab005be42f79d6c 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/SliderHandler.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/SliderHandler.cpp
@@ -1,8 +1,8 @@
-
 #include <iostream>
 
 #include <QScrollBar>
 #include "MantidQtSpectrumViewer/SliderHandler.h"
+#include "MantidQtSpectrumViewer/SVUtils.h"
 
 namespace MantidQt
 {
@@ -10,114 +10,129 @@ namespace SpectrumView
 {
 
 /**
- *  Construct a SliderHandler object to manage the image scrollbars from the 
+ *  Construct a SliderHandler object to manage the image scrollbars from the
  *  specified UI.
  */
-SliderHandler::SliderHandler( Ui_SpectrumViewer* sv_ui ) : ISliderHandler()
+SliderHandler::SliderHandler( Ui_SpectrumViewer* svUI )
+  : ISliderHandler(), m_svUI(svUI)
+{
+}
+
+
+/**
+ * Reconfigure the image scrollbars for the specified data and drawing area.
+ *
+ * Used when the size of the plot area has changed.
+ *
+ * @param drawArea    Rectangle specifiying the region where the image will
+ *                    be drawn
+ * @param dataSource  SpectrumDataSource that provides the data to be drawn
+ */
+void SliderHandler::reConfigureSliders( QRect drawArea,
+                                        SpectrumDataSource_sptr dataSource )
 {
-  this->sv_ui = sv_ui;
+  QScrollBar* vScroll = m_svUI->imageVerticalScrollBar;
+
+  int oldVValue = vScroll->value();
+  int numRows = (int)dataSource->getNRows();
+  int step  = vScroll->pageStep();
+
+  configureSlider( vScroll, numRows, drawArea.height(), oldVValue );
+
+  vScroll->setValue(oldVValue + (step / 2));
 }
 
 
 /**
  * Configure the image scrollbars for the specified data and drawing area.
  *
- * @param draw_area    Rectangle specifiying the region where the image will
- *                     be drawn
- * @param data_source  SpectrumDataSource that provides the data to be drawn
+ * @param drawArea    Rectangle specifiying the region where the image will
+ *                    be drawn
+ * @param dataSource  SpectrumDataSource that provides the data to be drawn
  */
-void SliderHandler::ConfigureSliders( QRect            draw_area, 
-                                      SpectrumDataSource* data_source )
+void SliderHandler::configureSliders( QRect drawArea,
+                                      SpectrumDataSource_sptr dataSource )
 {
-  QScrollBar* v_scroll = sv_ui->imageVerticalScrollBar;
-  int n_rows = (int)data_source->GetNRows();
-  ConfigureSlider( v_scroll, n_rows, draw_area.height(), n_rows );
+  QScrollBar* vScroll = m_svUI->imageVerticalScrollBar;
+  int numRows = (int)dataSource->getNRows();
+  configureSlider( vScroll, numRows, drawArea.height(), numRows );
 
-  ConfigureHSlider( 2000, draw_area.width() );   // initial default, 2000 bins
+  configureHSlider( 2000, drawArea.width() );   // initial default, 2000 bins
 }
 
 
 /**
- *  Public method to configure the horizontal scrollbar to cover the 
+ *  Public method to configure the horizontal scrollbar to cover the
  *  specified range of data columns, displayed in the specified number of
- *  pixels.  
+ *  pixels.
  *
- *  @param n_data_steps  The number of columns in the data that should be 
+ *  @param numDataSetps  The number of columns in the data that should be
  *                       displayed
- *  @param n_pixels      The number of pixels avaliable to show the data
+ *  @param numPixels      The number of pixels avaliable to show the data
  */
-void SliderHandler::ConfigureHSlider( int         n_data_steps,
-                                      int         n_pixels )
+void SliderHandler::configureHSlider( int numDataSetps,
+                                      int numPixels )
 {
-  QScrollBar* h_scroll = sv_ui->imageHorizontalScrollBar;
-  ConfigureSlider( h_scroll, n_data_steps, n_pixels, 0 );
+  QScrollBar* hScroll = m_svUI->imageHorizontalScrollBar;
+  configureSlider( hScroll, numDataSetps, numPixels, 0 );
 }
 
 
 /**
  *  Configure the specified scrollbar to cover the specified range of data
- *  steps, displayed in the specified number of pixels.  
+ *  steps, displayed in the specified number of pixels.
  *
- *  @param scroll_bar    The scroll bar that will be configured
- *  @param n_data_steps  The number of bins in the data that should be 
+ *  @param scrollBar    The scroll bar that will be configured
+ *  @param numDataSetps  The number of bins in the data that should be
  *                       displayed
- *  @param n_pixels      The number of pixels avaliable to show the data
+ *  @param numPixels      The number of pixels avaliable to show the data
  *  @param val           The initial position of the scrollbar, between 0 and
- *                       n_data_steps.
+ *                       numDataSetps.
  */
-void SliderHandler::ConfigureSlider( QScrollBar* scroll_bar, 
-                                     int         n_data_steps, 
-                                     int         n_pixels, 
+void SliderHandler::configureSlider( QScrollBar* scrollBar,
+                                     int         numDataSetps,
+                                     int         numPixels,
                                      int         val )
 {
-  int step = n_pixels;
-  if ( step > n_data_steps )
-  {
-    step = n_data_steps;
-  }
+  int step = numPixels;
+  if ( step > numDataSetps )
+    step = numDataSetps;
+
   if ( step <= 0 )
-  {
     step = 1;
-  }
 
-  int max  = n_data_steps - step;
+  int max  = numDataSetps - step;
   if ( max <= 0 )
-  {
     max = 0;
-  }
 
   if ( val < 0 )
-  {
     val = 0;
-  }
 
   if ( val > max )
-  {
     val = max;
-  }
 
-  scroll_bar->setMinimum( 0 );
-  scroll_bar->setMaximum( max );
-  scroll_bar->setPageStep( step );
-  scroll_bar->setValue( val );
+  scrollBar->setMinimum( 0 );
+  scrollBar->setMaximum( max );
+  scrollBar->setPageStep( step );
+  scrollBar->setValue( val );
 }
 
 
 /**
  * Return true if the image horizontal scrollbar is enabled.
  */
-bool SliderHandler::HSliderOn()
+bool SliderHandler::hSliderOn()
 {
-  return sv_ui->imageHorizontalScrollBar->isEnabled();
+  return m_svUI->imageHorizontalScrollBar->isEnabled();
 }
 
 
 /**
  * Return true if the image vertical scrollbar is enabled.
  */
-bool SliderHandler::VSliderOn()
+bool SliderHandler::vSliderOn()
 {
-  return sv_ui->imageVerticalScrollBar->isEnabled();
+  return m_svUI->imageVerticalScrollBar->isEnabled();
 }
 
 
@@ -131,14 +146,14 @@ bool SliderHandler::VSliderOn()
  * @param x_max   This will be set to the last bin number to display in the
  *                x direction
  */
-void SliderHandler::GetHSliderInterval( int &x_min, int &x_max )
+void SliderHandler::getHSliderInterval( int &x_min, int &x_max )
 {
-  QScrollBar* h_scroll = sv_ui->imageHorizontalScrollBar;
-  int step  = h_scroll->pageStep();
-  int value = h_scroll->value();
+  QScrollBar* hScroll = m_svUI->imageHorizontalScrollBar;
+  int step  = hScroll->pageStep();
+  int value = hScroll->value();
 
-  x_min = value;     
-  x_max = x_min + step;       
+  x_min = value;
+  x_max = x_min + step;
 }
 
 
@@ -152,18 +167,18 @@ void SliderHandler::GetHSliderInterval( int &x_min, int &x_max )
  * @param y_max   This will be set to the last bin number to display in the
  *                y direction
  */
-void SliderHandler::GetVSliderInterval( int &y_min, int &y_max )
+void SliderHandler::getVSliderInterval( int &y_min, int &y_max )
 {
-  QScrollBar* v_scroll = sv_ui->imageVerticalScrollBar;
-  int max   = v_scroll->maximum();
-  int step  = v_scroll->pageStep();
-  int value = v_scroll->value();
-                                
-  y_min = max - value;        // invert value since scale increases from 
+  QScrollBar* vScroll = m_svUI->imageVerticalScrollBar;
+  int max   = vScroll->maximum();
+  int step  = vScroll->pageStep();
+  int value = vScroll->value();
+
+  y_min = max - value;        // invert value since scale increases from
   y_max = y_min + step;       // bottom to top, but scroll bar increases
                               // the other way.
 }
 
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumDataSource.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumDataSource.cpp
index 4cff6ce44d028578b63af7aa3200c2cf035264a5..510b583f2d4b6993a18de0e986ce017ae024d9d8 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumDataSource.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumDataSource.cpp
@@ -9,27 +9,23 @@ namespace MantidQt
 namespace SpectrumView
 {
 
-
 /**
  *  Construct data source with specified total range and data size.
  *
- *  @param total_xmin  The smallest 'x' value covered by the data
- *  @param total_xmax  The largest 'x' value covered by the data
- *  @param total_ymin  The smallest 'y' value covered by the data
- *  @param total_ymax  The largest 'y' value covered by the data
- *  @param total_rows  The total number of rows the data is divided into
- *  @param total_cols  The total number of columns the data is divided into
+ *  @param totalXMin  The smallest 'x' value covered by the data
+ *  @param totalXMax  The largest 'x' value covered by the data
+ *  @param totalYMin  The smallest 'y' value covered by the data
+ *  @param totalYMax  The largest 'y' value covered by the data
+ *  @param totalRows  The total number of rows the data is divided into
+ *  @param totalCols  The total number of columns the data is divided into
  */
-SpectrumDataSource::SpectrumDataSource( double total_xmin, double total_xmax,
-                                  double total_ymin, double total_ymax,
-                                  size_t total_rows, size_t total_cols )
+SpectrumDataSource::SpectrumDataSource( double totalXMin, double totalXMax,
+                                        double totalYMin, double totalYMax,
+                                        size_t totalRows, size_t totalCols ) :
+  m_totalXMin(totalXMin), m_totalXMax(totalXMax),
+  m_totalYMin(totalYMin), m_totalYMax(totalYMax),
+  m_totalRows(totalRows), m_totalCols(totalCols)
 {
-  this->total_xmin = total_xmin;
-  this->total_xmax = total_xmax;
-  this->total_ymin = total_ymin;
-  this->total_ymax = total_ymax;
-  this->total_rows = total_rows;
-  this->total_cols = total_cols;
 }
 
 
@@ -41,90 +37,84 @@ SpectrumDataSource::~SpectrumDataSource()
 /**
  * Get the smallest 'x' value covered by the data.
  */
-double SpectrumDataSource::GetXMin()
+double SpectrumDataSource::getXMin()
 {
-  return total_xmin;
+  return m_totalXMin;
 }
 
 
 /**
  * Get the largest 'x' value covered by the data.
  */
-double SpectrumDataSource::GetXMax()
+double SpectrumDataSource::getXMax()
 {
-  return total_xmax;
+  return m_totalXMax;
 }
 
 
 /**
  * Get the smallest 'y' value covered by the data.
  */
-double SpectrumDataSource::GetYMin()
+double SpectrumDataSource::getYMin()
 {
-  return total_ymin;
+  return m_totalYMin;
 }
 
 
 /**
  * Get the largest 'y' value covered by the data.
  */
-double SpectrumDataSource::GetYMax()
+double SpectrumDataSource::getYMax()
 {
-  return total_ymax;
+  return m_totalYMax;
 }
 
 
 /**
  * Get the total number of rows the data is divided into
  */
-size_t SpectrumDataSource::GetNRows()
+size_t SpectrumDataSource::getNRows()
 {
-  return total_rows;
+  return m_totalRows;
 }
 
 
 /**
  * Get the total number of columns the data is divided into
  */
-size_t SpectrumDataSource::GetNCols()
+size_t SpectrumDataSource::getNCols()
 {
-  return total_cols;
+  return m_totalCols;
 }
 
 
 /**
  * Clamp x to the interval of x-values covered by this DataSource
- * @param x   If x is more than xmax it will be set to xmax. If x is less 
+ * @param x   If x is more than xmax it will be set to xmax. If x is less
  *            than xmin, it will be set to xmin.
  */
-void SpectrumDataSource::RestrictX( double & x )
+void SpectrumDataSource::restrictX( double & x )
 {
-  if ( x > total_xmax )
-  {
-    x = total_xmax;
-  }
-  else if ( x < total_xmin )
-  {
-    x = total_xmin;
-  }
+  if ( x > m_totalXMax )
+    x = m_totalXMax;
+
+  else if ( x < m_totalXMin )
+    x = m_totalXMin;
 }
 
 
 /**
  * Clamp y to the interval of y-values covered by this DataSource.
- * @param y   If y is more than ymax it will be set to ymax. If y is less 
+ * @param y   If y is more than ymax it will be set to ymax. If y is less
  *            than ymin, it will be set to ymin.
  */
-void SpectrumDataSource::RestrictY( double & y )
+void SpectrumDataSource::restrictY( double & y )
 {
-  if ( y > total_ymax )
-  {
-    y = total_ymax;
-  }
-  else if ( y < total_ymin )
-  {
-    y = total_ymin;
-  }
+  if ( y > m_totalYMax )
+    y = m_totalYMax;
+
+  else if ( y < m_totalYMin )
+    y = m_totalYMin;
 }
 
 
@@ -133,16 +123,13 @@ void SpectrumDataSource::RestrictY( double & y )
  * @param row  If row is more than n_rows-1, it is set to n_rows-1.  If
  *             row < 0 it is set to zero.
  */
-void SpectrumDataSource::RestrictRow( int & row )
+void SpectrumDataSource::restrictRow( int & row )
 {
-  if ( row >= (int)total_rows )
-  {
-    row = (int)total_rows - 1;
-  }
+  if ( row >= (int)m_totalRows )
+    row = (int)m_totalRows - 1;
+
   else if ( row < 0 )
-  {
     row = 0;
-  }
 }
 
 
@@ -151,27 +138,24 @@ void SpectrumDataSource::RestrictRow( int & row )
  * @param col  If col is more than n_cols-1, it is set to n_cols-1.  If
  *             col < 0 it is set to zero.
  */
-void SpectrumDataSource::RestrictCol( int & col )
+void SpectrumDataSource::restrictCol( int & col )
 {
-  if ( col >= (int)total_cols )
-  {
-    col = (int)total_cols - 1;
-  }
+  if ( col >= (int)m_totalCols )
+    col = (int)m_totalCols - 1;
+
   else if ( col < 0 )
-  {
     col = 0;
-  }
 }
 
 
 /**
  *  Convenience method to get all the data at the maximum resolution.
  */
-DataArray* SpectrumDataSource::GetDataArray( bool is_log_x )
+DataArray_const_sptr SpectrumDataSource::getDataArray( bool isLogX )
 {
-  return GetDataArray( total_xmin, total_xmax, total_ymin, total_ymax,
-                       total_rows, total_cols, is_log_x );
+  return getDataArray( m_totalXMin, m_totalXMax, m_totalYMin, m_totalYMax,
+                       m_totalRows, m_totalCols, isLogX );
 }
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumDisplay.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumDisplay.cpp
index 0b5caea9fdbfc69d10e99fe483dbdad3cbe7f59e..70fdbcea414c538a080324d57ea0977763c804fe 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumDisplay.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumDisplay.cpp
@@ -14,6 +14,7 @@
 #include "MantidQtSpectrumViewer/ColorMaps.h"
 #include "MantidQtSpectrumViewer/QtUtils.h"
 #include "MantidQtSpectrumViewer/SVUtils.h"
+#include "MantidQtSpectrumViewer/SliderHandler.h"
 
 namespace MantidQt
 {
@@ -23,178 +24,194 @@ namespace SpectrumView
 /**
  * Make an SpectrumDisplay to display with the given widgets and controls.
  *
- * @param spectrum_plot   The QwtPlot that will hold the image
- * @param slider_handler  The object that manages interaction with the
- *                        horizontal and vertical scroll bars
- * @param range_handler   The object that manages interaction with the range.
- * @param h_graph         The GraphDisplay for the graph showing horizontal
- *                        cuts through the image at the bottom of the image.
- * @param v_graph         The GraphDisplay for the graph showing vertical 
- *                        cuts through the image at the left side of the image.
- * @param table_widget    The widget where the information about a pointed
- *                        at location will be displayed.
+ * @param spectrumPlot   The QwtPlot that will hold the image
+ * @param sliderHandler  The object that manages interaction with the
+ *                       horizontal and vertical scroll bars
+ * @param rangeHander  The object that manages interaction with the range.
+ * @param hGraph        The GraphDisplay for the graph showing horizontal
+ *                       cuts through the image at the bottom of the image.
+ * @param vGraph        The GraphDisplay for the graph showing vertical
+ *                       cuts through the image at the left side of the image.
+ * @param tableWidget   The widget where the information about a pointed
+ *                       at location will be displayed.
  */
-SpectrumDisplay::SpectrumDisplay(  QwtPlot*       spectrum_plot,
-                             ISliderHandler* slider_handler,
-                             IRangeHandler*  range_handler,
-                             GraphDisplay*  h_graph,
-                             GraphDisplay*  v_graph,
-                             QTableWidget*  table_widget )
-  : data_source(0), spectrum_plot(spectrum_plot), slider_handler(slider_handler),
-    range_handler(range_handler), h_graph_display(h_graph), v_graph_display(v_graph),
-    image_table(table_widget)
+SpectrumDisplay::SpectrumDisplay(  QwtPlot*         spectrumPlot,
+                                   ISliderHandler*  sliderHandler,
+                                   IRangeHandler*   rangeHander,
+                                   GraphDisplay*    hGraph,
+                                   GraphDisplay*    vGraph,
+                                   QTableWidget*    tableWidget ) :
+  m_spectrumPlot(spectrumPlot),
+  m_sliderHandler(sliderHandler),
+  m_rangeHandler(rangeHander),
+  m_hGraphDisplay(hGraph),
+  m_vGraphDisplay(vGraph),
+  m_imageTable(tableWidget)
 {
   ColorMaps::GetColorMap( ColorMaps::HEAT,
                           256,
-                          positive_color_table );
+                          m_positiveColorTable );
   ColorMaps::GetColorMap( ColorMaps::GRAY,
                           256,
-                          negative_color_table );
+                          m_negativeColorTable );
 
-  spectrum_plot_item = new SpectrumPlotItem;
+  m_spectrumPlotItem = new SpectrumPlotItem;
   setupSpectrumPlotItem();
 }
 
 
 SpectrumDisplay::~SpectrumDisplay()
 {
-  // std::cout << "SpectrumDisplay destructor called" << std::endl;
-  delete spectrum_plot_item;
+  delete m_spectrumPlotItem;
 }
 
+
 bool SpectrumDisplay::hasData(const std::string& wsName,
                               const boost::shared_ptr<Mantid::API::Workspace> ws)
 {
-  return this->data_source->hasData(wsName, ws);
+  return m_dataSource->hasData(wsName, ws);
 }
 
+
 /// Set some properties of the SpectrumPlotItem object
 void SpectrumDisplay::setupSpectrumPlotItem()
 {
-  spectrum_plot_item->setXAxis( QwtPlot::xBottom );
-  spectrum_plot_item->setYAxis( QwtPlot::yLeft );
+  m_spectrumPlotItem->setXAxis( QwtPlot::xBottom );
+  m_spectrumPlotItem->setYAxis( QwtPlot::yLeft );
 
-  spectrum_plot_item->attach( spectrum_plot );
+  m_spectrumPlotItem->attach( m_spectrumPlot );
 
   double DEFAULT_INTENSITY = 30;
-  SetIntensity( DEFAULT_INTENSITY );
+  setIntensity( DEFAULT_INTENSITY );
 }
 
+
 /**
  * Set the data source from which the image and data table information will
  * be obtained.
  *
- * @param data_source The SpectrumDataSource that provides the array of values
+ * @param dataSource The SpectrumDataSource that provides the array of values
  *                    and information for the table.
  */
-void SpectrumDisplay::SetDataSource( SpectrumDataSource* data_source )
+void SpectrumDisplay::setDataSource( SpectrumDataSource_sptr dataSource )
 {
-  this->data_source = data_source;
-  h_graph_display->SetDataSource( data_source );
-  v_graph_display->SetDataSource( data_source );
-
-  total_y_min = data_source->GetYMin();
-  total_y_max = data_source->GetYMax();
-
-  total_x_min = data_source->GetXMin();
-  total_x_max = data_source->GetXMax();
-  
-  pointed_at_x = DBL_MAX;
-  pointed_at_y = DBL_MAX;
-
-  int    n_rows = 500;         // get reasonable size initial image data
-  int    n_cols = 500;     
-                               // data_array is deleted in the SpectrumPlotItem
-  data_array = data_source->GetDataArray( total_x_min, total_x_max,
-                                          total_y_min, total_y_max,
-                                          n_rows, n_cols,
-                                          false );
-
-  spectrum_plot->setAxisScale( QwtPlot::xBottom, data_array->GetXMin(),
-                                              data_array->GetXMax() );
-  spectrum_plot->setAxisScale( QwtPlot::yLeft, data_array->GetYMin(),
-                                            data_array->GetYMax() );
-
-  spectrum_plot_item->SetData(  data_array,
-                            &positive_color_table, 
-                            &negative_color_table );
-
-  range_handler->ConfigureRangeControls( data_source );
+  m_dataSource = dataSource;
 
-  QRect draw_area;
-  GetDisplayRectangle( draw_area );
-  slider_handler->ConfigureSliders( draw_area, data_source );
+  m_hGraphDisplay->setDataSource( m_dataSource );
+  m_vGraphDisplay->setDataSource( m_dataSource );
+
+  m_totalYMin = m_dataSource->getYMin();
+  m_totalYMax = m_dataSource->getYMax();
+
+  m_totalXMin = m_dataSource->getXMin();
+  m_totalXMax = m_dataSource->getXMax();
+
+  m_pointedAtX = DBL_MAX;
+  m_pointedAtY = DBL_MAX;
+
+  int n_rows = static_cast<int>(m_totalYMax - m_totalYMin); // get reasonable size initial image data
+  int n_cols = 500;
+
+  // m_dataArray is deleted in the SpectrumPlotItem
+  m_dataArray = m_dataSource->getDataArray( m_totalXMin, m_totalXMax,
+                                            m_totalYMin, m_totalYMax,
+                                            n_rows, n_cols,
+                                            false );
+
+  m_spectrumPlot->setAxisScale( QwtPlot::xBottom, m_dataArray->getXMin(), m_dataArray->getXMax() );
+  m_spectrumPlot->setAxisScale( QwtPlot::yLeft,   m_dataArray->getYMin(), m_dataArray->getYMax() );
+
+  m_spectrumPlotItem->setData( m_dataArray,
+                               &m_positiveColorTable,
+                               &m_negativeColorTable );
+
+  m_rangeHandler->configureRangeControls( m_dataSource );
+
+  QRect drawArea;
+  getDisplayRectangle( drawArea );
+  m_sliderHandler->configureSliders( drawArea, m_dataSource );
 }
 
+
 /**
  *  Rebuild the scrollbars and image due to a change in the range xmin, xmax
  *  or step size.  It should be invoked when the user changes the values in
  *  the xmin, xmax or step controls.  It should not be called directly from
  *  other threads.
  */
-void SpectrumDisplay::UpdateRange()
+void SpectrumDisplay::updateRange()
 {
-  if ( data_source == 0 )
-  {
-    return;   // no image data to update
-  }
+  if ( m_dataSource == 0 )
+    return;   // No image data to update
 
-  if ( DataSourceRangeChanged() )
-  {
-    SetDataSource( data_source );   // re-initialize with the altered source
-  }
+  if ( dataSourceRangeChanged() )
+    setDataSource( m_dataSource );   // Re-initialize with the altered source
 
-  QRect display_rect;
-  GetDisplayRectangle( display_rect );
-                                           // range controls now determine
-                                            // the number of bins
-  double min  = total_x_min;
-  double max  = total_x_max;
-  double step = (total_x_max - total_x_min)/2000;
-  range_handler->GetRange( min, max, step );
-    
-  int n_bins = SVUtils::NumSteps( min, max, step );
-  if ( n_bins == 0 )
-  {
+  QRect displayRect;
+  getDisplayRectangle( displayRect );
+  // Range controls now determine the number of bins
+
+  double min  = m_totalXMin;
+  double max  = m_totalXMax;
+  double step = (m_totalXMax - m_totalXMin) / 2000;
+  m_rangeHandler->getRange( min, max, step );
+
+  int numBins = SVUtils::NumSteps( min, max, step );
+  if ( numBins == 0 )
     return;
-  }
 
-  slider_handler->ConfigureHSlider( n_bins, display_rect.width() );
+  m_sliderHandler->configureHSlider( numBins, displayRect.width() );
 
-  UpdateImage();
+  updateImage();
 }
 
+
+/**
+ * Updates the rnages of the scroll bars when the window is resized.
+ */
+void SpectrumDisplay::handleResize()
+{
+  QRect draw_area;
+  getDisplayRectangle( draw_area );
+
+  // Notify the sliders of the resize
+  SliderHandler * sliderHandler = dynamic_cast<SliderHandler*>(m_sliderHandler);
+  if(sliderHandler)
+    sliderHandler->reConfigureSliders(draw_area, m_dataSource);
+}
+
+
 /**
  *  This will rebuild the image from the data source.  It should be invoked
  *  when the scroll bar is moved, the plot area is resize or the color or
  *  intensity tables are changed.  It should not be called directly from
  *  other threads.
  */
-void SpectrumDisplay::UpdateImage()
+void SpectrumDisplay::updateImage()
 {
-  if ( data_source == 0 )
+  if ( m_dataSource == 0 )
   {
     return;   // no image data to update
   }
 
-  if ( DataSourceRangeChanged() )
+  if ( dataSourceRangeChanged() )
   {
-    SetDataSource( data_source );   // re-initialize with the altered source
+    setDataSource( m_dataSource );   // re-initialize with the altered source
   }
 
   QRect display_rect;
-  GetDisplayRectangle( display_rect );
+  getDisplayRectangle( display_rect );
 
-  double scale_y_min = data_source->GetYMin();
-  double scale_y_max = data_source->GetYMax();
+  double scale_y_min = m_dataSource->getYMin();
+  double scale_y_max = m_dataSource->getYMax();
 
-  double scale_x_min  = total_x_min;
-  double scale_x_max  = total_x_max;
-  double x_step = (total_x_max - total_x_min)/2000;
+  double scale_x_min  = m_totalXMin;
+  double scale_x_max  = m_totalXMax;
+  double x_step = (m_totalXMax - m_totalXMin)/2000;
 
-  range_handler->GetRange( scale_x_min, scale_x_max, x_step );
+  m_rangeHandler->getRange( scale_x_min, scale_x_max, x_step );
 
-  int n_rows = (int)data_source->GetNRows();
+  int n_rows = (int)m_dataSource->getNRows();
   int n_cols = SVUtils::NumSteps( scale_x_min, scale_x_max, x_step );
 
                                      // This works for linear or log scales
@@ -203,32 +220,32 @@ void SpectrumDisplay::UpdateImage()
     return;                          // can't draw empty image
   }
 
-  if ( slider_handler->VSliderOn() )
+  if ( m_sliderHandler->vSliderOn() )
   {
     int y_min;
     int y_max;
-    slider_handler->GetVSliderInterval( y_min, y_max );
+    m_sliderHandler->getVSliderInterval( y_min, y_max );
 
     double new_y_min = 0;
     double new_y_max = 0;
 
-    SVUtils::Interpolate( 0, n_rows, y_min, 
+    SVUtils::Interpolate( 0, n_rows, y_min,
                           scale_y_min, scale_y_max, new_y_min );
-    SVUtils::Interpolate( 0, n_rows, y_max, 
+    SVUtils::Interpolate( 0, n_rows, y_max,
                           scale_y_min, scale_y_max, new_y_max );
 
     scale_y_min = new_y_min;
     scale_y_max = new_y_max;
   }
 
-  if ( slider_handler->HSliderOn() )
+  if ( m_sliderHandler->hSliderOn() )
   {
     int x_min;
     int x_max;
-    slider_handler->GetHSliderInterval( x_min, x_max );  
+    m_sliderHandler->getHSliderInterval( x_min, x_max );
                             // NOTE: The interval [xmin,xmax] is always
                             // found linearly.  For log_x, we need to adjust it
-      
+
     double new_x_min = 0;
     double new_x_max = 0;
 
@@ -263,38 +280,39 @@ void SpectrumDisplay::UpdateImage()
 
   bool is_log_x = ( x_step < 0 );
                                          // NOTE: The DataArray is deleted
-  data_array = data_source->GetDataArray( scale_x_min, scale_x_max, 
-                                          scale_y_min, scale_y_max, 
-                                          n_rows, n_cols,
-                                          is_log_x );
+  m_dataArray = m_dataSource->getDataArray( scale_x_min, scale_x_max,
+                                            scale_y_min, scale_y_max,
+                                            n_rows, n_cols,
+                                            is_log_x );
 
-  is_log_x = data_array->IsLogX();       // Data source might not be able to
+  is_log_x = m_dataArray->isLogX();       // Data source might not be able to
                                          // provide log binned data, so check
                                          // if log binned data was returned.
 
-  spectrum_plot->setAxisScale( QwtPlot::xBottom, data_array->GetXMin(),
-                                              data_array->GetXMax() );
+  m_spectrumPlot->setAxisScale( QwtPlot::xBottom, m_dataArray->getXMin(),
+                                                  m_dataArray->getXMax() );
+
   if ( is_log_x )
   {
     QwtLog10ScaleEngine* log_engine = new QwtLog10ScaleEngine();
-    spectrum_plot->setAxisScaleEngine( QwtPlot::xBottom, log_engine );
+    m_spectrumPlot->setAxisScaleEngine( QwtPlot::xBottom, log_engine );
   }
   else
   {
     QwtLinearScaleEngine* linear_engine = new QwtLinearScaleEngine();
-    spectrum_plot->setAxisScaleEngine( QwtPlot::xBottom, linear_engine );
+    m_spectrumPlot->setAxisScaleEngine( QwtPlot::xBottom, linear_engine );
   }
 
-  spectrum_plot->setAxisScale( QwtPlot::yLeft, data_array->GetYMin(),
-                                            data_array->GetYMax() );
+  m_spectrumPlot->setAxisScale( QwtPlot::yLeft, m_dataArray->getYMin(),
+                                                m_dataArray->getYMax() );
 
-  spectrum_plot_item->SetData( data_array,
-                           &positive_color_table,
-                           &negative_color_table );
-  spectrum_plot->replot();
+  m_spectrumPlotItem->setData( m_dataArray,
+                               &m_positiveColorTable,
+                               &m_negativeColorTable );
+  m_spectrumPlot->replot();
 
-  SetVGraph( pointed_at_x );
-  SetHGraph( pointed_at_y );
+  setVGraph( m_pointedAtX );
+  setHGraph( m_pointedAtY );
 }
 
 
@@ -305,50 +323,64 @@ void SpectrumDisplay::UpdateImage()
  *  scale, the negative color table should be a gray scale to easily
  *  distinguish between positive and negative values.
  *
- *  @param positive_color_table  The new color table used to map positive data 
- *                               values to an RGB color.  This can have any
- *                               positive number of values, but will typically
- *                               have 256 entries.
- *  @param negative_color_table  The new color table used to map negative data 
- *                               values to an RGB color.  This must have the
- *                               same number of entries as the positive
- *                               color table.
+ *  @param positiveColorTable  The new color table used to map positive data
+ *                             values to an RGB color.  This can have any
+ *                             positive number of values, but will typically
+ *                             have 256 entries.
+ *  @param negativeColorTable  The new color table used to map negative data
+ *                             values to an RGB color.  This must have the
+ *                             same number of entries as the positive
+ *                             color table.
  */
-void SpectrumDisplay::SetColorScales( std::vector<QRgb> & positive_color_table,
-                                   std::vector<QRgb> & negative_color_table )
+void SpectrumDisplay::setColorScales( std::vector<QRgb> & positiveColorTable,
+                                      std::vector<QRgb> & negativeColorTable )
 {
-  this->positive_color_table.resize( positive_color_table.size() );
-  for ( size_t i = 0; i < positive_color_table.size(); i++ )
-  {
-    this->positive_color_table[i] = positive_color_table[i];
-  }
+  m_positiveColorTable.resize( positiveColorTable.size() );
+  for ( size_t i = 0; i < positiveColorTable.size(); i++ )
+    m_positiveColorTable[i] = positiveColorTable[i];
 
-  this->negative_color_table.resize( negative_color_table.size() );
-  for ( size_t i = 0; i < negative_color_table.size(); i++ )
-  {
-    this->negative_color_table[i] = negative_color_table[i];
-  }
- 
-  UpdateImage();
+  this->m_negativeColorTable.resize( negativeColorTable.size() );
+  for ( size_t i = 0; i < negativeColorTable.size(); i++ )
+    m_negativeColorTable[i] = negativeColorTable[i];
+
+  updateImage();
 }
 
 
 /**
  *  Change the control parameter (0...100) used to brighten the image.
  *  If the control parameter is 0, the mapping from data values to color
- *  table index will be linear.  As the control parameter is increased 
+ *  table index will be linear.  As the control parameter is increased
  *  the mapping becomes more and more non-linear in a way that emphasizes
  *  the lower level values.  This is similar to a log intensity scale.
- *  
- *  @param control_parameter  This is clamped between 0 (linear) and
- *                            100 (most emphasis on low intensity values)
+ *
+ *  @param controlParameter  This is clamped between 0 (linear) and
+ *                           100 (most emphasis on low intensity values)
  */
-void SpectrumDisplay::SetIntensity( double control_parameter )
+void SpectrumDisplay::setIntensity( double controlParameter )
 {
   size_t DEFAULT_SIZE = 100000;
-  ColorMaps::GetIntensityMap( control_parameter, DEFAULT_SIZE, intensity_table);
-  spectrum_plot_item->SetIntensityTable( &intensity_table );
-  UpdateImage();
+  ColorMaps::GetIntensityMap( controlParameter, DEFAULT_SIZE, m_intensityTable);
+  m_spectrumPlotItem->setIntensityTable( &m_intensityTable );
+  updateImage();
+}
+
+
+QPoint SpectrumDisplay::getPlotTransform( QPair<double, double> values )
+{
+  double x = m_spectrumPlot->transform( QwtPlot::xBottom, values.first );
+  double y = m_spectrumPlot->transform( QwtPlot::yLeft,   values.second );
+
+  return QPoint((int)x, (int)y);
+}
+
+
+QPair<double, double> SpectrumDisplay::getPlotInvTransform( QPoint point )
+{
+  double x = m_spectrumPlot->invTransform( QwtPlot::xBottom, point.x() );
+  double y = m_spectrumPlot->invTransform( QwtPlot::yLeft,   point.y() );
+
+  return qMakePair(x,y);
 }
 
 
@@ -357,29 +389,27 @@ void SpectrumDisplay::SetIntensity( double control_parameter )
  * show those as graphs in the horizontal and vertical graphs and show
  * information about the specified point.
  *
- * @param point  The point that the user is currently pointing at with 
+ * @param point  The point that the user is currently pointing at with
  *               the mouse.
  * @param mouseClick Which mouse button was clicked (used by derived class)
  * @return A pair containing the (x,y) values in the graph of the point
  */
-QPair<double,double> SpectrumDisplay::SetPointedAtPoint( QPoint point, int /*mouseClick*/ )
+QPair<double,double> SpectrumDisplay::setPointedAtPoint( QPoint point, int /*mouseClick*/ )
 {
-  if ( data_source == 0 || data_array == 0 )
-  { 
-    return qMakePair(0.0,0.0);
-  }
+  if ( m_dataSource == 0 || m_dataArray == 0 )
+    return qMakePair(0.0, 0.0);
 
-  double x = spectrum_plot->invTransform( QwtPlot::xBottom, point.x() );
-  double y = spectrum_plot->invTransform( QwtPlot::yLeft, point.y() );
+  QPair<double, double> transPoints = getPlotInvTransform(point);
 
-  SetHGraph( y );
-  SetVGraph( x );
+  setHGraph( transPoints.second );
+  setVGraph( transPoints.first );
 
-  ShowInfoList( x, y );
+  showInfoList( transPoints.first, transPoints.second );
 
-  return qMakePair(x,y);
+  return transPoints;
 }
 
+
 /*
  *  Extract data for Horizontal graph from the image at the specified y value.
  *  If the y value is NOT in the y-interval covered by the data array, just
@@ -387,24 +417,24 @@ QPair<double,double> SpectrumDisplay::SetPointedAtPoint( QPoint point, int /*mou
  *
  *  @param y   The y-value of the horizontal cut through the image.
  */
-void SpectrumDisplay::SetHGraph( double y )
+void SpectrumDisplay::setHGraph( double y )
 {
-  if ( y < data_array->GetYMin() || y > data_array->GetYMax()  )
+  if ( y < m_dataArray->getYMin() || y > m_dataArray->getYMax() )
   {
-    h_graph_display->Clear();
+    m_hGraphDisplay->clear();
     return;
   }
 
-  pointed_at_y = y;
+  m_pointedAtY = y;
 
-  float *data   = data_array->GetData();
+  std::vector<float>data   = m_dataArray->getData();
 
-  size_t n_cols = data_array->GetNCols();
+  size_t n_cols = m_dataArray->getNCols();
 
-  double x_min = data_array->GetXMin();
-  double x_max = data_array->GetXMax();
+  double x_min = m_dataArray->getXMin();
+  double x_max = m_dataArray->getXMax();
 
-  size_t row = data_array->RowOfY( y );
+  size_t row = m_dataArray->rowOfY( y );
 
   QVector<double> xData;
   QVector<double> yData;
@@ -413,15 +443,15 @@ void SpectrumDisplay::SetHGraph( double y )
   yData.push_back( data[ row * n_cols ] );
   for ( size_t col = 0; col < n_cols; col++ )
   {
-    double x_val = data_array->XOfColumn( col );
+    double x_val = m_dataArray->xOfColumn( col );
     xData.push_back( x_val );                           // mark data at col
     yData.push_back( data[ row * n_cols + col ] );      // centers
   }
   xData.push_back( x_max );                             // end at x_max
   yData.push_back( data[ row * n_cols + n_cols-1 ] );
 
-  h_graph_display->SetLogX( data_array->IsLogX() );
-  h_graph_display->SetData( xData, yData, y );
+  m_hGraphDisplay->setLogX( m_dataArray->isLogX() );
+  m_hGraphDisplay->setData( xData, yData, y );
 }
 
 
@@ -432,25 +462,25 @@ void SpectrumDisplay::SetHGraph( double y )
  *
  *  @param x   The x-value of the vertical cut through the image.
  */
-void SpectrumDisplay::SetVGraph( double x )
+void SpectrumDisplay::setVGraph( double x )
 {
-  if ( x < data_array->GetXMin() || x > data_array->GetXMax()  )
+  if ( x < m_dataArray->getXMin() || x > m_dataArray->getXMax() )
   {
-    v_graph_display->Clear();
+    m_vGraphDisplay->clear();
     return;
   }
 
-  pointed_at_x = x;
+  m_pointedAtX = x;
 
-  float *data   = data_array->GetData();
+  std::vector<float> data   = m_dataArray->getData();
 
-  size_t n_rows = data_array->GetNRows();
-  size_t n_cols = data_array->GetNCols();
+  size_t n_rows = m_dataArray->getNRows();
+  size_t n_cols = m_dataArray->getNCols();
 
-  double y_min = data_array->GetYMin();
-  double y_max = data_array->GetYMax();
+  double y_min = m_dataArray->getYMin();
+  double y_max = m_dataArray->getYMax();
 
-  size_t col = data_array->ColumnOfX( x );
+  size_t col = m_dataArray->columnOfX( x );
 
   QVector<double> v_xData;
   QVector<double> v_yData;
@@ -460,49 +490,73 @@ void SpectrumDisplay::SetVGraph( double x )
   v_xData.push_back( data[col] );
   for ( size_t row = 0; row < n_rows; row++ )     // mark data at row centres
   {
-    double y_val = data_array->YOfRow( row );
+    double y_val = m_dataArray->yOfRow( row );
     v_yData.push_back( y_val );
     v_xData.push_back( data[ row * n_cols + col ] );
   }
   v_yData.push_back( y_max );                     // end at y_max
   v_xData.push_back( data[ (n_rows-1) * n_cols + col] );
 
-  v_graph_display->SetData( v_xData, v_yData, x );
+  m_vGraphDisplay->setData( v_xData, v_yData, x );
 }
 
 
 /**
  *  Get the information about a pointed at location and show it in the
- *  table. 
+ *  table.
  *
  *  @param x  The x coordinate of the pointed at location on the image.
  *  @param y  The y coordinate of the pointed at location on the image.
  */
-void SpectrumDisplay::ShowInfoList( double x, double y )
+std::vector<std::string> SpectrumDisplay::showInfoList( double x, double y )
 {
   std::vector<std::string> info_list;
-  data_source->GetInfoList( x, y, info_list );
+  m_dataSource->getInfoList( x, y, info_list );
   int n_infos = (int)info_list.size() / 2;
 
-  image_table->setRowCount(n_infos + 1);
-  image_table->setColumnCount(2);
-  image_table->verticalHeader()->hide();
-  image_table->horizontalHeader()->hide();
+  m_imageTable->setRowCount(n_infos + 1);
+  m_imageTable->setColumnCount(2);
+  m_imageTable->verticalHeader()->hide();
+  m_imageTable->horizontalHeader()->hide();
 
   int width = 9;
   int prec  = 3;
 
-  double value = data_array->GetValue( x, y );
-  QtUtils::SetTableEntry( 0, 0, "Value", image_table );
-  QtUtils::SetTableEntry( 0, 1, width, prec, value, image_table );
+  double value = m_dataArray->getValue( x, y );
+  QtUtils::SetTableEntry( 0, 0, "Value", m_imageTable );
+  QtUtils::SetTableEntry( 0, 1, width, prec, value, m_imageTable );
 
   for ( int i = 0; i < n_infos; i++ )
   {
-    QtUtils::SetTableEntry( i+1, 0, info_list[2*i], image_table );
-    QtUtils::SetTableEntry( i+1, 1, info_list[2*i+1], image_table );
+    QtUtils::SetTableEntry( i+1, 0, info_list[2*i], m_imageTable );
+    QtUtils::SetTableEntry( i+1, 1, info_list[2*i+1], m_imageTable );
   }
 
-  image_table->resizeColumnsToContents();
+  m_imageTable->resizeColumnsToContents();
+
+  return info_list;
+}
+
+
+/**
+ * Gets the X value being pointed at.
+ *
+ * @returns X value
+ */
+double SpectrumDisplay::getPointedAtX()
+{
+  return m_pointedAtX;
+}
+
+
+/**
+ * Gets the Y value being pointed at.
+ *
+ * @returns Y value
+ */
+double SpectrumDisplay::getPointedAtY()
+{
+  return m_pointedAtY;
 }
 
 
@@ -512,15 +566,15 @@ void SpectrumDisplay::ShowInfoList( double x, double y )
  *  @param rect  A QRect object that will be filled out with position, width
  *               and height of the pixel region covered by the image.
  */
-void SpectrumDisplay::GetDisplayRectangle( QRect &rect )
+void SpectrumDisplay::getDisplayRectangle( QRect &rect )
 {
-  QwtScaleMap xMap = spectrum_plot->canvasMap( QwtPlot::xBottom );
-  QwtScaleMap yMap = spectrum_plot->canvasMap( QwtPlot::yLeft );
+  QwtScaleMap xMap = m_spectrumPlot->canvasMap( QwtPlot::xBottom );
+  QwtScaleMap yMap = m_spectrumPlot->canvasMap( QwtPlot::yLeft );
 
-  double x_min = data_array->GetXMin();
-  double x_max = data_array->GetXMax();
-  double y_min = data_array->GetYMin();
-  double y_max = data_array->GetYMax();
+  double x_min = m_dataArray->getXMin();
+  double x_max = m_dataArray->getXMax();
+  double y_min = m_dataArray->getYMin();
+  double y_max = m_dataArray->getYMax();
 
   int pix_x_min = (int)xMap.transform( x_min );
   int pix_x_max = (int)xMap.transform( x_max );
@@ -543,21 +597,14 @@ void SpectrumDisplay::GetDisplayRectangle( QRect &rect )
 }
 
 
-bool SpectrumDisplay::DataSourceRangeChanged()
+bool SpectrumDisplay::dataSourceRangeChanged()
 {
-  if ( total_y_min != data_source->GetYMin() ||
-       total_y_max != data_source->GetYMax() ||
-       total_x_min != data_source->GetXMin() ||
-       total_x_max != data_source->GetXMax() )
-  {
-    return true;
-  }
-  else
-  {
-    return false;
-  }
+  return ( m_totalYMin != m_dataSource->getYMin() ||
+           m_totalYMax != m_dataSource->getYMax() ||
+           m_totalXMin != m_dataSource->getXMin() ||
+           m_totalXMax != m_dataSource->getXMax() );
 }
 
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumPlotItem.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumPlotItem.cpp
index ca5832bcd4b3a05e3195992dc718d3f186cd7cf5..1ae3028c5dee447cd2f9ab02dea924b17d3c52ce 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumPlotItem.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumPlotItem.cpp
@@ -1,4 +1,3 @@
-
 #include <iostream>
 #include <QThread>
 #include "MantidQtSpectrumViewer/SpectrumPlotItem.h"
@@ -7,78 +6,61 @@ namespace MantidQt
 {
 namespace SpectrumView
 {
-  
+
 
 /**
  * Construct basic plot item with NO data to plot.
  */
-SpectrumPlotItem::SpectrumPlotItem()
+SpectrumPlotItem::SpectrumPlotItem() :
+  m_bufferID(0),
+  /* m_dataArray0(NULL), */
+  /* m_dataArray1(NULL), */
+  m_positiveColorTable(NULL),
+  m_negativeColorTable(NULL),
+  m_intensityTable(NULL)
 {
-  buffer_ID            = 0;
-  data_array_0         = 0;
-  data_array_1         = 0;
-  positive_color_table = 0;
-  negative_color_table = 0;
-  intensity_table      = 0;
 }
 
 
 SpectrumPlotItem::~SpectrumPlotItem()
 {
-  //std::cout << "SpectrumPlotItem destructor called" << std::endl;
-
-  if ( data_array_0 )
-  {
-    delete data_array_0; 
-  }
-  if ( data_array_1 )
-  {
-    delete data_array_1; 
-  }
 }
 
 
 /**
  * Specify the data to be plotted and the color table to use.
  *
- * @param data_array            The DataArray object containing the data to 
- *                              plot along with information about the array  
- *                              size and the region covered by the data. 
- * @param positive_color_table  Vector of RGB colors that determine the mapping 
- *                              from a positive data value to a color. 
- * @param negative_color_table  Vector of RGB colors that determine the mapping 
- *                              from a negative data value to a color. This
- *                              must have the same number of entries as the
- *                              positive color table.
+ * @param dataArray           The DataArray object containing the data to
+ *                            plot along with information about the array
+ *                            size and the region covered by the data.
+ * @param positiveColorTable  Vector of RGB colors that determine the mapping
+ *                            from a positive data value to a color.
+ * @param negativeColorTable  Vector of RGB colors that determine the mapping
+ *                            from a negative data value to a color. This
+ *                            must have the same number of entries as the
+ *                            positive color table.
  */
-void SpectrumPlotItem::SetData( DataArray*         data_array, 
-                             std::vector<QRgb>* positive_color_table,
-                             std::vector<QRgb>* negative_color_table )
+void SpectrumPlotItem::setData( DataArray_const_sptr dataArray,
+                                std::vector<QRgb>* positiveColorTable,
+                                std::vector<QRgb>* negativeColorTable )
 {
-  if ( buffer_ID == 0 )
+  if ( m_bufferID == 0 )
   {
-    if ( data_array_1 )         // we must be done using array 1, so delete it
-    {
-      delete data_array_1; 
-    }
-    data_array_1 = data_array;  // put new data in array 1, and switch to it
-                                // leaving array 0 intact for now, in case it's
-                                // being drawn.
-    buffer_ID = 1;
+    m_dataArray1 = dataArray;  // put new data in array 1, and switch to it
+                               // leaving array 0 intact for now, in case it's
+                               // being drawn.
+    m_bufferID = 1;
   }
   else
   {
-    if ( data_array_0 )         // we must be done using array 0, so delete it
-    {
-      delete data_array_0;
-    }
-    data_array_0 = data_array;  // put new data in array 0, and switch to it
-                                // leaving array 1 intact for now, in case it's
-                                // being drawn.
-    buffer_ID = 0;
+    m_dataArray0 = dataArray;  // put new data in array 0, and switch to it
+                               // leaving array 1 intact for now, in case it's
+                               // being drawn.
+    m_bufferID = 0;
   }
-  this->positive_color_table = positive_color_table;
-  this->negative_color_table = negative_color_table;
+
+  m_positiveColorTable = positiveColorTable;
+  m_negativeColorTable = negativeColorTable;
 }
 
 
@@ -87,13 +69,13 @@ void SpectrumPlotItem::SetData( DataArray*         data_array,
  *  they are mapped to a color.  This is typically used to apply a log type
  *  scaling so lower level values can be seen better.
  *
- *  @param intensity_table  Look up table containing values between 0 and 1
- *                          that will be used to scale the corresponding
- *                          image values before mappign to a color index.
+ *  @param intensityTable  Look up table containing values between 0 and 1
+ *                         that will be used to scale the corresponding
+ *                         image values before mappign to a color index.
  */
-void SpectrumPlotItem::SetIntensityTable( std::vector<double>* intensity_table )
+void SpectrumPlotItem::setIntensityTable( std::vector<double>* intensityTable )
 {
-  this->intensity_table = intensity_table;
+  m_intensityTable = intensityTable;
 }
 
 
@@ -105,50 +87,45 @@ void SpectrumPlotItem::SetIntensityTable( std::vector<double>* intensity_table )
  *                      columns in the actual displayed image
  *  @param  yMap        The QwtScaleMap used by QWT to map y-values to pixel
  *                      rows in the actual displayed image
- *  @param  canvasRect  rectangle containing the pixel region where QWT will 
+ *  @param  canvasRect  rectangle containing the pixel region where QWT will
  *                      draw the image.  This rectangle is slightly larger
  *                      than the actual rectangle used for the image.  This
  *                      parameter is NOT USED by the SpectrumPlotItem, but is
- *                      passed in when QWT calls this method. 
+ *                      passed in when QWT calls this method.
  */
 void SpectrumPlotItem::draw(QPainter    * painter,
-			    const QwtScaleMap & xMap, 
-			    const QwtScaleMap & yMap,
-			    const QRect       &       ) const
+                      const QwtScaleMap & xMap,
+                      const QwtScaleMap & yMap,
+                      const QRect       &       ) const
 {
-  if ( !positive_color_table )     // if no color table, the data is not yet
-  {                                // set, so just return
+  // If no color table, the data is not yet set, so just return
+  if(!m_positiveColorTable)
     return;
-  }
 
-  DataArray* data_array;
-  if ( buffer_ID == 0 )
-  {
-    data_array = data_array_0;
-  }
+  DataArray_const_sptr dataArray;
+  if ( m_bufferID == 0 )
+    dataArray = m_dataArray0;
   else
-  {
-    data_array = data_array_1;
-  }
+    dataArray = m_dataArray1;
 
-  size_t n_rows = data_array->GetNRows();
-  size_t n_cols = data_array->GetNCols();
+  size_t n_rows = dataArray->getNRows();
+  size_t n_cols = dataArray->getNCols();
 
   if ( n_rows == 0 || n_cols == 0 )
   {
     return;                                 // can't draw degenerate image
   }
 
-  const double min    = data_array->GetDataMin();
-  const double max    = data_array->GetDataMax();
-  const double x_min  = data_array->GetXMin();
-  const double x_max  = data_array->GetXMax();
-  const double y_min  = data_array->GetYMin();
-  const double y_max  = data_array->GetYMax();
+  const double min    = dataArray->getDataMin();
+  const double max    = dataArray->getDataMax();
+  const double x_min  = dataArray->getXMin();
+  const double x_max  = dataArray->getXMax();
+  const double y_min  = dataArray->getYMin();
+  const double y_max  = dataArray->getYMax();
 
-  float *data   = data_array->GetData();
+  std::vector<float> data   = dataArray->getData();
                                             // find the actual plot region
-                                            // using the scale maps. 
+                                            // using the scale maps.
   const int pix_x_min = (int)xMap.transform( x_min );
   const int pix_x_max = (int)xMap.transform( x_max );
   const int pix_y_min = (int)yMap.transform( y_min );
@@ -166,13 +143,13 @@ void SpectrumPlotItem::draw(QPainter    * painter,
     zc_max = 1;
   }
 
-  double scale = ((double)positive_color_table->size()-1)/zc_max;
-  double ct_scale = ((double)positive_color_table->size()-1);
-  if ( intensity_table != 0 )
+  double scale = ((double)m_positiveColorTable->size()-1)/zc_max;
+  double ct_scale = ((double)m_positiveColorTable->size()-1);
+  if ( m_intensityTable != 0 )
   {
-    size_t lut_size = intensity_table->size();
+    size_t lut_size = m_intensityTable->size();
     scale    = ((double)lut_size-1.0) / zc_max;
-    ct_scale = ((double)positive_color_table->size()-1);
+    ct_scale = ((double)m_positiveColorTable->size()-1);
   }
 
   size_t color_index;
@@ -184,20 +161,20 @@ void SpectrumPlotItem::draw(QPainter    * painter,
   for ( int row = (int)n_rows-1; row >= 0; row-- )
   {
     size_t data_index = row * n_cols;
-    if (intensity_table == 0 )              // use color tables directly
+    if (m_intensityTable == 0 )              // use color tables directly
     {
       for ( int col = 0; col < (int)n_cols; col++ )
       {
-        val = data[data_index] * scale; 
+        val = data[data_index] * scale;
         if ( val >= 0 )                     // use positive color table
         {
           color_index = (uint)val;
-          rgb_buffer[image_index] = (*positive_color_table)[ color_index ];
+          rgb_buffer[image_index] = (*m_positiveColorTable)[ color_index ];
         }
         else                               // use negative color table
         {
           color_index = (uint)(-val);
-          rgb_buffer[image_index] = (*negative_color_table)[ color_index ];
+          rgb_buffer[image_index] = (*m_negativeColorTable)[ color_index ];
         }
         image_index++;
         data_index++;
@@ -211,14 +188,14 @@ void SpectrumPlotItem::draw(QPainter    * painter,
         if ( val >= 0 )
         {
           lut_index   = (uint)val;
-          color_index = (uint)((*intensity_table)[lut_index] * ct_scale );
-          rgb_buffer[image_index] = (*positive_color_table)[ color_index ];
+          color_index = (uint)((*m_intensityTable)[lut_index] * ct_scale );
+          rgb_buffer[image_index] = (*m_positiveColorTable)[ color_index ];
         }
         else
         {
           lut_index   = (uint)(-val);
-          color_index = (uint)((*intensity_table)[lut_index] * ct_scale );
-          rgb_buffer[image_index] = (*negative_color_table)[ color_index ];
+          color_index = (uint)((*m_intensityTable)[lut_index] * ct_scale );
+          rgb_buffer[image_index] = (*m_negativeColorTable)[ color_index ];
         }
         image_index++;
         data_index++;
@@ -233,7 +210,7 @@ void SpectrumPlotItem::draw(QPainter    * painter,
   int width  = pix_x_max - pix_x_min + 1;
   int height = pix_y_min - pix_y_max + 1;    // y-axis is inverted for image
 
-  QPixmap scaled_pixmap = pixmap.scaled( width, height, 
+  QPixmap scaled_pixmap = pixmap.scaled( width, height,
                                          Qt::IgnoreAspectRatio,
                                          Qt::FastTransformation);
 
@@ -246,4 +223,4 @@ void SpectrumPlotItem::draw(QPainter    * painter,
 
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumView.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumView.cpp
index 12297305815a927362e73f6f5b460ca28c9c860b..8c7b192b66c10f7e5074c7c01ea14c62e23f7af7 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumView.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumView.cpp
@@ -1,9 +1,7 @@
-
 #include <iostream>
-#include  "MantidQtSpectrumViewer/SpectrumView.h"
-#include  "MantidQtSpectrumViewer/ColorMaps.h"
+#include "MantidQtSpectrumViewer/SpectrumView.h"
+#include "MantidQtSpectrumViewer/ColorMaps.h"
 
-#include "ui_SpectrumView.h"
 #include "MantidQtSpectrumViewer/SVConnections.h"
 #include "MantidQtSpectrumViewer/SpectrumDisplay.h"
 #include "MantidQtSpectrumViewer/SliderHandler.h"
@@ -16,7 +14,6 @@ namespace MantidQt
 namespace SpectrumView
 {
 
-
 /**
  *  Construct an SpectrumView to display data from the specified data source.
  *  The specified SpectrumDataSource must be constructed elsewhere and passed
@@ -30,32 +27,40 @@ namespace SpectrumView
 SpectrumView::SpectrumView(QWidget *parent) :
   QMainWindow(parent, 0),
   WorkspaceObserver(),
-  m_ui(new Ui::SpectrumViewer())
+  m_ui(new Ui::SpectrumViewer()),
+  m_sliderHandler(NULL),
+  m_rangeHandler(NULL),
+  m_spectrumDisplay(NULL),
+  m_svConnections(NULL),
+  m_emodeHandler(NULL)
 {
   m_ui->setupUi(this);
 }
 
+
 SpectrumView::~SpectrumView()
 {
-//  std::cout << "SpectrumView destructor called" << std::endl;
+  delete m_spectrumDisplay;
+  delete m_svConnections;
 
-  delete  h_graph;
-  delete  v_graph;
+  if(m_emodeHandler)
+    delete m_emodeHandler;
+}
 
-  delete  m_ui;
-  delete  m_slider_handler;
-  delete  m_range_handler;
-  delete  m_spectrum_display;
-  delete  m_sv_connections;
-  if ( m_emode_handler)
-  {
-    delete m_emode_handler;
-  }
+
+void SpectrumView::resizeEvent(QResizeEvent * event)
+{
+  QMainWindow::resizeEvent(event);
+
+  if(m_svConnections)
+    m_svConnections->imageSplitterMoved();
 }
+
+
 void SpectrumView::renderWorkspace(Mantid::API::MatrixWorkspace_const_sptr wksp)
 {
-  MatrixWSDataSource* data_source = new MatrixWSDataSource(wksp);
-  this->updateHandlers(data_source);
+  m_dataSource = MatrixWSDataSource_sptr(new MatrixWSDataSource(wksp));
+  updateHandlers(m_dataSource);
 
   // Watch for the deletion of the associated workspace
   observeAfterReplace();
@@ -67,84 +72,85 @@ void SpectrumView::renderWorkspace(Mantid::API::MatrixWorkspace_const_sptr wksp)
   connect(this, SIGNAL(needToUpdate()), this, SLOT(updateWorkspace()));
 
   // set the window title
-  std::string title = std::string("SpectrumView (") +
-      wksp->getTitle() +
-      std::string(")");
-  this->setWindowTitle(QString::fromStdString(title));
+  std::string title = "SpectrumView (" + wksp->getTitle() + ")";
+  this->setWindowTitle(QString::fromStdString(title).simplified());
 
-  h_graph = new GraphDisplay( m_ui->h_graphPlot, m_ui->h_graph_table, false );
-  v_graph = new GraphDisplay( m_ui->v_graphPlot, m_ui->v_graph_table, true );
+  m_hGraph = new GraphDisplay( m_ui->h_graphPlot, m_ui->h_graph_table, false );
+  m_vGraph = new GraphDisplay( m_ui->v_graphPlot, m_ui->v_graph_table, true );
 
-  m_spectrum_display = new SpectrumDisplay( m_ui->spectrumPlot,
-                 m_slider_handler,
-                 m_range_handler,
-                 h_graph, v_graph,
-                 m_ui->image_table );
+  m_spectrumDisplay = new SpectrumDisplay( m_ui->spectrumPlot,
+                                           m_sliderHandler,
+                                           m_rangeHandler,
+                                           m_hGraph, m_vGraph,
+                                           m_ui->image_table);
 
-  m_sv_connections = new SVConnections( m_ui, this, m_spectrum_display,
-                                        h_graph, v_graph );
+  m_svConnections = new SVConnections( m_ui, this, m_spectrumDisplay,
+                                       m_hGraph, m_vGraph );
 
-  m_spectrum_display->SetDataSource( data_source );
+  m_spectrumDisplay->setDataSource( m_dataSource );
 }
 
+
 /// Setup the various handlers (energy-mode, slider, range)
-void SpectrumView::updateHandlers(SpectrumDataSource* data_source)
+void SpectrumView::updateHandlers(SpectrumDataSource_sptr dataSource)
 {
-  // IF we have a MatrixWSDataSource give it the handler for the
+  // If we have a MatrixWSDataSource give it the handler for the
   // EMode, so the user can set EMode and EFixed.  NOTE: we could avoid
   // this type checking if we made the ui in the calling code and passed
   // it in.  We would need a common base class for this class and
   // the ref-viewer UI.
-  MatrixWSDataSource* matrix_ws_data_source =
-                      dynamic_cast<MatrixWSDataSource*>( data_source );
-  if ( matrix_ws_data_source != 0 )
+  MatrixWSDataSource_sptr matrixWsDataSource = boost::dynamic_pointer_cast<MatrixWSDataSource>( dataSource );
+
+  if ( matrixWsDataSource != NULL )
   {
-    m_emode_handler = new EModeHandler( m_ui );
-    matrix_ws_data_source -> SetEModeHandler( m_emode_handler );
+    m_emodeHandler = new EModeHandler( m_ui );
+    matrixWsDataSource -> setEModeHandler( m_emodeHandler );
   }
   else
   {
-    m_emode_handler = 0;
+    m_emodeHandler = NULL;
   }
 
-  m_slider_handler = new SliderHandler( m_ui );
-  m_range_handler = new RangeHandler( m_ui );
-
+  m_sliderHandler = new SliderHandler( m_ui );
+  m_rangeHandler = new RangeHandler( m_ui );
 }
 
+
 /** Slot to close the window */
 void SpectrumView::closeWindow()
 {
   close();
 }
 
+
 /** Slot to replace the workspace being looked at. */
 void SpectrumView::updateWorkspace()
 {
   close(); // TODO the right thing
 }
 
+
 /** Signal to close this window if the workspace has just been deleted */
 void SpectrumView::preDeleteHandle(const std::string& wsName,const boost::shared_ptr<Mantid::API::Workspace> ws)
 {
-  if (m_spectrum_display->hasData(wsName, ws))
+  if (m_spectrumDisplay->hasData(wsName, ws))
   {
     emit needToClose();
   }
 }
 
+
 /** Signal that the workspace being looked at was just replaced with a different one */
 void SpectrumView::afterReplaceHandle(const std::string& wsName,const boost::shared_ptr<Mantid::API::Workspace> ws)
 {
-  std::cout << "afterReplaceHandle" << std::endl;
-  if (m_spectrum_display->hasData(wsName, ws))
+  if (m_spectrumDisplay->hasData(wsName, ws))
   {
 //    MatrixWSDataSource* matrix_ws_data_source = new Matrix
 //                        dynamic_cast<MatrixWSDataSource>( ws );
-//    saved_spectrum_display->SetDataSource(ws); // TODO implement the right thing
+//    m_spectrumDisplay->setDataSource(ws); // TODO implement the right thing
     emit needToUpdate();
   }
 }
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumViewDemo.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumViewDemo.cpp
deleted file mode 100644
index d7ef8c5f870196286ac4ed853f5743b13a97745f..0000000000000000000000000000000000000000
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumViewDemo.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-
-#include <iostream>
-
-#include <qapplication.h>                                                        
-#include <QMainWindow>
-#include <QtGui>
-
-#include "MantidQtSpectrumViewer/SVUtils.h"
-#include "MantidQtSpectrumViewer/SpectrumView.h"
-#include "MantidQtSpectrumViewer/ArrayDataSource.h"
-
-using namespace MantidQt;
-using namespace SpectrumView;
-
-/**
- * Construct an array of test data over the specified region with the
- * specified region using the specified number of rows and columns. 
- *
- * @param total_xmin   The x-coordinate at the left edge of the data region
- * @param total_xmax   The x-coordinate at the right edge of the data region
- * @param total_ymin   The y-coordinate at the bottom edge of the data region
- * @param total_ymax   The y-coordinate at the top edge of the data region
- * @param total_rows   The number of rows the test data should be divided into
- * @param total_cols   The number of columns the test data should be divided 
- *                     into
- */
-float * MakeTestData( double total_xmin, double total_xmax,
-                      double total_ymin, double total_ymax,
-                      size_t total_rows, size_t total_cols )
-{
-                                        // make some test data in array data[]
-  double x;
-  double y;
-  float* data = new float[total_rows*total_cols];
-  for ( size_t row = 0; row < total_rows; row++ )
-    for ( size_t col = 0; col < total_cols; col++ )
-    {
-       x = ((double)col - (double)total_cols/2.0)/(double)total_cols;
-       y = ((double)row - (double)total_rows/2.0)/(double)total_rows;
-       data[ row * total_cols + col ] = 
-                                     (float)(1000.0 * cos( (x*x + y*y)*20.0 ));
-    }
-                                                // mark a row 1/4 way up
-  double point = (total_ymax - total_ymin)/4 + total_ymin;
-  double mark_row = 0;
-  SVUtils::Interpolate( total_ymin, total_ymax, point,
-                               0.0, (double)total_rows, mark_row );
-
-  size_t row_offset = (int)(mark_row) * total_cols;
-  for ( size_t col = 0; col < total_cols; col++ )
-  {
-     data[ row_offset-total_cols + col ] = 0;
-     data[ row_offset            + col ] = 0;
-     data[ row_offset+total_cols + col ] = 0;
-  }
-                                                 // mark a col 1/10 way over
-  point = (total_xmax - total_xmin)/10 + total_xmin;
-  double mark_col = 0;
-  SVUtils::Interpolate( total_xmin, total_xmax, point,
-                               0.0, (double)total_cols, mark_col );
-
-  size_t col_offset = (int)( mark_col );
-  for ( size_t row = 0; row < total_rows; row++ )
-  {
-     data[ row * total_cols + col_offset-1 ] = 0;
-     data[ row * total_cols + col_offset   ] = 0;
-     data[ row * total_cols + col_offset+1 ] = 0;
-  }
-
-  return data;
-}
-
-
-int main( int argc, char **argv )
-{
-  QApplication a( argc, argv );
-
-  float * data = MakeTestData( 10, 110, 220, 320, 2000, 2000 );
-
-  ArrayDataSource* source = 
-                   new ArrayDataSource( 10, 110, 220, 320, 2000, 2000, data );
-
-  MantidQt::SpectrumView::SpectrumView spectrum_view( source );
-
-                       // Don't delete on close in this case, since image_view
-                       // will be deleted when the application ends
-  spectrum_view.setAttribute(Qt::WA_DeleteOnClose,false);
-
-  return a.exec();
-}
-
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumViewNxEventFile.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumViewNxEventFile.cpp
deleted file mode 100644
index 5fe938deb3b43c2b6a8f5b19c595786009a3ecc2..0000000000000000000000000000000000000000
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/SpectrumViewNxEventFile.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-
-#include <iostream>
-
-#include <qapplication.h>                                                       
-#include <QMainWindow>
-#include <QtGui>
-
-#include "MantidAPI/FrameworkManager.h"
-#include "MantidAPI/AlgorithmManager.h"
-#include "MantidKernel/System.h"
-#include "MantidGeometry/IDTypes.h"
-#include "MantidNexusCPP/NeXusFile.hpp"
-#include "MantidAPI/IEventWorkspace.h"
-
-#include "MantidQtSpectrumViewer/MatrixWSImageView.h"
-
-using namespace MantidQt;
-using namespace SpectrumView;
-using namespace Mantid::Kernel;
-using namespace Mantid::API;
-
-int main( int argc, char** argv )
-{
-  std::cout << "Start of SpectrumViewNxEventFile..." << std::endl;
-  if ( argc < 2 )
-  {
-    std::cout << "Please enter a NeXus event file name on the command line!" 
-              << std::endl;
-    return 0; 
-  }
-  std::string file_name(argv[1]);
-
-  QApplication a( argc, argv );
-
-  Mantid::API::FrameworkManager::Instance();
-  IAlgorithm_sptr ld = AlgorithmManager::Instance().createUnmanaged("LoadEventNexus");
-  ld->initialize();
-
-  ld->setPropertyValue("Filename", file_name );
-  std::string outws_name = "EventWS";
-  ld->setPropertyValue("OutputWorkspace",outws_name);
-  ld->setPropertyValue("Precount", "0");
-
-  std::cout << "Loading file: " << file_name << std::endl;
-  ld->execute();
-  ld->isExecuted();
-
-  std::cout << "File Loaded, getting workspace. " << std::endl;
-
-  IEventWorkspace_sptr WS;
-  WS = AnalysisDataService::Instance().retrieveWS<IEventWorkspace>(outws_name);
-
-  std::cout << "Got EventWorkspace, making EventWSDataSource..." << std::endl;
-
-  MantidQt::SpectrumView::MatrixWSImageView spectrum_view( WS );
-
-  return a.exec();
-}
-
diff --git a/Code/Mantid/MantidQt/SpectrumViewer/src/TrackingPicker.cpp b/Code/Mantid/MantidQt/SpectrumViewer/src/TrackingPicker.cpp
index 8787a8e1e77824a07ba786128536b002c02327ec..28a1f2f4b45d3a14224ffbe664b9ca7c456cec2d 100644
--- a/Code/Mantid/MantidQt/SpectrumViewer/src/TrackingPicker.cpp
+++ b/Code/Mantid/MantidQt/SpectrumViewer/src/TrackingPicker.cpp
@@ -1,21 +1,18 @@
-
-#include "MantidQtSpectrumViewer/TrackingPicker.h" 
+#include "MantidQtSpectrumViewer/TrackingPicker.h"
 
 namespace MantidQt
 {
 namespace SpectrumView
 {
 
-
 /**
  *  Construct a tracking picker to work with the specified canvas
  *
  *  @param canvas  Pointer to the QwtPlotCanvas this picker will work with
  */
 TrackingPicker::TrackingPicker( QwtPlotCanvas* canvas )
-               :QwtPlotPicker( canvas )
+  : QwtPlotPicker( canvas ), m_hideReadout(true)
 {
-  hide_readout = true;
 }
 
 
@@ -26,9 +23,9 @@ TrackingPicker::TrackingPicker( QwtPlotCanvas* canvas )
  * @param hide  If true, the position readout at the mouse position will
  *              be turned off.
  */
-void TrackingPicker::HideReadout( bool hide )
+void TrackingPicker::hideReadout( bool hide )
 {
-  this->hide_readout = hide;
+  m_hideReadout = hide;
 }
 
 
@@ -41,7 +38,7 @@ void TrackingPicker::HideReadout( bool hide )
 QwtText TrackingPicker::trackerText( const QPoint & point ) const
 {
   emit mouseMoved(point);
-  if ( hide_readout )
+  if ( m_hideReadout )
   {
     return QwtText();
   }
@@ -61,7 +58,7 @@ QwtText TrackingPicker::trackerText( const QPoint & point ) const
 QwtText TrackingPicker::trackerText( const QwtDoublePoint & pos ) const
 {
   emit mouseMoved(pos.toPoint());
-  if ( hide_readout )
+  if ( m_hideReadout )
   {
     return QwtText();
   }
@@ -72,4 +69,4 @@ QwtText TrackingPicker::trackerText( const QwtDoublePoint & pos ) const
 }
 
 } // namespace SpectrumView
-} // namespace MantidQt 
+} // namespace MantidQt
diff --git a/Code/Mantid/docs/source/algorithms/AnnularRingAbsorption-v1.rst b/Code/Mantid/docs/source/algorithms/AnnularRingAbsorption-v1.rst
new file mode 100644
index 0000000000000000000000000000000000000000..6d0a822f06efe326c117d30e670504ce93633923
--- /dev/null
+++ b/Code/Mantid/docs/source/algorithms/AnnularRingAbsorption-v1.rst
@@ -0,0 +1,51 @@
+
+.. algorithm::
+
+.. summary::
+
+.. alias::
+
+.. properties::
+
+Description
+-----------
+
+Sets up a hollow sample shape, along with the required material properties, and runs
+the :ref:`MonteCarloAbsorption <algm-MonteCarloAbsorption-v1>` algorithm. This algorithm merely
+serves as a simpler interface to define the shape & material of the sample without having
+to resort to the more complex :ref:`CreateSampleShape <algm-CreateSampleShape-v1>` & :ref:`SetSampleMaterial <algm-SetSampleMaterial-v1>`
+algorithms. The computational part is all taken care of by :ref:`MonteCarloAbsorption <algm-MonteCarloAbsorption-v1>`. Please see that
+documentation for more details.
+
+Assumptions
+###########
+
+The algorithm currently assumes that the can wall is sufficiently thin & a weak absorber so that it can be ignored.
+
+
+Usage
+-----
+
+**Example**
+
+.. testcode:: AnnularRingAbsorptionExample
+
+   sample_ws = CreateSampleWorkspace("Histogram",NumBanks=1) # fake some data in TOF
+   sample_ws = ConvertUnits(sample_ws, Target="Wavelength")
+   factors = \
+     AnnularRingAbsorption(sample_ws,
+       SampleHeight=3.8, SampleThickness=0.05, CanOuterRadius=1.1,CanInnerRadius=0.92,
+       SampleChemicalFormula="Li2-Ir-O3",SampleNumberDensity=0.004813,
+       EventsPerPoint=300)
+
+   print "The created workspace has one entry for each spectra: %i" % factors.getNumberHistograms()
+   print "Just divide your data by the correction to correct for absorption."
+
+Output:
+
+.. testoutput:: AnnularRingAbsorptionExample
+
+   The created workspace has one entry for each spectra: 100
+   Just divide your data by the correction to correct for absorption.
+
+.. categories::
diff --git a/Code/Mantid/docs/source/algorithms/CalculateMSVesuvio-v1.rst b/Code/Mantid/docs/source/algorithms/CalculateMSVesuvio-v1.rst
new file mode 100644
index 0000000000000000000000000000000000000000..8eddae38cacec7be66c60c70d46b481db262234b
--- /dev/null
+++ b/Code/Mantid/docs/source/algorithms/CalculateMSVesuvio-v1.rst
@@ -0,0 +1,59 @@
+.. algorithm::
+
+.. summary::
+
+.. alias::
+
+.. properties::
+
+Description
+-----------
+
+Calculates the multiple scattering contribution for deep inelastic neutron scattering on
+the `Vesuvio <http://www.isis.stfc.ac.uk/instruments/vesuvio/vesuvio4837.html>`__ instrument at
+ISIS. The algorithm follows the procedures defined by J. Mayers et al. [1]_.
+
+
+Usage
+-----
+
+.. code-block:: python
+
+   runs = "" # fill in run numbers here
+   ip_file = "" # fill in IP file here
+   data = LoadVesuvio(Filename=, SpectrumList=spectra,
+                      Mode="SingleDifference", InstrumentParFile=ip_file)
+   # Cut it down to the typical range
+   data = CropWorkspace(raw_ws,XMin=50.0,XMax=562.0)
+   # Coarser binning
+   data = Rebin(raw_ws, Params=[49.5, 1.0, 562.5])
+
+   # Create sample shape
+   height = 0.1 # y-dir (m)
+   width = 0.1 # x-dir (m)
+   thick = 0.005 # z-dir (m)
+   
+   half_height, half_width, half_thick = 0.5*height, 0.5*width, 0.5*thick
+   xml_str = \
+      " <cuboid id=\"sample-shape\"> " \
+       + "<left-front-bottom-point x=\"%f\" y=\"%f\" z=\"%f\" /> " % (half_width,-half_height,half_thick) \
+       + "<left-front-top-point x=\"%f\" y=\"%f\" z=\"%f\" /> " % (half_width, half_height, half_thick) \
+       + "<left-back-bottom-point x=\"%f\" y=\"%f\" z=\"%f\" /> " % (half_width, -half_height, -half_thick) \
+       + "<right-front-bottom-point x=\"%f\" y=\"%f\" z=\"%f\" /> " % (-half_width, -half_height, half_thick) \
+       + "</cuboid>"
+   CreateSampleShape(data, xml_str)
+   atom_props = [1.007900, 0.9272392, 5.003738,
+                 16.00000, 3.2587662E-02, 13.92299,
+                 27.50000, 4.0172841E-02, 15.07701]
+   tot_scatter, ms_scatter = \
+       CalculateMSVesuvio(data, NoOfMasses=3, SampleDensity=241, AtomicProperties=atom_props,
+                          BeamRadius=2.5)
+
+References
+----------
+
+.. [1] J. Mayers, A.L. Fielding and R. Senesi, `Nucl. Inst Methods A 481, 454(2002) <http://dx.doi.org/10.1016/S0168-9002(01)01335-3>`__
+
+
+
+.. categories::
diff --git a/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst
index f814ae34f586d6f566b145d14cc23b763fd9b5ac..21a59d9438ee803b71d981df86e8d23bce373615 100644
--- a/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst
+++ b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v1.rst
@@ -11,7 +11,7 @@ Description
 
 This algorithm converts from a `MatrixWorkspace <http://mantidproject.org/MatrixWorkspace>`__ (in
 detector/time-of-flight space) to a
-`MDEventWorkspace <http://mantidproject.org/MDEventWorkspace>`__ containing events in reciprocal
+`MDEventWorkspace <http://mantidproject.org/MDWorkspace>`__ containing events in reciprocal
 space.
 
 The calculations apply only to elastic diffraction experiments. The
@@ -20,7 +20,7 @@ to HKL of the crystal.
 
 If the OutputWorkspace does NOT already exist, a default one is created.
 In order to define more precisely the parameters of the
-`MDEventWorkspace <http://mantidproject.org/MDEventWorkspace>`__, use the
+`MDEventWorkspace <http://mantidproject.org/MDWorkspace>`__, use the
 :ref:`algm-CreateMDWorkspace` algorithm first.
 
 Types of Conversion
@@ -100,11 +100,14 @@ Usage
 
    # A way to look at these results as a text:
    print "Resulting MD workspace has {0} events and {1} dimensions".format(md.getNEvents(),md.getNumDims())
+   print "Workspace Type is: ",md.id()
+
 
 **Output:**
 
 .. testoutput:: ExConvertToDiffractionMDWorkspace
 
    Resulting MD workspace has 520128 events and 3 dimensions
-
+   Workspace Type is:  MDEventWorkspace<MDLeanEvent,3>
+   
 .. categories::
diff --git a/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst
index eaf25f37fbd562214fa520dd0daa15b7abda0d81..3527b1f8684d230faa5f50bd86b639181b59c872 100644
--- a/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst
+++ b/Code/Mantid/docs/source/algorithms/ConvertToDiffractionMDWorkspace-v2.rst
@@ -9,19 +9,30 @@
 Description
 -----------
 
-This algorithm converts from a `MatrixWorkspace <http://mantidproject.org/MatrixWorkspace>`__ (in
-detector/time-of-flight space) to a
-`MDEventWorkspace <http://mantidproject.org/MDEventWorkspace>`__ containing events in reciprocal
-space.
+The algorithm converts from a `MatrixWorkspace <http://mantidproject.org/MatrixWorkspace>`__ (in
+any input units) into `MDWorkspace <http://mantidproject.org/MDWorkspace>`__ containing 
+3D events in reciprocal space.
 
 The calculations apply only to elastic diffraction experiments. The
 conversion can be done either to Q-space in the lab or sample frame, or
 to HKL of the crystal.
 
-If the OutputWorkspace does NOT already exist, a default one is created.
-In order to define more precisely the parameters of the
-`MDEventWorkspace <http://mantidproject.org/MDEventWorkspace>`__, use the
-:ref:`algm-CreateMDWorkspace` algorithm first.
+Version 2 of the algorithm is the wrapper around :ref:`algm-ConvertToMD` algorithm, used for
+diffraction workflow and for supporting the interface of the previous specialized version of this 
+algorithm.  Old specialized version of this algorithm also exists.
+
+See the :ref:`algm-ConvertToDiffractionMDWorkspace-v1` for details of the old and  :ref:`algm-ConvertToMD` for this algorithms implementations. 
+ 
+The main difference between the results produced by the version one and two of this algorithm 
+is the type of the workspace, produced by default. 
+Version one is producing `MDLeanEvent<3> <http://www.mantidproject.org/MDWorkspace#Description%20of%20MDWorkspace>`__-s workspace 
+and this version generates `MDEvent<3> <http://www.mantidproject.org/MDWorkspace#Description%20of%20MDWorkspace>`__-s workspace.
+
+To obtain a workspace containing `MDLeanEvent<3> <http://www.mantidproject.org/MDWorkspace#Description%20of%20MDWorkspace>`__-s, 
+and fine-tune the output workspace properties, 
+one has to create OutputWorkspace using :ref:`algm-CreateMDWorkspace` algorithm first.
+
+ 
 
 Types of Conversion
 ###################
@@ -52,41 +63,6 @@ This correction is also done by the
 :ref:`algm-AnvredCorrection` algorithm, and will be set to
 false if that algorithm has been run on the input workspace.
 
-OneEventPerBin option
-#####################
-
-If you specify *OneEventPerBin*, then the **histogram** representation
-of the input workspace is used, with one MDEvent generated for each bin
-of the workspace, **including zeros**.
-
-This can be useful in cases where the experimental coverage needs to be
-tracked. With one MDEvent for each bin, you can count which regions in
-Q-space have been measured. The `SliceViewer <http://mantidproject.org/SliceViewer>`__ has an
-option to view normalized by number of events. This means that, for
-example, areas with overlap from two runs will appear scaled down.
-
-A significant drawback to this is that the output MDEventWorkspace will
-be *significantly* larger than the events alone would be. It currently
-must be created in physical memory (it cannot yet be cached to disk).
-One way to limit the memory used is to limit the OutputExtents to a
-smaller region and only convert part of the space.
-
-Also, the :ref:`algm-FindPeaksMD` algorithm may not work optimally
-because it depends partly on higher density of events causing more
-finely split boxes.
-
-If your input is a `Workspace2D <http://mantidproject.org/Workspace2D>`__ and you do NOT check
-*OneEventPerBin*, then the workspace is converted to an
-`EventWorkspace <http://mantidproject.org/EventWorkspace>`__ but with no events for empty bins.
-
-Performance Notes
-#################
-
--  8-core Intel Xeon 3.2 GHz computer: measured between 4 and 5.5
-   million events per second (100-200 million event workspace).
--  32-core AMD Opteron 2.7 GHz computer: measured between 8 and 9
-   million events per second (400-1000 million event workspaces).
-
 Usage 
 
 **Example - Convert re-binned MARI 2D workspace to 3D MD workspace for further analysis/merging with data at different temperatures :**
@@ -100,11 +76,14 @@ Usage
 
    # A way to look at these results as a text:
    print "Resulting MD workspace has {0} events and {1} dimensions".format(md.getNEvents(),md.getNumDims())
+   print "Workspace Type is: ",md.id()   
 
 **Output:**
 
 .. testoutput:: ExConvertToDiffractionMDWorkspace
 
    Resulting MD workspace has 520128 events and 3 dimensions
+   Workspace Type is:  MDEventWorkspace<MDEvent,3>
+
 
 .. categories::
diff --git a/Code/Mantid/docs/source/algorithms/IndirectResolution-v1.rst b/Code/Mantid/docs/source/algorithms/IndirectResolution-v1.rst
new file mode 100644
index 0000000000000000000000000000000000000000..27efd1d06062fc2d6c3c846e6b05bb7ea0b449f1
--- /dev/null
+++ b/Code/Mantid/docs/source/algorithms/IndirectResolution-v1.rst
@@ -0,0 +1,39 @@
+.. algorithm::
+
+.. summary::
+
+.. alias::
+
+.. properties::
+
+Description
+-----------
+
+Creates a resolution workspace for an inelastic indirect sample run.
+
+See `Indirect:Calibration <http://www.mantidproject.org/Indirect:Calibration>`_.
+
+Usage
+-----
+
+**Example - Running IndirectResolution.**
+
+.. testcode:: ExIndirectResolutionSimple
+
+    resolution = IndirectResolution(InputFiles='IRS26173.raw',
+                                    Instrument='IRIS',
+                                    Analyser='graphite',
+                                    Reflection='002',
+                                    DetectorRange=[3, 53],
+                                    BackgroundRange=[-0.16, -0.14],
+                                    RebinParam='-0.175,0.002,0.175')
+
+    print mtd.doesExist('resolution')
+
+Output:
+
+.. testoutput:: ExIndirectResolutionSimple
+
+    True
+
+.. categories::
diff --git a/Code/Mantid/docs/source/algorithms/LoadGSS-v1.rst b/Code/Mantid/docs/source/algorithms/LoadGSS-v1.rst
index 0f857af315c49ff3b19c5cf21a6d2096d73d46a9..4dbacfd89201fb5d50dc778da6a94224f0f217fe 100644
--- a/Code/Mantid/docs/source/algorithms/LoadGSS-v1.rst
+++ b/Code/Mantid/docs/source/algorithms/LoadGSS-v1.rst
@@ -11,7 +11,7 @@ Description
 
 Loads a GSS file such as that saved by :ref:`algm-SaveGSS`.
 
-Two types of GSAS files are supported
+Two types of GSAS files (.fxye) are supported
 
 | ``* RALF``
 | ``* SLOG``
diff --git a/Code/Mantid/docs/source/algorithms/LoadMD-v1.rst b/Code/Mantid/docs/source/algorithms/LoadMD-v1.rst
index ff226cb1c527e6d813f542f26e13008a473ca472..b91d3f6d9d7208f6a497e1bdc08c2903c4378d16 100644
--- a/Code/Mantid/docs/source/algorithms/LoadMD-v1.rst
+++ b/Code/Mantid/docs/source/algorithms/LoadMD-v1.rst
@@ -19,7 +19,7 @@ MDWorkspace <MDWorkspace#File-Backed_MDWorkspaces>`__ by checking the
 FileBackEnd option. This will load the box structure (allowing for some
 visualization with no speed penalty) but leave the events on disk until
 requested. Processing file-backed MDWorkspaces is significantly slower
-than in-memory workspaces due to frequency file access!
+than in-memory workspaces due to frequent file access!
 
 For file-backed workspaces, the Memory option allows you to specify a
 cache size, in MB, to keep events in memory before caching to disk.
@@ -28,4 +28,26 @@ Finally, the BoxStructureOnly and MetadataOnly options are for special
 situations and used by other algorithms, they should not be needed in
 daily use.
 
+Usage
+-----
+.. include:: ../usagedata-note.txt
+
+**Example - Load MD workspace.**
+
+.. testcode:: ExLoadMD
+
+   # Load sample MDEvent workspace, present in Mantid unit tests 
+   mdws = LoadMD('MAPS_MDEW.nxs');
+    
+   # Check results
+   print "Workspace type is: ",type(mdws)
+   print "Workspace has:{0:2} dimensions and contains: {1:4} MD events".format(mdws.getNumDims(),mdws.getNEvents())
+  
+Output:
+
+.. testoutput:: ExLoadMD
+
+   Workspace type is:  <class 'mantid.api._api.IMDEventWorkspace'>
+   Workspace has: 4 dimensions and contains:    0 MD events
+
 .. categories::
diff --git a/Code/Mantid/docs/source/algorithms/LoadNXSPE-v1.rst b/Code/Mantid/docs/source/algorithms/LoadNXSPE-v1.rst
index b6731fd3578da1f9eda3b11080bd994fd732b1fc..39b9704aed8bed048cc51c4b327d82e9bee352fa 100644
--- a/Code/Mantid/docs/source/algorithms/LoadNXSPE-v1.rst
+++ b/Code/Mantid/docs/source/algorithms/LoadNXSPE-v1.rst
@@ -16,4 +16,9 @@ algorithm.
 **NOTE:** In the current implementation, the rendering of the NXSPE
 instrument is VERY memory intensive.
 
+Usage
+-----
+
+See :ref:`algm-SaveNXSPE` usage examples where Save and Load NXSPE operations are tested together.
+
 .. categories::
diff --git a/Code/Mantid/docs/source/algorithms/LoadSQW-v1.rst b/Code/Mantid/docs/source/algorithms/LoadSQW-v1.rst
index 057e1744c9bdc13d4e7ae8b1d02da569bf026794..941c6fd8c76863027aebf78e3a9b1f81dbebd858 100644
--- a/Code/Mantid/docs/source/algorithms/LoadSQW-v1.rst
+++ b/Code/Mantid/docs/source/algorithms/LoadSQW-v1.rst
@@ -159,8 +159,35 @@ functionality at a later stage. However, we can now assume that:
 - requires that all sqw files that are to be combined have
   #.   each been created from only one spe file
   #.   the same lattice parameters and pixel projection axes as held in the header block
-  #.  the same projection axes and offsets, as held in the data block
+  #.   the same projection axes and offsets, as held in the data block
   #.   the same plot and integration axes, with same bins and integration ranges
 - the display axes will be taken from the first sqw object in the list to be combined
 
+Usage
+-----
+.. include:: ../usagedata-note.txt
+
+**Example - Load 4D workspace form sample SQW file.**
+
+.. testcode:: ExLoadSQW
+
+   # Delete existing workspace if it is already in Mantid as LoadSQW does not support overwriting
+   # existig workspaces by desighn
+   if 'mdws' in mtd:
+       DeleteWorkspace('mdws')
+   #
+   # Load sample sqw file, present in Mantid unit tests as MD workspace
+   mdws = LoadSQW('test_horace_reader.sqw');
+   
+   # Check results
+   print "Workspace type is: ",type(mdws)
+   print "Workspace has:{0:2} dimensions and contains: {1:4} MD events".format(mdws.getNumDims(),mdws.getNEvents())
+   
+Output:
+
+.. testoutput:: ExLoadSQW
+
+   Workspace type is:  <class 'mantid.api._api.IMDEventWorkspace'>
+   Workspace has: 4 dimensions and contains:  580 MD events
+
 .. categories::
diff --git a/Code/Mantid/docs/source/algorithms/MSGDiffractionReduction-v1.rst b/Code/Mantid/docs/source/algorithms/MSGDiffractionReduction-v1.rst
new file mode 100644
index 0000000000000000000000000000000000000000..9f0c82741e1a7c8d4eaa9913695ec0483db71fa1
--- /dev/null
+++ b/Code/Mantid/docs/source/algorithms/MSGDiffractionReduction-v1.rst
@@ -0,0 +1,41 @@
+.. algorithm::
+
+.. summary::
+
+.. alias::
+
+.. properties::
+
+Description
+-----------
+
+The generic routine used to reduce diffraction runs from indirect inelastic geometry instruments at ISIS.
+
+Usage
+-----
+
+**Example - Running MSGDiffractionReduction.**
+
+.. testcode:: ExMSGDiffractionReductionSimple
+
+    MSGDiffractionReduction(InputFiles='IRS21360.raw',
+                            OutputWorkspaceGroup='DiffOut',
+                            Instrument='IRIS',
+                            Mode='diffspec',
+                            DetectorRange=[105,112])
+
+    ws = mtd['DiffOut'].getItem(0)
+
+    print 'Workspace name: %s' % ws.getName()
+    print 'Number of spectra: %d' % ws.getNumberHistograms()
+    print 'Number of bins: %s' % ws.blocksize()
+
+Output:
+
+.. testoutput:: ExMSGDiffractionReductionSimple
+
+    Workspace name: irs21360_diffspec_red
+    Number of spectra: 1
+    Number of bins: 1935
+
+.. categories::
diff --git a/Code/Mantid/docs/source/algorithms/MergeMD-v1.rst b/Code/Mantid/docs/source/algorithms/MergeMD-v1.rst
index 7847a044b08c2530bab99a097c4a67c8b632892c..f8ed3e5798b872287d37fbf7041002d4d2578e3f 100644
--- a/Code/Mantid/docs/source/algorithms/MergeMD-v1.rst
+++ b/Code/Mantid/docs/source/algorithms/MergeMD-v1.rst
@@ -69,13 +69,12 @@ Usage
    ****************************************************************
    workspace 1 has 2 dimensions with 18231 points and 18231 events
    with d1 min_max=0.0:5.0, d2 min_max=-10.0:10.0
-   workspace 2 has 2 dimensions with 15606 points and 15606 events
+   workspace 2 has 2 dimensions with 18360 points and 18360 events
    with d1 min_max=0.0:10.0, d2 min_max=-5.0:15.0
    ****************************************************************
-   Merged WS has   2 dimensions with 33837 points and 33837 events
+   Merged WS has   2 dimensions with 36591 points and 36591 events
    with d1 min_max=0.0:10.0, d2 min_max=-10.0:15.0
    ****************************************************************
 
 
-
 .. categories::
diff --git a/Code/Mantid/docs/source/algorithms/MolDyn-v1.rst b/Code/Mantid/docs/source/algorithms/MolDyn-v1.rst
new file mode 100644
index 0000000000000000000000000000000000000000..53dcbf959f2649e6048060fe8c661427a14d112f
--- /dev/null
+++ b/Code/Mantid/docs/source/algorithms/MolDyn-v1.rst
@@ -0,0 +1,44 @@
+.. algorithm::
+
+.. summary::
+
+.. alias::
+
+.. properties::
+
+Description
+-----------
+
+This algorithm is a loader from simulation data from the nMOLDYN software,
+simulations can be loaded form either a plain ASCII file or CDL file.
+
+When loading from a CDL file one or multiple functions can be loaded, when
+loading a single function an instrument resolution workspace can be provided
+which the loaded function is convoluted with to allow comparison with actual
+instrument data.
+
+When loading from ASCII function selection and convolution with an instrument
+resolution are unavailable.
+
+Usage
+-----
+
+.. include:: ../usagedata-note.txt
+
+**Example - Loading a simulation from a CDL file..**
+
+.. testcode:: ExLoadCDLFile
+
+    out_ws_group = MolDyn(Filename='NaF_DISF.cdl', Functions=['Fqt-total', 'Sqw-total'])
+
+    for ws_name in out_ws_group.getNames():
+      print ws_name
+
+Output:
+
+.. testoutput:: ExLoadCDLFile
+
+    NaF_DISF_Fqt-total
+    NaF_DISF_Sqw-total
+
+.. categories::
diff --git a/Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst b/Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst
index 2efb679ca6a33180974137c3779f565d42e5ee04..f1c42486429471337392e75bffbbf61b893df6ce 100644
--- a/Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst
+++ b/Code/Mantid/docs/source/algorithms/SaveNXSPE-v1.rst
@@ -34,18 +34,31 @@ Usage
 
    import os
    import numpy
-
+   
    # Create dummy workspace.
    out_ws = CreateSimulationWorkspace(Instrument="IRIS", BinParams="0,500,2000")
    out_ws.setY(0, numpy.array([10.0, 50.0, 30.0, 60.0]))
-
-   file_path = os.path.join(config["defaultsave.directory"], "NXSPEData.nxsps")
-
+   AddSampleLog(out_ws, 'Ei', LogText='321', LogType='Number')
+   
+   file_path = os.path.join(config["defaultsave.directory"], "NXSPEData.nxspe")
+   
    # Do a "roundtrip" of the data.
-   SaveNXSPE(out_ws, file_path)
+   SaveNXSPE(out_ws, file_path,Psi=32)
+   
+   # By desigghn, SaveMXSPE does not store detector's ID-s. LoadNXSPE sets detector's ID-s to defaults.
+   # To compare loaded and saved workspaces here, one needs to set-up default detector's ID-s to the source workspace.
+   nSpec = out_ws.getNumberHistograms()
+   for i in xrange(0,nSpec):
+       sp=out_ws.getSpectrum(i);
+       sp.setDetectorID(i+1);
    in_ws = LoadNXSPE(file_path)
-
+   
+   ws_comparison_rez = CheckWorkspacesMatch(out_ws,in_ws,1.e-9,CheckInstrument=False)
    print "Contents of the first spectrum = " + str(in_ws.readY(0)) + "."
+   print "Initial and loaded workspaces comparison is: ",ws_comparison_rez
+   run = in_ws.getRun();
+   print "Loaded workspace has attached incident energy Ei={0:5} and rotation angle Psi={1:5}deg".format(run.getLogData('Ei').value,run.getLogData('psi').value)
+   
 
 .. testcleanup:: ExSimpleSavingRoundtrip
 
@@ -56,5 +69,8 @@ Output:
 .. testoutput:: ExSimpleSavingRoundtrip
 
    Contents of the first spectrum = [ 10.  50.  30.  60.].
+   Initial and loaded workspaces comparison is:  Success!
+   Loaded workspace has attached incident energy Ei=321.0 and rotation angle Psi= 32.0deg
+   
 
 .. categories::
diff --git a/Code/Mantid/docs/source/algorithms/SavePDFGui-v1.rst b/Code/Mantid/docs/source/algorithms/SavePDFGui-v1.rst
new file mode 100644
index 0000000000000000000000000000000000000000..f81febe8d360da47932a45b170825fdb91fc4a9e
--- /dev/null
+++ b/Code/Mantid/docs/source/algorithms/SavePDFGui-v1.rst
@@ -0,0 +1,57 @@
+
+.. algorithm::
+
+.. summary::
+
+.. alias::
+
+.. properties::
+
+Description
+-----------
+
+This algorithm saves G(r) files consistent with `PDFGui <http://www.diffpy.org/>`_.
+The body of the file is of the form ``r Gr dr dGr``.
+
+Usage
+-----
+..  Try not to use files in your examples,
+    but if you cannot avoid it then the (small) files must be added to
+    autotestdata\UsageData and the following tag unindented
+    .. include:: ../usagedata-note.txt
+
+**Example - SavePDFGui**
+
+.. testcode:: SavePDFGuiExample
+
+   # Create a host workspace
+   ws = CreateWorkspace(DataX=range(0,3), DataY=range(0,3), UnitX="Angstrom")
+
+   # Create a filename
+   import os
+   path = os.path.join(os.path.expanduser("~"), "savepdfgui.gr")
+
+   # Save as G(r) file
+   SavePDFGui(ws, path)
+
+   # Check that the file exists
+   print os.path.isfile(path)
+
+Output:
+
+.. testoutput:: SavePDFGuiExample
+
+    True
+
+.. testcleanup:: SavePDFGuiExample
+
+   DeleteWorkspace(ws)
+   import os
+   try:
+       path = os.path.join(os.path.expanduser("~"), "savepdfgui.gr")
+       os.remove(path)
+   except:
+       pass
+
+.. categories::
+
diff --git a/Code/Mantid/docs/source/algorithms/Symmetrise-v1.rst b/Code/Mantid/docs/source/algorithms/Symmetrise-v1.rst
index bc93a312b7dcec4bd33dc2dbb81822c2ad72329f..58b6fafe03fc53e8d02d2810a1d1f892abb5ceb5 100644
--- a/Code/Mantid/docs/source/algorithms/Symmetrise-v1.rst
+++ b/Code/Mantid/docs/source/algorithms/Symmetrise-v1.rst
@@ -10,9 +10,13 @@ Description
 -----------
 
 Symmetrise takes an asymmetric :math:`S(Q,w)` - i.e. one in which the
-moduli of xmin & xmax are different. Typically xmax is > mod(xmin). A
-negative value of x is chosen (Xcut) so that the curve for mod(Xcut) to
-xmax is reflected and inserted for x less than the Xcut.
+moduli of xmin & xmax are different. Typically xmax is > mod(xmin).
+
+Two values, XMin and XMax, are chosen to specify the section of the positive
+side of the curve to be reflected onto the negative side, the sample curve
+is cropped at XMax ensuring that the symmetrised curve has a symmetrical X
+range.
+
 
 Usage
 -----
@@ -23,17 +27,16 @@ Usage
 
     import numpy as np
 
-    #create an asymmetric line shape
+    # create an asymmetric line shape
     def rayleigh(x, sigma):
-      return (x / sigma**2) * np.exp( -x**2 / (2*sigma**2))
+      return (x / sigma ** 2) * np.exp(-x ** 2 / (2 * sigma ** 2))
 
-    dataX = np.arange(0, 10, 0.01)
-    dataY = rayleigh(dataX, 1)
+    data_x = np.arange(0, 10, 0.01)
+    data_y = rayleigh(data_x, 1)
 
-    ws = CreateWorkspace(dataX, dataY)
-    ws = ScaleX(ws, -1, "Add") #centre the peak over 0
+    sample_ws = CreateWorkspace(data_x, data_y)
+    sample_ws = ScaleX(sample_ws, -1, "Add")  # centre the peak over 0
 
-    ws = RenameWorkspace(ws, OutputWorkspace="iris00001_graphite002_red")
-    Symmetrise('00001', '-0.001', InputType='Workspace')
+    symm_ws = Symmetrise(Sample=sample_ws, XMin=0.05, XMax=8.0)
 
 .. categories::
diff --git a/Code/Mantid/instrument/BASIS_Definition.xml b/Code/Mantid/instrument/BASIS_Definition.xml
index 6acf0bce38d3d6b05562ad05fc102d827e66232d..82684ef3a9f2a6f9e24291107e1d93aa30985740 100644
--- a/Code/Mantid/instrument/BASIS_Definition.xml
+++ b/Code/Mantid/instrument/BASIS_Definition.xml
@@ -1,5 +1,5 @@
 <?xml version='1.0' encoding='ASCII'?>
-<instrument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.mantidproject.org/IDF/1.0" last-modified="2014-02-17 14:08:40.139761" valid-to="2100-01-31 23:59:59" name="BASIS" valid-from="2013-01-20 00:00:00" xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 http://schema.mantidproject.org/IDF/1.0/IDFSchema.xsd">
+<instrument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.mantidproject.org/IDF/1.0" last-modified="2014-10-31 09:42:40.139761" valid-to="2100-01-31 23:59:59" name="BASIS" valid-from="2013-01-20 00:00:00" xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 http://schema.mantidproject.org/IDF/1.0/IDFSchema.xsd">
   <!--Created by Michael Reuter-->
   <defaults>
     <length unit="metre"/>
@@ -28,10 +28,25 @@
       <location z="-0.23368" name="monitor1"/>
     </component>
   </type>
-  <component type="bank1" idlist="bank1">
+  <!--INELASTIC DECTECTORS-->
+  <component type="silicon">
     <location/>
   </component>
-  <type name="bank1">
+  <type name="silicon">
+    <component type="bank1" idlist="bank1">
+      <location/>
+    </component>
+    <component type="bank2" idlist="bank2">
+      <location/>
+    </component>
+    <component type="bank3" idlist="bank3">
+      <location/>
+    </component>
+    <component type="bank4" idlist="bank4">
+      <location/>
+    </component>
+  </type>
+   <type name="bank1">
     <component type="pixel">
       <location p="1.04109" r="4.72838" name="5" t="11.5018">
         <facing y="0.0" x="0.0" z="0.0"/>
@@ -22715,9 +22730,6 @@
     <id val="3568"/>
     <id val="3569"/>
   </idlist>
-  <component type="bank2" idlist="bank2">
-    <location/>
-  </component>
   <type name="bank2">
     <component type="pixel">
       <location p="-66.5981" r="4.70977" name="4110" t="27.1236">
@@ -45402,9 +45414,6 @@
     <id val="7673"/>
     <id val="7674"/>
   </idlist>
-  <component type="bank3" idlist="bank3">
-    <location/>
-  </component>
   <type name="bank3">
     <component type="pixel">
       <location p="179.356" r="4.72838" name="8197" t="161.199">
@@ -68089,9 +68098,6 @@
     <id val="11760"/>
     <id val="11761"/>
   </idlist>
-  <component type="bank4" idlist="bank4">
-    <location/>
-  </component>
   <type name="bank4">
     <component type="pixel">
       <location p="-124.975" r="4.70977" name="12302" t="149.294">
diff --git a/Code/Mantid/instrument/BASIS_silicon_111_Parameters.xml b/Code/Mantid/instrument/BASIS_silicon_111_Parameters.xml
index f4ca952eead06cddca7679fdd818a6fa87ae6281..c3f972fadbb9249f843be91841da559d468bd1b8 100644
--- a/Code/Mantid/instrument/BASIS_silicon_111_Parameters.xml
+++ b/Code/Mantid/instrument/BASIS_silicon_111_Parameters.xml
@@ -36,7 +36,6 @@
 	<value val="138000" />
 </parameter>
 
- 
 <parameter name="analyser" type="string">
   <value val="silicon" />
 </parameter>
@@ -47,31 +46,13 @@
 
 </component-link>
 
-
-  <component-link name="bank1">
-    <parameter name="Efixed">
-      <value val="2.082" />
-    </parameter>
-  </component-link>
-
-  <component-link name="bank2">
-    <parameter name="Efixed">
-      <value val="2.082" />
-    </parameter>
-  </component-link>
-
-  <component-link name="bank3">
-    <parameter name="Efixed">
-      <value val="2.082" />
-    </parameter>
-  </component-link>
-
-  <component-link name="bank4">
-    <parameter name="Efixed">
-      <value val="2.082" />
-    </parameter>
-  </component-link>
-
-
+<component-link name="silicon">
+  <parameter name="Efixed">
+    <value val="2.082" />
+  </parameter>
+  <parameter name="resolution">
+    <value val="0.0035" />
+  </parameter>
+</component-link>
 
 </parameter-file>
diff --git a/Code/Mantid/instrument/D17_Definition.xml b/Code/Mantid/instrument/D17_Definition.xml
index 9f5df514cdc2468bc64e2c20fa0f21074d74df7a..087d024f91d99bcf625afb7759100d317cedf5c7 100644
--- a/Code/Mantid/instrument/D17_Definition.xml
+++ b/Code/Mantid/instrument/D17_Definition.xml
@@ -57,13 +57,14 @@ valid-to="2100-01-31 23:59:59" last-modified="2014-05-26 14:06:31">
   </component>
   <!-- Detector Panels -->
   <type name="detectors">
-    <component type="uniq_detector" idstart="2" idfillbyfirst="x" idstep="1" idstepbyrow="256" name="uniq_detector">
-      <location z="3.100000" />
+    <component type="uniq_detector" idstart="257" idfillbyfirst="x" idstep="-1" idstepbyrow="256" name="uniq_detector">
+      <location z="1.000" />
     </component>
   </type>
   <!-- Definition of the detector -->
-  <!-- Back detector: 30.7 x 42.9 mm -->
-  <type name="uniq_detector" is="rectangular_detector" type="pixel" xpixels="256" xstart="0.000000" xstep="0.001200" ypixels="1" ystart="-0.003350" ystep="0.006700">
+  <type name="uniq_detector" is="rectangular_detector" type="pixel"
+       xpixels="256" xstart="-0.153600" xstep="0.001200"
+       ypixels="1"   ystart="-0.003350" ystep="0.006700">
     <properties />
   </type>
   <!-- Pixel size = tubePixelSize * tubeWidth-->
diff --git a/Code/Mantid/instrument/Grouping/REFL_Detector_Grouping_Sum_X_rot.xml b/Code/Mantid/instrument/Grouping/REFL_Detector_Grouping_Sum_X_rot.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3a884fe2a0351a976068a13daaf898ef91ac343f
--- /dev/null
+++ b/Code/Mantid/instrument/Grouping/REFL_Detector_Grouping_Sum_X_rot.xml
@@ -0,0 +1,914 @@
+<detector-grouping description="Integrated over X">
+  <group name='0'>
+    <ids val='1,305,609,913,1217,1521,1825,2129,2433,2737,3041,3345,3649,3953,4257,4561,4865,5169,5473,5777,6081,6385,6689,6993,7297,7601,7905,8209,8513,8817,9121,9425,9729,10033,10337,10641,10945,11249,11553,11857,12161,12465,12769,13073,13377,13681,13985,14289,14593,14897,15201,15505,15809,16113,16417,16721,17025,17329,17633,17937,18241,18545,18849,19153,19457,19761,20065,20369,20673,20977,21281,21585,21889,22193,22497,22801,23105,23409,23713,24017,24321,24625,24929,25233,25537,25841,26145,26449,26753,27057,27361,27665,27969,28273,28577,28881,29185,29489,29793,30097,30401,30705,31009,31313,31617,31921,32225,32529,32833,33137,33441,33745,34049,34353,34657,34961,35265,35569,35873,36177,36481,36785,37089,37393,37697,38001,38305,38609,38913,39217,39521,39825,40129,40433,40737,41041,41345,41649,41953,42257,42561,42865,43169,43473,43777,44081,44385,44689,44993,45297,45601,45905,46209,46513,46817,47121,47425,47729,48033,48337,48641,48945,49249,49553,49857,50161,50465,50769,51073,51377,51681,51985,52289,52593,52897,53201,53505,53809,54113,54417,54721,55025,55329,55633,55937,56241,56545,56849,57153,57457,57761,58065,58369,58673,58977,59281,59585,59889,60193,60497,60801,61105,61409,61713,62017,62321,62625,62929,63233,63537,63841,64145,64449,64753,65057,65361,65665,65969,66273,66577,66881,67185,67489,67793,68097,68401,68705,69009,69313,69617,69921,70225,70529,70833,71137,71441,71745,72049,72353,72657,72961,73265,73569,73873,74177,74481,74785,75089,75393,75697,76001,76305,76609,76913,77217,77521'/>
+  </group>
+  <group name='1'>
+    <ids val='2,306,610,914,1218,1522,1826,2130,2434,2738,3042,3346,3650,3954,4258,4562,4866,5170,5474,5778,6082,6386,6690,6994,7298,7602,7906,8210,8514,8818,9122,9426,9730,10034,10338,10642,10946,11250,11554,11858,12162,12466,12770,13074,13378,13682,13986,14290,14594,14898,15202,15506,15810,16114,16418,16722,17026,17330,17634,17938,18242,18546,18850,19154,19458,19762,20066,20370,20674,20978,21282,21586,21890,22194,22498,22802,23106,23410,23714,24018,24322,24626,24930,25234,25538,25842,26146,26450,26754,27058,27362,27666,27970,28274,28578,28882,29186,29490,29794,30098,30402,30706,31010,31314,31618,31922,32226,32530,32834,33138,33442,33746,34050,34354,34658,34962,35266,35570,35874,36178,36482,36786,37090,37394,37698,38002,38306,38610,38914,39218,39522,39826,40130,40434,40738,41042,41346,41650,41954,42258,42562,42866,43170,43474,43778,44082,44386,44690,44994,45298,45602,45906,46210,46514,46818,47122,47426,47730,48034,48338,48642,48946,49250,49554,49858,50162,50466,50770,51074,51378,51682,51986,52290,52594,52898,53202,53506,53810,54114,54418,54722,55026,55330,55634,55938,56242,56546,56850,57154,57458,57762,58066,58370,58674,58978,59282,59586,59890,60194,60498,60802,61106,61410,61714,62018,62322,62626,62930,63234,63538,63842,64146,64450,64754,65058,65362,65666,65970,66274,66578,66882,67186,67490,67794,68098,68402,68706,69010,69314,69618,69922,70226,70530,70834,71138,71442,71746,72050,72354,72658,72962,73266,73570,73874,74178,74482,74786,75090,75394,75698,76002,76306,76610,76914,77218,77522'/>
+  </group>
+  <group name='2'>
+    <ids val='3,307,611,915,1219,1523,1827,2131,2435,2739,3043,3347,3651,3955,4259,4563,4867,5171,5475,5779,6083,6387,6691,6995,7299,7603,7907,8211,8515,8819,9123,9427,9731,10035,10339,10643,10947,11251,11555,11859,12163,12467,12771,13075,13379,13683,13987,14291,14595,14899,15203,15507,15811,16115,16419,16723,17027,17331,17635,17939,18243,18547,18851,19155,19459,19763,20067,20371,20675,20979,21283,21587,21891,22195,22499,22803,23107,23411,23715,24019,24323,24627,24931,25235,25539,25843,26147,26451,26755,27059,27363,27667,27971,28275,28579,28883,29187,29491,29795,30099,30403,30707,31011,31315,31619,31923,32227,32531,32835,33139,33443,33747,34051,34355,34659,34963,35267,35571,35875,36179,36483,36787,37091,37395,37699,38003,38307,38611,38915,39219,39523,39827,40131,40435,40739,41043,41347,41651,41955,42259,42563,42867,43171,43475,43779,44083,44387,44691,44995,45299,45603,45907,46211,46515,46819,47123,47427,47731,48035,48339,48643,48947,49251,49555,49859,50163,50467,50771,51075,51379,51683,51987,52291,52595,52899,53203,53507,53811,54115,54419,54723,55027,55331,55635,55939,56243,56547,56851,57155,57459,57763,58067,58371,58675,58979,59283,59587,59891,60195,60499,60803,61107,61411,61715,62019,62323,62627,62931,63235,63539,63843,64147,64451,64755,65059,65363,65667,65971,66275,66579,66883,67187,67491,67795,68099,68403,68707,69011,69315,69619,69923,70227,70531,70835,71139,71443,71747,72051,72355,72659,72963,73267,73571,73875,74179,74483,74787,75091,75395,75699,76003,76307,76611,76915,77219,77523'/>
+  </group>
+  <group name='3'>
+    <ids val='4,308,612,916,1220,1524,1828,2132,2436,2740,3044,3348,3652,3956,4260,4564,4868,5172,5476,5780,6084,6388,6692,6996,7300,7604,7908,8212,8516,8820,9124,9428,9732,10036,10340,10644,10948,11252,11556,11860,12164,12468,12772,13076,13380,13684,13988,14292,14596,14900,15204,15508,15812,16116,16420,16724,17028,17332,17636,17940,18244,18548,18852,19156,19460,19764,20068,20372,20676,20980,21284,21588,21892,22196,22500,22804,23108,23412,23716,24020,24324,24628,24932,25236,25540,25844,26148,26452,26756,27060,27364,27668,27972,28276,28580,28884,29188,29492,29796,30100,30404,30708,31012,31316,31620,31924,32228,32532,32836,33140,33444,33748,34052,34356,34660,34964,35268,35572,35876,36180,36484,36788,37092,37396,37700,38004,38308,38612,38916,39220,39524,39828,40132,40436,40740,41044,41348,41652,41956,42260,42564,42868,43172,43476,43780,44084,44388,44692,44996,45300,45604,45908,46212,46516,46820,47124,47428,47732,48036,48340,48644,48948,49252,49556,49860,50164,50468,50772,51076,51380,51684,51988,52292,52596,52900,53204,53508,53812,54116,54420,54724,55028,55332,55636,55940,56244,56548,56852,57156,57460,57764,58068,58372,58676,58980,59284,59588,59892,60196,60500,60804,61108,61412,61716,62020,62324,62628,62932,63236,63540,63844,64148,64452,64756,65060,65364,65668,65972,66276,66580,66884,67188,67492,67796,68100,68404,68708,69012,69316,69620,69924,70228,70532,70836,71140,71444,71748,72052,72356,72660,72964,73268,73572,73876,74180,74484,74788,75092,75396,75700,76004,76308,76612,76916,77220,77524'/>
+  </group>
+  <group name='4'>
+    <ids val='5,309,613,917,1221,1525,1829,2133,2437,2741,3045,3349,3653,3957,4261,4565,4869,5173,5477,5781,6085,6389,6693,6997,7301,7605,7909,8213,8517,8821,9125,9429,9733,10037,10341,10645,10949,11253,11557,11861,12165,12469,12773,13077,13381,13685,13989,14293,14597,14901,15205,15509,15813,16117,16421,16725,17029,17333,17637,17941,18245,18549,18853,19157,19461,19765,20069,20373,20677,20981,21285,21589,21893,22197,22501,22805,23109,23413,23717,24021,24325,24629,24933,25237,25541,25845,26149,26453,26757,27061,27365,27669,27973,28277,28581,28885,29189,29493,29797,30101,30405,30709,31013,31317,31621,31925,32229,32533,32837,33141,33445,33749,34053,34357,34661,34965,35269,35573,35877,36181,36485,36789,37093,37397,37701,38005,38309,38613,38917,39221,39525,39829,40133,40437,40741,41045,41349,41653,41957,42261,42565,42869,43173,43477,43781,44085,44389,44693,44997,45301,45605,45909,46213,46517,46821,47125,47429,47733,48037,48341,48645,48949,49253,49557,49861,50165,50469,50773,51077,51381,51685,51989,52293,52597,52901,53205,53509,53813,54117,54421,54725,55029,55333,55637,55941,56245,56549,56853,57157,57461,57765,58069,58373,58677,58981,59285,59589,59893,60197,60501,60805,61109,61413,61717,62021,62325,62629,62933,63237,63541,63845,64149,64453,64757,65061,65365,65669,65973,66277,66581,66885,67189,67493,67797,68101,68405,68709,69013,69317,69621,69925,70229,70533,70837,71141,71445,71749,72053,72357,72661,72965,73269,73573,73877,74181,74485,74789,75093,75397,75701,76005,76309,76613,76917,77221,77525'/>
+  </group>
+  <group name='5'>
+    <ids val='6,310,614,918,1222,1526,1830,2134,2438,2742,3046,3350,3654,3958,4262,4566,4870,5174,5478,5782,6086,6390,6694,6998,7302,7606,7910,8214,8518,8822,9126,9430,9734,10038,10342,10646,10950,11254,11558,11862,12166,12470,12774,13078,13382,13686,13990,14294,14598,14902,15206,15510,15814,16118,16422,16726,17030,17334,17638,17942,18246,18550,18854,19158,19462,19766,20070,20374,20678,20982,21286,21590,21894,22198,22502,22806,23110,23414,23718,24022,24326,24630,24934,25238,25542,25846,26150,26454,26758,27062,27366,27670,27974,28278,28582,28886,29190,29494,29798,30102,30406,30710,31014,31318,31622,31926,32230,32534,32838,33142,33446,33750,34054,34358,34662,34966,35270,35574,35878,36182,36486,36790,37094,37398,37702,38006,38310,38614,38918,39222,39526,39830,40134,40438,40742,41046,41350,41654,41958,42262,42566,42870,43174,43478,43782,44086,44390,44694,44998,45302,45606,45910,46214,46518,46822,47126,47430,47734,48038,48342,48646,48950,49254,49558,49862,50166,50470,50774,51078,51382,51686,51990,52294,52598,52902,53206,53510,53814,54118,54422,54726,55030,55334,55638,55942,56246,56550,56854,57158,57462,57766,58070,58374,58678,58982,59286,59590,59894,60198,60502,60806,61110,61414,61718,62022,62326,62630,62934,63238,63542,63846,64150,64454,64758,65062,65366,65670,65974,66278,66582,66886,67190,67494,67798,68102,68406,68710,69014,69318,69622,69926,70230,70534,70838,71142,71446,71750,72054,72358,72662,72966,73270,73574,73878,74182,74486,74790,75094,75398,75702,76006,76310,76614,76918,77222,77526'/>
+  </group>
+  <group name='6'>
+    <ids val='7,311,615,919,1223,1527,1831,2135,2439,2743,3047,3351,3655,3959,4263,4567,4871,5175,5479,5783,6087,6391,6695,6999,7303,7607,7911,8215,8519,8823,9127,9431,9735,10039,10343,10647,10951,11255,11559,11863,12167,12471,12775,13079,13383,13687,13991,14295,14599,14903,15207,15511,15815,16119,16423,16727,17031,17335,17639,17943,18247,18551,18855,19159,19463,19767,20071,20375,20679,20983,21287,21591,21895,22199,22503,22807,23111,23415,23719,24023,24327,24631,24935,25239,25543,25847,26151,26455,26759,27063,27367,27671,27975,28279,28583,28887,29191,29495,29799,30103,30407,30711,31015,31319,31623,31927,32231,32535,32839,33143,33447,33751,34055,34359,34663,34967,35271,35575,35879,36183,36487,36791,37095,37399,37703,38007,38311,38615,38919,39223,39527,39831,40135,40439,40743,41047,41351,41655,41959,42263,42567,42871,43175,43479,43783,44087,44391,44695,44999,45303,45607,45911,46215,46519,46823,47127,47431,47735,48039,48343,48647,48951,49255,49559,49863,50167,50471,50775,51079,51383,51687,51991,52295,52599,52903,53207,53511,53815,54119,54423,54727,55031,55335,55639,55943,56247,56551,56855,57159,57463,57767,58071,58375,58679,58983,59287,59591,59895,60199,60503,60807,61111,61415,61719,62023,62327,62631,62935,63239,63543,63847,64151,64455,64759,65063,65367,65671,65975,66279,66583,66887,67191,67495,67799,68103,68407,68711,69015,69319,69623,69927,70231,70535,70839,71143,71447,71751,72055,72359,72663,72967,73271,73575,73879,74183,74487,74791,75095,75399,75703,76007,76311,76615,76919,77223,77527'/>
+  </group>
+  <group name='7'>
+    <ids val='8,312,616,920,1224,1528,1832,2136,2440,2744,3048,3352,3656,3960,4264,4568,4872,5176,5480,5784,6088,6392,6696,7000,7304,7608,7912,8216,8520,8824,9128,9432,9736,10040,10344,10648,10952,11256,11560,11864,12168,12472,12776,13080,13384,13688,13992,14296,14600,14904,15208,15512,15816,16120,16424,16728,17032,17336,17640,17944,18248,18552,18856,19160,19464,19768,20072,20376,20680,20984,21288,21592,21896,22200,22504,22808,23112,23416,23720,24024,24328,24632,24936,25240,25544,25848,26152,26456,26760,27064,27368,27672,27976,28280,28584,28888,29192,29496,29800,30104,30408,30712,31016,31320,31624,31928,32232,32536,32840,33144,33448,33752,34056,34360,34664,34968,35272,35576,35880,36184,36488,36792,37096,37400,37704,38008,38312,38616,38920,39224,39528,39832,40136,40440,40744,41048,41352,41656,41960,42264,42568,42872,43176,43480,43784,44088,44392,44696,45000,45304,45608,45912,46216,46520,46824,47128,47432,47736,48040,48344,48648,48952,49256,49560,49864,50168,50472,50776,51080,51384,51688,51992,52296,52600,52904,53208,53512,53816,54120,54424,54728,55032,55336,55640,55944,56248,56552,56856,57160,57464,57768,58072,58376,58680,58984,59288,59592,59896,60200,60504,60808,61112,61416,61720,62024,62328,62632,62936,63240,63544,63848,64152,64456,64760,65064,65368,65672,65976,66280,66584,66888,67192,67496,67800,68104,68408,68712,69016,69320,69624,69928,70232,70536,70840,71144,71448,71752,72056,72360,72664,72968,73272,73576,73880,74184,74488,74792,75096,75400,75704,76008,76312,76616,76920,77224,77528'/>
+  </group>
+  <group name='8'>
+    <ids val='9,313,617,921,1225,1529,1833,2137,2441,2745,3049,3353,3657,3961,4265,4569,4873,5177,5481,5785,6089,6393,6697,7001,7305,7609,7913,8217,8521,8825,9129,9433,9737,10041,10345,10649,10953,11257,11561,11865,12169,12473,12777,13081,13385,13689,13993,14297,14601,14905,15209,15513,15817,16121,16425,16729,17033,17337,17641,17945,18249,18553,18857,19161,19465,19769,20073,20377,20681,20985,21289,21593,21897,22201,22505,22809,23113,23417,23721,24025,24329,24633,24937,25241,25545,25849,26153,26457,26761,27065,27369,27673,27977,28281,28585,28889,29193,29497,29801,30105,30409,30713,31017,31321,31625,31929,32233,32537,32841,33145,33449,33753,34057,34361,34665,34969,35273,35577,35881,36185,36489,36793,37097,37401,37705,38009,38313,38617,38921,39225,39529,39833,40137,40441,40745,41049,41353,41657,41961,42265,42569,42873,43177,43481,43785,44089,44393,44697,45001,45305,45609,45913,46217,46521,46825,47129,47433,47737,48041,48345,48649,48953,49257,49561,49865,50169,50473,50777,51081,51385,51689,51993,52297,52601,52905,53209,53513,53817,54121,54425,54729,55033,55337,55641,55945,56249,56553,56857,57161,57465,57769,58073,58377,58681,58985,59289,59593,59897,60201,60505,60809,61113,61417,61721,62025,62329,62633,62937,63241,63545,63849,64153,64457,64761,65065,65369,65673,65977,66281,66585,66889,67193,67497,67801,68105,68409,68713,69017,69321,69625,69929,70233,70537,70841,71145,71449,71753,72057,72361,72665,72969,73273,73577,73881,74185,74489,74793,75097,75401,75705,76009,76313,76617,76921,77225,77529'/>
+  </group>
+  <group name='9'>
+    <ids val='10,314,618,922,1226,1530,1834,2138,2442,2746,3050,3354,3658,3962,4266,4570,4874,5178,5482,5786,6090,6394,6698,7002,7306,7610,7914,8218,8522,8826,9130,9434,9738,10042,10346,10650,10954,11258,11562,11866,12170,12474,12778,13082,13386,13690,13994,14298,14602,14906,15210,15514,15818,16122,16426,16730,17034,17338,17642,17946,18250,18554,18858,19162,19466,19770,20074,20378,20682,20986,21290,21594,21898,22202,22506,22810,23114,23418,23722,24026,24330,24634,24938,25242,25546,25850,26154,26458,26762,27066,27370,27674,27978,28282,28586,28890,29194,29498,29802,30106,30410,30714,31018,31322,31626,31930,32234,32538,32842,33146,33450,33754,34058,34362,34666,34970,35274,35578,35882,36186,36490,36794,37098,37402,37706,38010,38314,38618,38922,39226,39530,39834,40138,40442,40746,41050,41354,41658,41962,42266,42570,42874,43178,43482,43786,44090,44394,44698,45002,45306,45610,45914,46218,46522,46826,47130,47434,47738,48042,48346,48650,48954,49258,49562,49866,50170,50474,50778,51082,51386,51690,51994,52298,52602,52906,53210,53514,53818,54122,54426,54730,55034,55338,55642,55946,56250,56554,56858,57162,57466,57770,58074,58378,58682,58986,59290,59594,59898,60202,60506,60810,61114,61418,61722,62026,62330,62634,62938,63242,63546,63850,64154,64458,64762,65066,65370,65674,65978,66282,66586,66890,67194,67498,67802,68106,68410,68714,69018,69322,69626,69930,70234,70538,70842,71146,71450,71754,72058,72362,72666,72970,73274,73578,73882,74186,74490,74794,75098,75402,75706,76010,76314,76618,76922,77226,77530'/>
+  </group>
+  <group name='10'>
+    <ids val='11,315,619,923,1227,1531,1835,2139,2443,2747,3051,3355,3659,3963,4267,4571,4875,5179,5483,5787,6091,6395,6699,7003,7307,7611,7915,8219,8523,8827,9131,9435,9739,10043,10347,10651,10955,11259,11563,11867,12171,12475,12779,13083,13387,13691,13995,14299,14603,14907,15211,15515,15819,16123,16427,16731,17035,17339,17643,17947,18251,18555,18859,19163,19467,19771,20075,20379,20683,20987,21291,21595,21899,22203,22507,22811,23115,23419,23723,24027,24331,24635,24939,25243,25547,25851,26155,26459,26763,27067,27371,27675,27979,28283,28587,28891,29195,29499,29803,30107,30411,30715,31019,31323,31627,31931,32235,32539,32843,33147,33451,33755,34059,34363,34667,34971,35275,35579,35883,36187,36491,36795,37099,37403,37707,38011,38315,38619,38923,39227,39531,39835,40139,40443,40747,41051,41355,41659,41963,42267,42571,42875,43179,43483,43787,44091,44395,44699,45003,45307,45611,45915,46219,46523,46827,47131,47435,47739,48043,48347,48651,48955,49259,49563,49867,50171,50475,50779,51083,51387,51691,51995,52299,52603,52907,53211,53515,53819,54123,54427,54731,55035,55339,55643,55947,56251,56555,56859,57163,57467,57771,58075,58379,58683,58987,59291,59595,59899,60203,60507,60811,61115,61419,61723,62027,62331,62635,62939,63243,63547,63851,64155,64459,64763,65067,65371,65675,65979,66283,66587,66891,67195,67499,67803,68107,68411,68715,69019,69323,69627,69931,70235,70539,70843,71147,71451,71755,72059,72363,72667,72971,73275,73579,73883,74187,74491,74795,75099,75403,75707,76011,76315,76619,76923,77227,77531'/>
+  </group>
+  <group name='11'>
+    <ids val='12,316,620,924,1228,1532,1836,2140,2444,2748,3052,3356,3660,3964,4268,4572,4876,5180,5484,5788,6092,6396,6700,7004,7308,7612,7916,8220,8524,8828,9132,9436,9740,10044,10348,10652,10956,11260,11564,11868,12172,12476,12780,13084,13388,13692,13996,14300,14604,14908,15212,15516,15820,16124,16428,16732,17036,17340,17644,17948,18252,18556,18860,19164,19468,19772,20076,20380,20684,20988,21292,21596,21900,22204,22508,22812,23116,23420,23724,24028,24332,24636,24940,25244,25548,25852,26156,26460,26764,27068,27372,27676,27980,28284,28588,28892,29196,29500,29804,30108,30412,30716,31020,31324,31628,31932,32236,32540,32844,33148,33452,33756,34060,34364,34668,34972,35276,35580,35884,36188,36492,36796,37100,37404,37708,38012,38316,38620,38924,39228,39532,39836,40140,40444,40748,41052,41356,41660,41964,42268,42572,42876,43180,43484,43788,44092,44396,44700,45004,45308,45612,45916,46220,46524,46828,47132,47436,47740,48044,48348,48652,48956,49260,49564,49868,50172,50476,50780,51084,51388,51692,51996,52300,52604,52908,53212,53516,53820,54124,54428,54732,55036,55340,55644,55948,56252,56556,56860,57164,57468,57772,58076,58380,58684,58988,59292,59596,59900,60204,60508,60812,61116,61420,61724,62028,62332,62636,62940,63244,63548,63852,64156,64460,64764,65068,65372,65676,65980,66284,66588,66892,67196,67500,67804,68108,68412,68716,69020,69324,69628,69932,70236,70540,70844,71148,71452,71756,72060,72364,72668,72972,73276,73580,73884,74188,74492,74796,75100,75404,75708,76012,76316,76620,76924,77228,77532'/>
+  </group>
+  <group name='12'>
+    <ids val='13,317,621,925,1229,1533,1837,2141,2445,2749,3053,3357,3661,3965,4269,4573,4877,5181,5485,5789,6093,6397,6701,7005,7309,7613,7917,8221,8525,8829,9133,9437,9741,10045,10349,10653,10957,11261,11565,11869,12173,12477,12781,13085,13389,13693,13997,14301,14605,14909,15213,15517,15821,16125,16429,16733,17037,17341,17645,17949,18253,18557,18861,19165,19469,19773,20077,20381,20685,20989,21293,21597,21901,22205,22509,22813,23117,23421,23725,24029,24333,24637,24941,25245,25549,25853,26157,26461,26765,27069,27373,27677,27981,28285,28589,28893,29197,29501,29805,30109,30413,30717,31021,31325,31629,31933,32237,32541,32845,33149,33453,33757,34061,34365,34669,34973,35277,35581,35885,36189,36493,36797,37101,37405,37709,38013,38317,38621,38925,39229,39533,39837,40141,40445,40749,41053,41357,41661,41965,42269,42573,42877,43181,43485,43789,44093,44397,44701,45005,45309,45613,45917,46221,46525,46829,47133,47437,47741,48045,48349,48653,48957,49261,49565,49869,50173,50477,50781,51085,51389,51693,51997,52301,52605,52909,53213,53517,53821,54125,54429,54733,55037,55341,55645,55949,56253,56557,56861,57165,57469,57773,58077,58381,58685,58989,59293,59597,59901,60205,60509,60813,61117,61421,61725,62029,62333,62637,62941,63245,63549,63853,64157,64461,64765,65069,65373,65677,65981,66285,66589,66893,67197,67501,67805,68109,68413,68717,69021,69325,69629,69933,70237,70541,70845,71149,71453,71757,72061,72365,72669,72973,73277,73581,73885,74189,74493,74797,75101,75405,75709,76013,76317,76621,76925,77229,77533'/>
+  </group>
+  <group name='13'>
+    <ids val='14,318,622,926,1230,1534,1838,2142,2446,2750,3054,3358,3662,3966,4270,4574,4878,5182,5486,5790,6094,6398,6702,7006,7310,7614,7918,8222,8526,8830,9134,9438,9742,10046,10350,10654,10958,11262,11566,11870,12174,12478,12782,13086,13390,13694,13998,14302,14606,14910,15214,15518,15822,16126,16430,16734,17038,17342,17646,17950,18254,18558,18862,19166,19470,19774,20078,20382,20686,20990,21294,21598,21902,22206,22510,22814,23118,23422,23726,24030,24334,24638,24942,25246,25550,25854,26158,26462,26766,27070,27374,27678,27982,28286,28590,28894,29198,29502,29806,30110,30414,30718,31022,31326,31630,31934,32238,32542,32846,33150,33454,33758,34062,34366,34670,34974,35278,35582,35886,36190,36494,36798,37102,37406,37710,38014,38318,38622,38926,39230,39534,39838,40142,40446,40750,41054,41358,41662,41966,42270,42574,42878,43182,43486,43790,44094,44398,44702,45006,45310,45614,45918,46222,46526,46830,47134,47438,47742,48046,48350,48654,48958,49262,49566,49870,50174,50478,50782,51086,51390,51694,51998,52302,52606,52910,53214,53518,53822,54126,54430,54734,55038,55342,55646,55950,56254,56558,56862,57166,57470,57774,58078,58382,58686,58990,59294,59598,59902,60206,60510,60814,61118,61422,61726,62030,62334,62638,62942,63246,63550,63854,64158,64462,64766,65070,65374,65678,65982,66286,66590,66894,67198,67502,67806,68110,68414,68718,69022,69326,69630,69934,70238,70542,70846,71150,71454,71758,72062,72366,72670,72974,73278,73582,73886,74190,74494,74798,75102,75406,75710,76014,76318,76622,76926,77230,77534'/>
+  </group>
+  <group name='14'>
+    <ids val='15,319,623,927,1231,1535,1839,2143,2447,2751,3055,3359,3663,3967,4271,4575,4879,5183,5487,5791,6095,6399,6703,7007,7311,7615,7919,8223,8527,8831,9135,9439,9743,10047,10351,10655,10959,11263,11567,11871,12175,12479,12783,13087,13391,13695,13999,14303,14607,14911,15215,15519,15823,16127,16431,16735,17039,17343,17647,17951,18255,18559,18863,19167,19471,19775,20079,20383,20687,20991,21295,21599,21903,22207,22511,22815,23119,23423,23727,24031,24335,24639,24943,25247,25551,25855,26159,26463,26767,27071,27375,27679,27983,28287,28591,28895,29199,29503,29807,30111,30415,30719,31023,31327,31631,31935,32239,32543,32847,33151,33455,33759,34063,34367,34671,34975,35279,35583,35887,36191,36495,36799,37103,37407,37711,38015,38319,38623,38927,39231,39535,39839,40143,40447,40751,41055,41359,41663,41967,42271,42575,42879,43183,43487,43791,44095,44399,44703,45007,45311,45615,45919,46223,46527,46831,47135,47439,47743,48047,48351,48655,48959,49263,49567,49871,50175,50479,50783,51087,51391,51695,51999,52303,52607,52911,53215,53519,53823,54127,54431,54735,55039,55343,55647,55951,56255,56559,56863,57167,57471,57775,58079,58383,58687,58991,59295,59599,59903,60207,60511,60815,61119,61423,61727,62031,62335,62639,62943,63247,63551,63855,64159,64463,64767,65071,65375,65679,65983,66287,66591,66895,67199,67503,67807,68111,68415,68719,69023,69327,69631,69935,70239,70543,70847,71151,71455,71759,72063,72367,72671,72975,73279,73583,73887,74191,74495,74799,75103,75407,75711,76015,76319,76623,76927,77231,77535'/>
+  </group>
+  <group name='15'>
+    <ids val='16,320,624,928,1232,1536,1840,2144,2448,2752,3056,3360,3664,3968,4272,4576,4880,5184,5488,5792,6096,6400,6704,7008,7312,7616,7920,8224,8528,8832,9136,9440,9744,10048,10352,10656,10960,11264,11568,11872,12176,12480,12784,13088,13392,13696,14000,14304,14608,14912,15216,15520,15824,16128,16432,16736,17040,17344,17648,17952,18256,18560,18864,19168,19472,19776,20080,20384,20688,20992,21296,21600,21904,22208,22512,22816,23120,23424,23728,24032,24336,24640,24944,25248,25552,25856,26160,26464,26768,27072,27376,27680,27984,28288,28592,28896,29200,29504,29808,30112,30416,30720,31024,31328,31632,31936,32240,32544,32848,33152,33456,33760,34064,34368,34672,34976,35280,35584,35888,36192,36496,36800,37104,37408,37712,38016,38320,38624,38928,39232,39536,39840,40144,40448,40752,41056,41360,41664,41968,42272,42576,42880,43184,43488,43792,44096,44400,44704,45008,45312,45616,45920,46224,46528,46832,47136,47440,47744,48048,48352,48656,48960,49264,49568,49872,50176,50480,50784,51088,51392,51696,52000,52304,52608,52912,53216,53520,53824,54128,54432,54736,55040,55344,55648,55952,56256,56560,56864,57168,57472,57776,58080,58384,58688,58992,59296,59600,59904,60208,60512,60816,61120,61424,61728,62032,62336,62640,62944,63248,63552,63856,64160,64464,64768,65072,65376,65680,65984,66288,66592,66896,67200,67504,67808,68112,68416,68720,69024,69328,69632,69936,70240,70544,70848,71152,71456,71760,72064,72368,72672,72976,73280,73584,73888,74192,74496,74800,75104,75408,75712,76016,76320,76624,76928,77232,77536'/>
+  </group>
+  <group name='16'>
+    <ids val='17,321,625,929,1233,1537,1841,2145,2449,2753,3057,3361,3665,3969,4273,4577,4881,5185,5489,5793,6097,6401,6705,7009,7313,7617,7921,8225,8529,8833,9137,9441,9745,10049,10353,10657,10961,11265,11569,11873,12177,12481,12785,13089,13393,13697,14001,14305,14609,14913,15217,15521,15825,16129,16433,16737,17041,17345,17649,17953,18257,18561,18865,19169,19473,19777,20081,20385,20689,20993,21297,21601,21905,22209,22513,22817,23121,23425,23729,24033,24337,24641,24945,25249,25553,25857,26161,26465,26769,27073,27377,27681,27985,28289,28593,28897,29201,29505,29809,30113,30417,30721,31025,31329,31633,31937,32241,32545,32849,33153,33457,33761,34065,34369,34673,34977,35281,35585,35889,36193,36497,36801,37105,37409,37713,38017,38321,38625,38929,39233,39537,39841,40145,40449,40753,41057,41361,41665,41969,42273,42577,42881,43185,43489,43793,44097,44401,44705,45009,45313,45617,45921,46225,46529,46833,47137,47441,47745,48049,48353,48657,48961,49265,49569,49873,50177,50481,50785,51089,51393,51697,52001,52305,52609,52913,53217,53521,53825,54129,54433,54737,55041,55345,55649,55953,56257,56561,56865,57169,57473,57777,58081,58385,58689,58993,59297,59601,59905,60209,60513,60817,61121,61425,61729,62033,62337,62641,62945,63249,63553,63857,64161,64465,64769,65073,65377,65681,65985,66289,66593,66897,67201,67505,67809,68113,68417,68721,69025,69329,69633,69937,70241,70545,70849,71153,71457,71761,72065,72369,72673,72977,73281,73585,73889,74193,74497,74801,75105,75409,75713,76017,76321,76625,76929,77233,77537'/>
+  </group>
+  <group name='17'>
+    <ids val='18,322,626,930,1234,1538,1842,2146,2450,2754,3058,3362,3666,3970,4274,4578,4882,5186,5490,5794,6098,6402,6706,7010,7314,7618,7922,8226,8530,8834,9138,9442,9746,10050,10354,10658,10962,11266,11570,11874,12178,12482,12786,13090,13394,13698,14002,14306,14610,14914,15218,15522,15826,16130,16434,16738,17042,17346,17650,17954,18258,18562,18866,19170,19474,19778,20082,20386,20690,20994,21298,21602,21906,22210,22514,22818,23122,23426,23730,24034,24338,24642,24946,25250,25554,25858,26162,26466,26770,27074,27378,27682,27986,28290,28594,28898,29202,29506,29810,30114,30418,30722,31026,31330,31634,31938,32242,32546,32850,33154,33458,33762,34066,34370,34674,34978,35282,35586,35890,36194,36498,36802,37106,37410,37714,38018,38322,38626,38930,39234,39538,39842,40146,40450,40754,41058,41362,41666,41970,42274,42578,42882,43186,43490,43794,44098,44402,44706,45010,45314,45618,45922,46226,46530,46834,47138,47442,47746,48050,48354,48658,48962,49266,49570,49874,50178,50482,50786,51090,51394,51698,52002,52306,52610,52914,53218,53522,53826,54130,54434,54738,55042,55346,55650,55954,56258,56562,56866,57170,57474,57778,58082,58386,58690,58994,59298,59602,59906,60210,60514,60818,61122,61426,61730,62034,62338,62642,62946,63250,63554,63858,64162,64466,64770,65074,65378,65682,65986,66290,66594,66898,67202,67506,67810,68114,68418,68722,69026,69330,69634,69938,70242,70546,70850,71154,71458,71762,72066,72370,72674,72978,73282,73586,73890,74194,74498,74802,75106,75410,75714,76018,76322,76626,76930,77234,77538'/>
+  </group>
+  <group name='18'>
+    <ids val='19,323,627,931,1235,1539,1843,2147,2451,2755,3059,3363,3667,3971,4275,4579,4883,5187,5491,5795,6099,6403,6707,7011,7315,7619,7923,8227,8531,8835,9139,9443,9747,10051,10355,10659,10963,11267,11571,11875,12179,12483,12787,13091,13395,13699,14003,14307,14611,14915,15219,15523,15827,16131,16435,16739,17043,17347,17651,17955,18259,18563,18867,19171,19475,19779,20083,20387,20691,20995,21299,21603,21907,22211,22515,22819,23123,23427,23731,24035,24339,24643,24947,25251,25555,25859,26163,26467,26771,27075,27379,27683,27987,28291,28595,28899,29203,29507,29811,30115,30419,30723,31027,31331,31635,31939,32243,32547,32851,33155,33459,33763,34067,34371,34675,34979,35283,35587,35891,36195,36499,36803,37107,37411,37715,38019,38323,38627,38931,39235,39539,39843,40147,40451,40755,41059,41363,41667,41971,42275,42579,42883,43187,43491,43795,44099,44403,44707,45011,45315,45619,45923,46227,46531,46835,47139,47443,47747,48051,48355,48659,48963,49267,49571,49875,50179,50483,50787,51091,51395,51699,52003,52307,52611,52915,53219,53523,53827,54131,54435,54739,55043,55347,55651,55955,56259,56563,56867,57171,57475,57779,58083,58387,58691,58995,59299,59603,59907,60211,60515,60819,61123,61427,61731,62035,62339,62643,62947,63251,63555,63859,64163,64467,64771,65075,65379,65683,65987,66291,66595,66899,67203,67507,67811,68115,68419,68723,69027,69331,69635,69939,70243,70547,70851,71155,71459,71763,72067,72371,72675,72979,73283,73587,73891,74195,74499,74803,75107,75411,75715,76019,76323,76627,76931,77235,77539'/>
+  </group>
+  <group name='19'>
+    <ids val='20,324,628,932,1236,1540,1844,2148,2452,2756,3060,3364,3668,3972,4276,4580,4884,5188,5492,5796,6100,6404,6708,7012,7316,7620,7924,8228,8532,8836,9140,9444,9748,10052,10356,10660,10964,11268,11572,11876,12180,12484,12788,13092,13396,13700,14004,14308,14612,14916,15220,15524,15828,16132,16436,16740,17044,17348,17652,17956,18260,18564,18868,19172,19476,19780,20084,20388,20692,20996,21300,21604,21908,22212,22516,22820,23124,23428,23732,24036,24340,24644,24948,25252,25556,25860,26164,26468,26772,27076,27380,27684,27988,28292,28596,28900,29204,29508,29812,30116,30420,30724,31028,31332,31636,31940,32244,32548,32852,33156,33460,33764,34068,34372,34676,34980,35284,35588,35892,36196,36500,36804,37108,37412,37716,38020,38324,38628,38932,39236,39540,39844,40148,40452,40756,41060,41364,41668,41972,42276,42580,42884,43188,43492,43796,44100,44404,44708,45012,45316,45620,45924,46228,46532,46836,47140,47444,47748,48052,48356,48660,48964,49268,49572,49876,50180,50484,50788,51092,51396,51700,52004,52308,52612,52916,53220,53524,53828,54132,54436,54740,55044,55348,55652,55956,56260,56564,56868,57172,57476,57780,58084,58388,58692,58996,59300,59604,59908,60212,60516,60820,61124,61428,61732,62036,62340,62644,62948,63252,63556,63860,64164,64468,64772,65076,65380,65684,65988,66292,66596,66900,67204,67508,67812,68116,68420,68724,69028,69332,69636,69940,70244,70548,70852,71156,71460,71764,72068,72372,72676,72980,73284,73588,73892,74196,74500,74804,75108,75412,75716,76020,76324,76628,76932,77236,77540'/>
+  </group>
+  <group name='20'>
+    <ids val='21,325,629,933,1237,1541,1845,2149,2453,2757,3061,3365,3669,3973,4277,4581,4885,5189,5493,5797,6101,6405,6709,7013,7317,7621,7925,8229,8533,8837,9141,9445,9749,10053,10357,10661,10965,11269,11573,11877,12181,12485,12789,13093,13397,13701,14005,14309,14613,14917,15221,15525,15829,16133,16437,16741,17045,17349,17653,17957,18261,18565,18869,19173,19477,19781,20085,20389,20693,20997,21301,21605,21909,22213,22517,22821,23125,23429,23733,24037,24341,24645,24949,25253,25557,25861,26165,26469,26773,27077,27381,27685,27989,28293,28597,28901,29205,29509,29813,30117,30421,30725,31029,31333,31637,31941,32245,32549,32853,33157,33461,33765,34069,34373,34677,34981,35285,35589,35893,36197,36501,36805,37109,37413,37717,38021,38325,38629,38933,39237,39541,39845,40149,40453,40757,41061,41365,41669,41973,42277,42581,42885,43189,43493,43797,44101,44405,44709,45013,45317,45621,45925,46229,46533,46837,47141,47445,47749,48053,48357,48661,48965,49269,49573,49877,50181,50485,50789,51093,51397,51701,52005,52309,52613,52917,53221,53525,53829,54133,54437,54741,55045,55349,55653,55957,56261,56565,56869,57173,57477,57781,58085,58389,58693,58997,59301,59605,59909,60213,60517,60821,61125,61429,61733,62037,62341,62645,62949,63253,63557,63861,64165,64469,64773,65077,65381,65685,65989,66293,66597,66901,67205,67509,67813,68117,68421,68725,69029,69333,69637,69941,70245,70549,70853,71157,71461,71765,72069,72373,72677,72981,73285,73589,73893,74197,74501,74805,75109,75413,75717,76021,76325,76629,76933,77237,77541'/>
+  </group>
+  <group name='21'>
+    <ids val='22,326,630,934,1238,1542,1846,2150,2454,2758,3062,3366,3670,3974,4278,4582,4886,5190,5494,5798,6102,6406,6710,7014,7318,7622,7926,8230,8534,8838,9142,9446,9750,10054,10358,10662,10966,11270,11574,11878,12182,12486,12790,13094,13398,13702,14006,14310,14614,14918,15222,15526,15830,16134,16438,16742,17046,17350,17654,17958,18262,18566,18870,19174,19478,19782,20086,20390,20694,20998,21302,21606,21910,22214,22518,22822,23126,23430,23734,24038,24342,24646,24950,25254,25558,25862,26166,26470,26774,27078,27382,27686,27990,28294,28598,28902,29206,29510,29814,30118,30422,30726,31030,31334,31638,31942,32246,32550,32854,33158,33462,33766,34070,34374,34678,34982,35286,35590,35894,36198,36502,36806,37110,37414,37718,38022,38326,38630,38934,39238,39542,39846,40150,40454,40758,41062,41366,41670,41974,42278,42582,42886,43190,43494,43798,44102,44406,44710,45014,45318,45622,45926,46230,46534,46838,47142,47446,47750,48054,48358,48662,48966,49270,49574,49878,50182,50486,50790,51094,51398,51702,52006,52310,52614,52918,53222,53526,53830,54134,54438,54742,55046,55350,55654,55958,56262,56566,56870,57174,57478,57782,58086,58390,58694,58998,59302,59606,59910,60214,60518,60822,61126,61430,61734,62038,62342,62646,62950,63254,63558,63862,64166,64470,64774,65078,65382,65686,65990,66294,66598,66902,67206,67510,67814,68118,68422,68726,69030,69334,69638,69942,70246,70550,70854,71158,71462,71766,72070,72374,72678,72982,73286,73590,73894,74198,74502,74806,75110,75414,75718,76022,76326,76630,76934,77238,77542'/>
+  </group>
+  <group name='22'>
+    <ids val='23,327,631,935,1239,1543,1847,2151,2455,2759,3063,3367,3671,3975,4279,4583,4887,5191,5495,5799,6103,6407,6711,7015,7319,7623,7927,8231,8535,8839,9143,9447,9751,10055,10359,10663,10967,11271,11575,11879,12183,12487,12791,13095,13399,13703,14007,14311,14615,14919,15223,15527,15831,16135,16439,16743,17047,17351,17655,17959,18263,18567,18871,19175,19479,19783,20087,20391,20695,20999,21303,21607,21911,22215,22519,22823,23127,23431,23735,24039,24343,24647,24951,25255,25559,25863,26167,26471,26775,27079,27383,27687,27991,28295,28599,28903,29207,29511,29815,30119,30423,30727,31031,31335,31639,31943,32247,32551,32855,33159,33463,33767,34071,34375,34679,34983,35287,35591,35895,36199,36503,36807,37111,37415,37719,38023,38327,38631,38935,39239,39543,39847,40151,40455,40759,41063,41367,41671,41975,42279,42583,42887,43191,43495,43799,44103,44407,44711,45015,45319,45623,45927,46231,46535,46839,47143,47447,47751,48055,48359,48663,48967,49271,49575,49879,50183,50487,50791,51095,51399,51703,52007,52311,52615,52919,53223,53527,53831,54135,54439,54743,55047,55351,55655,55959,56263,56567,56871,57175,57479,57783,58087,58391,58695,58999,59303,59607,59911,60215,60519,60823,61127,61431,61735,62039,62343,62647,62951,63255,63559,63863,64167,64471,64775,65079,65383,65687,65991,66295,66599,66903,67207,67511,67815,68119,68423,68727,69031,69335,69639,69943,70247,70551,70855,71159,71463,71767,72071,72375,72679,72983,73287,73591,73895,74199,74503,74807,75111,75415,75719,76023,76327,76631,76935,77239,77543'/>
+  </group>
+  <group name='23'>
+    <ids val='24,328,632,936,1240,1544,1848,2152,2456,2760,3064,3368,3672,3976,4280,4584,4888,5192,5496,5800,6104,6408,6712,7016,7320,7624,7928,8232,8536,8840,9144,9448,9752,10056,10360,10664,10968,11272,11576,11880,12184,12488,12792,13096,13400,13704,14008,14312,14616,14920,15224,15528,15832,16136,16440,16744,17048,17352,17656,17960,18264,18568,18872,19176,19480,19784,20088,20392,20696,21000,21304,21608,21912,22216,22520,22824,23128,23432,23736,24040,24344,24648,24952,25256,25560,25864,26168,26472,26776,27080,27384,27688,27992,28296,28600,28904,29208,29512,29816,30120,30424,30728,31032,31336,31640,31944,32248,32552,32856,33160,33464,33768,34072,34376,34680,34984,35288,35592,35896,36200,36504,36808,37112,37416,37720,38024,38328,38632,38936,39240,39544,39848,40152,40456,40760,41064,41368,41672,41976,42280,42584,42888,43192,43496,43800,44104,44408,44712,45016,45320,45624,45928,46232,46536,46840,47144,47448,47752,48056,48360,48664,48968,49272,49576,49880,50184,50488,50792,51096,51400,51704,52008,52312,52616,52920,53224,53528,53832,54136,54440,54744,55048,55352,55656,55960,56264,56568,56872,57176,57480,57784,58088,58392,58696,59000,59304,59608,59912,60216,60520,60824,61128,61432,61736,62040,62344,62648,62952,63256,63560,63864,64168,64472,64776,65080,65384,65688,65992,66296,66600,66904,67208,67512,67816,68120,68424,68728,69032,69336,69640,69944,70248,70552,70856,71160,71464,71768,72072,72376,72680,72984,73288,73592,73896,74200,74504,74808,75112,75416,75720,76024,76328,76632,76936,77240,77544'/>
+  </group>
+  <group name='24'>
+    <ids val='25,329,633,937,1241,1545,1849,2153,2457,2761,3065,3369,3673,3977,4281,4585,4889,5193,5497,5801,6105,6409,6713,7017,7321,7625,7929,8233,8537,8841,9145,9449,9753,10057,10361,10665,10969,11273,11577,11881,12185,12489,12793,13097,13401,13705,14009,14313,14617,14921,15225,15529,15833,16137,16441,16745,17049,17353,17657,17961,18265,18569,18873,19177,19481,19785,20089,20393,20697,21001,21305,21609,21913,22217,22521,22825,23129,23433,23737,24041,24345,24649,24953,25257,25561,25865,26169,26473,26777,27081,27385,27689,27993,28297,28601,28905,29209,29513,29817,30121,30425,30729,31033,31337,31641,31945,32249,32553,32857,33161,33465,33769,34073,34377,34681,34985,35289,35593,35897,36201,36505,36809,37113,37417,37721,38025,38329,38633,38937,39241,39545,39849,40153,40457,40761,41065,41369,41673,41977,42281,42585,42889,43193,43497,43801,44105,44409,44713,45017,45321,45625,45929,46233,46537,46841,47145,47449,47753,48057,48361,48665,48969,49273,49577,49881,50185,50489,50793,51097,51401,51705,52009,52313,52617,52921,53225,53529,53833,54137,54441,54745,55049,55353,55657,55961,56265,56569,56873,57177,57481,57785,58089,58393,58697,59001,59305,59609,59913,60217,60521,60825,61129,61433,61737,62041,62345,62649,62953,63257,63561,63865,64169,64473,64777,65081,65385,65689,65993,66297,66601,66905,67209,67513,67817,68121,68425,68729,69033,69337,69641,69945,70249,70553,70857,71161,71465,71769,72073,72377,72681,72985,73289,73593,73897,74201,74505,74809,75113,75417,75721,76025,76329,76633,76937,77241,77545'/>
+  </group>
+  <group name='25'>
+    <ids val='26,330,634,938,1242,1546,1850,2154,2458,2762,3066,3370,3674,3978,4282,4586,4890,5194,5498,5802,6106,6410,6714,7018,7322,7626,7930,8234,8538,8842,9146,9450,9754,10058,10362,10666,10970,11274,11578,11882,12186,12490,12794,13098,13402,13706,14010,14314,14618,14922,15226,15530,15834,16138,16442,16746,17050,17354,17658,17962,18266,18570,18874,19178,19482,19786,20090,20394,20698,21002,21306,21610,21914,22218,22522,22826,23130,23434,23738,24042,24346,24650,24954,25258,25562,25866,26170,26474,26778,27082,27386,27690,27994,28298,28602,28906,29210,29514,29818,30122,30426,30730,31034,31338,31642,31946,32250,32554,32858,33162,33466,33770,34074,34378,34682,34986,35290,35594,35898,36202,36506,36810,37114,37418,37722,38026,38330,38634,38938,39242,39546,39850,40154,40458,40762,41066,41370,41674,41978,42282,42586,42890,43194,43498,43802,44106,44410,44714,45018,45322,45626,45930,46234,46538,46842,47146,47450,47754,48058,48362,48666,48970,49274,49578,49882,50186,50490,50794,51098,51402,51706,52010,52314,52618,52922,53226,53530,53834,54138,54442,54746,55050,55354,55658,55962,56266,56570,56874,57178,57482,57786,58090,58394,58698,59002,59306,59610,59914,60218,60522,60826,61130,61434,61738,62042,62346,62650,62954,63258,63562,63866,64170,64474,64778,65082,65386,65690,65994,66298,66602,66906,67210,67514,67818,68122,68426,68730,69034,69338,69642,69946,70250,70554,70858,71162,71466,71770,72074,72378,72682,72986,73290,73594,73898,74202,74506,74810,75114,75418,75722,76026,76330,76634,76938,77242,77546'/>
+  </group>
+  <group name='26'>
+    <ids val='27,331,635,939,1243,1547,1851,2155,2459,2763,3067,3371,3675,3979,4283,4587,4891,5195,5499,5803,6107,6411,6715,7019,7323,7627,7931,8235,8539,8843,9147,9451,9755,10059,10363,10667,10971,11275,11579,11883,12187,12491,12795,13099,13403,13707,14011,14315,14619,14923,15227,15531,15835,16139,16443,16747,17051,17355,17659,17963,18267,18571,18875,19179,19483,19787,20091,20395,20699,21003,21307,21611,21915,22219,22523,22827,23131,23435,23739,24043,24347,24651,24955,25259,25563,25867,26171,26475,26779,27083,27387,27691,27995,28299,28603,28907,29211,29515,29819,30123,30427,30731,31035,31339,31643,31947,32251,32555,32859,33163,33467,33771,34075,34379,34683,34987,35291,35595,35899,36203,36507,36811,37115,37419,37723,38027,38331,38635,38939,39243,39547,39851,40155,40459,40763,41067,41371,41675,41979,42283,42587,42891,43195,43499,43803,44107,44411,44715,45019,45323,45627,45931,46235,46539,46843,47147,47451,47755,48059,48363,48667,48971,49275,49579,49883,50187,50491,50795,51099,51403,51707,52011,52315,52619,52923,53227,53531,53835,54139,54443,54747,55051,55355,55659,55963,56267,56571,56875,57179,57483,57787,58091,58395,58699,59003,59307,59611,59915,60219,60523,60827,61131,61435,61739,62043,62347,62651,62955,63259,63563,63867,64171,64475,64779,65083,65387,65691,65995,66299,66603,66907,67211,67515,67819,68123,68427,68731,69035,69339,69643,69947,70251,70555,70859,71163,71467,71771,72075,72379,72683,72987,73291,73595,73899,74203,74507,74811,75115,75419,75723,76027,76331,76635,76939,77243,77547'/>
+  </group>
+  <group name='27'>
+    <ids val='28,332,636,940,1244,1548,1852,2156,2460,2764,3068,3372,3676,3980,4284,4588,4892,5196,5500,5804,6108,6412,6716,7020,7324,7628,7932,8236,8540,8844,9148,9452,9756,10060,10364,10668,10972,11276,11580,11884,12188,12492,12796,13100,13404,13708,14012,14316,14620,14924,15228,15532,15836,16140,16444,16748,17052,17356,17660,17964,18268,18572,18876,19180,19484,19788,20092,20396,20700,21004,21308,21612,21916,22220,22524,22828,23132,23436,23740,24044,24348,24652,24956,25260,25564,25868,26172,26476,26780,27084,27388,27692,27996,28300,28604,28908,29212,29516,29820,30124,30428,30732,31036,31340,31644,31948,32252,32556,32860,33164,33468,33772,34076,34380,34684,34988,35292,35596,35900,36204,36508,36812,37116,37420,37724,38028,38332,38636,38940,39244,39548,39852,40156,40460,40764,41068,41372,41676,41980,42284,42588,42892,43196,43500,43804,44108,44412,44716,45020,45324,45628,45932,46236,46540,46844,47148,47452,47756,48060,48364,48668,48972,49276,49580,49884,50188,50492,50796,51100,51404,51708,52012,52316,52620,52924,53228,53532,53836,54140,54444,54748,55052,55356,55660,55964,56268,56572,56876,57180,57484,57788,58092,58396,58700,59004,59308,59612,59916,60220,60524,60828,61132,61436,61740,62044,62348,62652,62956,63260,63564,63868,64172,64476,64780,65084,65388,65692,65996,66300,66604,66908,67212,67516,67820,68124,68428,68732,69036,69340,69644,69948,70252,70556,70860,71164,71468,71772,72076,72380,72684,72988,73292,73596,73900,74204,74508,74812,75116,75420,75724,76028,76332,76636,76940,77244,77548'/>
+  </group>
+  <group name='28'>
+    <ids val='29,333,637,941,1245,1549,1853,2157,2461,2765,3069,3373,3677,3981,4285,4589,4893,5197,5501,5805,6109,6413,6717,7021,7325,7629,7933,8237,8541,8845,9149,9453,9757,10061,10365,10669,10973,11277,11581,11885,12189,12493,12797,13101,13405,13709,14013,14317,14621,14925,15229,15533,15837,16141,16445,16749,17053,17357,17661,17965,18269,18573,18877,19181,19485,19789,20093,20397,20701,21005,21309,21613,21917,22221,22525,22829,23133,23437,23741,24045,24349,24653,24957,25261,25565,25869,26173,26477,26781,27085,27389,27693,27997,28301,28605,28909,29213,29517,29821,30125,30429,30733,31037,31341,31645,31949,32253,32557,32861,33165,33469,33773,34077,34381,34685,34989,35293,35597,35901,36205,36509,36813,37117,37421,37725,38029,38333,38637,38941,39245,39549,39853,40157,40461,40765,41069,41373,41677,41981,42285,42589,42893,43197,43501,43805,44109,44413,44717,45021,45325,45629,45933,46237,46541,46845,47149,47453,47757,48061,48365,48669,48973,49277,49581,49885,50189,50493,50797,51101,51405,51709,52013,52317,52621,52925,53229,53533,53837,54141,54445,54749,55053,55357,55661,55965,56269,56573,56877,57181,57485,57789,58093,58397,58701,59005,59309,59613,59917,60221,60525,60829,61133,61437,61741,62045,62349,62653,62957,63261,63565,63869,64173,64477,64781,65085,65389,65693,65997,66301,66605,66909,67213,67517,67821,68125,68429,68733,69037,69341,69645,69949,70253,70557,70861,71165,71469,71773,72077,72381,72685,72989,73293,73597,73901,74205,74509,74813,75117,75421,75725,76029,76333,76637,76941,77245,77549'/>
+  </group>
+  <group name='29'>
+    <ids val='30,334,638,942,1246,1550,1854,2158,2462,2766,3070,3374,3678,3982,4286,4590,4894,5198,5502,5806,6110,6414,6718,7022,7326,7630,7934,8238,8542,8846,9150,9454,9758,10062,10366,10670,10974,11278,11582,11886,12190,12494,12798,13102,13406,13710,14014,14318,14622,14926,15230,15534,15838,16142,16446,16750,17054,17358,17662,17966,18270,18574,18878,19182,19486,19790,20094,20398,20702,21006,21310,21614,21918,22222,22526,22830,23134,23438,23742,24046,24350,24654,24958,25262,25566,25870,26174,26478,26782,27086,27390,27694,27998,28302,28606,28910,29214,29518,29822,30126,30430,30734,31038,31342,31646,31950,32254,32558,32862,33166,33470,33774,34078,34382,34686,34990,35294,35598,35902,36206,36510,36814,37118,37422,37726,38030,38334,38638,38942,39246,39550,39854,40158,40462,40766,41070,41374,41678,41982,42286,42590,42894,43198,43502,43806,44110,44414,44718,45022,45326,45630,45934,46238,46542,46846,47150,47454,47758,48062,48366,48670,48974,49278,49582,49886,50190,50494,50798,51102,51406,51710,52014,52318,52622,52926,53230,53534,53838,54142,54446,54750,55054,55358,55662,55966,56270,56574,56878,57182,57486,57790,58094,58398,58702,59006,59310,59614,59918,60222,60526,60830,61134,61438,61742,62046,62350,62654,62958,63262,63566,63870,64174,64478,64782,65086,65390,65694,65998,66302,66606,66910,67214,67518,67822,68126,68430,68734,69038,69342,69646,69950,70254,70558,70862,71166,71470,71774,72078,72382,72686,72990,73294,73598,73902,74206,74510,74814,75118,75422,75726,76030,76334,76638,76942,77246,77550'/>
+  </group>
+  <group name='30'>
+    <ids val='31,335,639,943,1247,1551,1855,2159,2463,2767,3071,3375,3679,3983,4287,4591,4895,5199,5503,5807,6111,6415,6719,7023,7327,7631,7935,8239,8543,8847,9151,9455,9759,10063,10367,10671,10975,11279,11583,11887,12191,12495,12799,13103,13407,13711,14015,14319,14623,14927,15231,15535,15839,16143,16447,16751,17055,17359,17663,17967,18271,18575,18879,19183,19487,19791,20095,20399,20703,21007,21311,21615,21919,22223,22527,22831,23135,23439,23743,24047,24351,24655,24959,25263,25567,25871,26175,26479,26783,27087,27391,27695,27999,28303,28607,28911,29215,29519,29823,30127,30431,30735,31039,31343,31647,31951,32255,32559,32863,33167,33471,33775,34079,34383,34687,34991,35295,35599,35903,36207,36511,36815,37119,37423,37727,38031,38335,38639,38943,39247,39551,39855,40159,40463,40767,41071,41375,41679,41983,42287,42591,42895,43199,43503,43807,44111,44415,44719,45023,45327,45631,45935,46239,46543,46847,47151,47455,47759,48063,48367,48671,48975,49279,49583,49887,50191,50495,50799,51103,51407,51711,52015,52319,52623,52927,53231,53535,53839,54143,54447,54751,55055,55359,55663,55967,56271,56575,56879,57183,57487,57791,58095,58399,58703,59007,59311,59615,59919,60223,60527,60831,61135,61439,61743,62047,62351,62655,62959,63263,63567,63871,64175,64479,64783,65087,65391,65695,65999,66303,66607,66911,67215,67519,67823,68127,68431,68735,69039,69343,69647,69951,70255,70559,70863,71167,71471,71775,72079,72383,72687,72991,73295,73599,73903,74207,74511,74815,75119,75423,75727,76031,76335,76639,76943,77247,77551'/>
+  </group>
+  <group name='31'>
+    <ids val='32,336,640,944,1248,1552,1856,2160,2464,2768,3072,3376,3680,3984,4288,4592,4896,5200,5504,5808,6112,6416,6720,7024,7328,7632,7936,8240,8544,8848,9152,9456,9760,10064,10368,10672,10976,11280,11584,11888,12192,12496,12800,13104,13408,13712,14016,14320,14624,14928,15232,15536,15840,16144,16448,16752,17056,17360,17664,17968,18272,18576,18880,19184,19488,19792,20096,20400,20704,21008,21312,21616,21920,22224,22528,22832,23136,23440,23744,24048,24352,24656,24960,25264,25568,25872,26176,26480,26784,27088,27392,27696,28000,28304,28608,28912,29216,29520,29824,30128,30432,30736,31040,31344,31648,31952,32256,32560,32864,33168,33472,33776,34080,34384,34688,34992,35296,35600,35904,36208,36512,36816,37120,37424,37728,38032,38336,38640,38944,39248,39552,39856,40160,40464,40768,41072,41376,41680,41984,42288,42592,42896,43200,43504,43808,44112,44416,44720,45024,45328,45632,45936,46240,46544,46848,47152,47456,47760,48064,48368,48672,48976,49280,49584,49888,50192,50496,50800,51104,51408,51712,52016,52320,52624,52928,53232,53536,53840,54144,54448,54752,55056,55360,55664,55968,56272,56576,56880,57184,57488,57792,58096,58400,58704,59008,59312,59616,59920,60224,60528,60832,61136,61440,61744,62048,62352,62656,62960,63264,63568,63872,64176,64480,64784,65088,65392,65696,66000,66304,66608,66912,67216,67520,67824,68128,68432,68736,69040,69344,69648,69952,70256,70560,70864,71168,71472,71776,72080,72384,72688,72992,73296,73600,73904,74208,74512,74816,75120,75424,75728,76032,76336,76640,76944,77248,77552'/>
+  </group>
+  <group name='32'>
+    <ids val='33,337,641,945,1249,1553,1857,2161,2465,2769,3073,3377,3681,3985,4289,4593,4897,5201,5505,5809,6113,6417,6721,7025,7329,7633,7937,8241,8545,8849,9153,9457,9761,10065,10369,10673,10977,11281,11585,11889,12193,12497,12801,13105,13409,13713,14017,14321,14625,14929,15233,15537,15841,16145,16449,16753,17057,17361,17665,17969,18273,18577,18881,19185,19489,19793,20097,20401,20705,21009,21313,21617,21921,22225,22529,22833,23137,23441,23745,24049,24353,24657,24961,25265,25569,25873,26177,26481,26785,27089,27393,27697,28001,28305,28609,28913,29217,29521,29825,30129,30433,30737,31041,31345,31649,31953,32257,32561,32865,33169,33473,33777,34081,34385,34689,34993,35297,35601,35905,36209,36513,36817,37121,37425,37729,38033,38337,38641,38945,39249,39553,39857,40161,40465,40769,41073,41377,41681,41985,42289,42593,42897,43201,43505,43809,44113,44417,44721,45025,45329,45633,45937,46241,46545,46849,47153,47457,47761,48065,48369,48673,48977,49281,49585,49889,50193,50497,50801,51105,51409,51713,52017,52321,52625,52929,53233,53537,53841,54145,54449,54753,55057,55361,55665,55969,56273,56577,56881,57185,57489,57793,58097,58401,58705,59009,59313,59617,59921,60225,60529,60833,61137,61441,61745,62049,62353,62657,62961,63265,63569,63873,64177,64481,64785,65089,65393,65697,66001,66305,66609,66913,67217,67521,67825,68129,68433,68737,69041,69345,69649,69953,70257,70561,70865,71169,71473,71777,72081,72385,72689,72993,73297,73601,73905,74209,74513,74817,75121,75425,75729,76033,76337,76641,76945,77249,77553'/>
+  </group>
+  <group name='33'>
+    <ids val='34,338,642,946,1250,1554,1858,2162,2466,2770,3074,3378,3682,3986,4290,4594,4898,5202,5506,5810,6114,6418,6722,7026,7330,7634,7938,8242,8546,8850,9154,9458,9762,10066,10370,10674,10978,11282,11586,11890,12194,12498,12802,13106,13410,13714,14018,14322,14626,14930,15234,15538,15842,16146,16450,16754,17058,17362,17666,17970,18274,18578,18882,19186,19490,19794,20098,20402,20706,21010,21314,21618,21922,22226,22530,22834,23138,23442,23746,24050,24354,24658,24962,25266,25570,25874,26178,26482,26786,27090,27394,27698,28002,28306,28610,28914,29218,29522,29826,30130,30434,30738,31042,31346,31650,31954,32258,32562,32866,33170,33474,33778,34082,34386,34690,34994,35298,35602,35906,36210,36514,36818,37122,37426,37730,38034,38338,38642,38946,39250,39554,39858,40162,40466,40770,41074,41378,41682,41986,42290,42594,42898,43202,43506,43810,44114,44418,44722,45026,45330,45634,45938,46242,46546,46850,47154,47458,47762,48066,48370,48674,48978,49282,49586,49890,50194,50498,50802,51106,51410,51714,52018,52322,52626,52930,53234,53538,53842,54146,54450,54754,55058,55362,55666,55970,56274,56578,56882,57186,57490,57794,58098,58402,58706,59010,59314,59618,59922,60226,60530,60834,61138,61442,61746,62050,62354,62658,62962,63266,63570,63874,64178,64482,64786,65090,65394,65698,66002,66306,66610,66914,67218,67522,67826,68130,68434,68738,69042,69346,69650,69954,70258,70562,70866,71170,71474,71778,72082,72386,72690,72994,73298,73602,73906,74210,74514,74818,75122,75426,75730,76034,76338,76642,76946,77250,77554'/>
+  </group>
+  <group name='34'>
+    <ids val='35,339,643,947,1251,1555,1859,2163,2467,2771,3075,3379,3683,3987,4291,4595,4899,5203,5507,5811,6115,6419,6723,7027,7331,7635,7939,8243,8547,8851,9155,9459,9763,10067,10371,10675,10979,11283,11587,11891,12195,12499,12803,13107,13411,13715,14019,14323,14627,14931,15235,15539,15843,16147,16451,16755,17059,17363,17667,17971,18275,18579,18883,19187,19491,19795,20099,20403,20707,21011,21315,21619,21923,22227,22531,22835,23139,23443,23747,24051,24355,24659,24963,25267,25571,25875,26179,26483,26787,27091,27395,27699,28003,28307,28611,28915,29219,29523,29827,30131,30435,30739,31043,31347,31651,31955,32259,32563,32867,33171,33475,33779,34083,34387,34691,34995,35299,35603,35907,36211,36515,36819,37123,37427,37731,38035,38339,38643,38947,39251,39555,39859,40163,40467,40771,41075,41379,41683,41987,42291,42595,42899,43203,43507,43811,44115,44419,44723,45027,45331,45635,45939,46243,46547,46851,47155,47459,47763,48067,48371,48675,48979,49283,49587,49891,50195,50499,50803,51107,51411,51715,52019,52323,52627,52931,53235,53539,53843,54147,54451,54755,55059,55363,55667,55971,56275,56579,56883,57187,57491,57795,58099,58403,58707,59011,59315,59619,59923,60227,60531,60835,61139,61443,61747,62051,62355,62659,62963,63267,63571,63875,64179,64483,64787,65091,65395,65699,66003,66307,66611,66915,67219,67523,67827,68131,68435,68739,69043,69347,69651,69955,70259,70563,70867,71171,71475,71779,72083,72387,72691,72995,73299,73603,73907,74211,74515,74819,75123,75427,75731,76035,76339,76643,76947,77251,77555'/>
+  </group>
+  <group name='35'>
+    <ids val='36,340,644,948,1252,1556,1860,2164,2468,2772,3076,3380,3684,3988,4292,4596,4900,5204,5508,5812,6116,6420,6724,7028,7332,7636,7940,8244,8548,8852,9156,9460,9764,10068,10372,10676,10980,11284,11588,11892,12196,12500,12804,13108,13412,13716,14020,14324,14628,14932,15236,15540,15844,16148,16452,16756,17060,17364,17668,17972,18276,18580,18884,19188,19492,19796,20100,20404,20708,21012,21316,21620,21924,22228,22532,22836,23140,23444,23748,24052,24356,24660,24964,25268,25572,25876,26180,26484,26788,27092,27396,27700,28004,28308,28612,28916,29220,29524,29828,30132,30436,30740,31044,31348,31652,31956,32260,32564,32868,33172,33476,33780,34084,34388,34692,34996,35300,35604,35908,36212,36516,36820,37124,37428,37732,38036,38340,38644,38948,39252,39556,39860,40164,40468,40772,41076,41380,41684,41988,42292,42596,42900,43204,43508,43812,44116,44420,44724,45028,45332,45636,45940,46244,46548,46852,47156,47460,47764,48068,48372,48676,48980,49284,49588,49892,50196,50500,50804,51108,51412,51716,52020,52324,52628,52932,53236,53540,53844,54148,54452,54756,55060,55364,55668,55972,56276,56580,56884,57188,57492,57796,58100,58404,58708,59012,59316,59620,59924,60228,60532,60836,61140,61444,61748,62052,62356,62660,62964,63268,63572,63876,64180,64484,64788,65092,65396,65700,66004,66308,66612,66916,67220,67524,67828,68132,68436,68740,69044,69348,69652,69956,70260,70564,70868,71172,71476,71780,72084,72388,72692,72996,73300,73604,73908,74212,74516,74820,75124,75428,75732,76036,76340,76644,76948,77252,77556'/>
+  </group>
+  <group name='36'>
+    <ids val='37,341,645,949,1253,1557,1861,2165,2469,2773,3077,3381,3685,3989,4293,4597,4901,5205,5509,5813,6117,6421,6725,7029,7333,7637,7941,8245,8549,8853,9157,9461,9765,10069,10373,10677,10981,11285,11589,11893,12197,12501,12805,13109,13413,13717,14021,14325,14629,14933,15237,15541,15845,16149,16453,16757,17061,17365,17669,17973,18277,18581,18885,19189,19493,19797,20101,20405,20709,21013,21317,21621,21925,22229,22533,22837,23141,23445,23749,24053,24357,24661,24965,25269,25573,25877,26181,26485,26789,27093,27397,27701,28005,28309,28613,28917,29221,29525,29829,30133,30437,30741,31045,31349,31653,31957,32261,32565,32869,33173,33477,33781,34085,34389,34693,34997,35301,35605,35909,36213,36517,36821,37125,37429,37733,38037,38341,38645,38949,39253,39557,39861,40165,40469,40773,41077,41381,41685,41989,42293,42597,42901,43205,43509,43813,44117,44421,44725,45029,45333,45637,45941,46245,46549,46853,47157,47461,47765,48069,48373,48677,48981,49285,49589,49893,50197,50501,50805,51109,51413,51717,52021,52325,52629,52933,53237,53541,53845,54149,54453,54757,55061,55365,55669,55973,56277,56581,56885,57189,57493,57797,58101,58405,58709,59013,59317,59621,59925,60229,60533,60837,61141,61445,61749,62053,62357,62661,62965,63269,63573,63877,64181,64485,64789,65093,65397,65701,66005,66309,66613,66917,67221,67525,67829,68133,68437,68741,69045,69349,69653,69957,70261,70565,70869,71173,71477,71781,72085,72389,72693,72997,73301,73605,73909,74213,74517,74821,75125,75429,75733,76037,76341,76645,76949,77253,77557'/>
+  </group>
+  <group name='37'>
+    <ids val='38,342,646,950,1254,1558,1862,2166,2470,2774,3078,3382,3686,3990,4294,4598,4902,5206,5510,5814,6118,6422,6726,7030,7334,7638,7942,8246,8550,8854,9158,9462,9766,10070,10374,10678,10982,11286,11590,11894,12198,12502,12806,13110,13414,13718,14022,14326,14630,14934,15238,15542,15846,16150,16454,16758,17062,17366,17670,17974,18278,18582,18886,19190,19494,19798,20102,20406,20710,21014,21318,21622,21926,22230,22534,22838,23142,23446,23750,24054,24358,24662,24966,25270,25574,25878,26182,26486,26790,27094,27398,27702,28006,28310,28614,28918,29222,29526,29830,30134,30438,30742,31046,31350,31654,31958,32262,32566,32870,33174,33478,33782,34086,34390,34694,34998,35302,35606,35910,36214,36518,36822,37126,37430,37734,38038,38342,38646,38950,39254,39558,39862,40166,40470,40774,41078,41382,41686,41990,42294,42598,42902,43206,43510,43814,44118,44422,44726,45030,45334,45638,45942,46246,46550,46854,47158,47462,47766,48070,48374,48678,48982,49286,49590,49894,50198,50502,50806,51110,51414,51718,52022,52326,52630,52934,53238,53542,53846,54150,54454,54758,55062,55366,55670,55974,56278,56582,56886,57190,57494,57798,58102,58406,58710,59014,59318,59622,59926,60230,60534,60838,61142,61446,61750,62054,62358,62662,62966,63270,63574,63878,64182,64486,64790,65094,65398,65702,66006,66310,66614,66918,67222,67526,67830,68134,68438,68742,69046,69350,69654,69958,70262,70566,70870,71174,71478,71782,72086,72390,72694,72998,73302,73606,73910,74214,74518,74822,75126,75430,75734,76038,76342,76646,76950,77254,77558'/>
+  </group>
+  <group name='38'>
+    <ids val='39,343,647,951,1255,1559,1863,2167,2471,2775,3079,3383,3687,3991,4295,4599,4903,5207,5511,5815,6119,6423,6727,7031,7335,7639,7943,8247,8551,8855,9159,9463,9767,10071,10375,10679,10983,11287,11591,11895,12199,12503,12807,13111,13415,13719,14023,14327,14631,14935,15239,15543,15847,16151,16455,16759,17063,17367,17671,17975,18279,18583,18887,19191,19495,19799,20103,20407,20711,21015,21319,21623,21927,22231,22535,22839,23143,23447,23751,24055,24359,24663,24967,25271,25575,25879,26183,26487,26791,27095,27399,27703,28007,28311,28615,28919,29223,29527,29831,30135,30439,30743,31047,31351,31655,31959,32263,32567,32871,33175,33479,33783,34087,34391,34695,34999,35303,35607,35911,36215,36519,36823,37127,37431,37735,38039,38343,38647,38951,39255,39559,39863,40167,40471,40775,41079,41383,41687,41991,42295,42599,42903,43207,43511,43815,44119,44423,44727,45031,45335,45639,45943,46247,46551,46855,47159,47463,47767,48071,48375,48679,48983,49287,49591,49895,50199,50503,50807,51111,51415,51719,52023,52327,52631,52935,53239,53543,53847,54151,54455,54759,55063,55367,55671,55975,56279,56583,56887,57191,57495,57799,58103,58407,58711,59015,59319,59623,59927,60231,60535,60839,61143,61447,61751,62055,62359,62663,62967,63271,63575,63879,64183,64487,64791,65095,65399,65703,66007,66311,66615,66919,67223,67527,67831,68135,68439,68743,69047,69351,69655,69959,70263,70567,70871,71175,71479,71783,72087,72391,72695,72999,73303,73607,73911,74215,74519,74823,75127,75431,75735,76039,76343,76647,76951,77255,77559'/>
+  </group>
+  <group name='39'>
+    <ids val='40,344,648,952,1256,1560,1864,2168,2472,2776,3080,3384,3688,3992,4296,4600,4904,5208,5512,5816,6120,6424,6728,7032,7336,7640,7944,8248,8552,8856,9160,9464,9768,10072,10376,10680,10984,11288,11592,11896,12200,12504,12808,13112,13416,13720,14024,14328,14632,14936,15240,15544,15848,16152,16456,16760,17064,17368,17672,17976,18280,18584,18888,19192,19496,19800,20104,20408,20712,21016,21320,21624,21928,22232,22536,22840,23144,23448,23752,24056,24360,24664,24968,25272,25576,25880,26184,26488,26792,27096,27400,27704,28008,28312,28616,28920,29224,29528,29832,30136,30440,30744,31048,31352,31656,31960,32264,32568,32872,33176,33480,33784,34088,34392,34696,35000,35304,35608,35912,36216,36520,36824,37128,37432,37736,38040,38344,38648,38952,39256,39560,39864,40168,40472,40776,41080,41384,41688,41992,42296,42600,42904,43208,43512,43816,44120,44424,44728,45032,45336,45640,45944,46248,46552,46856,47160,47464,47768,48072,48376,48680,48984,49288,49592,49896,50200,50504,50808,51112,51416,51720,52024,52328,52632,52936,53240,53544,53848,54152,54456,54760,55064,55368,55672,55976,56280,56584,56888,57192,57496,57800,58104,58408,58712,59016,59320,59624,59928,60232,60536,60840,61144,61448,61752,62056,62360,62664,62968,63272,63576,63880,64184,64488,64792,65096,65400,65704,66008,66312,66616,66920,67224,67528,67832,68136,68440,68744,69048,69352,69656,69960,70264,70568,70872,71176,71480,71784,72088,72392,72696,73000,73304,73608,73912,74216,74520,74824,75128,75432,75736,76040,76344,76648,76952,77256,77560'/>
+  </group>
+  <group name='40'>
+    <ids val='41,345,649,953,1257,1561,1865,2169,2473,2777,3081,3385,3689,3993,4297,4601,4905,5209,5513,5817,6121,6425,6729,7033,7337,7641,7945,8249,8553,8857,9161,9465,9769,10073,10377,10681,10985,11289,11593,11897,12201,12505,12809,13113,13417,13721,14025,14329,14633,14937,15241,15545,15849,16153,16457,16761,17065,17369,17673,17977,18281,18585,18889,19193,19497,19801,20105,20409,20713,21017,21321,21625,21929,22233,22537,22841,23145,23449,23753,24057,24361,24665,24969,25273,25577,25881,26185,26489,26793,27097,27401,27705,28009,28313,28617,28921,29225,29529,29833,30137,30441,30745,31049,31353,31657,31961,32265,32569,32873,33177,33481,33785,34089,34393,34697,35001,35305,35609,35913,36217,36521,36825,37129,37433,37737,38041,38345,38649,38953,39257,39561,39865,40169,40473,40777,41081,41385,41689,41993,42297,42601,42905,43209,43513,43817,44121,44425,44729,45033,45337,45641,45945,46249,46553,46857,47161,47465,47769,48073,48377,48681,48985,49289,49593,49897,50201,50505,50809,51113,51417,51721,52025,52329,52633,52937,53241,53545,53849,54153,54457,54761,55065,55369,55673,55977,56281,56585,56889,57193,57497,57801,58105,58409,58713,59017,59321,59625,59929,60233,60537,60841,61145,61449,61753,62057,62361,62665,62969,63273,63577,63881,64185,64489,64793,65097,65401,65705,66009,66313,66617,66921,67225,67529,67833,68137,68441,68745,69049,69353,69657,69961,70265,70569,70873,71177,71481,71785,72089,72393,72697,73001,73305,73609,73913,74217,74521,74825,75129,75433,75737,76041,76345,76649,76953,77257,77561'/>
+  </group>
+  <group name='41'>
+    <ids val='42,346,650,954,1258,1562,1866,2170,2474,2778,3082,3386,3690,3994,4298,4602,4906,5210,5514,5818,6122,6426,6730,7034,7338,7642,7946,8250,8554,8858,9162,9466,9770,10074,10378,10682,10986,11290,11594,11898,12202,12506,12810,13114,13418,13722,14026,14330,14634,14938,15242,15546,15850,16154,16458,16762,17066,17370,17674,17978,18282,18586,18890,19194,19498,19802,20106,20410,20714,21018,21322,21626,21930,22234,22538,22842,23146,23450,23754,24058,24362,24666,24970,25274,25578,25882,26186,26490,26794,27098,27402,27706,28010,28314,28618,28922,29226,29530,29834,30138,30442,30746,31050,31354,31658,31962,32266,32570,32874,33178,33482,33786,34090,34394,34698,35002,35306,35610,35914,36218,36522,36826,37130,37434,37738,38042,38346,38650,38954,39258,39562,39866,40170,40474,40778,41082,41386,41690,41994,42298,42602,42906,43210,43514,43818,44122,44426,44730,45034,45338,45642,45946,46250,46554,46858,47162,47466,47770,48074,48378,48682,48986,49290,49594,49898,50202,50506,50810,51114,51418,51722,52026,52330,52634,52938,53242,53546,53850,54154,54458,54762,55066,55370,55674,55978,56282,56586,56890,57194,57498,57802,58106,58410,58714,59018,59322,59626,59930,60234,60538,60842,61146,61450,61754,62058,62362,62666,62970,63274,63578,63882,64186,64490,64794,65098,65402,65706,66010,66314,66618,66922,67226,67530,67834,68138,68442,68746,69050,69354,69658,69962,70266,70570,70874,71178,71482,71786,72090,72394,72698,73002,73306,73610,73914,74218,74522,74826,75130,75434,75738,76042,76346,76650,76954,77258,77562'/>
+  </group>
+  <group name='42'>
+    <ids val='43,347,651,955,1259,1563,1867,2171,2475,2779,3083,3387,3691,3995,4299,4603,4907,5211,5515,5819,6123,6427,6731,7035,7339,7643,7947,8251,8555,8859,9163,9467,9771,10075,10379,10683,10987,11291,11595,11899,12203,12507,12811,13115,13419,13723,14027,14331,14635,14939,15243,15547,15851,16155,16459,16763,17067,17371,17675,17979,18283,18587,18891,19195,19499,19803,20107,20411,20715,21019,21323,21627,21931,22235,22539,22843,23147,23451,23755,24059,24363,24667,24971,25275,25579,25883,26187,26491,26795,27099,27403,27707,28011,28315,28619,28923,29227,29531,29835,30139,30443,30747,31051,31355,31659,31963,32267,32571,32875,33179,33483,33787,34091,34395,34699,35003,35307,35611,35915,36219,36523,36827,37131,37435,37739,38043,38347,38651,38955,39259,39563,39867,40171,40475,40779,41083,41387,41691,41995,42299,42603,42907,43211,43515,43819,44123,44427,44731,45035,45339,45643,45947,46251,46555,46859,47163,47467,47771,48075,48379,48683,48987,49291,49595,49899,50203,50507,50811,51115,51419,51723,52027,52331,52635,52939,53243,53547,53851,54155,54459,54763,55067,55371,55675,55979,56283,56587,56891,57195,57499,57803,58107,58411,58715,59019,59323,59627,59931,60235,60539,60843,61147,61451,61755,62059,62363,62667,62971,63275,63579,63883,64187,64491,64795,65099,65403,65707,66011,66315,66619,66923,67227,67531,67835,68139,68443,68747,69051,69355,69659,69963,70267,70571,70875,71179,71483,71787,72091,72395,72699,73003,73307,73611,73915,74219,74523,74827,75131,75435,75739,76043,76347,76651,76955,77259,77563'/>
+  </group>
+  <group name='43'>
+    <ids val='44,348,652,956,1260,1564,1868,2172,2476,2780,3084,3388,3692,3996,4300,4604,4908,5212,5516,5820,6124,6428,6732,7036,7340,7644,7948,8252,8556,8860,9164,9468,9772,10076,10380,10684,10988,11292,11596,11900,12204,12508,12812,13116,13420,13724,14028,14332,14636,14940,15244,15548,15852,16156,16460,16764,17068,17372,17676,17980,18284,18588,18892,19196,19500,19804,20108,20412,20716,21020,21324,21628,21932,22236,22540,22844,23148,23452,23756,24060,24364,24668,24972,25276,25580,25884,26188,26492,26796,27100,27404,27708,28012,28316,28620,28924,29228,29532,29836,30140,30444,30748,31052,31356,31660,31964,32268,32572,32876,33180,33484,33788,34092,34396,34700,35004,35308,35612,35916,36220,36524,36828,37132,37436,37740,38044,38348,38652,38956,39260,39564,39868,40172,40476,40780,41084,41388,41692,41996,42300,42604,42908,43212,43516,43820,44124,44428,44732,45036,45340,45644,45948,46252,46556,46860,47164,47468,47772,48076,48380,48684,48988,49292,49596,49900,50204,50508,50812,51116,51420,51724,52028,52332,52636,52940,53244,53548,53852,54156,54460,54764,55068,55372,55676,55980,56284,56588,56892,57196,57500,57804,58108,58412,58716,59020,59324,59628,59932,60236,60540,60844,61148,61452,61756,62060,62364,62668,62972,63276,63580,63884,64188,64492,64796,65100,65404,65708,66012,66316,66620,66924,67228,67532,67836,68140,68444,68748,69052,69356,69660,69964,70268,70572,70876,71180,71484,71788,72092,72396,72700,73004,73308,73612,73916,74220,74524,74828,75132,75436,75740,76044,76348,76652,76956,77260,77564'/>
+  </group>
+  <group name='44'>
+    <ids val='45,349,653,957,1261,1565,1869,2173,2477,2781,3085,3389,3693,3997,4301,4605,4909,5213,5517,5821,6125,6429,6733,7037,7341,7645,7949,8253,8557,8861,9165,9469,9773,10077,10381,10685,10989,11293,11597,11901,12205,12509,12813,13117,13421,13725,14029,14333,14637,14941,15245,15549,15853,16157,16461,16765,17069,17373,17677,17981,18285,18589,18893,19197,19501,19805,20109,20413,20717,21021,21325,21629,21933,22237,22541,22845,23149,23453,23757,24061,24365,24669,24973,25277,25581,25885,26189,26493,26797,27101,27405,27709,28013,28317,28621,28925,29229,29533,29837,30141,30445,30749,31053,31357,31661,31965,32269,32573,32877,33181,33485,33789,34093,34397,34701,35005,35309,35613,35917,36221,36525,36829,37133,37437,37741,38045,38349,38653,38957,39261,39565,39869,40173,40477,40781,41085,41389,41693,41997,42301,42605,42909,43213,43517,43821,44125,44429,44733,45037,45341,45645,45949,46253,46557,46861,47165,47469,47773,48077,48381,48685,48989,49293,49597,49901,50205,50509,50813,51117,51421,51725,52029,52333,52637,52941,53245,53549,53853,54157,54461,54765,55069,55373,55677,55981,56285,56589,56893,57197,57501,57805,58109,58413,58717,59021,59325,59629,59933,60237,60541,60845,61149,61453,61757,62061,62365,62669,62973,63277,63581,63885,64189,64493,64797,65101,65405,65709,66013,66317,66621,66925,67229,67533,67837,68141,68445,68749,69053,69357,69661,69965,70269,70573,70877,71181,71485,71789,72093,72397,72701,73005,73309,73613,73917,74221,74525,74829,75133,75437,75741,76045,76349,76653,76957,77261,77565'/>
+  </group>
+  <group name='45'>
+    <ids val='46,350,654,958,1262,1566,1870,2174,2478,2782,3086,3390,3694,3998,4302,4606,4910,5214,5518,5822,6126,6430,6734,7038,7342,7646,7950,8254,8558,8862,9166,9470,9774,10078,10382,10686,10990,11294,11598,11902,12206,12510,12814,13118,13422,13726,14030,14334,14638,14942,15246,15550,15854,16158,16462,16766,17070,17374,17678,17982,18286,18590,18894,19198,19502,19806,20110,20414,20718,21022,21326,21630,21934,22238,22542,22846,23150,23454,23758,24062,24366,24670,24974,25278,25582,25886,26190,26494,26798,27102,27406,27710,28014,28318,28622,28926,29230,29534,29838,30142,30446,30750,31054,31358,31662,31966,32270,32574,32878,33182,33486,33790,34094,34398,34702,35006,35310,35614,35918,36222,36526,36830,37134,37438,37742,38046,38350,38654,38958,39262,39566,39870,40174,40478,40782,41086,41390,41694,41998,42302,42606,42910,43214,43518,43822,44126,44430,44734,45038,45342,45646,45950,46254,46558,46862,47166,47470,47774,48078,48382,48686,48990,49294,49598,49902,50206,50510,50814,51118,51422,51726,52030,52334,52638,52942,53246,53550,53854,54158,54462,54766,55070,55374,55678,55982,56286,56590,56894,57198,57502,57806,58110,58414,58718,59022,59326,59630,59934,60238,60542,60846,61150,61454,61758,62062,62366,62670,62974,63278,63582,63886,64190,64494,64798,65102,65406,65710,66014,66318,66622,66926,67230,67534,67838,68142,68446,68750,69054,69358,69662,69966,70270,70574,70878,71182,71486,71790,72094,72398,72702,73006,73310,73614,73918,74222,74526,74830,75134,75438,75742,76046,76350,76654,76958,77262,77566'/>
+  </group>
+  <group name='46'>
+    <ids val='47,351,655,959,1263,1567,1871,2175,2479,2783,3087,3391,3695,3999,4303,4607,4911,5215,5519,5823,6127,6431,6735,7039,7343,7647,7951,8255,8559,8863,9167,9471,9775,10079,10383,10687,10991,11295,11599,11903,12207,12511,12815,13119,13423,13727,14031,14335,14639,14943,15247,15551,15855,16159,16463,16767,17071,17375,17679,17983,18287,18591,18895,19199,19503,19807,20111,20415,20719,21023,21327,21631,21935,22239,22543,22847,23151,23455,23759,24063,24367,24671,24975,25279,25583,25887,26191,26495,26799,27103,27407,27711,28015,28319,28623,28927,29231,29535,29839,30143,30447,30751,31055,31359,31663,31967,32271,32575,32879,33183,33487,33791,34095,34399,34703,35007,35311,35615,35919,36223,36527,36831,37135,37439,37743,38047,38351,38655,38959,39263,39567,39871,40175,40479,40783,41087,41391,41695,41999,42303,42607,42911,43215,43519,43823,44127,44431,44735,45039,45343,45647,45951,46255,46559,46863,47167,47471,47775,48079,48383,48687,48991,49295,49599,49903,50207,50511,50815,51119,51423,51727,52031,52335,52639,52943,53247,53551,53855,54159,54463,54767,55071,55375,55679,55983,56287,56591,56895,57199,57503,57807,58111,58415,58719,59023,59327,59631,59935,60239,60543,60847,61151,61455,61759,62063,62367,62671,62975,63279,63583,63887,64191,64495,64799,65103,65407,65711,66015,66319,66623,66927,67231,67535,67839,68143,68447,68751,69055,69359,69663,69967,70271,70575,70879,71183,71487,71791,72095,72399,72703,73007,73311,73615,73919,74223,74527,74831,75135,75439,75743,76047,76351,76655,76959,77263,77567'/>
+  </group>
+  <group name='47'>
+    <ids val='48,352,656,960,1264,1568,1872,2176,2480,2784,3088,3392,3696,4000,4304,4608,4912,5216,5520,5824,6128,6432,6736,7040,7344,7648,7952,8256,8560,8864,9168,9472,9776,10080,10384,10688,10992,11296,11600,11904,12208,12512,12816,13120,13424,13728,14032,14336,14640,14944,15248,15552,15856,16160,16464,16768,17072,17376,17680,17984,18288,18592,18896,19200,19504,19808,20112,20416,20720,21024,21328,21632,21936,22240,22544,22848,23152,23456,23760,24064,24368,24672,24976,25280,25584,25888,26192,26496,26800,27104,27408,27712,28016,28320,28624,28928,29232,29536,29840,30144,30448,30752,31056,31360,31664,31968,32272,32576,32880,33184,33488,33792,34096,34400,34704,35008,35312,35616,35920,36224,36528,36832,37136,37440,37744,38048,38352,38656,38960,39264,39568,39872,40176,40480,40784,41088,41392,41696,42000,42304,42608,42912,43216,43520,43824,44128,44432,44736,45040,45344,45648,45952,46256,46560,46864,47168,47472,47776,48080,48384,48688,48992,49296,49600,49904,50208,50512,50816,51120,51424,51728,52032,52336,52640,52944,53248,53552,53856,54160,54464,54768,55072,55376,55680,55984,56288,56592,56896,57200,57504,57808,58112,58416,58720,59024,59328,59632,59936,60240,60544,60848,61152,61456,61760,62064,62368,62672,62976,63280,63584,63888,64192,64496,64800,65104,65408,65712,66016,66320,66624,66928,67232,67536,67840,68144,68448,68752,69056,69360,69664,69968,70272,70576,70880,71184,71488,71792,72096,72400,72704,73008,73312,73616,73920,74224,74528,74832,75136,75440,75744,76048,76352,76656,76960,77264,77568'/>
+  </group>
+  <group name='48'>
+    <ids val='49,353,657,961,1265,1569,1873,2177,2481,2785,3089,3393,3697,4001,4305,4609,4913,5217,5521,5825,6129,6433,6737,7041,7345,7649,7953,8257,8561,8865,9169,9473,9777,10081,10385,10689,10993,11297,11601,11905,12209,12513,12817,13121,13425,13729,14033,14337,14641,14945,15249,15553,15857,16161,16465,16769,17073,17377,17681,17985,18289,18593,18897,19201,19505,19809,20113,20417,20721,21025,21329,21633,21937,22241,22545,22849,23153,23457,23761,24065,24369,24673,24977,25281,25585,25889,26193,26497,26801,27105,27409,27713,28017,28321,28625,28929,29233,29537,29841,30145,30449,30753,31057,31361,31665,31969,32273,32577,32881,33185,33489,33793,34097,34401,34705,35009,35313,35617,35921,36225,36529,36833,37137,37441,37745,38049,38353,38657,38961,39265,39569,39873,40177,40481,40785,41089,41393,41697,42001,42305,42609,42913,43217,43521,43825,44129,44433,44737,45041,45345,45649,45953,46257,46561,46865,47169,47473,47777,48081,48385,48689,48993,49297,49601,49905,50209,50513,50817,51121,51425,51729,52033,52337,52641,52945,53249,53553,53857,54161,54465,54769,55073,55377,55681,55985,56289,56593,56897,57201,57505,57809,58113,58417,58721,59025,59329,59633,59937,60241,60545,60849,61153,61457,61761,62065,62369,62673,62977,63281,63585,63889,64193,64497,64801,65105,65409,65713,66017,66321,66625,66929,67233,67537,67841,68145,68449,68753,69057,69361,69665,69969,70273,70577,70881,71185,71489,71793,72097,72401,72705,73009,73313,73617,73921,74225,74529,74833,75137,75441,75745,76049,76353,76657,76961,77265,77569'/>
+  </group>
+  <group name='49'>
+    <ids val='50,354,658,962,1266,1570,1874,2178,2482,2786,3090,3394,3698,4002,4306,4610,4914,5218,5522,5826,6130,6434,6738,7042,7346,7650,7954,8258,8562,8866,9170,9474,9778,10082,10386,10690,10994,11298,11602,11906,12210,12514,12818,13122,13426,13730,14034,14338,14642,14946,15250,15554,15858,16162,16466,16770,17074,17378,17682,17986,18290,18594,18898,19202,19506,19810,20114,20418,20722,21026,21330,21634,21938,22242,22546,22850,23154,23458,23762,24066,24370,24674,24978,25282,25586,25890,26194,26498,26802,27106,27410,27714,28018,28322,28626,28930,29234,29538,29842,30146,30450,30754,31058,31362,31666,31970,32274,32578,32882,33186,33490,33794,34098,34402,34706,35010,35314,35618,35922,36226,36530,36834,37138,37442,37746,38050,38354,38658,38962,39266,39570,39874,40178,40482,40786,41090,41394,41698,42002,42306,42610,42914,43218,43522,43826,44130,44434,44738,45042,45346,45650,45954,46258,46562,46866,47170,47474,47778,48082,48386,48690,48994,49298,49602,49906,50210,50514,50818,51122,51426,51730,52034,52338,52642,52946,53250,53554,53858,54162,54466,54770,55074,55378,55682,55986,56290,56594,56898,57202,57506,57810,58114,58418,58722,59026,59330,59634,59938,60242,60546,60850,61154,61458,61762,62066,62370,62674,62978,63282,63586,63890,64194,64498,64802,65106,65410,65714,66018,66322,66626,66930,67234,67538,67842,68146,68450,68754,69058,69362,69666,69970,70274,70578,70882,71186,71490,71794,72098,72402,72706,73010,73314,73618,73922,74226,74530,74834,75138,75442,75746,76050,76354,76658,76962,77266,77570'/>
+  </group>
+  <group name='50'>
+    <ids val='51,355,659,963,1267,1571,1875,2179,2483,2787,3091,3395,3699,4003,4307,4611,4915,5219,5523,5827,6131,6435,6739,7043,7347,7651,7955,8259,8563,8867,9171,9475,9779,10083,10387,10691,10995,11299,11603,11907,12211,12515,12819,13123,13427,13731,14035,14339,14643,14947,15251,15555,15859,16163,16467,16771,17075,17379,17683,17987,18291,18595,18899,19203,19507,19811,20115,20419,20723,21027,21331,21635,21939,22243,22547,22851,23155,23459,23763,24067,24371,24675,24979,25283,25587,25891,26195,26499,26803,27107,27411,27715,28019,28323,28627,28931,29235,29539,29843,30147,30451,30755,31059,31363,31667,31971,32275,32579,32883,33187,33491,33795,34099,34403,34707,35011,35315,35619,35923,36227,36531,36835,37139,37443,37747,38051,38355,38659,38963,39267,39571,39875,40179,40483,40787,41091,41395,41699,42003,42307,42611,42915,43219,43523,43827,44131,44435,44739,45043,45347,45651,45955,46259,46563,46867,47171,47475,47779,48083,48387,48691,48995,49299,49603,49907,50211,50515,50819,51123,51427,51731,52035,52339,52643,52947,53251,53555,53859,54163,54467,54771,55075,55379,55683,55987,56291,56595,56899,57203,57507,57811,58115,58419,58723,59027,59331,59635,59939,60243,60547,60851,61155,61459,61763,62067,62371,62675,62979,63283,63587,63891,64195,64499,64803,65107,65411,65715,66019,66323,66627,66931,67235,67539,67843,68147,68451,68755,69059,69363,69667,69971,70275,70579,70883,71187,71491,71795,72099,72403,72707,73011,73315,73619,73923,74227,74531,74835,75139,75443,75747,76051,76355,76659,76963,77267,77571'/>
+  </group>
+  <group name='51'>
+    <ids val='52,356,660,964,1268,1572,1876,2180,2484,2788,3092,3396,3700,4004,4308,4612,4916,5220,5524,5828,6132,6436,6740,7044,7348,7652,7956,8260,8564,8868,9172,9476,9780,10084,10388,10692,10996,11300,11604,11908,12212,12516,12820,13124,13428,13732,14036,14340,14644,14948,15252,15556,15860,16164,16468,16772,17076,17380,17684,17988,18292,18596,18900,19204,19508,19812,20116,20420,20724,21028,21332,21636,21940,22244,22548,22852,23156,23460,23764,24068,24372,24676,24980,25284,25588,25892,26196,26500,26804,27108,27412,27716,28020,28324,28628,28932,29236,29540,29844,30148,30452,30756,31060,31364,31668,31972,32276,32580,32884,33188,33492,33796,34100,34404,34708,35012,35316,35620,35924,36228,36532,36836,37140,37444,37748,38052,38356,38660,38964,39268,39572,39876,40180,40484,40788,41092,41396,41700,42004,42308,42612,42916,43220,43524,43828,44132,44436,44740,45044,45348,45652,45956,46260,46564,46868,47172,47476,47780,48084,48388,48692,48996,49300,49604,49908,50212,50516,50820,51124,51428,51732,52036,52340,52644,52948,53252,53556,53860,54164,54468,54772,55076,55380,55684,55988,56292,56596,56900,57204,57508,57812,58116,58420,58724,59028,59332,59636,59940,60244,60548,60852,61156,61460,61764,62068,62372,62676,62980,63284,63588,63892,64196,64500,64804,65108,65412,65716,66020,66324,66628,66932,67236,67540,67844,68148,68452,68756,69060,69364,69668,69972,70276,70580,70884,71188,71492,71796,72100,72404,72708,73012,73316,73620,73924,74228,74532,74836,75140,75444,75748,76052,76356,76660,76964,77268,77572'/>
+  </group>
+  <group name='52'>
+    <ids val='53,357,661,965,1269,1573,1877,2181,2485,2789,3093,3397,3701,4005,4309,4613,4917,5221,5525,5829,6133,6437,6741,7045,7349,7653,7957,8261,8565,8869,9173,9477,9781,10085,10389,10693,10997,11301,11605,11909,12213,12517,12821,13125,13429,13733,14037,14341,14645,14949,15253,15557,15861,16165,16469,16773,17077,17381,17685,17989,18293,18597,18901,19205,19509,19813,20117,20421,20725,21029,21333,21637,21941,22245,22549,22853,23157,23461,23765,24069,24373,24677,24981,25285,25589,25893,26197,26501,26805,27109,27413,27717,28021,28325,28629,28933,29237,29541,29845,30149,30453,30757,31061,31365,31669,31973,32277,32581,32885,33189,33493,33797,34101,34405,34709,35013,35317,35621,35925,36229,36533,36837,37141,37445,37749,38053,38357,38661,38965,39269,39573,39877,40181,40485,40789,41093,41397,41701,42005,42309,42613,42917,43221,43525,43829,44133,44437,44741,45045,45349,45653,45957,46261,46565,46869,47173,47477,47781,48085,48389,48693,48997,49301,49605,49909,50213,50517,50821,51125,51429,51733,52037,52341,52645,52949,53253,53557,53861,54165,54469,54773,55077,55381,55685,55989,56293,56597,56901,57205,57509,57813,58117,58421,58725,59029,59333,59637,59941,60245,60549,60853,61157,61461,61765,62069,62373,62677,62981,63285,63589,63893,64197,64501,64805,65109,65413,65717,66021,66325,66629,66933,67237,67541,67845,68149,68453,68757,69061,69365,69669,69973,70277,70581,70885,71189,71493,71797,72101,72405,72709,73013,73317,73621,73925,74229,74533,74837,75141,75445,75749,76053,76357,76661,76965,77269,77573'/>
+  </group>
+  <group name='53'>
+    <ids val='54,358,662,966,1270,1574,1878,2182,2486,2790,3094,3398,3702,4006,4310,4614,4918,5222,5526,5830,6134,6438,6742,7046,7350,7654,7958,8262,8566,8870,9174,9478,9782,10086,10390,10694,10998,11302,11606,11910,12214,12518,12822,13126,13430,13734,14038,14342,14646,14950,15254,15558,15862,16166,16470,16774,17078,17382,17686,17990,18294,18598,18902,19206,19510,19814,20118,20422,20726,21030,21334,21638,21942,22246,22550,22854,23158,23462,23766,24070,24374,24678,24982,25286,25590,25894,26198,26502,26806,27110,27414,27718,28022,28326,28630,28934,29238,29542,29846,30150,30454,30758,31062,31366,31670,31974,32278,32582,32886,33190,33494,33798,34102,34406,34710,35014,35318,35622,35926,36230,36534,36838,37142,37446,37750,38054,38358,38662,38966,39270,39574,39878,40182,40486,40790,41094,41398,41702,42006,42310,42614,42918,43222,43526,43830,44134,44438,44742,45046,45350,45654,45958,46262,46566,46870,47174,47478,47782,48086,48390,48694,48998,49302,49606,49910,50214,50518,50822,51126,51430,51734,52038,52342,52646,52950,53254,53558,53862,54166,54470,54774,55078,55382,55686,55990,56294,56598,56902,57206,57510,57814,58118,58422,58726,59030,59334,59638,59942,60246,60550,60854,61158,61462,61766,62070,62374,62678,62982,63286,63590,63894,64198,64502,64806,65110,65414,65718,66022,66326,66630,66934,67238,67542,67846,68150,68454,68758,69062,69366,69670,69974,70278,70582,70886,71190,71494,71798,72102,72406,72710,73014,73318,73622,73926,74230,74534,74838,75142,75446,75750,76054,76358,76662,76966,77270,77574'/>
+  </group>
+  <group name='54'>
+    <ids val='55,359,663,967,1271,1575,1879,2183,2487,2791,3095,3399,3703,4007,4311,4615,4919,5223,5527,5831,6135,6439,6743,7047,7351,7655,7959,8263,8567,8871,9175,9479,9783,10087,10391,10695,10999,11303,11607,11911,12215,12519,12823,13127,13431,13735,14039,14343,14647,14951,15255,15559,15863,16167,16471,16775,17079,17383,17687,17991,18295,18599,18903,19207,19511,19815,20119,20423,20727,21031,21335,21639,21943,22247,22551,22855,23159,23463,23767,24071,24375,24679,24983,25287,25591,25895,26199,26503,26807,27111,27415,27719,28023,28327,28631,28935,29239,29543,29847,30151,30455,30759,31063,31367,31671,31975,32279,32583,32887,33191,33495,33799,34103,34407,34711,35015,35319,35623,35927,36231,36535,36839,37143,37447,37751,38055,38359,38663,38967,39271,39575,39879,40183,40487,40791,41095,41399,41703,42007,42311,42615,42919,43223,43527,43831,44135,44439,44743,45047,45351,45655,45959,46263,46567,46871,47175,47479,47783,48087,48391,48695,48999,49303,49607,49911,50215,50519,50823,51127,51431,51735,52039,52343,52647,52951,53255,53559,53863,54167,54471,54775,55079,55383,55687,55991,56295,56599,56903,57207,57511,57815,58119,58423,58727,59031,59335,59639,59943,60247,60551,60855,61159,61463,61767,62071,62375,62679,62983,63287,63591,63895,64199,64503,64807,65111,65415,65719,66023,66327,66631,66935,67239,67543,67847,68151,68455,68759,69063,69367,69671,69975,70279,70583,70887,71191,71495,71799,72103,72407,72711,73015,73319,73623,73927,74231,74535,74839,75143,75447,75751,76055,76359,76663,76967,77271,77575'/>
+  </group>
+  <group name='55'>
+    <ids val='56,360,664,968,1272,1576,1880,2184,2488,2792,3096,3400,3704,4008,4312,4616,4920,5224,5528,5832,6136,6440,6744,7048,7352,7656,7960,8264,8568,8872,9176,9480,9784,10088,10392,10696,11000,11304,11608,11912,12216,12520,12824,13128,13432,13736,14040,14344,14648,14952,15256,15560,15864,16168,16472,16776,17080,17384,17688,17992,18296,18600,18904,19208,19512,19816,20120,20424,20728,21032,21336,21640,21944,22248,22552,22856,23160,23464,23768,24072,24376,24680,24984,25288,25592,25896,26200,26504,26808,27112,27416,27720,28024,28328,28632,28936,29240,29544,29848,30152,30456,30760,31064,31368,31672,31976,32280,32584,32888,33192,33496,33800,34104,34408,34712,35016,35320,35624,35928,36232,36536,36840,37144,37448,37752,38056,38360,38664,38968,39272,39576,39880,40184,40488,40792,41096,41400,41704,42008,42312,42616,42920,43224,43528,43832,44136,44440,44744,45048,45352,45656,45960,46264,46568,46872,47176,47480,47784,48088,48392,48696,49000,49304,49608,49912,50216,50520,50824,51128,51432,51736,52040,52344,52648,52952,53256,53560,53864,54168,54472,54776,55080,55384,55688,55992,56296,56600,56904,57208,57512,57816,58120,58424,58728,59032,59336,59640,59944,60248,60552,60856,61160,61464,61768,62072,62376,62680,62984,63288,63592,63896,64200,64504,64808,65112,65416,65720,66024,66328,66632,66936,67240,67544,67848,68152,68456,68760,69064,69368,69672,69976,70280,70584,70888,71192,71496,71800,72104,72408,72712,73016,73320,73624,73928,74232,74536,74840,75144,75448,75752,76056,76360,76664,76968,77272,77576'/>
+  </group>
+  <group name='56'>
+    <ids val='57,361,665,969,1273,1577,1881,2185,2489,2793,3097,3401,3705,4009,4313,4617,4921,5225,5529,5833,6137,6441,6745,7049,7353,7657,7961,8265,8569,8873,9177,9481,9785,10089,10393,10697,11001,11305,11609,11913,12217,12521,12825,13129,13433,13737,14041,14345,14649,14953,15257,15561,15865,16169,16473,16777,17081,17385,17689,17993,18297,18601,18905,19209,19513,19817,20121,20425,20729,21033,21337,21641,21945,22249,22553,22857,23161,23465,23769,24073,24377,24681,24985,25289,25593,25897,26201,26505,26809,27113,27417,27721,28025,28329,28633,28937,29241,29545,29849,30153,30457,30761,31065,31369,31673,31977,32281,32585,32889,33193,33497,33801,34105,34409,34713,35017,35321,35625,35929,36233,36537,36841,37145,37449,37753,38057,38361,38665,38969,39273,39577,39881,40185,40489,40793,41097,41401,41705,42009,42313,42617,42921,43225,43529,43833,44137,44441,44745,45049,45353,45657,45961,46265,46569,46873,47177,47481,47785,48089,48393,48697,49001,49305,49609,49913,50217,50521,50825,51129,51433,51737,52041,52345,52649,52953,53257,53561,53865,54169,54473,54777,55081,55385,55689,55993,56297,56601,56905,57209,57513,57817,58121,58425,58729,59033,59337,59641,59945,60249,60553,60857,61161,61465,61769,62073,62377,62681,62985,63289,63593,63897,64201,64505,64809,65113,65417,65721,66025,66329,66633,66937,67241,67545,67849,68153,68457,68761,69065,69369,69673,69977,70281,70585,70889,71193,71497,71801,72105,72409,72713,73017,73321,73625,73929,74233,74537,74841,75145,75449,75753,76057,76361,76665,76969,77273,77577'/>
+  </group>
+  <group name='57'>
+    <ids val='58,362,666,970,1274,1578,1882,2186,2490,2794,3098,3402,3706,4010,4314,4618,4922,5226,5530,5834,6138,6442,6746,7050,7354,7658,7962,8266,8570,8874,9178,9482,9786,10090,10394,10698,11002,11306,11610,11914,12218,12522,12826,13130,13434,13738,14042,14346,14650,14954,15258,15562,15866,16170,16474,16778,17082,17386,17690,17994,18298,18602,18906,19210,19514,19818,20122,20426,20730,21034,21338,21642,21946,22250,22554,22858,23162,23466,23770,24074,24378,24682,24986,25290,25594,25898,26202,26506,26810,27114,27418,27722,28026,28330,28634,28938,29242,29546,29850,30154,30458,30762,31066,31370,31674,31978,32282,32586,32890,33194,33498,33802,34106,34410,34714,35018,35322,35626,35930,36234,36538,36842,37146,37450,37754,38058,38362,38666,38970,39274,39578,39882,40186,40490,40794,41098,41402,41706,42010,42314,42618,42922,43226,43530,43834,44138,44442,44746,45050,45354,45658,45962,46266,46570,46874,47178,47482,47786,48090,48394,48698,49002,49306,49610,49914,50218,50522,50826,51130,51434,51738,52042,52346,52650,52954,53258,53562,53866,54170,54474,54778,55082,55386,55690,55994,56298,56602,56906,57210,57514,57818,58122,58426,58730,59034,59338,59642,59946,60250,60554,60858,61162,61466,61770,62074,62378,62682,62986,63290,63594,63898,64202,64506,64810,65114,65418,65722,66026,66330,66634,66938,67242,67546,67850,68154,68458,68762,69066,69370,69674,69978,70282,70586,70890,71194,71498,71802,72106,72410,72714,73018,73322,73626,73930,74234,74538,74842,75146,75450,75754,76058,76362,76666,76970,77274,77578'/>
+  </group>
+  <group name='58'>
+    <ids val='59,363,667,971,1275,1579,1883,2187,2491,2795,3099,3403,3707,4011,4315,4619,4923,5227,5531,5835,6139,6443,6747,7051,7355,7659,7963,8267,8571,8875,9179,9483,9787,10091,10395,10699,11003,11307,11611,11915,12219,12523,12827,13131,13435,13739,14043,14347,14651,14955,15259,15563,15867,16171,16475,16779,17083,17387,17691,17995,18299,18603,18907,19211,19515,19819,20123,20427,20731,21035,21339,21643,21947,22251,22555,22859,23163,23467,23771,24075,24379,24683,24987,25291,25595,25899,26203,26507,26811,27115,27419,27723,28027,28331,28635,28939,29243,29547,29851,30155,30459,30763,31067,31371,31675,31979,32283,32587,32891,33195,33499,33803,34107,34411,34715,35019,35323,35627,35931,36235,36539,36843,37147,37451,37755,38059,38363,38667,38971,39275,39579,39883,40187,40491,40795,41099,41403,41707,42011,42315,42619,42923,43227,43531,43835,44139,44443,44747,45051,45355,45659,45963,46267,46571,46875,47179,47483,47787,48091,48395,48699,49003,49307,49611,49915,50219,50523,50827,51131,51435,51739,52043,52347,52651,52955,53259,53563,53867,54171,54475,54779,55083,55387,55691,55995,56299,56603,56907,57211,57515,57819,58123,58427,58731,59035,59339,59643,59947,60251,60555,60859,61163,61467,61771,62075,62379,62683,62987,63291,63595,63899,64203,64507,64811,65115,65419,65723,66027,66331,66635,66939,67243,67547,67851,68155,68459,68763,69067,69371,69675,69979,70283,70587,70891,71195,71499,71803,72107,72411,72715,73019,73323,73627,73931,74235,74539,74843,75147,75451,75755,76059,76363,76667,76971,77275,77579'/>
+  </group>
+  <group name='59'>
+    <ids val='60,364,668,972,1276,1580,1884,2188,2492,2796,3100,3404,3708,4012,4316,4620,4924,5228,5532,5836,6140,6444,6748,7052,7356,7660,7964,8268,8572,8876,9180,9484,9788,10092,10396,10700,11004,11308,11612,11916,12220,12524,12828,13132,13436,13740,14044,14348,14652,14956,15260,15564,15868,16172,16476,16780,17084,17388,17692,17996,18300,18604,18908,19212,19516,19820,20124,20428,20732,21036,21340,21644,21948,22252,22556,22860,23164,23468,23772,24076,24380,24684,24988,25292,25596,25900,26204,26508,26812,27116,27420,27724,28028,28332,28636,28940,29244,29548,29852,30156,30460,30764,31068,31372,31676,31980,32284,32588,32892,33196,33500,33804,34108,34412,34716,35020,35324,35628,35932,36236,36540,36844,37148,37452,37756,38060,38364,38668,38972,39276,39580,39884,40188,40492,40796,41100,41404,41708,42012,42316,42620,42924,43228,43532,43836,44140,44444,44748,45052,45356,45660,45964,46268,46572,46876,47180,47484,47788,48092,48396,48700,49004,49308,49612,49916,50220,50524,50828,51132,51436,51740,52044,52348,52652,52956,53260,53564,53868,54172,54476,54780,55084,55388,55692,55996,56300,56604,56908,57212,57516,57820,58124,58428,58732,59036,59340,59644,59948,60252,60556,60860,61164,61468,61772,62076,62380,62684,62988,63292,63596,63900,64204,64508,64812,65116,65420,65724,66028,66332,66636,66940,67244,67548,67852,68156,68460,68764,69068,69372,69676,69980,70284,70588,70892,71196,71500,71804,72108,72412,72716,73020,73324,73628,73932,74236,74540,74844,75148,75452,75756,76060,76364,76668,76972,77276,77580'/>
+  </group>
+  <group name='60'>
+    <ids val='61,365,669,973,1277,1581,1885,2189,2493,2797,3101,3405,3709,4013,4317,4621,4925,5229,5533,5837,6141,6445,6749,7053,7357,7661,7965,8269,8573,8877,9181,9485,9789,10093,10397,10701,11005,11309,11613,11917,12221,12525,12829,13133,13437,13741,14045,14349,14653,14957,15261,15565,15869,16173,16477,16781,17085,17389,17693,17997,18301,18605,18909,19213,19517,19821,20125,20429,20733,21037,21341,21645,21949,22253,22557,22861,23165,23469,23773,24077,24381,24685,24989,25293,25597,25901,26205,26509,26813,27117,27421,27725,28029,28333,28637,28941,29245,29549,29853,30157,30461,30765,31069,31373,31677,31981,32285,32589,32893,33197,33501,33805,34109,34413,34717,35021,35325,35629,35933,36237,36541,36845,37149,37453,37757,38061,38365,38669,38973,39277,39581,39885,40189,40493,40797,41101,41405,41709,42013,42317,42621,42925,43229,43533,43837,44141,44445,44749,45053,45357,45661,45965,46269,46573,46877,47181,47485,47789,48093,48397,48701,49005,49309,49613,49917,50221,50525,50829,51133,51437,51741,52045,52349,52653,52957,53261,53565,53869,54173,54477,54781,55085,55389,55693,55997,56301,56605,56909,57213,57517,57821,58125,58429,58733,59037,59341,59645,59949,60253,60557,60861,61165,61469,61773,62077,62381,62685,62989,63293,63597,63901,64205,64509,64813,65117,65421,65725,66029,66333,66637,66941,67245,67549,67853,68157,68461,68765,69069,69373,69677,69981,70285,70589,70893,71197,71501,71805,72109,72413,72717,73021,73325,73629,73933,74237,74541,74845,75149,75453,75757,76061,76365,76669,76973,77277,77581'/>
+  </group>
+  <group name='61'>
+    <ids val='62,366,670,974,1278,1582,1886,2190,2494,2798,3102,3406,3710,4014,4318,4622,4926,5230,5534,5838,6142,6446,6750,7054,7358,7662,7966,8270,8574,8878,9182,9486,9790,10094,10398,10702,11006,11310,11614,11918,12222,12526,12830,13134,13438,13742,14046,14350,14654,14958,15262,15566,15870,16174,16478,16782,17086,17390,17694,17998,18302,18606,18910,19214,19518,19822,20126,20430,20734,21038,21342,21646,21950,22254,22558,22862,23166,23470,23774,24078,24382,24686,24990,25294,25598,25902,26206,26510,26814,27118,27422,27726,28030,28334,28638,28942,29246,29550,29854,30158,30462,30766,31070,31374,31678,31982,32286,32590,32894,33198,33502,33806,34110,34414,34718,35022,35326,35630,35934,36238,36542,36846,37150,37454,37758,38062,38366,38670,38974,39278,39582,39886,40190,40494,40798,41102,41406,41710,42014,42318,42622,42926,43230,43534,43838,44142,44446,44750,45054,45358,45662,45966,46270,46574,46878,47182,47486,47790,48094,48398,48702,49006,49310,49614,49918,50222,50526,50830,51134,51438,51742,52046,52350,52654,52958,53262,53566,53870,54174,54478,54782,55086,55390,55694,55998,56302,56606,56910,57214,57518,57822,58126,58430,58734,59038,59342,59646,59950,60254,60558,60862,61166,61470,61774,62078,62382,62686,62990,63294,63598,63902,64206,64510,64814,65118,65422,65726,66030,66334,66638,66942,67246,67550,67854,68158,68462,68766,69070,69374,69678,69982,70286,70590,70894,71198,71502,71806,72110,72414,72718,73022,73326,73630,73934,74238,74542,74846,75150,75454,75758,76062,76366,76670,76974,77278,77582'/>
+  </group>
+  <group name='62'>
+    <ids val='63,367,671,975,1279,1583,1887,2191,2495,2799,3103,3407,3711,4015,4319,4623,4927,5231,5535,5839,6143,6447,6751,7055,7359,7663,7967,8271,8575,8879,9183,9487,9791,10095,10399,10703,11007,11311,11615,11919,12223,12527,12831,13135,13439,13743,14047,14351,14655,14959,15263,15567,15871,16175,16479,16783,17087,17391,17695,17999,18303,18607,18911,19215,19519,19823,20127,20431,20735,21039,21343,21647,21951,22255,22559,22863,23167,23471,23775,24079,24383,24687,24991,25295,25599,25903,26207,26511,26815,27119,27423,27727,28031,28335,28639,28943,29247,29551,29855,30159,30463,30767,31071,31375,31679,31983,32287,32591,32895,33199,33503,33807,34111,34415,34719,35023,35327,35631,35935,36239,36543,36847,37151,37455,37759,38063,38367,38671,38975,39279,39583,39887,40191,40495,40799,41103,41407,41711,42015,42319,42623,42927,43231,43535,43839,44143,44447,44751,45055,45359,45663,45967,46271,46575,46879,47183,47487,47791,48095,48399,48703,49007,49311,49615,49919,50223,50527,50831,51135,51439,51743,52047,52351,52655,52959,53263,53567,53871,54175,54479,54783,55087,55391,55695,55999,56303,56607,56911,57215,57519,57823,58127,58431,58735,59039,59343,59647,59951,60255,60559,60863,61167,61471,61775,62079,62383,62687,62991,63295,63599,63903,64207,64511,64815,65119,65423,65727,66031,66335,66639,66943,67247,67551,67855,68159,68463,68767,69071,69375,69679,69983,70287,70591,70895,71199,71503,71807,72111,72415,72719,73023,73327,73631,73935,74239,74543,74847,75151,75455,75759,76063,76367,76671,76975,77279,77583'/>
+  </group>
+  <group name='63'>
+    <ids val='64,368,672,976,1280,1584,1888,2192,2496,2800,3104,3408,3712,4016,4320,4624,4928,5232,5536,5840,6144,6448,6752,7056,7360,7664,7968,8272,8576,8880,9184,9488,9792,10096,10400,10704,11008,11312,11616,11920,12224,12528,12832,13136,13440,13744,14048,14352,14656,14960,15264,15568,15872,16176,16480,16784,17088,17392,17696,18000,18304,18608,18912,19216,19520,19824,20128,20432,20736,21040,21344,21648,21952,22256,22560,22864,23168,23472,23776,24080,24384,24688,24992,25296,25600,25904,26208,26512,26816,27120,27424,27728,28032,28336,28640,28944,29248,29552,29856,30160,30464,30768,31072,31376,31680,31984,32288,32592,32896,33200,33504,33808,34112,34416,34720,35024,35328,35632,35936,36240,36544,36848,37152,37456,37760,38064,38368,38672,38976,39280,39584,39888,40192,40496,40800,41104,41408,41712,42016,42320,42624,42928,43232,43536,43840,44144,44448,44752,45056,45360,45664,45968,46272,46576,46880,47184,47488,47792,48096,48400,48704,49008,49312,49616,49920,50224,50528,50832,51136,51440,51744,52048,52352,52656,52960,53264,53568,53872,54176,54480,54784,55088,55392,55696,56000,56304,56608,56912,57216,57520,57824,58128,58432,58736,59040,59344,59648,59952,60256,60560,60864,61168,61472,61776,62080,62384,62688,62992,63296,63600,63904,64208,64512,64816,65120,65424,65728,66032,66336,66640,66944,67248,67552,67856,68160,68464,68768,69072,69376,69680,69984,70288,70592,70896,71200,71504,71808,72112,72416,72720,73024,73328,73632,73936,74240,74544,74848,75152,75456,75760,76064,76368,76672,76976,77280,77584'/>
+  </group>
+  <group name='64'>
+    <ids val='65,369,673,977,1281,1585,1889,2193,2497,2801,3105,3409,3713,4017,4321,4625,4929,5233,5537,5841,6145,6449,6753,7057,7361,7665,7969,8273,8577,8881,9185,9489,9793,10097,10401,10705,11009,11313,11617,11921,12225,12529,12833,13137,13441,13745,14049,14353,14657,14961,15265,15569,15873,16177,16481,16785,17089,17393,17697,18001,18305,18609,18913,19217,19521,19825,20129,20433,20737,21041,21345,21649,21953,22257,22561,22865,23169,23473,23777,24081,24385,24689,24993,25297,25601,25905,26209,26513,26817,27121,27425,27729,28033,28337,28641,28945,29249,29553,29857,30161,30465,30769,31073,31377,31681,31985,32289,32593,32897,33201,33505,33809,34113,34417,34721,35025,35329,35633,35937,36241,36545,36849,37153,37457,37761,38065,38369,38673,38977,39281,39585,39889,40193,40497,40801,41105,41409,41713,42017,42321,42625,42929,43233,43537,43841,44145,44449,44753,45057,45361,45665,45969,46273,46577,46881,47185,47489,47793,48097,48401,48705,49009,49313,49617,49921,50225,50529,50833,51137,51441,51745,52049,52353,52657,52961,53265,53569,53873,54177,54481,54785,55089,55393,55697,56001,56305,56609,56913,57217,57521,57825,58129,58433,58737,59041,59345,59649,59953,60257,60561,60865,61169,61473,61777,62081,62385,62689,62993,63297,63601,63905,64209,64513,64817,65121,65425,65729,66033,66337,66641,66945,67249,67553,67857,68161,68465,68769,69073,69377,69681,69985,70289,70593,70897,71201,71505,71809,72113,72417,72721,73025,73329,73633,73937,74241,74545,74849,75153,75457,75761,76065,76369,76673,76977,77281,77585'/>
+  </group>
+  <group name='65'>
+    <ids val='66,370,674,978,1282,1586,1890,2194,2498,2802,3106,3410,3714,4018,4322,4626,4930,5234,5538,5842,6146,6450,6754,7058,7362,7666,7970,8274,8578,8882,9186,9490,9794,10098,10402,10706,11010,11314,11618,11922,12226,12530,12834,13138,13442,13746,14050,14354,14658,14962,15266,15570,15874,16178,16482,16786,17090,17394,17698,18002,18306,18610,18914,19218,19522,19826,20130,20434,20738,21042,21346,21650,21954,22258,22562,22866,23170,23474,23778,24082,24386,24690,24994,25298,25602,25906,26210,26514,26818,27122,27426,27730,28034,28338,28642,28946,29250,29554,29858,30162,30466,30770,31074,31378,31682,31986,32290,32594,32898,33202,33506,33810,34114,34418,34722,35026,35330,35634,35938,36242,36546,36850,37154,37458,37762,38066,38370,38674,38978,39282,39586,39890,40194,40498,40802,41106,41410,41714,42018,42322,42626,42930,43234,43538,43842,44146,44450,44754,45058,45362,45666,45970,46274,46578,46882,47186,47490,47794,48098,48402,48706,49010,49314,49618,49922,50226,50530,50834,51138,51442,51746,52050,52354,52658,52962,53266,53570,53874,54178,54482,54786,55090,55394,55698,56002,56306,56610,56914,57218,57522,57826,58130,58434,58738,59042,59346,59650,59954,60258,60562,60866,61170,61474,61778,62082,62386,62690,62994,63298,63602,63906,64210,64514,64818,65122,65426,65730,66034,66338,66642,66946,67250,67554,67858,68162,68466,68770,69074,69378,69682,69986,70290,70594,70898,71202,71506,71810,72114,72418,72722,73026,73330,73634,73938,74242,74546,74850,75154,75458,75762,76066,76370,76674,76978,77282,77586'/>
+  </group>
+  <group name='66'>
+    <ids val='67,371,675,979,1283,1587,1891,2195,2499,2803,3107,3411,3715,4019,4323,4627,4931,5235,5539,5843,6147,6451,6755,7059,7363,7667,7971,8275,8579,8883,9187,9491,9795,10099,10403,10707,11011,11315,11619,11923,12227,12531,12835,13139,13443,13747,14051,14355,14659,14963,15267,15571,15875,16179,16483,16787,17091,17395,17699,18003,18307,18611,18915,19219,19523,19827,20131,20435,20739,21043,21347,21651,21955,22259,22563,22867,23171,23475,23779,24083,24387,24691,24995,25299,25603,25907,26211,26515,26819,27123,27427,27731,28035,28339,28643,28947,29251,29555,29859,30163,30467,30771,31075,31379,31683,31987,32291,32595,32899,33203,33507,33811,34115,34419,34723,35027,35331,35635,35939,36243,36547,36851,37155,37459,37763,38067,38371,38675,38979,39283,39587,39891,40195,40499,40803,41107,41411,41715,42019,42323,42627,42931,43235,43539,43843,44147,44451,44755,45059,45363,45667,45971,46275,46579,46883,47187,47491,47795,48099,48403,48707,49011,49315,49619,49923,50227,50531,50835,51139,51443,51747,52051,52355,52659,52963,53267,53571,53875,54179,54483,54787,55091,55395,55699,56003,56307,56611,56915,57219,57523,57827,58131,58435,58739,59043,59347,59651,59955,60259,60563,60867,61171,61475,61779,62083,62387,62691,62995,63299,63603,63907,64211,64515,64819,65123,65427,65731,66035,66339,66643,66947,67251,67555,67859,68163,68467,68771,69075,69379,69683,69987,70291,70595,70899,71203,71507,71811,72115,72419,72723,73027,73331,73635,73939,74243,74547,74851,75155,75459,75763,76067,76371,76675,76979,77283,77587'/>
+  </group>
+  <group name='67'>
+    <ids val='68,372,676,980,1284,1588,1892,2196,2500,2804,3108,3412,3716,4020,4324,4628,4932,5236,5540,5844,6148,6452,6756,7060,7364,7668,7972,8276,8580,8884,9188,9492,9796,10100,10404,10708,11012,11316,11620,11924,12228,12532,12836,13140,13444,13748,14052,14356,14660,14964,15268,15572,15876,16180,16484,16788,17092,17396,17700,18004,18308,18612,18916,19220,19524,19828,20132,20436,20740,21044,21348,21652,21956,22260,22564,22868,23172,23476,23780,24084,24388,24692,24996,25300,25604,25908,26212,26516,26820,27124,27428,27732,28036,28340,28644,28948,29252,29556,29860,30164,30468,30772,31076,31380,31684,31988,32292,32596,32900,33204,33508,33812,34116,34420,34724,35028,35332,35636,35940,36244,36548,36852,37156,37460,37764,38068,38372,38676,38980,39284,39588,39892,40196,40500,40804,41108,41412,41716,42020,42324,42628,42932,43236,43540,43844,44148,44452,44756,45060,45364,45668,45972,46276,46580,46884,47188,47492,47796,48100,48404,48708,49012,49316,49620,49924,50228,50532,50836,51140,51444,51748,52052,52356,52660,52964,53268,53572,53876,54180,54484,54788,55092,55396,55700,56004,56308,56612,56916,57220,57524,57828,58132,58436,58740,59044,59348,59652,59956,60260,60564,60868,61172,61476,61780,62084,62388,62692,62996,63300,63604,63908,64212,64516,64820,65124,65428,65732,66036,66340,66644,66948,67252,67556,67860,68164,68468,68772,69076,69380,69684,69988,70292,70596,70900,71204,71508,71812,72116,72420,72724,73028,73332,73636,73940,74244,74548,74852,75156,75460,75764,76068,76372,76676,76980,77284,77588'/>
+  </group>
+  <group name='68'>
+    <ids val='69,373,677,981,1285,1589,1893,2197,2501,2805,3109,3413,3717,4021,4325,4629,4933,5237,5541,5845,6149,6453,6757,7061,7365,7669,7973,8277,8581,8885,9189,9493,9797,10101,10405,10709,11013,11317,11621,11925,12229,12533,12837,13141,13445,13749,14053,14357,14661,14965,15269,15573,15877,16181,16485,16789,17093,17397,17701,18005,18309,18613,18917,19221,19525,19829,20133,20437,20741,21045,21349,21653,21957,22261,22565,22869,23173,23477,23781,24085,24389,24693,24997,25301,25605,25909,26213,26517,26821,27125,27429,27733,28037,28341,28645,28949,29253,29557,29861,30165,30469,30773,31077,31381,31685,31989,32293,32597,32901,33205,33509,33813,34117,34421,34725,35029,35333,35637,35941,36245,36549,36853,37157,37461,37765,38069,38373,38677,38981,39285,39589,39893,40197,40501,40805,41109,41413,41717,42021,42325,42629,42933,43237,43541,43845,44149,44453,44757,45061,45365,45669,45973,46277,46581,46885,47189,47493,47797,48101,48405,48709,49013,49317,49621,49925,50229,50533,50837,51141,51445,51749,52053,52357,52661,52965,53269,53573,53877,54181,54485,54789,55093,55397,55701,56005,56309,56613,56917,57221,57525,57829,58133,58437,58741,59045,59349,59653,59957,60261,60565,60869,61173,61477,61781,62085,62389,62693,62997,63301,63605,63909,64213,64517,64821,65125,65429,65733,66037,66341,66645,66949,67253,67557,67861,68165,68469,68773,69077,69381,69685,69989,70293,70597,70901,71205,71509,71813,72117,72421,72725,73029,73333,73637,73941,74245,74549,74853,75157,75461,75765,76069,76373,76677,76981,77285,77589'/>
+  </group>
+  <group name='69'>
+    <ids val='70,374,678,982,1286,1590,1894,2198,2502,2806,3110,3414,3718,4022,4326,4630,4934,5238,5542,5846,6150,6454,6758,7062,7366,7670,7974,8278,8582,8886,9190,9494,9798,10102,10406,10710,11014,11318,11622,11926,12230,12534,12838,13142,13446,13750,14054,14358,14662,14966,15270,15574,15878,16182,16486,16790,17094,17398,17702,18006,18310,18614,18918,19222,19526,19830,20134,20438,20742,21046,21350,21654,21958,22262,22566,22870,23174,23478,23782,24086,24390,24694,24998,25302,25606,25910,26214,26518,26822,27126,27430,27734,28038,28342,28646,28950,29254,29558,29862,30166,30470,30774,31078,31382,31686,31990,32294,32598,32902,33206,33510,33814,34118,34422,34726,35030,35334,35638,35942,36246,36550,36854,37158,37462,37766,38070,38374,38678,38982,39286,39590,39894,40198,40502,40806,41110,41414,41718,42022,42326,42630,42934,43238,43542,43846,44150,44454,44758,45062,45366,45670,45974,46278,46582,46886,47190,47494,47798,48102,48406,48710,49014,49318,49622,49926,50230,50534,50838,51142,51446,51750,52054,52358,52662,52966,53270,53574,53878,54182,54486,54790,55094,55398,55702,56006,56310,56614,56918,57222,57526,57830,58134,58438,58742,59046,59350,59654,59958,60262,60566,60870,61174,61478,61782,62086,62390,62694,62998,63302,63606,63910,64214,64518,64822,65126,65430,65734,66038,66342,66646,66950,67254,67558,67862,68166,68470,68774,69078,69382,69686,69990,70294,70598,70902,71206,71510,71814,72118,72422,72726,73030,73334,73638,73942,74246,74550,74854,75158,75462,75766,76070,76374,76678,76982,77286,77590'/>
+  </group>
+  <group name='70'>
+    <ids val='71,375,679,983,1287,1591,1895,2199,2503,2807,3111,3415,3719,4023,4327,4631,4935,5239,5543,5847,6151,6455,6759,7063,7367,7671,7975,8279,8583,8887,9191,9495,9799,10103,10407,10711,11015,11319,11623,11927,12231,12535,12839,13143,13447,13751,14055,14359,14663,14967,15271,15575,15879,16183,16487,16791,17095,17399,17703,18007,18311,18615,18919,19223,19527,19831,20135,20439,20743,21047,21351,21655,21959,22263,22567,22871,23175,23479,23783,24087,24391,24695,24999,25303,25607,25911,26215,26519,26823,27127,27431,27735,28039,28343,28647,28951,29255,29559,29863,30167,30471,30775,31079,31383,31687,31991,32295,32599,32903,33207,33511,33815,34119,34423,34727,35031,35335,35639,35943,36247,36551,36855,37159,37463,37767,38071,38375,38679,38983,39287,39591,39895,40199,40503,40807,41111,41415,41719,42023,42327,42631,42935,43239,43543,43847,44151,44455,44759,45063,45367,45671,45975,46279,46583,46887,47191,47495,47799,48103,48407,48711,49015,49319,49623,49927,50231,50535,50839,51143,51447,51751,52055,52359,52663,52967,53271,53575,53879,54183,54487,54791,55095,55399,55703,56007,56311,56615,56919,57223,57527,57831,58135,58439,58743,59047,59351,59655,59959,60263,60567,60871,61175,61479,61783,62087,62391,62695,62999,63303,63607,63911,64215,64519,64823,65127,65431,65735,66039,66343,66647,66951,67255,67559,67863,68167,68471,68775,69079,69383,69687,69991,70295,70599,70903,71207,71511,71815,72119,72423,72727,73031,73335,73639,73943,74247,74551,74855,75159,75463,75767,76071,76375,76679,76983,77287,77591'/>
+  </group>
+  <group name='71'>
+    <ids val='72,376,680,984,1288,1592,1896,2200,2504,2808,3112,3416,3720,4024,4328,4632,4936,5240,5544,5848,6152,6456,6760,7064,7368,7672,7976,8280,8584,8888,9192,9496,9800,10104,10408,10712,11016,11320,11624,11928,12232,12536,12840,13144,13448,13752,14056,14360,14664,14968,15272,15576,15880,16184,16488,16792,17096,17400,17704,18008,18312,18616,18920,19224,19528,19832,20136,20440,20744,21048,21352,21656,21960,22264,22568,22872,23176,23480,23784,24088,24392,24696,25000,25304,25608,25912,26216,26520,26824,27128,27432,27736,28040,28344,28648,28952,29256,29560,29864,30168,30472,30776,31080,31384,31688,31992,32296,32600,32904,33208,33512,33816,34120,34424,34728,35032,35336,35640,35944,36248,36552,36856,37160,37464,37768,38072,38376,38680,38984,39288,39592,39896,40200,40504,40808,41112,41416,41720,42024,42328,42632,42936,43240,43544,43848,44152,44456,44760,45064,45368,45672,45976,46280,46584,46888,47192,47496,47800,48104,48408,48712,49016,49320,49624,49928,50232,50536,50840,51144,51448,51752,52056,52360,52664,52968,53272,53576,53880,54184,54488,54792,55096,55400,55704,56008,56312,56616,56920,57224,57528,57832,58136,58440,58744,59048,59352,59656,59960,60264,60568,60872,61176,61480,61784,62088,62392,62696,63000,63304,63608,63912,64216,64520,64824,65128,65432,65736,66040,66344,66648,66952,67256,67560,67864,68168,68472,68776,69080,69384,69688,69992,70296,70600,70904,71208,71512,71816,72120,72424,72728,73032,73336,73640,73944,74248,74552,74856,75160,75464,75768,76072,76376,76680,76984,77288,77592'/>
+  </group>
+  <group name='72'>
+    <ids val='73,377,681,985,1289,1593,1897,2201,2505,2809,3113,3417,3721,4025,4329,4633,4937,5241,5545,5849,6153,6457,6761,7065,7369,7673,7977,8281,8585,8889,9193,9497,9801,10105,10409,10713,11017,11321,11625,11929,12233,12537,12841,13145,13449,13753,14057,14361,14665,14969,15273,15577,15881,16185,16489,16793,17097,17401,17705,18009,18313,18617,18921,19225,19529,19833,20137,20441,20745,21049,21353,21657,21961,22265,22569,22873,23177,23481,23785,24089,24393,24697,25001,25305,25609,25913,26217,26521,26825,27129,27433,27737,28041,28345,28649,28953,29257,29561,29865,30169,30473,30777,31081,31385,31689,31993,32297,32601,32905,33209,33513,33817,34121,34425,34729,35033,35337,35641,35945,36249,36553,36857,37161,37465,37769,38073,38377,38681,38985,39289,39593,39897,40201,40505,40809,41113,41417,41721,42025,42329,42633,42937,43241,43545,43849,44153,44457,44761,45065,45369,45673,45977,46281,46585,46889,47193,47497,47801,48105,48409,48713,49017,49321,49625,49929,50233,50537,50841,51145,51449,51753,52057,52361,52665,52969,53273,53577,53881,54185,54489,54793,55097,55401,55705,56009,56313,56617,56921,57225,57529,57833,58137,58441,58745,59049,59353,59657,59961,60265,60569,60873,61177,61481,61785,62089,62393,62697,63001,63305,63609,63913,64217,64521,64825,65129,65433,65737,66041,66345,66649,66953,67257,67561,67865,68169,68473,68777,69081,69385,69689,69993,70297,70601,70905,71209,71513,71817,72121,72425,72729,73033,73337,73641,73945,74249,74553,74857,75161,75465,75769,76073,76377,76681,76985,77289,77593'/>
+  </group>
+  <group name='73'>
+    <ids val='74,378,682,986,1290,1594,1898,2202,2506,2810,3114,3418,3722,4026,4330,4634,4938,5242,5546,5850,6154,6458,6762,7066,7370,7674,7978,8282,8586,8890,9194,9498,9802,10106,10410,10714,11018,11322,11626,11930,12234,12538,12842,13146,13450,13754,14058,14362,14666,14970,15274,15578,15882,16186,16490,16794,17098,17402,17706,18010,18314,18618,18922,19226,19530,19834,20138,20442,20746,21050,21354,21658,21962,22266,22570,22874,23178,23482,23786,24090,24394,24698,25002,25306,25610,25914,26218,26522,26826,27130,27434,27738,28042,28346,28650,28954,29258,29562,29866,30170,30474,30778,31082,31386,31690,31994,32298,32602,32906,33210,33514,33818,34122,34426,34730,35034,35338,35642,35946,36250,36554,36858,37162,37466,37770,38074,38378,38682,38986,39290,39594,39898,40202,40506,40810,41114,41418,41722,42026,42330,42634,42938,43242,43546,43850,44154,44458,44762,45066,45370,45674,45978,46282,46586,46890,47194,47498,47802,48106,48410,48714,49018,49322,49626,49930,50234,50538,50842,51146,51450,51754,52058,52362,52666,52970,53274,53578,53882,54186,54490,54794,55098,55402,55706,56010,56314,56618,56922,57226,57530,57834,58138,58442,58746,59050,59354,59658,59962,60266,60570,60874,61178,61482,61786,62090,62394,62698,63002,63306,63610,63914,64218,64522,64826,65130,65434,65738,66042,66346,66650,66954,67258,67562,67866,68170,68474,68778,69082,69386,69690,69994,70298,70602,70906,71210,71514,71818,72122,72426,72730,73034,73338,73642,73946,74250,74554,74858,75162,75466,75770,76074,76378,76682,76986,77290,77594'/>
+  </group>
+  <group name='74'>
+    <ids val='75,379,683,987,1291,1595,1899,2203,2507,2811,3115,3419,3723,4027,4331,4635,4939,5243,5547,5851,6155,6459,6763,7067,7371,7675,7979,8283,8587,8891,9195,9499,9803,10107,10411,10715,11019,11323,11627,11931,12235,12539,12843,13147,13451,13755,14059,14363,14667,14971,15275,15579,15883,16187,16491,16795,17099,17403,17707,18011,18315,18619,18923,19227,19531,19835,20139,20443,20747,21051,21355,21659,21963,22267,22571,22875,23179,23483,23787,24091,24395,24699,25003,25307,25611,25915,26219,26523,26827,27131,27435,27739,28043,28347,28651,28955,29259,29563,29867,30171,30475,30779,31083,31387,31691,31995,32299,32603,32907,33211,33515,33819,34123,34427,34731,35035,35339,35643,35947,36251,36555,36859,37163,37467,37771,38075,38379,38683,38987,39291,39595,39899,40203,40507,40811,41115,41419,41723,42027,42331,42635,42939,43243,43547,43851,44155,44459,44763,45067,45371,45675,45979,46283,46587,46891,47195,47499,47803,48107,48411,48715,49019,49323,49627,49931,50235,50539,50843,51147,51451,51755,52059,52363,52667,52971,53275,53579,53883,54187,54491,54795,55099,55403,55707,56011,56315,56619,56923,57227,57531,57835,58139,58443,58747,59051,59355,59659,59963,60267,60571,60875,61179,61483,61787,62091,62395,62699,63003,63307,63611,63915,64219,64523,64827,65131,65435,65739,66043,66347,66651,66955,67259,67563,67867,68171,68475,68779,69083,69387,69691,69995,70299,70603,70907,71211,71515,71819,72123,72427,72731,73035,73339,73643,73947,74251,74555,74859,75163,75467,75771,76075,76379,76683,76987,77291,77595'/>
+  </group>
+  <group name='75'>
+    <ids val='76,380,684,988,1292,1596,1900,2204,2508,2812,3116,3420,3724,4028,4332,4636,4940,5244,5548,5852,6156,6460,6764,7068,7372,7676,7980,8284,8588,8892,9196,9500,9804,10108,10412,10716,11020,11324,11628,11932,12236,12540,12844,13148,13452,13756,14060,14364,14668,14972,15276,15580,15884,16188,16492,16796,17100,17404,17708,18012,18316,18620,18924,19228,19532,19836,20140,20444,20748,21052,21356,21660,21964,22268,22572,22876,23180,23484,23788,24092,24396,24700,25004,25308,25612,25916,26220,26524,26828,27132,27436,27740,28044,28348,28652,28956,29260,29564,29868,30172,30476,30780,31084,31388,31692,31996,32300,32604,32908,33212,33516,33820,34124,34428,34732,35036,35340,35644,35948,36252,36556,36860,37164,37468,37772,38076,38380,38684,38988,39292,39596,39900,40204,40508,40812,41116,41420,41724,42028,42332,42636,42940,43244,43548,43852,44156,44460,44764,45068,45372,45676,45980,46284,46588,46892,47196,47500,47804,48108,48412,48716,49020,49324,49628,49932,50236,50540,50844,51148,51452,51756,52060,52364,52668,52972,53276,53580,53884,54188,54492,54796,55100,55404,55708,56012,56316,56620,56924,57228,57532,57836,58140,58444,58748,59052,59356,59660,59964,60268,60572,60876,61180,61484,61788,62092,62396,62700,63004,63308,63612,63916,64220,64524,64828,65132,65436,65740,66044,66348,66652,66956,67260,67564,67868,68172,68476,68780,69084,69388,69692,69996,70300,70604,70908,71212,71516,71820,72124,72428,72732,73036,73340,73644,73948,74252,74556,74860,75164,75468,75772,76076,76380,76684,76988,77292,77596'/>
+  </group>
+  <group name='76'>
+    <ids val='77,381,685,989,1293,1597,1901,2205,2509,2813,3117,3421,3725,4029,4333,4637,4941,5245,5549,5853,6157,6461,6765,7069,7373,7677,7981,8285,8589,8893,9197,9501,9805,10109,10413,10717,11021,11325,11629,11933,12237,12541,12845,13149,13453,13757,14061,14365,14669,14973,15277,15581,15885,16189,16493,16797,17101,17405,17709,18013,18317,18621,18925,19229,19533,19837,20141,20445,20749,21053,21357,21661,21965,22269,22573,22877,23181,23485,23789,24093,24397,24701,25005,25309,25613,25917,26221,26525,26829,27133,27437,27741,28045,28349,28653,28957,29261,29565,29869,30173,30477,30781,31085,31389,31693,31997,32301,32605,32909,33213,33517,33821,34125,34429,34733,35037,35341,35645,35949,36253,36557,36861,37165,37469,37773,38077,38381,38685,38989,39293,39597,39901,40205,40509,40813,41117,41421,41725,42029,42333,42637,42941,43245,43549,43853,44157,44461,44765,45069,45373,45677,45981,46285,46589,46893,47197,47501,47805,48109,48413,48717,49021,49325,49629,49933,50237,50541,50845,51149,51453,51757,52061,52365,52669,52973,53277,53581,53885,54189,54493,54797,55101,55405,55709,56013,56317,56621,56925,57229,57533,57837,58141,58445,58749,59053,59357,59661,59965,60269,60573,60877,61181,61485,61789,62093,62397,62701,63005,63309,63613,63917,64221,64525,64829,65133,65437,65741,66045,66349,66653,66957,67261,67565,67869,68173,68477,68781,69085,69389,69693,69997,70301,70605,70909,71213,71517,71821,72125,72429,72733,73037,73341,73645,73949,74253,74557,74861,75165,75469,75773,76077,76381,76685,76989,77293,77597'/>
+  </group>
+  <group name='77'>
+    <ids val='78,382,686,990,1294,1598,1902,2206,2510,2814,3118,3422,3726,4030,4334,4638,4942,5246,5550,5854,6158,6462,6766,7070,7374,7678,7982,8286,8590,8894,9198,9502,9806,10110,10414,10718,11022,11326,11630,11934,12238,12542,12846,13150,13454,13758,14062,14366,14670,14974,15278,15582,15886,16190,16494,16798,17102,17406,17710,18014,18318,18622,18926,19230,19534,19838,20142,20446,20750,21054,21358,21662,21966,22270,22574,22878,23182,23486,23790,24094,24398,24702,25006,25310,25614,25918,26222,26526,26830,27134,27438,27742,28046,28350,28654,28958,29262,29566,29870,30174,30478,30782,31086,31390,31694,31998,32302,32606,32910,33214,33518,33822,34126,34430,34734,35038,35342,35646,35950,36254,36558,36862,37166,37470,37774,38078,38382,38686,38990,39294,39598,39902,40206,40510,40814,41118,41422,41726,42030,42334,42638,42942,43246,43550,43854,44158,44462,44766,45070,45374,45678,45982,46286,46590,46894,47198,47502,47806,48110,48414,48718,49022,49326,49630,49934,50238,50542,50846,51150,51454,51758,52062,52366,52670,52974,53278,53582,53886,54190,54494,54798,55102,55406,55710,56014,56318,56622,56926,57230,57534,57838,58142,58446,58750,59054,59358,59662,59966,60270,60574,60878,61182,61486,61790,62094,62398,62702,63006,63310,63614,63918,64222,64526,64830,65134,65438,65742,66046,66350,66654,66958,67262,67566,67870,68174,68478,68782,69086,69390,69694,69998,70302,70606,70910,71214,71518,71822,72126,72430,72734,73038,73342,73646,73950,74254,74558,74862,75166,75470,75774,76078,76382,76686,76990,77294,77598'/>
+  </group>
+  <group name='78'>
+    <ids val='79,383,687,991,1295,1599,1903,2207,2511,2815,3119,3423,3727,4031,4335,4639,4943,5247,5551,5855,6159,6463,6767,7071,7375,7679,7983,8287,8591,8895,9199,9503,9807,10111,10415,10719,11023,11327,11631,11935,12239,12543,12847,13151,13455,13759,14063,14367,14671,14975,15279,15583,15887,16191,16495,16799,17103,17407,17711,18015,18319,18623,18927,19231,19535,19839,20143,20447,20751,21055,21359,21663,21967,22271,22575,22879,23183,23487,23791,24095,24399,24703,25007,25311,25615,25919,26223,26527,26831,27135,27439,27743,28047,28351,28655,28959,29263,29567,29871,30175,30479,30783,31087,31391,31695,31999,32303,32607,32911,33215,33519,33823,34127,34431,34735,35039,35343,35647,35951,36255,36559,36863,37167,37471,37775,38079,38383,38687,38991,39295,39599,39903,40207,40511,40815,41119,41423,41727,42031,42335,42639,42943,43247,43551,43855,44159,44463,44767,45071,45375,45679,45983,46287,46591,46895,47199,47503,47807,48111,48415,48719,49023,49327,49631,49935,50239,50543,50847,51151,51455,51759,52063,52367,52671,52975,53279,53583,53887,54191,54495,54799,55103,55407,55711,56015,56319,56623,56927,57231,57535,57839,58143,58447,58751,59055,59359,59663,59967,60271,60575,60879,61183,61487,61791,62095,62399,62703,63007,63311,63615,63919,64223,64527,64831,65135,65439,65743,66047,66351,66655,66959,67263,67567,67871,68175,68479,68783,69087,69391,69695,69999,70303,70607,70911,71215,71519,71823,72127,72431,72735,73039,73343,73647,73951,74255,74559,74863,75167,75471,75775,76079,76383,76687,76991,77295,77599'/>
+  </group>
+  <group name='79'>
+    <ids val='80,384,688,992,1296,1600,1904,2208,2512,2816,3120,3424,3728,4032,4336,4640,4944,5248,5552,5856,6160,6464,6768,7072,7376,7680,7984,8288,8592,8896,9200,9504,9808,10112,10416,10720,11024,11328,11632,11936,12240,12544,12848,13152,13456,13760,14064,14368,14672,14976,15280,15584,15888,16192,16496,16800,17104,17408,17712,18016,18320,18624,18928,19232,19536,19840,20144,20448,20752,21056,21360,21664,21968,22272,22576,22880,23184,23488,23792,24096,24400,24704,25008,25312,25616,25920,26224,26528,26832,27136,27440,27744,28048,28352,28656,28960,29264,29568,29872,30176,30480,30784,31088,31392,31696,32000,32304,32608,32912,33216,33520,33824,34128,34432,34736,35040,35344,35648,35952,36256,36560,36864,37168,37472,37776,38080,38384,38688,38992,39296,39600,39904,40208,40512,40816,41120,41424,41728,42032,42336,42640,42944,43248,43552,43856,44160,44464,44768,45072,45376,45680,45984,46288,46592,46896,47200,47504,47808,48112,48416,48720,49024,49328,49632,49936,50240,50544,50848,51152,51456,51760,52064,52368,52672,52976,53280,53584,53888,54192,54496,54800,55104,55408,55712,56016,56320,56624,56928,57232,57536,57840,58144,58448,58752,59056,59360,59664,59968,60272,60576,60880,61184,61488,61792,62096,62400,62704,63008,63312,63616,63920,64224,64528,64832,65136,65440,65744,66048,66352,66656,66960,67264,67568,67872,68176,68480,68784,69088,69392,69696,70000,70304,70608,70912,71216,71520,71824,72128,72432,72736,73040,73344,73648,73952,74256,74560,74864,75168,75472,75776,76080,76384,76688,76992,77296,77600'/>
+  </group>
+  <group name='80'>
+    <ids val='81,385,689,993,1297,1601,1905,2209,2513,2817,3121,3425,3729,4033,4337,4641,4945,5249,5553,5857,6161,6465,6769,7073,7377,7681,7985,8289,8593,8897,9201,9505,9809,10113,10417,10721,11025,11329,11633,11937,12241,12545,12849,13153,13457,13761,14065,14369,14673,14977,15281,15585,15889,16193,16497,16801,17105,17409,17713,18017,18321,18625,18929,19233,19537,19841,20145,20449,20753,21057,21361,21665,21969,22273,22577,22881,23185,23489,23793,24097,24401,24705,25009,25313,25617,25921,26225,26529,26833,27137,27441,27745,28049,28353,28657,28961,29265,29569,29873,30177,30481,30785,31089,31393,31697,32001,32305,32609,32913,33217,33521,33825,34129,34433,34737,35041,35345,35649,35953,36257,36561,36865,37169,37473,37777,38081,38385,38689,38993,39297,39601,39905,40209,40513,40817,41121,41425,41729,42033,42337,42641,42945,43249,43553,43857,44161,44465,44769,45073,45377,45681,45985,46289,46593,46897,47201,47505,47809,48113,48417,48721,49025,49329,49633,49937,50241,50545,50849,51153,51457,51761,52065,52369,52673,52977,53281,53585,53889,54193,54497,54801,55105,55409,55713,56017,56321,56625,56929,57233,57537,57841,58145,58449,58753,59057,59361,59665,59969,60273,60577,60881,61185,61489,61793,62097,62401,62705,63009,63313,63617,63921,64225,64529,64833,65137,65441,65745,66049,66353,66657,66961,67265,67569,67873,68177,68481,68785,69089,69393,69697,70001,70305,70609,70913,71217,71521,71825,72129,72433,72737,73041,73345,73649,73953,74257,74561,74865,75169,75473,75777,76081,76385,76689,76993,77297,77601'/>
+  </group>
+  <group name='81'>
+    <ids val='82,386,690,994,1298,1602,1906,2210,2514,2818,3122,3426,3730,4034,4338,4642,4946,5250,5554,5858,6162,6466,6770,7074,7378,7682,7986,8290,8594,8898,9202,9506,9810,10114,10418,10722,11026,11330,11634,11938,12242,12546,12850,13154,13458,13762,14066,14370,14674,14978,15282,15586,15890,16194,16498,16802,17106,17410,17714,18018,18322,18626,18930,19234,19538,19842,20146,20450,20754,21058,21362,21666,21970,22274,22578,22882,23186,23490,23794,24098,24402,24706,25010,25314,25618,25922,26226,26530,26834,27138,27442,27746,28050,28354,28658,28962,29266,29570,29874,30178,30482,30786,31090,31394,31698,32002,32306,32610,32914,33218,33522,33826,34130,34434,34738,35042,35346,35650,35954,36258,36562,36866,37170,37474,37778,38082,38386,38690,38994,39298,39602,39906,40210,40514,40818,41122,41426,41730,42034,42338,42642,42946,43250,43554,43858,44162,44466,44770,45074,45378,45682,45986,46290,46594,46898,47202,47506,47810,48114,48418,48722,49026,49330,49634,49938,50242,50546,50850,51154,51458,51762,52066,52370,52674,52978,53282,53586,53890,54194,54498,54802,55106,55410,55714,56018,56322,56626,56930,57234,57538,57842,58146,58450,58754,59058,59362,59666,59970,60274,60578,60882,61186,61490,61794,62098,62402,62706,63010,63314,63618,63922,64226,64530,64834,65138,65442,65746,66050,66354,66658,66962,67266,67570,67874,68178,68482,68786,69090,69394,69698,70002,70306,70610,70914,71218,71522,71826,72130,72434,72738,73042,73346,73650,73954,74258,74562,74866,75170,75474,75778,76082,76386,76690,76994,77298,77602'/>
+  </group>
+  <group name='82'>
+    <ids val='83,387,691,995,1299,1603,1907,2211,2515,2819,3123,3427,3731,4035,4339,4643,4947,5251,5555,5859,6163,6467,6771,7075,7379,7683,7987,8291,8595,8899,9203,9507,9811,10115,10419,10723,11027,11331,11635,11939,12243,12547,12851,13155,13459,13763,14067,14371,14675,14979,15283,15587,15891,16195,16499,16803,17107,17411,17715,18019,18323,18627,18931,19235,19539,19843,20147,20451,20755,21059,21363,21667,21971,22275,22579,22883,23187,23491,23795,24099,24403,24707,25011,25315,25619,25923,26227,26531,26835,27139,27443,27747,28051,28355,28659,28963,29267,29571,29875,30179,30483,30787,31091,31395,31699,32003,32307,32611,32915,33219,33523,33827,34131,34435,34739,35043,35347,35651,35955,36259,36563,36867,37171,37475,37779,38083,38387,38691,38995,39299,39603,39907,40211,40515,40819,41123,41427,41731,42035,42339,42643,42947,43251,43555,43859,44163,44467,44771,45075,45379,45683,45987,46291,46595,46899,47203,47507,47811,48115,48419,48723,49027,49331,49635,49939,50243,50547,50851,51155,51459,51763,52067,52371,52675,52979,53283,53587,53891,54195,54499,54803,55107,55411,55715,56019,56323,56627,56931,57235,57539,57843,58147,58451,58755,59059,59363,59667,59971,60275,60579,60883,61187,61491,61795,62099,62403,62707,63011,63315,63619,63923,64227,64531,64835,65139,65443,65747,66051,66355,66659,66963,67267,67571,67875,68179,68483,68787,69091,69395,69699,70003,70307,70611,70915,71219,71523,71827,72131,72435,72739,73043,73347,73651,73955,74259,74563,74867,75171,75475,75779,76083,76387,76691,76995,77299,77603'/>
+  </group>
+  <group name='83'>
+    <ids val='84,388,692,996,1300,1604,1908,2212,2516,2820,3124,3428,3732,4036,4340,4644,4948,5252,5556,5860,6164,6468,6772,7076,7380,7684,7988,8292,8596,8900,9204,9508,9812,10116,10420,10724,11028,11332,11636,11940,12244,12548,12852,13156,13460,13764,14068,14372,14676,14980,15284,15588,15892,16196,16500,16804,17108,17412,17716,18020,18324,18628,18932,19236,19540,19844,20148,20452,20756,21060,21364,21668,21972,22276,22580,22884,23188,23492,23796,24100,24404,24708,25012,25316,25620,25924,26228,26532,26836,27140,27444,27748,28052,28356,28660,28964,29268,29572,29876,30180,30484,30788,31092,31396,31700,32004,32308,32612,32916,33220,33524,33828,34132,34436,34740,35044,35348,35652,35956,36260,36564,36868,37172,37476,37780,38084,38388,38692,38996,39300,39604,39908,40212,40516,40820,41124,41428,41732,42036,42340,42644,42948,43252,43556,43860,44164,44468,44772,45076,45380,45684,45988,46292,46596,46900,47204,47508,47812,48116,48420,48724,49028,49332,49636,49940,50244,50548,50852,51156,51460,51764,52068,52372,52676,52980,53284,53588,53892,54196,54500,54804,55108,55412,55716,56020,56324,56628,56932,57236,57540,57844,58148,58452,58756,59060,59364,59668,59972,60276,60580,60884,61188,61492,61796,62100,62404,62708,63012,63316,63620,63924,64228,64532,64836,65140,65444,65748,66052,66356,66660,66964,67268,67572,67876,68180,68484,68788,69092,69396,69700,70004,70308,70612,70916,71220,71524,71828,72132,72436,72740,73044,73348,73652,73956,74260,74564,74868,75172,75476,75780,76084,76388,76692,76996,77300,77604'/>
+  </group>
+  <group name='84'>
+    <ids val='85,389,693,997,1301,1605,1909,2213,2517,2821,3125,3429,3733,4037,4341,4645,4949,5253,5557,5861,6165,6469,6773,7077,7381,7685,7989,8293,8597,8901,9205,9509,9813,10117,10421,10725,11029,11333,11637,11941,12245,12549,12853,13157,13461,13765,14069,14373,14677,14981,15285,15589,15893,16197,16501,16805,17109,17413,17717,18021,18325,18629,18933,19237,19541,19845,20149,20453,20757,21061,21365,21669,21973,22277,22581,22885,23189,23493,23797,24101,24405,24709,25013,25317,25621,25925,26229,26533,26837,27141,27445,27749,28053,28357,28661,28965,29269,29573,29877,30181,30485,30789,31093,31397,31701,32005,32309,32613,32917,33221,33525,33829,34133,34437,34741,35045,35349,35653,35957,36261,36565,36869,37173,37477,37781,38085,38389,38693,38997,39301,39605,39909,40213,40517,40821,41125,41429,41733,42037,42341,42645,42949,43253,43557,43861,44165,44469,44773,45077,45381,45685,45989,46293,46597,46901,47205,47509,47813,48117,48421,48725,49029,49333,49637,49941,50245,50549,50853,51157,51461,51765,52069,52373,52677,52981,53285,53589,53893,54197,54501,54805,55109,55413,55717,56021,56325,56629,56933,57237,57541,57845,58149,58453,58757,59061,59365,59669,59973,60277,60581,60885,61189,61493,61797,62101,62405,62709,63013,63317,63621,63925,64229,64533,64837,65141,65445,65749,66053,66357,66661,66965,67269,67573,67877,68181,68485,68789,69093,69397,69701,70005,70309,70613,70917,71221,71525,71829,72133,72437,72741,73045,73349,73653,73957,74261,74565,74869,75173,75477,75781,76085,76389,76693,76997,77301,77605'/>
+  </group>
+  <group name='85'>
+    <ids val='86,390,694,998,1302,1606,1910,2214,2518,2822,3126,3430,3734,4038,4342,4646,4950,5254,5558,5862,6166,6470,6774,7078,7382,7686,7990,8294,8598,8902,9206,9510,9814,10118,10422,10726,11030,11334,11638,11942,12246,12550,12854,13158,13462,13766,14070,14374,14678,14982,15286,15590,15894,16198,16502,16806,17110,17414,17718,18022,18326,18630,18934,19238,19542,19846,20150,20454,20758,21062,21366,21670,21974,22278,22582,22886,23190,23494,23798,24102,24406,24710,25014,25318,25622,25926,26230,26534,26838,27142,27446,27750,28054,28358,28662,28966,29270,29574,29878,30182,30486,30790,31094,31398,31702,32006,32310,32614,32918,33222,33526,33830,34134,34438,34742,35046,35350,35654,35958,36262,36566,36870,37174,37478,37782,38086,38390,38694,38998,39302,39606,39910,40214,40518,40822,41126,41430,41734,42038,42342,42646,42950,43254,43558,43862,44166,44470,44774,45078,45382,45686,45990,46294,46598,46902,47206,47510,47814,48118,48422,48726,49030,49334,49638,49942,50246,50550,50854,51158,51462,51766,52070,52374,52678,52982,53286,53590,53894,54198,54502,54806,55110,55414,55718,56022,56326,56630,56934,57238,57542,57846,58150,58454,58758,59062,59366,59670,59974,60278,60582,60886,61190,61494,61798,62102,62406,62710,63014,63318,63622,63926,64230,64534,64838,65142,65446,65750,66054,66358,66662,66966,67270,67574,67878,68182,68486,68790,69094,69398,69702,70006,70310,70614,70918,71222,71526,71830,72134,72438,72742,73046,73350,73654,73958,74262,74566,74870,75174,75478,75782,76086,76390,76694,76998,77302,77606'/>
+  </group>
+  <group name='86'>
+    <ids val='87,391,695,999,1303,1607,1911,2215,2519,2823,3127,3431,3735,4039,4343,4647,4951,5255,5559,5863,6167,6471,6775,7079,7383,7687,7991,8295,8599,8903,9207,9511,9815,10119,10423,10727,11031,11335,11639,11943,12247,12551,12855,13159,13463,13767,14071,14375,14679,14983,15287,15591,15895,16199,16503,16807,17111,17415,17719,18023,18327,18631,18935,19239,19543,19847,20151,20455,20759,21063,21367,21671,21975,22279,22583,22887,23191,23495,23799,24103,24407,24711,25015,25319,25623,25927,26231,26535,26839,27143,27447,27751,28055,28359,28663,28967,29271,29575,29879,30183,30487,30791,31095,31399,31703,32007,32311,32615,32919,33223,33527,33831,34135,34439,34743,35047,35351,35655,35959,36263,36567,36871,37175,37479,37783,38087,38391,38695,38999,39303,39607,39911,40215,40519,40823,41127,41431,41735,42039,42343,42647,42951,43255,43559,43863,44167,44471,44775,45079,45383,45687,45991,46295,46599,46903,47207,47511,47815,48119,48423,48727,49031,49335,49639,49943,50247,50551,50855,51159,51463,51767,52071,52375,52679,52983,53287,53591,53895,54199,54503,54807,55111,55415,55719,56023,56327,56631,56935,57239,57543,57847,58151,58455,58759,59063,59367,59671,59975,60279,60583,60887,61191,61495,61799,62103,62407,62711,63015,63319,63623,63927,64231,64535,64839,65143,65447,65751,66055,66359,66663,66967,67271,67575,67879,68183,68487,68791,69095,69399,69703,70007,70311,70615,70919,71223,71527,71831,72135,72439,72743,73047,73351,73655,73959,74263,74567,74871,75175,75479,75783,76087,76391,76695,76999,77303,77607'/>
+  </group>
+  <group name='87'>
+    <ids val='88,392,696,1000,1304,1608,1912,2216,2520,2824,3128,3432,3736,4040,4344,4648,4952,5256,5560,5864,6168,6472,6776,7080,7384,7688,7992,8296,8600,8904,9208,9512,9816,10120,10424,10728,11032,11336,11640,11944,12248,12552,12856,13160,13464,13768,14072,14376,14680,14984,15288,15592,15896,16200,16504,16808,17112,17416,17720,18024,18328,18632,18936,19240,19544,19848,20152,20456,20760,21064,21368,21672,21976,22280,22584,22888,23192,23496,23800,24104,24408,24712,25016,25320,25624,25928,26232,26536,26840,27144,27448,27752,28056,28360,28664,28968,29272,29576,29880,30184,30488,30792,31096,31400,31704,32008,32312,32616,32920,33224,33528,33832,34136,34440,34744,35048,35352,35656,35960,36264,36568,36872,37176,37480,37784,38088,38392,38696,39000,39304,39608,39912,40216,40520,40824,41128,41432,41736,42040,42344,42648,42952,43256,43560,43864,44168,44472,44776,45080,45384,45688,45992,46296,46600,46904,47208,47512,47816,48120,48424,48728,49032,49336,49640,49944,50248,50552,50856,51160,51464,51768,52072,52376,52680,52984,53288,53592,53896,54200,54504,54808,55112,55416,55720,56024,56328,56632,56936,57240,57544,57848,58152,58456,58760,59064,59368,59672,59976,60280,60584,60888,61192,61496,61800,62104,62408,62712,63016,63320,63624,63928,64232,64536,64840,65144,65448,65752,66056,66360,66664,66968,67272,67576,67880,68184,68488,68792,69096,69400,69704,70008,70312,70616,70920,71224,71528,71832,72136,72440,72744,73048,73352,73656,73960,74264,74568,74872,75176,75480,75784,76088,76392,76696,77000,77304,77608'/>
+  </group>
+  <group name='88'>
+    <ids val='89,393,697,1001,1305,1609,1913,2217,2521,2825,3129,3433,3737,4041,4345,4649,4953,5257,5561,5865,6169,6473,6777,7081,7385,7689,7993,8297,8601,8905,9209,9513,9817,10121,10425,10729,11033,11337,11641,11945,12249,12553,12857,13161,13465,13769,14073,14377,14681,14985,15289,15593,15897,16201,16505,16809,17113,17417,17721,18025,18329,18633,18937,19241,19545,19849,20153,20457,20761,21065,21369,21673,21977,22281,22585,22889,23193,23497,23801,24105,24409,24713,25017,25321,25625,25929,26233,26537,26841,27145,27449,27753,28057,28361,28665,28969,29273,29577,29881,30185,30489,30793,31097,31401,31705,32009,32313,32617,32921,33225,33529,33833,34137,34441,34745,35049,35353,35657,35961,36265,36569,36873,37177,37481,37785,38089,38393,38697,39001,39305,39609,39913,40217,40521,40825,41129,41433,41737,42041,42345,42649,42953,43257,43561,43865,44169,44473,44777,45081,45385,45689,45993,46297,46601,46905,47209,47513,47817,48121,48425,48729,49033,49337,49641,49945,50249,50553,50857,51161,51465,51769,52073,52377,52681,52985,53289,53593,53897,54201,54505,54809,55113,55417,55721,56025,56329,56633,56937,57241,57545,57849,58153,58457,58761,59065,59369,59673,59977,60281,60585,60889,61193,61497,61801,62105,62409,62713,63017,63321,63625,63929,64233,64537,64841,65145,65449,65753,66057,66361,66665,66969,67273,67577,67881,68185,68489,68793,69097,69401,69705,70009,70313,70617,70921,71225,71529,71833,72137,72441,72745,73049,73353,73657,73961,74265,74569,74873,75177,75481,75785,76089,76393,76697,77001,77305,77609'/>
+  </group>
+  <group name='89'>
+    <ids val='90,394,698,1002,1306,1610,1914,2218,2522,2826,3130,3434,3738,4042,4346,4650,4954,5258,5562,5866,6170,6474,6778,7082,7386,7690,7994,8298,8602,8906,9210,9514,9818,10122,10426,10730,11034,11338,11642,11946,12250,12554,12858,13162,13466,13770,14074,14378,14682,14986,15290,15594,15898,16202,16506,16810,17114,17418,17722,18026,18330,18634,18938,19242,19546,19850,20154,20458,20762,21066,21370,21674,21978,22282,22586,22890,23194,23498,23802,24106,24410,24714,25018,25322,25626,25930,26234,26538,26842,27146,27450,27754,28058,28362,28666,28970,29274,29578,29882,30186,30490,30794,31098,31402,31706,32010,32314,32618,32922,33226,33530,33834,34138,34442,34746,35050,35354,35658,35962,36266,36570,36874,37178,37482,37786,38090,38394,38698,39002,39306,39610,39914,40218,40522,40826,41130,41434,41738,42042,42346,42650,42954,43258,43562,43866,44170,44474,44778,45082,45386,45690,45994,46298,46602,46906,47210,47514,47818,48122,48426,48730,49034,49338,49642,49946,50250,50554,50858,51162,51466,51770,52074,52378,52682,52986,53290,53594,53898,54202,54506,54810,55114,55418,55722,56026,56330,56634,56938,57242,57546,57850,58154,58458,58762,59066,59370,59674,59978,60282,60586,60890,61194,61498,61802,62106,62410,62714,63018,63322,63626,63930,64234,64538,64842,65146,65450,65754,66058,66362,66666,66970,67274,67578,67882,68186,68490,68794,69098,69402,69706,70010,70314,70618,70922,71226,71530,71834,72138,72442,72746,73050,73354,73658,73962,74266,74570,74874,75178,75482,75786,76090,76394,76698,77002,77306,77610'/>
+  </group>
+  <group name='90'>
+    <ids val='91,395,699,1003,1307,1611,1915,2219,2523,2827,3131,3435,3739,4043,4347,4651,4955,5259,5563,5867,6171,6475,6779,7083,7387,7691,7995,8299,8603,8907,9211,9515,9819,10123,10427,10731,11035,11339,11643,11947,12251,12555,12859,13163,13467,13771,14075,14379,14683,14987,15291,15595,15899,16203,16507,16811,17115,17419,17723,18027,18331,18635,18939,19243,19547,19851,20155,20459,20763,21067,21371,21675,21979,22283,22587,22891,23195,23499,23803,24107,24411,24715,25019,25323,25627,25931,26235,26539,26843,27147,27451,27755,28059,28363,28667,28971,29275,29579,29883,30187,30491,30795,31099,31403,31707,32011,32315,32619,32923,33227,33531,33835,34139,34443,34747,35051,35355,35659,35963,36267,36571,36875,37179,37483,37787,38091,38395,38699,39003,39307,39611,39915,40219,40523,40827,41131,41435,41739,42043,42347,42651,42955,43259,43563,43867,44171,44475,44779,45083,45387,45691,45995,46299,46603,46907,47211,47515,47819,48123,48427,48731,49035,49339,49643,49947,50251,50555,50859,51163,51467,51771,52075,52379,52683,52987,53291,53595,53899,54203,54507,54811,55115,55419,55723,56027,56331,56635,56939,57243,57547,57851,58155,58459,58763,59067,59371,59675,59979,60283,60587,60891,61195,61499,61803,62107,62411,62715,63019,63323,63627,63931,64235,64539,64843,65147,65451,65755,66059,66363,66667,66971,67275,67579,67883,68187,68491,68795,69099,69403,69707,70011,70315,70619,70923,71227,71531,71835,72139,72443,72747,73051,73355,73659,73963,74267,74571,74875,75179,75483,75787,76091,76395,76699,77003,77307,77611'/>
+  </group>
+  <group name='91'>
+    <ids val='92,396,700,1004,1308,1612,1916,2220,2524,2828,3132,3436,3740,4044,4348,4652,4956,5260,5564,5868,6172,6476,6780,7084,7388,7692,7996,8300,8604,8908,9212,9516,9820,10124,10428,10732,11036,11340,11644,11948,12252,12556,12860,13164,13468,13772,14076,14380,14684,14988,15292,15596,15900,16204,16508,16812,17116,17420,17724,18028,18332,18636,18940,19244,19548,19852,20156,20460,20764,21068,21372,21676,21980,22284,22588,22892,23196,23500,23804,24108,24412,24716,25020,25324,25628,25932,26236,26540,26844,27148,27452,27756,28060,28364,28668,28972,29276,29580,29884,30188,30492,30796,31100,31404,31708,32012,32316,32620,32924,33228,33532,33836,34140,34444,34748,35052,35356,35660,35964,36268,36572,36876,37180,37484,37788,38092,38396,38700,39004,39308,39612,39916,40220,40524,40828,41132,41436,41740,42044,42348,42652,42956,43260,43564,43868,44172,44476,44780,45084,45388,45692,45996,46300,46604,46908,47212,47516,47820,48124,48428,48732,49036,49340,49644,49948,50252,50556,50860,51164,51468,51772,52076,52380,52684,52988,53292,53596,53900,54204,54508,54812,55116,55420,55724,56028,56332,56636,56940,57244,57548,57852,58156,58460,58764,59068,59372,59676,59980,60284,60588,60892,61196,61500,61804,62108,62412,62716,63020,63324,63628,63932,64236,64540,64844,65148,65452,65756,66060,66364,66668,66972,67276,67580,67884,68188,68492,68796,69100,69404,69708,70012,70316,70620,70924,71228,71532,71836,72140,72444,72748,73052,73356,73660,73964,74268,74572,74876,75180,75484,75788,76092,76396,76700,77004,77308,77612'/>
+  </group>
+  <group name='92'>
+    <ids val='93,397,701,1005,1309,1613,1917,2221,2525,2829,3133,3437,3741,4045,4349,4653,4957,5261,5565,5869,6173,6477,6781,7085,7389,7693,7997,8301,8605,8909,9213,9517,9821,10125,10429,10733,11037,11341,11645,11949,12253,12557,12861,13165,13469,13773,14077,14381,14685,14989,15293,15597,15901,16205,16509,16813,17117,17421,17725,18029,18333,18637,18941,19245,19549,19853,20157,20461,20765,21069,21373,21677,21981,22285,22589,22893,23197,23501,23805,24109,24413,24717,25021,25325,25629,25933,26237,26541,26845,27149,27453,27757,28061,28365,28669,28973,29277,29581,29885,30189,30493,30797,31101,31405,31709,32013,32317,32621,32925,33229,33533,33837,34141,34445,34749,35053,35357,35661,35965,36269,36573,36877,37181,37485,37789,38093,38397,38701,39005,39309,39613,39917,40221,40525,40829,41133,41437,41741,42045,42349,42653,42957,43261,43565,43869,44173,44477,44781,45085,45389,45693,45997,46301,46605,46909,47213,47517,47821,48125,48429,48733,49037,49341,49645,49949,50253,50557,50861,51165,51469,51773,52077,52381,52685,52989,53293,53597,53901,54205,54509,54813,55117,55421,55725,56029,56333,56637,56941,57245,57549,57853,58157,58461,58765,59069,59373,59677,59981,60285,60589,60893,61197,61501,61805,62109,62413,62717,63021,63325,63629,63933,64237,64541,64845,65149,65453,65757,66061,66365,66669,66973,67277,67581,67885,68189,68493,68797,69101,69405,69709,70013,70317,70621,70925,71229,71533,71837,72141,72445,72749,73053,73357,73661,73965,74269,74573,74877,75181,75485,75789,76093,76397,76701,77005,77309,77613'/>
+  </group>
+  <group name='93'>
+    <ids val='94,398,702,1006,1310,1614,1918,2222,2526,2830,3134,3438,3742,4046,4350,4654,4958,5262,5566,5870,6174,6478,6782,7086,7390,7694,7998,8302,8606,8910,9214,9518,9822,10126,10430,10734,11038,11342,11646,11950,12254,12558,12862,13166,13470,13774,14078,14382,14686,14990,15294,15598,15902,16206,16510,16814,17118,17422,17726,18030,18334,18638,18942,19246,19550,19854,20158,20462,20766,21070,21374,21678,21982,22286,22590,22894,23198,23502,23806,24110,24414,24718,25022,25326,25630,25934,26238,26542,26846,27150,27454,27758,28062,28366,28670,28974,29278,29582,29886,30190,30494,30798,31102,31406,31710,32014,32318,32622,32926,33230,33534,33838,34142,34446,34750,35054,35358,35662,35966,36270,36574,36878,37182,37486,37790,38094,38398,38702,39006,39310,39614,39918,40222,40526,40830,41134,41438,41742,42046,42350,42654,42958,43262,43566,43870,44174,44478,44782,45086,45390,45694,45998,46302,46606,46910,47214,47518,47822,48126,48430,48734,49038,49342,49646,49950,50254,50558,50862,51166,51470,51774,52078,52382,52686,52990,53294,53598,53902,54206,54510,54814,55118,55422,55726,56030,56334,56638,56942,57246,57550,57854,58158,58462,58766,59070,59374,59678,59982,60286,60590,60894,61198,61502,61806,62110,62414,62718,63022,63326,63630,63934,64238,64542,64846,65150,65454,65758,66062,66366,66670,66974,67278,67582,67886,68190,68494,68798,69102,69406,69710,70014,70318,70622,70926,71230,71534,71838,72142,72446,72750,73054,73358,73662,73966,74270,74574,74878,75182,75486,75790,76094,76398,76702,77006,77310,77614'/>
+  </group>
+  <group name='94'>
+    <ids val='95,399,703,1007,1311,1615,1919,2223,2527,2831,3135,3439,3743,4047,4351,4655,4959,5263,5567,5871,6175,6479,6783,7087,7391,7695,7999,8303,8607,8911,9215,9519,9823,10127,10431,10735,11039,11343,11647,11951,12255,12559,12863,13167,13471,13775,14079,14383,14687,14991,15295,15599,15903,16207,16511,16815,17119,17423,17727,18031,18335,18639,18943,19247,19551,19855,20159,20463,20767,21071,21375,21679,21983,22287,22591,22895,23199,23503,23807,24111,24415,24719,25023,25327,25631,25935,26239,26543,26847,27151,27455,27759,28063,28367,28671,28975,29279,29583,29887,30191,30495,30799,31103,31407,31711,32015,32319,32623,32927,33231,33535,33839,34143,34447,34751,35055,35359,35663,35967,36271,36575,36879,37183,37487,37791,38095,38399,38703,39007,39311,39615,39919,40223,40527,40831,41135,41439,41743,42047,42351,42655,42959,43263,43567,43871,44175,44479,44783,45087,45391,45695,45999,46303,46607,46911,47215,47519,47823,48127,48431,48735,49039,49343,49647,49951,50255,50559,50863,51167,51471,51775,52079,52383,52687,52991,53295,53599,53903,54207,54511,54815,55119,55423,55727,56031,56335,56639,56943,57247,57551,57855,58159,58463,58767,59071,59375,59679,59983,60287,60591,60895,61199,61503,61807,62111,62415,62719,63023,63327,63631,63935,64239,64543,64847,65151,65455,65759,66063,66367,66671,66975,67279,67583,67887,68191,68495,68799,69103,69407,69711,70015,70319,70623,70927,71231,71535,71839,72143,72447,72751,73055,73359,73663,73967,74271,74575,74879,75183,75487,75791,76095,76399,76703,77007,77311,77615'/>
+  </group>
+  <group name='95'>
+    <ids val='96,400,704,1008,1312,1616,1920,2224,2528,2832,3136,3440,3744,4048,4352,4656,4960,5264,5568,5872,6176,6480,6784,7088,7392,7696,8000,8304,8608,8912,9216,9520,9824,10128,10432,10736,11040,11344,11648,11952,12256,12560,12864,13168,13472,13776,14080,14384,14688,14992,15296,15600,15904,16208,16512,16816,17120,17424,17728,18032,18336,18640,18944,19248,19552,19856,20160,20464,20768,21072,21376,21680,21984,22288,22592,22896,23200,23504,23808,24112,24416,24720,25024,25328,25632,25936,26240,26544,26848,27152,27456,27760,28064,28368,28672,28976,29280,29584,29888,30192,30496,30800,31104,31408,31712,32016,32320,32624,32928,33232,33536,33840,34144,34448,34752,35056,35360,35664,35968,36272,36576,36880,37184,37488,37792,38096,38400,38704,39008,39312,39616,39920,40224,40528,40832,41136,41440,41744,42048,42352,42656,42960,43264,43568,43872,44176,44480,44784,45088,45392,45696,46000,46304,46608,46912,47216,47520,47824,48128,48432,48736,49040,49344,49648,49952,50256,50560,50864,51168,51472,51776,52080,52384,52688,52992,53296,53600,53904,54208,54512,54816,55120,55424,55728,56032,56336,56640,56944,57248,57552,57856,58160,58464,58768,59072,59376,59680,59984,60288,60592,60896,61200,61504,61808,62112,62416,62720,63024,63328,63632,63936,64240,64544,64848,65152,65456,65760,66064,66368,66672,66976,67280,67584,67888,68192,68496,68800,69104,69408,69712,70016,70320,70624,70928,71232,71536,71840,72144,72448,72752,73056,73360,73664,73968,74272,74576,74880,75184,75488,75792,76096,76400,76704,77008,77312,77616'/>
+  </group>
+  <group name='96'>
+    <ids val='97,401,705,1009,1313,1617,1921,2225,2529,2833,3137,3441,3745,4049,4353,4657,4961,5265,5569,5873,6177,6481,6785,7089,7393,7697,8001,8305,8609,8913,9217,9521,9825,10129,10433,10737,11041,11345,11649,11953,12257,12561,12865,13169,13473,13777,14081,14385,14689,14993,15297,15601,15905,16209,16513,16817,17121,17425,17729,18033,18337,18641,18945,19249,19553,19857,20161,20465,20769,21073,21377,21681,21985,22289,22593,22897,23201,23505,23809,24113,24417,24721,25025,25329,25633,25937,26241,26545,26849,27153,27457,27761,28065,28369,28673,28977,29281,29585,29889,30193,30497,30801,31105,31409,31713,32017,32321,32625,32929,33233,33537,33841,34145,34449,34753,35057,35361,35665,35969,36273,36577,36881,37185,37489,37793,38097,38401,38705,39009,39313,39617,39921,40225,40529,40833,41137,41441,41745,42049,42353,42657,42961,43265,43569,43873,44177,44481,44785,45089,45393,45697,46001,46305,46609,46913,47217,47521,47825,48129,48433,48737,49041,49345,49649,49953,50257,50561,50865,51169,51473,51777,52081,52385,52689,52993,53297,53601,53905,54209,54513,54817,55121,55425,55729,56033,56337,56641,56945,57249,57553,57857,58161,58465,58769,59073,59377,59681,59985,60289,60593,60897,61201,61505,61809,62113,62417,62721,63025,63329,63633,63937,64241,64545,64849,65153,65457,65761,66065,66369,66673,66977,67281,67585,67889,68193,68497,68801,69105,69409,69713,70017,70321,70625,70929,71233,71537,71841,72145,72449,72753,73057,73361,73665,73969,74273,74577,74881,75185,75489,75793,76097,76401,76705,77009,77313,77617'/>
+  </group>
+  <group name='97'>
+    <ids val='98,402,706,1010,1314,1618,1922,2226,2530,2834,3138,3442,3746,4050,4354,4658,4962,5266,5570,5874,6178,6482,6786,7090,7394,7698,8002,8306,8610,8914,9218,9522,9826,10130,10434,10738,11042,11346,11650,11954,12258,12562,12866,13170,13474,13778,14082,14386,14690,14994,15298,15602,15906,16210,16514,16818,17122,17426,17730,18034,18338,18642,18946,19250,19554,19858,20162,20466,20770,21074,21378,21682,21986,22290,22594,22898,23202,23506,23810,24114,24418,24722,25026,25330,25634,25938,26242,26546,26850,27154,27458,27762,28066,28370,28674,28978,29282,29586,29890,30194,30498,30802,31106,31410,31714,32018,32322,32626,32930,33234,33538,33842,34146,34450,34754,35058,35362,35666,35970,36274,36578,36882,37186,37490,37794,38098,38402,38706,39010,39314,39618,39922,40226,40530,40834,41138,41442,41746,42050,42354,42658,42962,43266,43570,43874,44178,44482,44786,45090,45394,45698,46002,46306,46610,46914,47218,47522,47826,48130,48434,48738,49042,49346,49650,49954,50258,50562,50866,51170,51474,51778,52082,52386,52690,52994,53298,53602,53906,54210,54514,54818,55122,55426,55730,56034,56338,56642,56946,57250,57554,57858,58162,58466,58770,59074,59378,59682,59986,60290,60594,60898,61202,61506,61810,62114,62418,62722,63026,63330,63634,63938,64242,64546,64850,65154,65458,65762,66066,66370,66674,66978,67282,67586,67890,68194,68498,68802,69106,69410,69714,70018,70322,70626,70930,71234,71538,71842,72146,72450,72754,73058,73362,73666,73970,74274,74578,74882,75186,75490,75794,76098,76402,76706,77010,77314,77618'/>
+  </group>
+  <group name='98'>
+    <ids val='99,403,707,1011,1315,1619,1923,2227,2531,2835,3139,3443,3747,4051,4355,4659,4963,5267,5571,5875,6179,6483,6787,7091,7395,7699,8003,8307,8611,8915,9219,9523,9827,10131,10435,10739,11043,11347,11651,11955,12259,12563,12867,13171,13475,13779,14083,14387,14691,14995,15299,15603,15907,16211,16515,16819,17123,17427,17731,18035,18339,18643,18947,19251,19555,19859,20163,20467,20771,21075,21379,21683,21987,22291,22595,22899,23203,23507,23811,24115,24419,24723,25027,25331,25635,25939,26243,26547,26851,27155,27459,27763,28067,28371,28675,28979,29283,29587,29891,30195,30499,30803,31107,31411,31715,32019,32323,32627,32931,33235,33539,33843,34147,34451,34755,35059,35363,35667,35971,36275,36579,36883,37187,37491,37795,38099,38403,38707,39011,39315,39619,39923,40227,40531,40835,41139,41443,41747,42051,42355,42659,42963,43267,43571,43875,44179,44483,44787,45091,45395,45699,46003,46307,46611,46915,47219,47523,47827,48131,48435,48739,49043,49347,49651,49955,50259,50563,50867,51171,51475,51779,52083,52387,52691,52995,53299,53603,53907,54211,54515,54819,55123,55427,55731,56035,56339,56643,56947,57251,57555,57859,58163,58467,58771,59075,59379,59683,59987,60291,60595,60899,61203,61507,61811,62115,62419,62723,63027,63331,63635,63939,64243,64547,64851,65155,65459,65763,66067,66371,66675,66979,67283,67587,67891,68195,68499,68803,69107,69411,69715,70019,70323,70627,70931,71235,71539,71843,72147,72451,72755,73059,73363,73667,73971,74275,74579,74883,75187,75491,75795,76099,76403,76707,77011,77315,77619'/>
+  </group>
+  <group name='99'>
+    <ids val='100,404,708,1012,1316,1620,1924,2228,2532,2836,3140,3444,3748,4052,4356,4660,4964,5268,5572,5876,6180,6484,6788,7092,7396,7700,8004,8308,8612,8916,9220,9524,9828,10132,10436,10740,11044,11348,11652,11956,12260,12564,12868,13172,13476,13780,14084,14388,14692,14996,15300,15604,15908,16212,16516,16820,17124,17428,17732,18036,18340,18644,18948,19252,19556,19860,20164,20468,20772,21076,21380,21684,21988,22292,22596,22900,23204,23508,23812,24116,24420,24724,25028,25332,25636,25940,26244,26548,26852,27156,27460,27764,28068,28372,28676,28980,29284,29588,29892,30196,30500,30804,31108,31412,31716,32020,32324,32628,32932,33236,33540,33844,34148,34452,34756,35060,35364,35668,35972,36276,36580,36884,37188,37492,37796,38100,38404,38708,39012,39316,39620,39924,40228,40532,40836,41140,41444,41748,42052,42356,42660,42964,43268,43572,43876,44180,44484,44788,45092,45396,45700,46004,46308,46612,46916,47220,47524,47828,48132,48436,48740,49044,49348,49652,49956,50260,50564,50868,51172,51476,51780,52084,52388,52692,52996,53300,53604,53908,54212,54516,54820,55124,55428,55732,56036,56340,56644,56948,57252,57556,57860,58164,58468,58772,59076,59380,59684,59988,60292,60596,60900,61204,61508,61812,62116,62420,62724,63028,63332,63636,63940,64244,64548,64852,65156,65460,65764,66068,66372,66676,66980,67284,67588,67892,68196,68500,68804,69108,69412,69716,70020,70324,70628,70932,71236,71540,71844,72148,72452,72756,73060,73364,73668,73972,74276,74580,74884,75188,75492,75796,76100,76404,76708,77012,77316,77620'/>
+  </group>
+  <group name='100'>
+    <ids val='101,405,709,1013,1317,1621,1925,2229,2533,2837,3141,3445,3749,4053,4357,4661,4965,5269,5573,5877,6181,6485,6789,7093,7397,7701,8005,8309,8613,8917,9221,9525,9829,10133,10437,10741,11045,11349,11653,11957,12261,12565,12869,13173,13477,13781,14085,14389,14693,14997,15301,15605,15909,16213,16517,16821,17125,17429,17733,18037,18341,18645,18949,19253,19557,19861,20165,20469,20773,21077,21381,21685,21989,22293,22597,22901,23205,23509,23813,24117,24421,24725,25029,25333,25637,25941,26245,26549,26853,27157,27461,27765,28069,28373,28677,28981,29285,29589,29893,30197,30501,30805,31109,31413,31717,32021,32325,32629,32933,33237,33541,33845,34149,34453,34757,35061,35365,35669,35973,36277,36581,36885,37189,37493,37797,38101,38405,38709,39013,39317,39621,39925,40229,40533,40837,41141,41445,41749,42053,42357,42661,42965,43269,43573,43877,44181,44485,44789,45093,45397,45701,46005,46309,46613,46917,47221,47525,47829,48133,48437,48741,49045,49349,49653,49957,50261,50565,50869,51173,51477,51781,52085,52389,52693,52997,53301,53605,53909,54213,54517,54821,55125,55429,55733,56037,56341,56645,56949,57253,57557,57861,58165,58469,58773,59077,59381,59685,59989,60293,60597,60901,61205,61509,61813,62117,62421,62725,63029,63333,63637,63941,64245,64549,64853,65157,65461,65765,66069,66373,66677,66981,67285,67589,67893,68197,68501,68805,69109,69413,69717,70021,70325,70629,70933,71237,71541,71845,72149,72453,72757,73061,73365,73669,73973,74277,74581,74885,75189,75493,75797,76101,76405,76709,77013,77317,77621'/>
+  </group>
+  <group name='101'>
+    <ids val='102,406,710,1014,1318,1622,1926,2230,2534,2838,3142,3446,3750,4054,4358,4662,4966,5270,5574,5878,6182,6486,6790,7094,7398,7702,8006,8310,8614,8918,9222,9526,9830,10134,10438,10742,11046,11350,11654,11958,12262,12566,12870,13174,13478,13782,14086,14390,14694,14998,15302,15606,15910,16214,16518,16822,17126,17430,17734,18038,18342,18646,18950,19254,19558,19862,20166,20470,20774,21078,21382,21686,21990,22294,22598,22902,23206,23510,23814,24118,24422,24726,25030,25334,25638,25942,26246,26550,26854,27158,27462,27766,28070,28374,28678,28982,29286,29590,29894,30198,30502,30806,31110,31414,31718,32022,32326,32630,32934,33238,33542,33846,34150,34454,34758,35062,35366,35670,35974,36278,36582,36886,37190,37494,37798,38102,38406,38710,39014,39318,39622,39926,40230,40534,40838,41142,41446,41750,42054,42358,42662,42966,43270,43574,43878,44182,44486,44790,45094,45398,45702,46006,46310,46614,46918,47222,47526,47830,48134,48438,48742,49046,49350,49654,49958,50262,50566,50870,51174,51478,51782,52086,52390,52694,52998,53302,53606,53910,54214,54518,54822,55126,55430,55734,56038,56342,56646,56950,57254,57558,57862,58166,58470,58774,59078,59382,59686,59990,60294,60598,60902,61206,61510,61814,62118,62422,62726,63030,63334,63638,63942,64246,64550,64854,65158,65462,65766,66070,66374,66678,66982,67286,67590,67894,68198,68502,68806,69110,69414,69718,70022,70326,70630,70934,71238,71542,71846,72150,72454,72758,73062,73366,73670,73974,74278,74582,74886,75190,75494,75798,76102,76406,76710,77014,77318,77622'/>
+  </group>
+  <group name='102'>
+    <ids val='103,407,711,1015,1319,1623,1927,2231,2535,2839,3143,3447,3751,4055,4359,4663,4967,5271,5575,5879,6183,6487,6791,7095,7399,7703,8007,8311,8615,8919,9223,9527,9831,10135,10439,10743,11047,11351,11655,11959,12263,12567,12871,13175,13479,13783,14087,14391,14695,14999,15303,15607,15911,16215,16519,16823,17127,17431,17735,18039,18343,18647,18951,19255,19559,19863,20167,20471,20775,21079,21383,21687,21991,22295,22599,22903,23207,23511,23815,24119,24423,24727,25031,25335,25639,25943,26247,26551,26855,27159,27463,27767,28071,28375,28679,28983,29287,29591,29895,30199,30503,30807,31111,31415,31719,32023,32327,32631,32935,33239,33543,33847,34151,34455,34759,35063,35367,35671,35975,36279,36583,36887,37191,37495,37799,38103,38407,38711,39015,39319,39623,39927,40231,40535,40839,41143,41447,41751,42055,42359,42663,42967,43271,43575,43879,44183,44487,44791,45095,45399,45703,46007,46311,46615,46919,47223,47527,47831,48135,48439,48743,49047,49351,49655,49959,50263,50567,50871,51175,51479,51783,52087,52391,52695,52999,53303,53607,53911,54215,54519,54823,55127,55431,55735,56039,56343,56647,56951,57255,57559,57863,58167,58471,58775,59079,59383,59687,59991,60295,60599,60903,61207,61511,61815,62119,62423,62727,63031,63335,63639,63943,64247,64551,64855,65159,65463,65767,66071,66375,66679,66983,67287,67591,67895,68199,68503,68807,69111,69415,69719,70023,70327,70631,70935,71239,71543,71847,72151,72455,72759,73063,73367,73671,73975,74279,74583,74887,75191,75495,75799,76103,76407,76711,77015,77319,77623'/>
+  </group>
+  <group name='103'>
+    <ids val='104,408,712,1016,1320,1624,1928,2232,2536,2840,3144,3448,3752,4056,4360,4664,4968,5272,5576,5880,6184,6488,6792,7096,7400,7704,8008,8312,8616,8920,9224,9528,9832,10136,10440,10744,11048,11352,11656,11960,12264,12568,12872,13176,13480,13784,14088,14392,14696,15000,15304,15608,15912,16216,16520,16824,17128,17432,17736,18040,18344,18648,18952,19256,19560,19864,20168,20472,20776,21080,21384,21688,21992,22296,22600,22904,23208,23512,23816,24120,24424,24728,25032,25336,25640,25944,26248,26552,26856,27160,27464,27768,28072,28376,28680,28984,29288,29592,29896,30200,30504,30808,31112,31416,31720,32024,32328,32632,32936,33240,33544,33848,34152,34456,34760,35064,35368,35672,35976,36280,36584,36888,37192,37496,37800,38104,38408,38712,39016,39320,39624,39928,40232,40536,40840,41144,41448,41752,42056,42360,42664,42968,43272,43576,43880,44184,44488,44792,45096,45400,45704,46008,46312,46616,46920,47224,47528,47832,48136,48440,48744,49048,49352,49656,49960,50264,50568,50872,51176,51480,51784,52088,52392,52696,53000,53304,53608,53912,54216,54520,54824,55128,55432,55736,56040,56344,56648,56952,57256,57560,57864,58168,58472,58776,59080,59384,59688,59992,60296,60600,60904,61208,61512,61816,62120,62424,62728,63032,63336,63640,63944,64248,64552,64856,65160,65464,65768,66072,66376,66680,66984,67288,67592,67896,68200,68504,68808,69112,69416,69720,70024,70328,70632,70936,71240,71544,71848,72152,72456,72760,73064,73368,73672,73976,74280,74584,74888,75192,75496,75800,76104,76408,76712,77016,77320,77624'/>
+  </group>
+  <group name='104'>
+    <ids val='105,409,713,1017,1321,1625,1929,2233,2537,2841,3145,3449,3753,4057,4361,4665,4969,5273,5577,5881,6185,6489,6793,7097,7401,7705,8009,8313,8617,8921,9225,9529,9833,10137,10441,10745,11049,11353,11657,11961,12265,12569,12873,13177,13481,13785,14089,14393,14697,15001,15305,15609,15913,16217,16521,16825,17129,17433,17737,18041,18345,18649,18953,19257,19561,19865,20169,20473,20777,21081,21385,21689,21993,22297,22601,22905,23209,23513,23817,24121,24425,24729,25033,25337,25641,25945,26249,26553,26857,27161,27465,27769,28073,28377,28681,28985,29289,29593,29897,30201,30505,30809,31113,31417,31721,32025,32329,32633,32937,33241,33545,33849,34153,34457,34761,35065,35369,35673,35977,36281,36585,36889,37193,37497,37801,38105,38409,38713,39017,39321,39625,39929,40233,40537,40841,41145,41449,41753,42057,42361,42665,42969,43273,43577,43881,44185,44489,44793,45097,45401,45705,46009,46313,46617,46921,47225,47529,47833,48137,48441,48745,49049,49353,49657,49961,50265,50569,50873,51177,51481,51785,52089,52393,52697,53001,53305,53609,53913,54217,54521,54825,55129,55433,55737,56041,56345,56649,56953,57257,57561,57865,58169,58473,58777,59081,59385,59689,59993,60297,60601,60905,61209,61513,61817,62121,62425,62729,63033,63337,63641,63945,64249,64553,64857,65161,65465,65769,66073,66377,66681,66985,67289,67593,67897,68201,68505,68809,69113,69417,69721,70025,70329,70633,70937,71241,71545,71849,72153,72457,72761,73065,73369,73673,73977,74281,74585,74889,75193,75497,75801,76105,76409,76713,77017,77321,77625'/>
+  </group>
+  <group name='105'>
+    <ids val='106,410,714,1018,1322,1626,1930,2234,2538,2842,3146,3450,3754,4058,4362,4666,4970,5274,5578,5882,6186,6490,6794,7098,7402,7706,8010,8314,8618,8922,9226,9530,9834,10138,10442,10746,11050,11354,11658,11962,12266,12570,12874,13178,13482,13786,14090,14394,14698,15002,15306,15610,15914,16218,16522,16826,17130,17434,17738,18042,18346,18650,18954,19258,19562,19866,20170,20474,20778,21082,21386,21690,21994,22298,22602,22906,23210,23514,23818,24122,24426,24730,25034,25338,25642,25946,26250,26554,26858,27162,27466,27770,28074,28378,28682,28986,29290,29594,29898,30202,30506,30810,31114,31418,31722,32026,32330,32634,32938,33242,33546,33850,34154,34458,34762,35066,35370,35674,35978,36282,36586,36890,37194,37498,37802,38106,38410,38714,39018,39322,39626,39930,40234,40538,40842,41146,41450,41754,42058,42362,42666,42970,43274,43578,43882,44186,44490,44794,45098,45402,45706,46010,46314,46618,46922,47226,47530,47834,48138,48442,48746,49050,49354,49658,49962,50266,50570,50874,51178,51482,51786,52090,52394,52698,53002,53306,53610,53914,54218,54522,54826,55130,55434,55738,56042,56346,56650,56954,57258,57562,57866,58170,58474,58778,59082,59386,59690,59994,60298,60602,60906,61210,61514,61818,62122,62426,62730,63034,63338,63642,63946,64250,64554,64858,65162,65466,65770,66074,66378,66682,66986,67290,67594,67898,68202,68506,68810,69114,69418,69722,70026,70330,70634,70938,71242,71546,71850,72154,72458,72762,73066,73370,73674,73978,74282,74586,74890,75194,75498,75802,76106,76410,76714,77018,77322,77626'/>
+  </group>
+  <group name='106'>
+    <ids val='107,411,715,1019,1323,1627,1931,2235,2539,2843,3147,3451,3755,4059,4363,4667,4971,5275,5579,5883,6187,6491,6795,7099,7403,7707,8011,8315,8619,8923,9227,9531,9835,10139,10443,10747,11051,11355,11659,11963,12267,12571,12875,13179,13483,13787,14091,14395,14699,15003,15307,15611,15915,16219,16523,16827,17131,17435,17739,18043,18347,18651,18955,19259,19563,19867,20171,20475,20779,21083,21387,21691,21995,22299,22603,22907,23211,23515,23819,24123,24427,24731,25035,25339,25643,25947,26251,26555,26859,27163,27467,27771,28075,28379,28683,28987,29291,29595,29899,30203,30507,30811,31115,31419,31723,32027,32331,32635,32939,33243,33547,33851,34155,34459,34763,35067,35371,35675,35979,36283,36587,36891,37195,37499,37803,38107,38411,38715,39019,39323,39627,39931,40235,40539,40843,41147,41451,41755,42059,42363,42667,42971,43275,43579,43883,44187,44491,44795,45099,45403,45707,46011,46315,46619,46923,47227,47531,47835,48139,48443,48747,49051,49355,49659,49963,50267,50571,50875,51179,51483,51787,52091,52395,52699,53003,53307,53611,53915,54219,54523,54827,55131,55435,55739,56043,56347,56651,56955,57259,57563,57867,58171,58475,58779,59083,59387,59691,59995,60299,60603,60907,61211,61515,61819,62123,62427,62731,63035,63339,63643,63947,64251,64555,64859,65163,65467,65771,66075,66379,66683,66987,67291,67595,67899,68203,68507,68811,69115,69419,69723,70027,70331,70635,70939,71243,71547,71851,72155,72459,72763,73067,73371,73675,73979,74283,74587,74891,75195,75499,75803,76107,76411,76715,77019,77323,77627'/>
+  </group>
+  <group name='107'>
+    <ids val='108,412,716,1020,1324,1628,1932,2236,2540,2844,3148,3452,3756,4060,4364,4668,4972,5276,5580,5884,6188,6492,6796,7100,7404,7708,8012,8316,8620,8924,9228,9532,9836,10140,10444,10748,11052,11356,11660,11964,12268,12572,12876,13180,13484,13788,14092,14396,14700,15004,15308,15612,15916,16220,16524,16828,17132,17436,17740,18044,18348,18652,18956,19260,19564,19868,20172,20476,20780,21084,21388,21692,21996,22300,22604,22908,23212,23516,23820,24124,24428,24732,25036,25340,25644,25948,26252,26556,26860,27164,27468,27772,28076,28380,28684,28988,29292,29596,29900,30204,30508,30812,31116,31420,31724,32028,32332,32636,32940,33244,33548,33852,34156,34460,34764,35068,35372,35676,35980,36284,36588,36892,37196,37500,37804,38108,38412,38716,39020,39324,39628,39932,40236,40540,40844,41148,41452,41756,42060,42364,42668,42972,43276,43580,43884,44188,44492,44796,45100,45404,45708,46012,46316,46620,46924,47228,47532,47836,48140,48444,48748,49052,49356,49660,49964,50268,50572,50876,51180,51484,51788,52092,52396,52700,53004,53308,53612,53916,54220,54524,54828,55132,55436,55740,56044,56348,56652,56956,57260,57564,57868,58172,58476,58780,59084,59388,59692,59996,60300,60604,60908,61212,61516,61820,62124,62428,62732,63036,63340,63644,63948,64252,64556,64860,65164,65468,65772,66076,66380,66684,66988,67292,67596,67900,68204,68508,68812,69116,69420,69724,70028,70332,70636,70940,71244,71548,71852,72156,72460,72764,73068,73372,73676,73980,74284,74588,74892,75196,75500,75804,76108,76412,76716,77020,77324,77628'/>
+  </group>
+  <group name='108'>
+    <ids val='109,413,717,1021,1325,1629,1933,2237,2541,2845,3149,3453,3757,4061,4365,4669,4973,5277,5581,5885,6189,6493,6797,7101,7405,7709,8013,8317,8621,8925,9229,9533,9837,10141,10445,10749,11053,11357,11661,11965,12269,12573,12877,13181,13485,13789,14093,14397,14701,15005,15309,15613,15917,16221,16525,16829,17133,17437,17741,18045,18349,18653,18957,19261,19565,19869,20173,20477,20781,21085,21389,21693,21997,22301,22605,22909,23213,23517,23821,24125,24429,24733,25037,25341,25645,25949,26253,26557,26861,27165,27469,27773,28077,28381,28685,28989,29293,29597,29901,30205,30509,30813,31117,31421,31725,32029,32333,32637,32941,33245,33549,33853,34157,34461,34765,35069,35373,35677,35981,36285,36589,36893,37197,37501,37805,38109,38413,38717,39021,39325,39629,39933,40237,40541,40845,41149,41453,41757,42061,42365,42669,42973,43277,43581,43885,44189,44493,44797,45101,45405,45709,46013,46317,46621,46925,47229,47533,47837,48141,48445,48749,49053,49357,49661,49965,50269,50573,50877,51181,51485,51789,52093,52397,52701,53005,53309,53613,53917,54221,54525,54829,55133,55437,55741,56045,56349,56653,56957,57261,57565,57869,58173,58477,58781,59085,59389,59693,59997,60301,60605,60909,61213,61517,61821,62125,62429,62733,63037,63341,63645,63949,64253,64557,64861,65165,65469,65773,66077,66381,66685,66989,67293,67597,67901,68205,68509,68813,69117,69421,69725,70029,70333,70637,70941,71245,71549,71853,72157,72461,72765,73069,73373,73677,73981,74285,74589,74893,75197,75501,75805,76109,76413,76717,77021,77325,77629'/>
+  </group>
+  <group name='109'>
+    <ids val='110,414,718,1022,1326,1630,1934,2238,2542,2846,3150,3454,3758,4062,4366,4670,4974,5278,5582,5886,6190,6494,6798,7102,7406,7710,8014,8318,8622,8926,9230,9534,9838,10142,10446,10750,11054,11358,11662,11966,12270,12574,12878,13182,13486,13790,14094,14398,14702,15006,15310,15614,15918,16222,16526,16830,17134,17438,17742,18046,18350,18654,18958,19262,19566,19870,20174,20478,20782,21086,21390,21694,21998,22302,22606,22910,23214,23518,23822,24126,24430,24734,25038,25342,25646,25950,26254,26558,26862,27166,27470,27774,28078,28382,28686,28990,29294,29598,29902,30206,30510,30814,31118,31422,31726,32030,32334,32638,32942,33246,33550,33854,34158,34462,34766,35070,35374,35678,35982,36286,36590,36894,37198,37502,37806,38110,38414,38718,39022,39326,39630,39934,40238,40542,40846,41150,41454,41758,42062,42366,42670,42974,43278,43582,43886,44190,44494,44798,45102,45406,45710,46014,46318,46622,46926,47230,47534,47838,48142,48446,48750,49054,49358,49662,49966,50270,50574,50878,51182,51486,51790,52094,52398,52702,53006,53310,53614,53918,54222,54526,54830,55134,55438,55742,56046,56350,56654,56958,57262,57566,57870,58174,58478,58782,59086,59390,59694,59998,60302,60606,60910,61214,61518,61822,62126,62430,62734,63038,63342,63646,63950,64254,64558,64862,65166,65470,65774,66078,66382,66686,66990,67294,67598,67902,68206,68510,68814,69118,69422,69726,70030,70334,70638,70942,71246,71550,71854,72158,72462,72766,73070,73374,73678,73982,74286,74590,74894,75198,75502,75806,76110,76414,76718,77022,77326,77630'/>
+  </group>
+  <group name='110'>
+    <ids val='111,415,719,1023,1327,1631,1935,2239,2543,2847,3151,3455,3759,4063,4367,4671,4975,5279,5583,5887,6191,6495,6799,7103,7407,7711,8015,8319,8623,8927,9231,9535,9839,10143,10447,10751,11055,11359,11663,11967,12271,12575,12879,13183,13487,13791,14095,14399,14703,15007,15311,15615,15919,16223,16527,16831,17135,17439,17743,18047,18351,18655,18959,19263,19567,19871,20175,20479,20783,21087,21391,21695,21999,22303,22607,22911,23215,23519,23823,24127,24431,24735,25039,25343,25647,25951,26255,26559,26863,27167,27471,27775,28079,28383,28687,28991,29295,29599,29903,30207,30511,30815,31119,31423,31727,32031,32335,32639,32943,33247,33551,33855,34159,34463,34767,35071,35375,35679,35983,36287,36591,36895,37199,37503,37807,38111,38415,38719,39023,39327,39631,39935,40239,40543,40847,41151,41455,41759,42063,42367,42671,42975,43279,43583,43887,44191,44495,44799,45103,45407,45711,46015,46319,46623,46927,47231,47535,47839,48143,48447,48751,49055,49359,49663,49967,50271,50575,50879,51183,51487,51791,52095,52399,52703,53007,53311,53615,53919,54223,54527,54831,55135,55439,55743,56047,56351,56655,56959,57263,57567,57871,58175,58479,58783,59087,59391,59695,59999,60303,60607,60911,61215,61519,61823,62127,62431,62735,63039,63343,63647,63951,64255,64559,64863,65167,65471,65775,66079,66383,66687,66991,67295,67599,67903,68207,68511,68815,69119,69423,69727,70031,70335,70639,70943,71247,71551,71855,72159,72463,72767,73071,73375,73679,73983,74287,74591,74895,75199,75503,75807,76111,76415,76719,77023,77327,77631'/>
+  </group>
+  <group name='111'>
+    <ids val='112,416,720,1024,1328,1632,1936,2240,2544,2848,3152,3456,3760,4064,4368,4672,4976,5280,5584,5888,6192,6496,6800,7104,7408,7712,8016,8320,8624,8928,9232,9536,9840,10144,10448,10752,11056,11360,11664,11968,12272,12576,12880,13184,13488,13792,14096,14400,14704,15008,15312,15616,15920,16224,16528,16832,17136,17440,17744,18048,18352,18656,18960,19264,19568,19872,20176,20480,20784,21088,21392,21696,22000,22304,22608,22912,23216,23520,23824,24128,24432,24736,25040,25344,25648,25952,26256,26560,26864,27168,27472,27776,28080,28384,28688,28992,29296,29600,29904,30208,30512,30816,31120,31424,31728,32032,32336,32640,32944,33248,33552,33856,34160,34464,34768,35072,35376,35680,35984,36288,36592,36896,37200,37504,37808,38112,38416,38720,39024,39328,39632,39936,40240,40544,40848,41152,41456,41760,42064,42368,42672,42976,43280,43584,43888,44192,44496,44800,45104,45408,45712,46016,46320,46624,46928,47232,47536,47840,48144,48448,48752,49056,49360,49664,49968,50272,50576,50880,51184,51488,51792,52096,52400,52704,53008,53312,53616,53920,54224,54528,54832,55136,55440,55744,56048,56352,56656,56960,57264,57568,57872,58176,58480,58784,59088,59392,59696,60000,60304,60608,60912,61216,61520,61824,62128,62432,62736,63040,63344,63648,63952,64256,64560,64864,65168,65472,65776,66080,66384,66688,66992,67296,67600,67904,68208,68512,68816,69120,69424,69728,70032,70336,70640,70944,71248,71552,71856,72160,72464,72768,73072,73376,73680,73984,74288,74592,74896,75200,75504,75808,76112,76416,76720,77024,77328,77632'/>
+  </group>
+  <group name='112'>
+    <ids val='113,417,721,1025,1329,1633,1937,2241,2545,2849,3153,3457,3761,4065,4369,4673,4977,5281,5585,5889,6193,6497,6801,7105,7409,7713,8017,8321,8625,8929,9233,9537,9841,10145,10449,10753,11057,11361,11665,11969,12273,12577,12881,13185,13489,13793,14097,14401,14705,15009,15313,15617,15921,16225,16529,16833,17137,17441,17745,18049,18353,18657,18961,19265,19569,19873,20177,20481,20785,21089,21393,21697,22001,22305,22609,22913,23217,23521,23825,24129,24433,24737,25041,25345,25649,25953,26257,26561,26865,27169,27473,27777,28081,28385,28689,28993,29297,29601,29905,30209,30513,30817,31121,31425,31729,32033,32337,32641,32945,33249,33553,33857,34161,34465,34769,35073,35377,35681,35985,36289,36593,36897,37201,37505,37809,38113,38417,38721,39025,39329,39633,39937,40241,40545,40849,41153,41457,41761,42065,42369,42673,42977,43281,43585,43889,44193,44497,44801,45105,45409,45713,46017,46321,46625,46929,47233,47537,47841,48145,48449,48753,49057,49361,49665,49969,50273,50577,50881,51185,51489,51793,52097,52401,52705,53009,53313,53617,53921,54225,54529,54833,55137,55441,55745,56049,56353,56657,56961,57265,57569,57873,58177,58481,58785,59089,59393,59697,60001,60305,60609,60913,61217,61521,61825,62129,62433,62737,63041,63345,63649,63953,64257,64561,64865,65169,65473,65777,66081,66385,66689,66993,67297,67601,67905,68209,68513,68817,69121,69425,69729,70033,70337,70641,70945,71249,71553,71857,72161,72465,72769,73073,73377,73681,73985,74289,74593,74897,75201,75505,75809,76113,76417,76721,77025,77329,77633'/>
+  </group>
+  <group name='113'>
+    <ids val='114,418,722,1026,1330,1634,1938,2242,2546,2850,3154,3458,3762,4066,4370,4674,4978,5282,5586,5890,6194,6498,6802,7106,7410,7714,8018,8322,8626,8930,9234,9538,9842,10146,10450,10754,11058,11362,11666,11970,12274,12578,12882,13186,13490,13794,14098,14402,14706,15010,15314,15618,15922,16226,16530,16834,17138,17442,17746,18050,18354,18658,18962,19266,19570,19874,20178,20482,20786,21090,21394,21698,22002,22306,22610,22914,23218,23522,23826,24130,24434,24738,25042,25346,25650,25954,26258,26562,26866,27170,27474,27778,28082,28386,28690,28994,29298,29602,29906,30210,30514,30818,31122,31426,31730,32034,32338,32642,32946,33250,33554,33858,34162,34466,34770,35074,35378,35682,35986,36290,36594,36898,37202,37506,37810,38114,38418,38722,39026,39330,39634,39938,40242,40546,40850,41154,41458,41762,42066,42370,42674,42978,43282,43586,43890,44194,44498,44802,45106,45410,45714,46018,46322,46626,46930,47234,47538,47842,48146,48450,48754,49058,49362,49666,49970,50274,50578,50882,51186,51490,51794,52098,52402,52706,53010,53314,53618,53922,54226,54530,54834,55138,55442,55746,56050,56354,56658,56962,57266,57570,57874,58178,58482,58786,59090,59394,59698,60002,60306,60610,60914,61218,61522,61826,62130,62434,62738,63042,63346,63650,63954,64258,64562,64866,65170,65474,65778,66082,66386,66690,66994,67298,67602,67906,68210,68514,68818,69122,69426,69730,70034,70338,70642,70946,71250,71554,71858,72162,72466,72770,73074,73378,73682,73986,74290,74594,74898,75202,75506,75810,76114,76418,76722,77026,77330,77634'/>
+  </group>
+  <group name='114'>
+    <ids val='115,419,723,1027,1331,1635,1939,2243,2547,2851,3155,3459,3763,4067,4371,4675,4979,5283,5587,5891,6195,6499,6803,7107,7411,7715,8019,8323,8627,8931,9235,9539,9843,10147,10451,10755,11059,11363,11667,11971,12275,12579,12883,13187,13491,13795,14099,14403,14707,15011,15315,15619,15923,16227,16531,16835,17139,17443,17747,18051,18355,18659,18963,19267,19571,19875,20179,20483,20787,21091,21395,21699,22003,22307,22611,22915,23219,23523,23827,24131,24435,24739,25043,25347,25651,25955,26259,26563,26867,27171,27475,27779,28083,28387,28691,28995,29299,29603,29907,30211,30515,30819,31123,31427,31731,32035,32339,32643,32947,33251,33555,33859,34163,34467,34771,35075,35379,35683,35987,36291,36595,36899,37203,37507,37811,38115,38419,38723,39027,39331,39635,39939,40243,40547,40851,41155,41459,41763,42067,42371,42675,42979,43283,43587,43891,44195,44499,44803,45107,45411,45715,46019,46323,46627,46931,47235,47539,47843,48147,48451,48755,49059,49363,49667,49971,50275,50579,50883,51187,51491,51795,52099,52403,52707,53011,53315,53619,53923,54227,54531,54835,55139,55443,55747,56051,56355,56659,56963,57267,57571,57875,58179,58483,58787,59091,59395,59699,60003,60307,60611,60915,61219,61523,61827,62131,62435,62739,63043,63347,63651,63955,64259,64563,64867,65171,65475,65779,66083,66387,66691,66995,67299,67603,67907,68211,68515,68819,69123,69427,69731,70035,70339,70643,70947,71251,71555,71859,72163,72467,72771,73075,73379,73683,73987,74291,74595,74899,75203,75507,75811,76115,76419,76723,77027,77331,77635'/>
+  </group>
+  <group name='115'>
+    <ids val='116,420,724,1028,1332,1636,1940,2244,2548,2852,3156,3460,3764,4068,4372,4676,4980,5284,5588,5892,6196,6500,6804,7108,7412,7716,8020,8324,8628,8932,9236,9540,9844,10148,10452,10756,11060,11364,11668,11972,12276,12580,12884,13188,13492,13796,14100,14404,14708,15012,15316,15620,15924,16228,16532,16836,17140,17444,17748,18052,18356,18660,18964,19268,19572,19876,20180,20484,20788,21092,21396,21700,22004,22308,22612,22916,23220,23524,23828,24132,24436,24740,25044,25348,25652,25956,26260,26564,26868,27172,27476,27780,28084,28388,28692,28996,29300,29604,29908,30212,30516,30820,31124,31428,31732,32036,32340,32644,32948,33252,33556,33860,34164,34468,34772,35076,35380,35684,35988,36292,36596,36900,37204,37508,37812,38116,38420,38724,39028,39332,39636,39940,40244,40548,40852,41156,41460,41764,42068,42372,42676,42980,43284,43588,43892,44196,44500,44804,45108,45412,45716,46020,46324,46628,46932,47236,47540,47844,48148,48452,48756,49060,49364,49668,49972,50276,50580,50884,51188,51492,51796,52100,52404,52708,53012,53316,53620,53924,54228,54532,54836,55140,55444,55748,56052,56356,56660,56964,57268,57572,57876,58180,58484,58788,59092,59396,59700,60004,60308,60612,60916,61220,61524,61828,62132,62436,62740,63044,63348,63652,63956,64260,64564,64868,65172,65476,65780,66084,66388,66692,66996,67300,67604,67908,68212,68516,68820,69124,69428,69732,70036,70340,70644,70948,71252,71556,71860,72164,72468,72772,73076,73380,73684,73988,74292,74596,74900,75204,75508,75812,76116,76420,76724,77028,77332,77636'/>
+  </group>
+  <group name='116'>
+    <ids val='117,421,725,1029,1333,1637,1941,2245,2549,2853,3157,3461,3765,4069,4373,4677,4981,5285,5589,5893,6197,6501,6805,7109,7413,7717,8021,8325,8629,8933,9237,9541,9845,10149,10453,10757,11061,11365,11669,11973,12277,12581,12885,13189,13493,13797,14101,14405,14709,15013,15317,15621,15925,16229,16533,16837,17141,17445,17749,18053,18357,18661,18965,19269,19573,19877,20181,20485,20789,21093,21397,21701,22005,22309,22613,22917,23221,23525,23829,24133,24437,24741,25045,25349,25653,25957,26261,26565,26869,27173,27477,27781,28085,28389,28693,28997,29301,29605,29909,30213,30517,30821,31125,31429,31733,32037,32341,32645,32949,33253,33557,33861,34165,34469,34773,35077,35381,35685,35989,36293,36597,36901,37205,37509,37813,38117,38421,38725,39029,39333,39637,39941,40245,40549,40853,41157,41461,41765,42069,42373,42677,42981,43285,43589,43893,44197,44501,44805,45109,45413,45717,46021,46325,46629,46933,47237,47541,47845,48149,48453,48757,49061,49365,49669,49973,50277,50581,50885,51189,51493,51797,52101,52405,52709,53013,53317,53621,53925,54229,54533,54837,55141,55445,55749,56053,56357,56661,56965,57269,57573,57877,58181,58485,58789,59093,59397,59701,60005,60309,60613,60917,61221,61525,61829,62133,62437,62741,63045,63349,63653,63957,64261,64565,64869,65173,65477,65781,66085,66389,66693,66997,67301,67605,67909,68213,68517,68821,69125,69429,69733,70037,70341,70645,70949,71253,71557,71861,72165,72469,72773,73077,73381,73685,73989,74293,74597,74901,75205,75509,75813,76117,76421,76725,77029,77333,77637'/>
+  </group>
+  <group name='117'>
+    <ids val='118,422,726,1030,1334,1638,1942,2246,2550,2854,3158,3462,3766,4070,4374,4678,4982,5286,5590,5894,6198,6502,6806,7110,7414,7718,8022,8326,8630,8934,9238,9542,9846,10150,10454,10758,11062,11366,11670,11974,12278,12582,12886,13190,13494,13798,14102,14406,14710,15014,15318,15622,15926,16230,16534,16838,17142,17446,17750,18054,18358,18662,18966,19270,19574,19878,20182,20486,20790,21094,21398,21702,22006,22310,22614,22918,23222,23526,23830,24134,24438,24742,25046,25350,25654,25958,26262,26566,26870,27174,27478,27782,28086,28390,28694,28998,29302,29606,29910,30214,30518,30822,31126,31430,31734,32038,32342,32646,32950,33254,33558,33862,34166,34470,34774,35078,35382,35686,35990,36294,36598,36902,37206,37510,37814,38118,38422,38726,39030,39334,39638,39942,40246,40550,40854,41158,41462,41766,42070,42374,42678,42982,43286,43590,43894,44198,44502,44806,45110,45414,45718,46022,46326,46630,46934,47238,47542,47846,48150,48454,48758,49062,49366,49670,49974,50278,50582,50886,51190,51494,51798,52102,52406,52710,53014,53318,53622,53926,54230,54534,54838,55142,55446,55750,56054,56358,56662,56966,57270,57574,57878,58182,58486,58790,59094,59398,59702,60006,60310,60614,60918,61222,61526,61830,62134,62438,62742,63046,63350,63654,63958,64262,64566,64870,65174,65478,65782,66086,66390,66694,66998,67302,67606,67910,68214,68518,68822,69126,69430,69734,70038,70342,70646,70950,71254,71558,71862,72166,72470,72774,73078,73382,73686,73990,74294,74598,74902,75206,75510,75814,76118,76422,76726,77030,77334,77638'/>
+  </group>
+  <group name='118'>
+    <ids val='119,423,727,1031,1335,1639,1943,2247,2551,2855,3159,3463,3767,4071,4375,4679,4983,5287,5591,5895,6199,6503,6807,7111,7415,7719,8023,8327,8631,8935,9239,9543,9847,10151,10455,10759,11063,11367,11671,11975,12279,12583,12887,13191,13495,13799,14103,14407,14711,15015,15319,15623,15927,16231,16535,16839,17143,17447,17751,18055,18359,18663,18967,19271,19575,19879,20183,20487,20791,21095,21399,21703,22007,22311,22615,22919,23223,23527,23831,24135,24439,24743,25047,25351,25655,25959,26263,26567,26871,27175,27479,27783,28087,28391,28695,28999,29303,29607,29911,30215,30519,30823,31127,31431,31735,32039,32343,32647,32951,33255,33559,33863,34167,34471,34775,35079,35383,35687,35991,36295,36599,36903,37207,37511,37815,38119,38423,38727,39031,39335,39639,39943,40247,40551,40855,41159,41463,41767,42071,42375,42679,42983,43287,43591,43895,44199,44503,44807,45111,45415,45719,46023,46327,46631,46935,47239,47543,47847,48151,48455,48759,49063,49367,49671,49975,50279,50583,50887,51191,51495,51799,52103,52407,52711,53015,53319,53623,53927,54231,54535,54839,55143,55447,55751,56055,56359,56663,56967,57271,57575,57879,58183,58487,58791,59095,59399,59703,60007,60311,60615,60919,61223,61527,61831,62135,62439,62743,63047,63351,63655,63959,64263,64567,64871,65175,65479,65783,66087,66391,66695,66999,67303,67607,67911,68215,68519,68823,69127,69431,69735,70039,70343,70647,70951,71255,71559,71863,72167,72471,72775,73079,73383,73687,73991,74295,74599,74903,75207,75511,75815,76119,76423,76727,77031,77335,77639'/>
+  </group>
+  <group name='119'>
+    <ids val='120,424,728,1032,1336,1640,1944,2248,2552,2856,3160,3464,3768,4072,4376,4680,4984,5288,5592,5896,6200,6504,6808,7112,7416,7720,8024,8328,8632,8936,9240,9544,9848,10152,10456,10760,11064,11368,11672,11976,12280,12584,12888,13192,13496,13800,14104,14408,14712,15016,15320,15624,15928,16232,16536,16840,17144,17448,17752,18056,18360,18664,18968,19272,19576,19880,20184,20488,20792,21096,21400,21704,22008,22312,22616,22920,23224,23528,23832,24136,24440,24744,25048,25352,25656,25960,26264,26568,26872,27176,27480,27784,28088,28392,28696,29000,29304,29608,29912,30216,30520,30824,31128,31432,31736,32040,32344,32648,32952,33256,33560,33864,34168,34472,34776,35080,35384,35688,35992,36296,36600,36904,37208,37512,37816,38120,38424,38728,39032,39336,39640,39944,40248,40552,40856,41160,41464,41768,42072,42376,42680,42984,43288,43592,43896,44200,44504,44808,45112,45416,45720,46024,46328,46632,46936,47240,47544,47848,48152,48456,48760,49064,49368,49672,49976,50280,50584,50888,51192,51496,51800,52104,52408,52712,53016,53320,53624,53928,54232,54536,54840,55144,55448,55752,56056,56360,56664,56968,57272,57576,57880,58184,58488,58792,59096,59400,59704,60008,60312,60616,60920,61224,61528,61832,62136,62440,62744,63048,63352,63656,63960,64264,64568,64872,65176,65480,65784,66088,66392,66696,67000,67304,67608,67912,68216,68520,68824,69128,69432,69736,70040,70344,70648,70952,71256,71560,71864,72168,72472,72776,73080,73384,73688,73992,74296,74600,74904,75208,75512,75816,76120,76424,76728,77032,77336,77640'/>
+  </group>
+  <group name='120'>
+    <ids val='121,425,729,1033,1337,1641,1945,2249,2553,2857,3161,3465,3769,4073,4377,4681,4985,5289,5593,5897,6201,6505,6809,7113,7417,7721,8025,8329,8633,8937,9241,9545,9849,10153,10457,10761,11065,11369,11673,11977,12281,12585,12889,13193,13497,13801,14105,14409,14713,15017,15321,15625,15929,16233,16537,16841,17145,17449,17753,18057,18361,18665,18969,19273,19577,19881,20185,20489,20793,21097,21401,21705,22009,22313,22617,22921,23225,23529,23833,24137,24441,24745,25049,25353,25657,25961,26265,26569,26873,27177,27481,27785,28089,28393,28697,29001,29305,29609,29913,30217,30521,30825,31129,31433,31737,32041,32345,32649,32953,33257,33561,33865,34169,34473,34777,35081,35385,35689,35993,36297,36601,36905,37209,37513,37817,38121,38425,38729,39033,39337,39641,39945,40249,40553,40857,41161,41465,41769,42073,42377,42681,42985,43289,43593,43897,44201,44505,44809,45113,45417,45721,46025,46329,46633,46937,47241,47545,47849,48153,48457,48761,49065,49369,49673,49977,50281,50585,50889,51193,51497,51801,52105,52409,52713,53017,53321,53625,53929,54233,54537,54841,55145,55449,55753,56057,56361,56665,56969,57273,57577,57881,58185,58489,58793,59097,59401,59705,60009,60313,60617,60921,61225,61529,61833,62137,62441,62745,63049,63353,63657,63961,64265,64569,64873,65177,65481,65785,66089,66393,66697,67001,67305,67609,67913,68217,68521,68825,69129,69433,69737,70041,70345,70649,70953,71257,71561,71865,72169,72473,72777,73081,73385,73689,73993,74297,74601,74905,75209,75513,75817,76121,76425,76729,77033,77337,77641'/>
+  </group>
+  <group name='121'>
+    <ids val='122,426,730,1034,1338,1642,1946,2250,2554,2858,3162,3466,3770,4074,4378,4682,4986,5290,5594,5898,6202,6506,6810,7114,7418,7722,8026,8330,8634,8938,9242,9546,9850,10154,10458,10762,11066,11370,11674,11978,12282,12586,12890,13194,13498,13802,14106,14410,14714,15018,15322,15626,15930,16234,16538,16842,17146,17450,17754,18058,18362,18666,18970,19274,19578,19882,20186,20490,20794,21098,21402,21706,22010,22314,22618,22922,23226,23530,23834,24138,24442,24746,25050,25354,25658,25962,26266,26570,26874,27178,27482,27786,28090,28394,28698,29002,29306,29610,29914,30218,30522,30826,31130,31434,31738,32042,32346,32650,32954,33258,33562,33866,34170,34474,34778,35082,35386,35690,35994,36298,36602,36906,37210,37514,37818,38122,38426,38730,39034,39338,39642,39946,40250,40554,40858,41162,41466,41770,42074,42378,42682,42986,43290,43594,43898,44202,44506,44810,45114,45418,45722,46026,46330,46634,46938,47242,47546,47850,48154,48458,48762,49066,49370,49674,49978,50282,50586,50890,51194,51498,51802,52106,52410,52714,53018,53322,53626,53930,54234,54538,54842,55146,55450,55754,56058,56362,56666,56970,57274,57578,57882,58186,58490,58794,59098,59402,59706,60010,60314,60618,60922,61226,61530,61834,62138,62442,62746,63050,63354,63658,63962,64266,64570,64874,65178,65482,65786,66090,66394,66698,67002,67306,67610,67914,68218,68522,68826,69130,69434,69738,70042,70346,70650,70954,71258,71562,71866,72170,72474,72778,73082,73386,73690,73994,74298,74602,74906,75210,75514,75818,76122,76426,76730,77034,77338,77642'/>
+  </group>
+  <group name='122'>
+    <ids val='123,427,731,1035,1339,1643,1947,2251,2555,2859,3163,3467,3771,4075,4379,4683,4987,5291,5595,5899,6203,6507,6811,7115,7419,7723,8027,8331,8635,8939,9243,9547,9851,10155,10459,10763,11067,11371,11675,11979,12283,12587,12891,13195,13499,13803,14107,14411,14715,15019,15323,15627,15931,16235,16539,16843,17147,17451,17755,18059,18363,18667,18971,19275,19579,19883,20187,20491,20795,21099,21403,21707,22011,22315,22619,22923,23227,23531,23835,24139,24443,24747,25051,25355,25659,25963,26267,26571,26875,27179,27483,27787,28091,28395,28699,29003,29307,29611,29915,30219,30523,30827,31131,31435,31739,32043,32347,32651,32955,33259,33563,33867,34171,34475,34779,35083,35387,35691,35995,36299,36603,36907,37211,37515,37819,38123,38427,38731,39035,39339,39643,39947,40251,40555,40859,41163,41467,41771,42075,42379,42683,42987,43291,43595,43899,44203,44507,44811,45115,45419,45723,46027,46331,46635,46939,47243,47547,47851,48155,48459,48763,49067,49371,49675,49979,50283,50587,50891,51195,51499,51803,52107,52411,52715,53019,53323,53627,53931,54235,54539,54843,55147,55451,55755,56059,56363,56667,56971,57275,57579,57883,58187,58491,58795,59099,59403,59707,60011,60315,60619,60923,61227,61531,61835,62139,62443,62747,63051,63355,63659,63963,64267,64571,64875,65179,65483,65787,66091,66395,66699,67003,67307,67611,67915,68219,68523,68827,69131,69435,69739,70043,70347,70651,70955,71259,71563,71867,72171,72475,72779,73083,73387,73691,73995,74299,74603,74907,75211,75515,75819,76123,76427,76731,77035,77339,77643'/>
+  </group>
+  <group name='123'>
+    <ids val='124,428,732,1036,1340,1644,1948,2252,2556,2860,3164,3468,3772,4076,4380,4684,4988,5292,5596,5900,6204,6508,6812,7116,7420,7724,8028,8332,8636,8940,9244,9548,9852,10156,10460,10764,11068,11372,11676,11980,12284,12588,12892,13196,13500,13804,14108,14412,14716,15020,15324,15628,15932,16236,16540,16844,17148,17452,17756,18060,18364,18668,18972,19276,19580,19884,20188,20492,20796,21100,21404,21708,22012,22316,22620,22924,23228,23532,23836,24140,24444,24748,25052,25356,25660,25964,26268,26572,26876,27180,27484,27788,28092,28396,28700,29004,29308,29612,29916,30220,30524,30828,31132,31436,31740,32044,32348,32652,32956,33260,33564,33868,34172,34476,34780,35084,35388,35692,35996,36300,36604,36908,37212,37516,37820,38124,38428,38732,39036,39340,39644,39948,40252,40556,40860,41164,41468,41772,42076,42380,42684,42988,43292,43596,43900,44204,44508,44812,45116,45420,45724,46028,46332,46636,46940,47244,47548,47852,48156,48460,48764,49068,49372,49676,49980,50284,50588,50892,51196,51500,51804,52108,52412,52716,53020,53324,53628,53932,54236,54540,54844,55148,55452,55756,56060,56364,56668,56972,57276,57580,57884,58188,58492,58796,59100,59404,59708,60012,60316,60620,60924,61228,61532,61836,62140,62444,62748,63052,63356,63660,63964,64268,64572,64876,65180,65484,65788,66092,66396,66700,67004,67308,67612,67916,68220,68524,68828,69132,69436,69740,70044,70348,70652,70956,71260,71564,71868,72172,72476,72780,73084,73388,73692,73996,74300,74604,74908,75212,75516,75820,76124,76428,76732,77036,77340,77644'/>
+  </group>
+  <group name='124'>
+    <ids val='125,429,733,1037,1341,1645,1949,2253,2557,2861,3165,3469,3773,4077,4381,4685,4989,5293,5597,5901,6205,6509,6813,7117,7421,7725,8029,8333,8637,8941,9245,9549,9853,10157,10461,10765,11069,11373,11677,11981,12285,12589,12893,13197,13501,13805,14109,14413,14717,15021,15325,15629,15933,16237,16541,16845,17149,17453,17757,18061,18365,18669,18973,19277,19581,19885,20189,20493,20797,21101,21405,21709,22013,22317,22621,22925,23229,23533,23837,24141,24445,24749,25053,25357,25661,25965,26269,26573,26877,27181,27485,27789,28093,28397,28701,29005,29309,29613,29917,30221,30525,30829,31133,31437,31741,32045,32349,32653,32957,33261,33565,33869,34173,34477,34781,35085,35389,35693,35997,36301,36605,36909,37213,37517,37821,38125,38429,38733,39037,39341,39645,39949,40253,40557,40861,41165,41469,41773,42077,42381,42685,42989,43293,43597,43901,44205,44509,44813,45117,45421,45725,46029,46333,46637,46941,47245,47549,47853,48157,48461,48765,49069,49373,49677,49981,50285,50589,50893,51197,51501,51805,52109,52413,52717,53021,53325,53629,53933,54237,54541,54845,55149,55453,55757,56061,56365,56669,56973,57277,57581,57885,58189,58493,58797,59101,59405,59709,60013,60317,60621,60925,61229,61533,61837,62141,62445,62749,63053,63357,63661,63965,64269,64573,64877,65181,65485,65789,66093,66397,66701,67005,67309,67613,67917,68221,68525,68829,69133,69437,69741,70045,70349,70653,70957,71261,71565,71869,72173,72477,72781,73085,73389,73693,73997,74301,74605,74909,75213,75517,75821,76125,76429,76733,77037,77341,77645'/>
+  </group>
+  <group name='125'>
+    <ids val='126,430,734,1038,1342,1646,1950,2254,2558,2862,3166,3470,3774,4078,4382,4686,4990,5294,5598,5902,6206,6510,6814,7118,7422,7726,8030,8334,8638,8942,9246,9550,9854,10158,10462,10766,11070,11374,11678,11982,12286,12590,12894,13198,13502,13806,14110,14414,14718,15022,15326,15630,15934,16238,16542,16846,17150,17454,17758,18062,18366,18670,18974,19278,19582,19886,20190,20494,20798,21102,21406,21710,22014,22318,22622,22926,23230,23534,23838,24142,24446,24750,25054,25358,25662,25966,26270,26574,26878,27182,27486,27790,28094,28398,28702,29006,29310,29614,29918,30222,30526,30830,31134,31438,31742,32046,32350,32654,32958,33262,33566,33870,34174,34478,34782,35086,35390,35694,35998,36302,36606,36910,37214,37518,37822,38126,38430,38734,39038,39342,39646,39950,40254,40558,40862,41166,41470,41774,42078,42382,42686,42990,43294,43598,43902,44206,44510,44814,45118,45422,45726,46030,46334,46638,46942,47246,47550,47854,48158,48462,48766,49070,49374,49678,49982,50286,50590,50894,51198,51502,51806,52110,52414,52718,53022,53326,53630,53934,54238,54542,54846,55150,55454,55758,56062,56366,56670,56974,57278,57582,57886,58190,58494,58798,59102,59406,59710,60014,60318,60622,60926,61230,61534,61838,62142,62446,62750,63054,63358,63662,63966,64270,64574,64878,65182,65486,65790,66094,66398,66702,67006,67310,67614,67918,68222,68526,68830,69134,69438,69742,70046,70350,70654,70958,71262,71566,71870,72174,72478,72782,73086,73390,73694,73998,74302,74606,74910,75214,75518,75822,76126,76430,76734,77038,77342,77646'/>
+  </group>
+  <group name='126'>
+    <ids val='127,431,735,1039,1343,1647,1951,2255,2559,2863,3167,3471,3775,4079,4383,4687,4991,5295,5599,5903,6207,6511,6815,7119,7423,7727,8031,8335,8639,8943,9247,9551,9855,10159,10463,10767,11071,11375,11679,11983,12287,12591,12895,13199,13503,13807,14111,14415,14719,15023,15327,15631,15935,16239,16543,16847,17151,17455,17759,18063,18367,18671,18975,19279,19583,19887,20191,20495,20799,21103,21407,21711,22015,22319,22623,22927,23231,23535,23839,24143,24447,24751,25055,25359,25663,25967,26271,26575,26879,27183,27487,27791,28095,28399,28703,29007,29311,29615,29919,30223,30527,30831,31135,31439,31743,32047,32351,32655,32959,33263,33567,33871,34175,34479,34783,35087,35391,35695,35999,36303,36607,36911,37215,37519,37823,38127,38431,38735,39039,39343,39647,39951,40255,40559,40863,41167,41471,41775,42079,42383,42687,42991,43295,43599,43903,44207,44511,44815,45119,45423,45727,46031,46335,46639,46943,47247,47551,47855,48159,48463,48767,49071,49375,49679,49983,50287,50591,50895,51199,51503,51807,52111,52415,52719,53023,53327,53631,53935,54239,54543,54847,55151,55455,55759,56063,56367,56671,56975,57279,57583,57887,58191,58495,58799,59103,59407,59711,60015,60319,60623,60927,61231,61535,61839,62143,62447,62751,63055,63359,63663,63967,64271,64575,64879,65183,65487,65791,66095,66399,66703,67007,67311,67615,67919,68223,68527,68831,69135,69439,69743,70047,70351,70655,70959,71263,71567,71871,72175,72479,72783,73087,73391,73695,73999,74303,74607,74911,75215,75519,75823,76127,76431,76735,77039,77343,77647'/>
+  </group>
+  <group name='127'>
+    <ids val='128,432,736,1040,1344,1648,1952,2256,2560,2864,3168,3472,3776,4080,4384,4688,4992,5296,5600,5904,6208,6512,6816,7120,7424,7728,8032,8336,8640,8944,9248,9552,9856,10160,10464,10768,11072,11376,11680,11984,12288,12592,12896,13200,13504,13808,14112,14416,14720,15024,15328,15632,15936,16240,16544,16848,17152,17456,17760,18064,18368,18672,18976,19280,19584,19888,20192,20496,20800,21104,21408,21712,22016,22320,22624,22928,23232,23536,23840,24144,24448,24752,25056,25360,25664,25968,26272,26576,26880,27184,27488,27792,28096,28400,28704,29008,29312,29616,29920,30224,30528,30832,31136,31440,31744,32048,32352,32656,32960,33264,33568,33872,34176,34480,34784,35088,35392,35696,36000,36304,36608,36912,37216,37520,37824,38128,38432,38736,39040,39344,39648,39952,40256,40560,40864,41168,41472,41776,42080,42384,42688,42992,43296,43600,43904,44208,44512,44816,45120,45424,45728,46032,46336,46640,46944,47248,47552,47856,48160,48464,48768,49072,49376,49680,49984,50288,50592,50896,51200,51504,51808,52112,52416,52720,53024,53328,53632,53936,54240,54544,54848,55152,55456,55760,56064,56368,56672,56976,57280,57584,57888,58192,58496,58800,59104,59408,59712,60016,60320,60624,60928,61232,61536,61840,62144,62448,62752,63056,63360,63664,63968,64272,64576,64880,65184,65488,65792,66096,66400,66704,67008,67312,67616,67920,68224,68528,68832,69136,69440,69744,70048,70352,70656,70960,71264,71568,71872,72176,72480,72784,73088,73392,73696,74000,74304,74608,74912,75216,75520,75824,76128,76432,76736,77040,77344,77648'/>
+  </group>
+  <group name='128'>
+    <ids val='129,433,737,1041,1345,1649,1953,2257,2561,2865,3169,3473,3777,4081,4385,4689,4993,5297,5601,5905,6209,6513,6817,7121,7425,7729,8033,8337,8641,8945,9249,9553,9857,10161,10465,10769,11073,11377,11681,11985,12289,12593,12897,13201,13505,13809,14113,14417,14721,15025,15329,15633,15937,16241,16545,16849,17153,17457,17761,18065,18369,18673,18977,19281,19585,19889,20193,20497,20801,21105,21409,21713,22017,22321,22625,22929,23233,23537,23841,24145,24449,24753,25057,25361,25665,25969,26273,26577,26881,27185,27489,27793,28097,28401,28705,29009,29313,29617,29921,30225,30529,30833,31137,31441,31745,32049,32353,32657,32961,33265,33569,33873,34177,34481,34785,35089,35393,35697,36001,36305,36609,36913,37217,37521,37825,38129,38433,38737,39041,39345,39649,39953,40257,40561,40865,41169,41473,41777,42081,42385,42689,42993,43297,43601,43905,44209,44513,44817,45121,45425,45729,46033,46337,46641,46945,47249,47553,47857,48161,48465,48769,49073,49377,49681,49985,50289,50593,50897,51201,51505,51809,52113,52417,52721,53025,53329,53633,53937,54241,54545,54849,55153,55457,55761,56065,56369,56673,56977,57281,57585,57889,58193,58497,58801,59105,59409,59713,60017,60321,60625,60929,61233,61537,61841,62145,62449,62753,63057,63361,63665,63969,64273,64577,64881,65185,65489,65793,66097,66401,66705,67009,67313,67617,67921,68225,68529,68833,69137,69441,69745,70049,70353,70657,70961,71265,71569,71873,72177,72481,72785,73089,73393,73697,74001,74305,74609,74913,75217,75521,75825,76129,76433,76737,77041,77345,77649'/>
+  </group>
+  <group name='129'>
+    <ids val='130,434,738,1042,1346,1650,1954,2258,2562,2866,3170,3474,3778,4082,4386,4690,4994,5298,5602,5906,6210,6514,6818,7122,7426,7730,8034,8338,8642,8946,9250,9554,9858,10162,10466,10770,11074,11378,11682,11986,12290,12594,12898,13202,13506,13810,14114,14418,14722,15026,15330,15634,15938,16242,16546,16850,17154,17458,17762,18066,18370,18674,18978,19282,19586,19890,20194,20498,20802,21106,21410,21714,22018,22322,22626,22930,23234,23538,23842,24146,24450,24754,25058,25362,25666,25970,26274,26578,26882,27186,27490,27794,28098,28402,28706,29010,29314,29618,29922,30226,30530,30834,31138,31442,31746,32050,32354,32658,32962,33266,33570,33874,34178,34482,34786,35090,35394,35698,36002,36306,36610,36914,37218,37522,37826,38130,38434,38738,39042,39346,39650,39954,40258,40562,40866,41170,41474,41778,42082,42386,42690,42994,43298,43602,43906,44210,44514,44818,45122,45426,45730,46034,46338,46642,46946,47250,47554,47858,48162,48466,48770,49074,49378,49682,49986,50290,50594,50898,51202,51506,51810,52114,52418,52722,53026,53330,53634,53938,54242,54546,54850,55154,55458,55762,56066,56370,56674,56978,57282,57586,57890,58194,58498,58802,59106,59410,59714,60018,60322,60626,60930,61234,61538,61842,62146,62450,62754,63058,63362,63666,63970,64274,64578,64882,65186,65490,65794,66098,66402,66706,67010,67314,67618,67922,68226,68530,68834,69138,69442,69746,70050,70354,70658,70962,71266,71570,71874,72178,72482,72786,73090,73394,73698,74002,74306,74610,74914,75218,75522,75826,76130,76434,76738,77042,77346,77650'/>
+  </group>
+  <group name='130'>
+    <ids val='131,435,739,1043,1347,1651,1955,2259,2563,2867,3171,3475,3779,4083,4387,4691,4995,5299,5603,5907,6211,6515,6819,7123,7427,7731,8035,8339,8643,8947,9251,9555,9859,10163,10467,10771,11075,11379,11683,11987,12291,12595,12899,13203,13507,13811,14115,14419,14723,15027,15331,15635,15939,16243,16547,16851,17155,17459,17763,18067,18371,18675,18979,19283,19587,19891,20195,20499,20803,21107,21411,21715,22019,22323,22627,22931,23235,23539,23843,24147,24451,24755,25059,25363,25667,25971,26275,26579,26883,27187,27491,27795,28099,28403,28707,29011,29315,29619,29923,30227,30531,30835,31139,31443,31747,32051,32355,32659,32963,33267,33571,33875,34179,34483,34787,35091,35395,35699,36003,36307,36611,36915,37219,37523,37827,38131,38435,38739,39043,39347,39651,39955,40259,40563,40867,41171,41475,41779,42083,42387,42691,42995,43299,43603,43907,44211,44515,44819,45123,45427,45731,46035,46339,46643,46947,47251,47555,47859,48163,48467,48771,49075,49379,49683,49987,50291,50595,50899,51203,51507,51811,52115,52419,52723,53027,53331,53635,53939,54243,54547,54851,55155,55459,55763,56067,56371,56675,56979,57283,57587,57891,58195,58499,58803,59107,59411,59715,60019,60323,60627,60931,61235,61539,61843,62147,62451,62755,63059,63363,63667,63971,64275,64579,64883,65187,65491,65795,66099,66403,66707,67011,67315,67619,67923,68227,68531,68835,69139,69443,69747,70051,70355,70659,70963,71267,71571,71875,72179,72483,72787,73091,73395,73699,74003,74307,74611,74915,75219,75523,75827,76131,76435,76739,77043,77347,77651'/>
+  </group>
+  <group name='131'>
+    <ids val='132,436,740,1044,1348,1652,1956,2260,2564,2868,3172,3476,3780,4084,4388,4692,4996,5300,5604,5908,6212,6516,6820,7124,7428,7732,8036,8340,8644,8948,9252,9556,9860,10164,10468,10772,11076,11380,11684,11988,12292,12596,12900,13204,13508,13812,14116,14420,14724,15028,15332,15636,15940,16244,16548,16852,17156,17460,17764,18068,18372,18676,18980,19284,19588,19892,20196,20500,20804,21108,21412,21716,22020,22324,22628,22932,23236,23540,23844,24148,24452,24756,25060,25364,25668,25972,26276,26580,26884,27188,27492,27796,28100,28404,28708,29012,29316,29620,29924,30228,30532,30836,31140,31444,31748,32052,32356,32660,32964,33268,33572,33876,34180,34484,34788,35092,35396,35700,36004,36308,36612,36916,37220,37524,37828,38132,38436,38740,39044,39348,39652,39956,40260,40564,40868,41172,41476,41780,42084,42388,42692,42996,43300,43604,43908,44212,44516,44820,45124,45428,45732,46036,46340,46644,46948,47252,47556,47860,48164,48468,48772,49076,49380,49684,49988,50292,50596,50900,51204,51508,51812,52116,52420,52724,53028,53332,53636,53940,54244,54548,54852,55156,55460,55764,56068,56372,56676,56980,57284,57588,57892,58196,58500,58804,59108,59412,59716,60020,60324,60628,60932,61236,61540,61844,62148,62452,62756,63060,63364,63668,63972,64276,64580,64884,65188,65492,65796,66100,66404,66708,67012,67316,67620,67924,68228,68532,68836,69140,69444,69748,70052,70356,70660,70964,71268,71572,71876,72180,72484,72788,73092,73396,73700,74004,74308,74612,74916,75220,75524,75828,76132,76436,76740,77044,77348,77652'/>
+  </group>
+  <group name='132'>
+    <ids val='133,437,741,1045,1349,1653,1957,2261,2565,2869,3173,3477,3781,4085,4389,4693,4997,5301,5605,5909,6213,6517,6821,7125,7429,7733,8037,8341,8645,8949,9253,9557,9861,10165,10469,10773,11077,11381,11685,11989,12293,12597,12901,13205,13509,13813,14117,14421,14725,15029,15333,15637,15941,16245,16549,16853,17157,17461,17765,18069,18373,18677,18981,19285,19589,19893,20197,20501,20805,21109,21413,21717,22021,22325,22629,22933,23237,23541,23845,24149,24453,24757,25061,25365,25669,25973,26277,26581,26885,27189,27493,27797,28101,28405,28709,29013,29317,29621,29925,30229,30533,30837,31141,31445,31749,32053,32357,32661,32965,33269,33573,33877,34181,34485,34789,35093,35397,35701,36005,36309,36613,36917,37221,37525,37829,38133,38437,38741,39045,39349,39653,39957,40261,40565,40869,41173,41477,41781,42085,42389,42693,42997,43301,43605,43909,44213,44517,44821,45125,45429,45733,46037,46341,46645,46949,47253,47557,47861,48165,48469,48773,49077,49381,49685,49989,50293,50597,50901,51205,51509,51813,52117,52421,52725,53029,53333,53637,53941,54245,54549,54853,55157,55461,55765,56069,56373,56677,56981,57285,57589,57893,58197,58501,58805,59109,59413,59717,60021,60325,60629,60933,61237,61541,61845,62149,62453,62757,63061,63365,63669,63973,64277,64581,64885,65189,65493,65797,66101,66405,66709,67013,67317,67621,67925,68229,68533,68837,69141,69445,69749,70053,70357,70661,70965,71269,71573,71877,72181,72485,72789,73093,73397,73701,74005,74309,74613,74917,75221,75525,75829,76133,76437,76741,77045,77349,77653'/>
+  </group>
+  <group name='133'>
+    <ids val='134,438,742,1046,1350,1654,1958,2262,2566,2870,3174,3478,3782,4086,4390,4694,4998,5302,5606,5910,6214,6518,6822,7126,7430,7734,8038,8342,8646,8950,9254,9558,9862,10166,10470,10774,11078,11382,11686,11990,12294,12598,12902,13206,13510,13814,14118,14422,14726,15030,15334,15638,15942,16246,16550,16854,17158,17462,17766,18070,18374,18678,18982,19286,19590,19894,20198,20502,20806,21110,21414,21718,22022,22326,22630,22934,23238,23542,23846,24150,24454,24758,25062,25366,25670,25974,26278,26582,26886,27190,27494,27798,28102,28406,28710,29014,29318,29622,29926,30230,30534,30838,31142,31446,31750,32054,32358,32662,32966,33270,33574,33878,34182,34486,34790,35094,35398,35702,36006,36310,36614,36918,37222,37526,37830,38134,38438,38742,39046,39350,39654,39958,40262,40566,40870,41174,41478,41782,42086,42390,42694,42998,43302,43606,43910,44214,44518,44822,45126,45430,45734,46038,46342,46646,46950,47254,47558,47862,48166,48470,48774,49078,49382,49686,49990,50294,50598,50902,51206,51510,51814,52118,52422,52726,53030,53334,53638,53942,54246,54550,54854,55158,55462,55766,56070,56374,56678,56982,57286,57590,57894,58198,58502,58806,59110,59414,59718,60022,60326,60630,60934,61238,61542,61846,62150,62454,62758,63062,63366,63670,63974,64278,64582,64886,65190,65494,65798,66102,66406,66710,67014,67318,67622,67926,68230,68534,68838,69142,69446,69750,70054,70358,70662,70966,71270,71574,71878,72182,72486,72790,73094,73398,73702,74006,74310,74614,74918,75222,75526,75830,76134,76438,76742,77046,77350,77654'/>
+  </group>
+  <group name='134'>
+    <ids val='135,439,743,1047,1351,1655,1959,2263,2567,2871,3175,3479,3783,4087,4391,4695,4999,5303,5607,5911,6215,6519,6823,7127,7431,7735,8039,8343,8647,8951,9255,9559,9863,10167,10471,10775,11079,11383,11687,11991,12295,12599,12903,13207,13511,13815,14119,14423,14727,15031,15335,15639,15943,16247,16551,16855,17159,17463,17767,18071,18375,18679,18983,19287,19591,19895,20199,20503,20807,21111,21415,21719,22023,22327,22631,22935,23239,23543,23847,24151,24455,24759,25063,25367,25671,25975,26279,26583,26887,27191,27495,27799,28103,28407,28711,29015,29319,29623,29927,30231,30535,30839,31143,31447,31751,32055,32359,32663,32967,33271,33575,33879,34183,34487,34791,35095,35399,35703,36007,36311,36615,36919,37223,37527,37831,38135,38439,38743,39047,39351,39655,39959,40263,40567,40871,41175,41479,41783,42087,42391,42695,42999,43303,43607,43911,44215,44519,44823,45127,45431,45735,46039,46343,46647,46951,47255,47559,47863,48167,48471,48775,49079,49383,49687,49991,50295,50599,50903,51207,51511,51815,52119,52423,52727,53031,53335,53639,53943,54247,54551,54855,55159,55463,55767,56071,56375,56679,56983,57287,57591,57895,58199,58503,58807,59111,59415,59719,60023,60327,60631,60935,61239,61543,61847,62151,62455,62759,63063,63367,63671,63975,64279,64583,64887,65191,65495,65799,66103,66407,66711,67015,67319,67623,67927,68231,68535,68839,69143,69447,69751,70055,70359,70663,70967,71271,71575,71879,72183,72487,72791,73095,73399,73703,74007,74311,74615,74919,75223,75527,75831,76135,76439,76743,77047,77351,77655'/>
+  </group>
+  <group name='135'>
+    <ids val='136,440,744,1048,1352,1656,1960,2264,2568,2872,3176,3480,3784,4088,4392,4696,5000,5304,5608,5912,6216,6520,6824,7128,7432,7736,8040,8344,8648,8952,9256,9560,9864,10168,10472,10776,11080,11384,11688,11992,12296,12600,12904,13208,13512,13816,14120,14424,14728,15032,15336,15640,15944,16248,16552,16856,17160,17464,17768,18072,18376,18680,18984,19288,19592,19896,20200,20504,20808,21112,21416,21720,22024,22328,22632,22936,23240,23544,23848,24152,24456,24760,25064,25368,25672,25976,26280,26584,26888,27192,27496,27800,28104,28408,28712,29016,29320,29624,29928,30232,30536,30840,31144,31448,31752,32056,32360,32664,32968,33272,33576,33880,34184,34488,34792,35096,35400,35704,36008,36312,36616,36920,37224,37528,37832,38136,38440,38744,39048,39352,39656,39960,40264,40568,40872,41176,41480,41784,42088,42392,42696,43000,43304,43608,43912,44216,44520,44824,45128,45432,45736,46040,46344,46648,46952,47256,47560,47864,48168,48472,48776,49080,49384,49688,49992,50296,50600,50904,51208,51512,51816,52120,52424,52728,53032,53336,53640,53944,54248,54552,54856,55160,55464,55768,56072,56376,56680,56984,57288,57592,57896,58200,58504,58808,59112,59416,59720,60024,60328,60632,60936,61240,61544,61848,62152,62456,62760,63064,63368,63672,63976,64280,64584,64888,65192,65496,65800,66104,66408,66712,67016,67320,67624,67928,68232,68536,68840,69144,69448,69752,70056,70360,70664,70968,71272,71576,71880,72184,72488,72792,73096,73400,73704,74008,74312,74616,74920,75224,75528,75832,76136,76440,76744,77048,77352,77656'/>
+  </group>
+  <group name='136'>
+    <ids val='137,441,745,1049,1353,1657,1961,2265,2569,2873,3177,3481,3785,4089,4393,4697,5001,5305,5609,5913,6217,6521,6825,7129,7433,7737,8041,8345,8649,8953,9257,9561,9865,10169,10473,10777,11081,11385,11689,11993,12297,12601,12905,13209,13513,13817,14121,14425,14729,15033,15337,15641,15945,16249,16553,16857,17161,17465,17769,18073,18377,18681,18985,19289,19593,19897,20201,20505,20809,21113,21417,21721,22025,22329,22633,22937,23241,23545,23849,24153,24457,24761,25065,25369,25673,25977,26281,26585,26889,27193,27497,27801,28105,28409,28713,29017,29321,29625,29929,30233,30537,30841,31145,31449,31753,32057,32361,32665,32969,33273,33577,33881,34185,34489,34793,35097,35401,35705,36009,36313,36617,36921,37225,37529,37833,38137,38441,38745,39049,39353,39657,39961,40265,40569,40873,41177,41481,41785,42089,42393,42697,43001,43305,43609,43913,44217,44521,44825,45129,45433,45737,46041,46345,46649,46953,47257,47561,47865,48169,48473,48777,49081,49385,49689,49993,50297,50601,50905,51209,51513,51817,52121,52425,52729,53033,53337,53641,53945,54249,54553,54857,55161,55465,55769,56073,56377,56681,56985,57289,57593,57897,58201,58505,58809,59113,59417,59721,60025,60329,60633,60937,61241,61545,61849,62153,62457,62761,63065,63369,63673,63977,64281,64585,64889,65193,65497,65801,66105,66409,66713,67017,67321,67625,67929,68233,68537,68841,69145,69449,69753,70057,70361,70665,70969,71273,71577,71881,72185,72489,72793,73097,73401,73705,74009,74313,74617,74921,75225,75529,75833,76137,76441,76745,77049,77353,77657'/>
+  </group>
+  <group name='137'>
+    <ids val='138,442,746,1050,1354,1658,1962,2266,2570,2874,3178,3482,3786,4090,4394,4698,5002,5306,5610,5914,6218,6522,6826,7130,7434,7738,8042,8346,8650,8954,9258,9562,9866,10170,10474,10778,11082,11386,11690,11994,12298,12602,12906,13210,13514,13818,14122,14426,14730,15034,15338,15642,15946,16250,16554,16858,17162,17466,17770,18074,18378,18682,18986,19290,19594,19898,20202,20506,20810,21114,21418,21722,22026,22330,22634,22938,23242,23546,23850,24154,24458,24762,25066,25370,25674,25978,26282,26586,26890,27194,27498,27802,28106,28410,28714,29018,29322,29626,29930,30234,30538,30842,31146,31450,31754,32058,32362,32666,32970,33274,33578,33882,34186,34490,34794,35098,35402,35706,36010,36314,36618,36922,37226,37530,37834,38138,38442,38746,39050,39354,39658,39962,40266,40570,40874,41178,41482,41786,42090,42394,42698,43002,43306,43610,43914,44218,44522,44826,45130,45434,45738,46042,46346,46650,46954,47258,47562,47866,48170,48474,48778,49082,49386,49690,49994,50298,50602,50906,51210,51514,51818,52122,52426,52730,53034,53338,53642,53946,54250,54554,54858,55162,55466,55770,56074,56378,56682,56986,57290,57594,57898,58202,58506,58810,59114,59418,59722,60026,60330,60634,60938,61242,61546,61850,62154,62458,62762,63066,63370,63674,63978,64282,64586,64890,65194,65498,65802,66106,66410,66714,67018,67322,67626,67930,68234,68538,68842,69146,69450,69754,70058,70362,70666,70970,71274,71578,71882,72186,72490,72794,73098,73402,73706,74010,74314,74618,74922,75226,75530,75834,76138,76442,76746,77050,77354,77658'/>
+  </group>
+  <group name='138'>
+    <ids val='139,443,747,1051,1355,1659,1963,2267,2571,2875,3179,3483,3787,4091,4395,4699,5003,5307,5611,5915,6219,6523,6827,7131,7435,7739,8043,8347,8651,8955,9259,9563,9867,10171,10475,10779,11083,11387,11691,11995,12299,12603,12907,13211,13515,13819,14123,14427,14731,15035,15339,15643,15947,16251,16555,16859,17163,17467,17771,18075,18379,18683,18987,19291,19595,19899,20203,20507,20811,21115,21419,21723,22027,22331,22635,22939,23243,23547,23851,24155,24459,24763,25067,25371,25675,25979,26283,26587,26891,27195,27499,27803,28107,28411,28715,29019,29323,29627,29931,30235,30539,30843,31147,31451,31755,32059,32363,32667,32971,33275,33579,33883,34187,34491,34795,35099,35403,35707,36011,36315,36619,36923,37227,37531,37835,38139,38443,38747,39051,39355,39659,39963,40267,40571,40875,41179,41483,41787,42091,42395,42699,43003,43307,43611,43915,44219,44523,44827,45131,45435,45739,46043,46347,46651,46955,47259,47563,47867,48171,48475,48779,49083,49387,49691,49995,50299,50603,50907,51211,51515,51819,52123,52427,52731,53035,53339,53643,53947,54251,54555,54859,55163,55467,55771,56075,56379,56683,56987,57291,57595,57899,58203,58507,58811,59115,59419,59723,60027,60331,60635,60939,61243,61547,61851,62155,62459,62763,63067,63371,63675,63979,64283,64587,64891,65195,65499,65803,66107,66411,66715,67019,67323,67627,67931,68235,68539,68843,69147,69451,69755,70059,70363,70667,70971,71275,71579,71883,72187,72491,72795,73099,73403,73707,74011,74315,74619,74923,75227,75531,75835,76139,76443,76747,77051,77355,77659'/>
+  </group>
+  <group name='139'>
+    <ids val='140,444,748,1052,1356,1660,1964,2268,2572,2876,3180,3484,3788,4092,4396,4700,5004,5308,5612,5916,6220,6524,6828,7132,7436,7740,8044,8348,8652,8956,9260,9564,9868,10172,10476,10780,11084,11388,11692,11996,12300,12604,12908,13212,13516,13820,14124,14428,14732,15036,15340,15644,15948,16252,16556,16860,17164,17468,17772,18076,18380,18684,18988,19292,19596,19900,20204,20508,20812,21116,21420,21724,22028,22332,22636,22940,23244,23548,23852,24156,24460,24764,25068,25372,25676,25980,26284,26588,26892,27196,27500,27804,28108,28412,28716,29020,29324,29628,29932,30236,30540,30844,31148,31452,31756,32060,32364,32668,32972,33276,33580,33884,34188,34492,34796,35100,35404,35708,36012,36316,36620,36924,37228,37532,37836,38140,38444,38748,39052,39356,39660,39964,40268,40572,40876,41180,41484,41788,42092,42396,42700,43004,43308,43612,43916,44220,44524,44828,45132,45436,45740,46044,46348,46652,46956,47260,47564,47868,48172,48476,48780,49084,49388,49692,49996,50300,50604,50908,51212,51516,51820,52124,52428,52732,53036,53340,53644,53948,54252,54556,54860,55164,55468,55772,56076,56380,56684,56988,57292,57596,57900,58204,58508,58812,59116,59420,59724,60028,60332,60636,60940,61244,61548,61852,62156,62460,62764,63068,63372,63676,63980,64284,64588,64892,65196,65500,65804,66108,66412,66716,67020,67324,67628,67932,68236,68540,68844,69148,69452,69756,70060,70364,70668,70972,71276,71580,71884,72188,72492,72796,73100,73404,73708,74012,74316,74620,74924,75228,75532,75836,76140,76444,76748,77052,77356,77660'/>
+  </group>
+  <group name='140'>
+    <ids val='141,445,749,1053,1357,1661,1965,2269,2573,2877,3181,3485,3789,4093,4397,4701,5005,5309,5613,5917,6221,6525,6829,7133,7437,7741,8045,8349,8653,8957,9261,9565,9869,10173,10477,10781,11085,11389,11693,11997,12301,12605,12909,13213,13517,13821,14125,14429,14733,15037,15341,15645,15949,16253,16557,16861,17165,17469,17773,18077,18381,18685,18989,19293,19597,19901,20205,20509,20813,21117,21421,21725,22029,22333,22637,22941,23245,23549,23853,24157,24461,24765,25069,25373,25677,25981,26285,26589,26893,27197,27501,27805,28109,28413,28717,29021,29325,29629,29933,30237,30541,30845,31149,31453,31757,32061,32365,32669,32973,33277,33581,33885,34189,34493,34797,35101,35405,35709,36013,36317,36621,36925,37229,37533,37837,38141,38445,38749,39053,39357,39661,39965,40269,40573,40877,41181,41485,41789,42093,42397,42701,43005,43309,43613,43917,44221,44525,44829,45133,45437,45741,46045,46349,46653,46957,47261,47565,47869,48173,48477,48781,49085,49389,49693,49997,50301,50605,50909,51213,51517,51821,52125,52429,52733,53037,53341,53645,53949,54253,54557,54861,55165,55469,55773,56077,56381,56685,56989,57293,57597,57901,58205,58509,58813,59117,59421,59725,60029,60333,60637,60941,61245,61549,61853,62157,62461,62765,63069,63373,63677,63981,64285,64589,64893,65197,65501,65805,66109,66413,66717,67021,67325,67629,67933,68237,68541,68845,69149,69453,69757,70061,70365,70669,70973,71277,71581,71885,72189,72493,72797,73101,73405,73709,74013,74317,74621,74925,75229,75533,75837,76141,76445,76749,77053,77357,77661'/>
+  </group>
+  <group name='141'>
+    <ids val='142,446,750,1054,1358,1662,1966,2270,2574,2878,3182,3486,3790,4094,4398,4702,5006,5310,5614,5918,6222,6526,6830,7134,7438,7742,8046,8350,8654,8958,9262,9566,9870,10174,10478,10782,11086,11390,11694,11998,12302,12606,12910,13214,13518,13822,14126,14430,14734,15038,15342,15646,15950,16254,16558,16862,17166,17470,17774,18078,18382,18686,18990,19294,19598,19902,20206,20510,20814,21118,21422,21726,22030,22334,22638,22942,23246,23550,23854,24158,24462,24766,25070,25374,25678,25982,26286,26590,26894,27198,27502,27806,28110,28414,28718,29022,29326,29630,29934,30238,30542,30846,31150,31454,31758,32062,32366,32670,32974,33278,33582,33886,34190,34494,34798,35102,35406,35710,36014,36318,36622,36926,37230,37534,37838,38142,38446,38750,39054,39358,39662,39966,40270,40574,40878,41182,41486,41790,42094,42398,42702,43006,43310,43614,43918,44222,44526,44830,45134,45438,45742,46046,46350,46654,46958,47262,47566,47870,48174,48478,48782,49086,49390,49694,49998,50302,50606,50910,51214,51518,51822,52126,52430,52734,53038,53342,53646,53950,54254,54558,54862,55166,55470,55774,56078,56382,56686,56990,57294,57598,57902,58206,58510,58814,59118,59422,59726,60030,60334,60638,60942,61246,61550,61854,62158,62462,62766,63070,63374,63678,63982,64286,64590,64894,65198,65502,65806,66110,66414,66718,67022,67326,67630,67934,68238,68542,68846,69150,69454,69758,70062,70366,70670,70974,71278,71582,71886,72190,72494,72798,73102,73406,73710,74014,74318,74622,74926,75230,75534,75838,76142,76446,76750,77054,77358,77662'/>
+  </group>
+  <group name='142'>
+    <ids val='143,447,751,1055,1359,1663,1967,2271,2575,2879,3183,3487,3791,4095,4399,4703,5007,5311,5615,5919,6223,6527,6831,7135,7439,7743,8047,8351,8655,8959,9263,9567,9871,10175,10479,10783,11087,11391,11695,11999,12303,12607,12911,13215,13519,13823,14127,14431,14735,15039,15343,15647,15951,16255,16559,16863,17167,17471,17775,18079,18383,18687,18991,19295,19599,19903,20207,20511,20815,21119,21423,21727,22031,22335,22639,22943,23247,23551,23855,24159,24463,24767,25071,25375,25679,25983,26287,26591,26895,27199,27503,27807,28111,28415,28719,29023,29327,29631,29935,30239,30543,30847,31151,31455,31759,32063,32367,32671,32975,33279,33583,33887,34191,34495,34799,35103,35407,35711,36015,36319,36623,36927,37231,37535,37839,38143,38447,38751,39055,39359,39663,39967,40271,40575,40879,41183,41487,41791,42095,42399,42703,43007,43311,43615,43919,44223,44527,44831,45135,45439,45743,46047,46351,46655,46959,47263,47567,47871,48175,48479,48783,49087,49391,49695,49999,50303,50607,50911,51215,51519,51823,52127,52431,52735,53039,53343,53647,53951,54255,54559,54863,55167,55471,55775,56079,56383,56687,56991,57295,57599,57903,58207,58511,58815,59119,59423,59727,60031,60335,60639,60943,61247,61551,61855,62159,62463,62767,63071,63375,63679,63983,64287,64591,64895,65199,65503,65807,66111,66415,66719,67023,67327,67631,67935,68239,68543,68847,69151,69455,69759,70063,70367,70671,70975,71279,71583,71887,72191,72495,72799,73103,73407,73711,74015,74319,74623,74927,75231,75535,75839,76143,76447,76751,77055,77359,77663'/>
+  </group>
+  <group name='143'>
+    <ids val='144,448,752,1056,1360,1664,1968,2272,2576,2880,3184,3488,3792,4096,4400,4704,5008,5312,5616,5920,6224,6528,6832,7136,7440,7744,8048,8352,8656,8960,9264,9568,9872,10176,10480,10784,11088,11392,11696,12000,12304,12608,12912,13216,13520,13824,14128,14432,14736,15040,15344,15648,15952,16256,16560,16864,17168,17472,17776,18080,18384,18688,18992,19296,19600,19904,20208,20512,20816,21120,21424,21728,22032,22336,22640,22944,23248,23552,23856,24160,24464,24768,25072,25376,25680,25984,26288,26592,26896,27200,27504,27808,28112,28416,28720,29024,29328,29632,29936,30240,30544,30848,31152,31456,31760,32064,32368,32672,32976,33280,33584,33888,34192,34496,34800,35104,35408,35712,36016,36320,36624,36928,37232,37536,37840,38144,38448,38752,39056,39360,39664,39968,40272,40576,40880,41184,41488,41792,42096,42400,42704,43008,43312,43616,43920,44224,44528,44832,45136,45440,45744,46048,46352,46656,46960,47264,47568,47872,48176,48480,48784,49088,49392,49696,50000,50304,50608,50912,51216,51520,51824,52128,52432,52736,53040,53344,53648,53952,54256,54560,54864,55168,55472,55776,56080,56384,56688,56992,57296,57600,57904,58208,58512,58816,59120,59424,59728,60032,60336,60640,60944,61248,61552,61856,62160,62464,62768,63072,63376,63680,63984,64288,64592,64896,65200,65504,65808,66112,66416,66720,67024,67328,67632,67936,68240,68544,68848,69152,69456,69760,70064,70368,70672,70976,71280,71584,71888,72192,72496,72800,73104,73408,73712,74016,74320,74624,74928,75232,75536,75840,76144,76448,76752,77056,77360,77664'/>
+  </group>
+  <group name='144'>
+    <ids val='145,449,753,1057,1361,1665,1969,2273,2577,2881,3185,3489,3793,4097,4401,4705,5009,5313,5617,5921,6225,6529,6833,7137,7441,7745,8049,8353,8657,8961,9265,9569,9873,10177,10481,10785,11089,11393,11697,12001,12305,12609,12913,13217,13521,13825,14129,14433,14737,15041,15345,15649,15953,16257,16561,16865,17169,17473,17777,18081,18385,18689,18993,19297,19601,19905,20209,20513,20817,21121,21425,21729,22033,22337,22641,22945,23249,23553,23857,24161,24465,24769,25073,25377,25681,25985,26289,26593,26897,27201,27505,27809,28113,28417,28721,29025,29329,29633,29937,30241,30545,30849,31153,31457,31761,32065,32369,32673,32977,33281,33585,33889,34193,34497,34801,35105,35409,35713,36017,36321,36625,36929,37233,37537,37841,38145,38449,38753,39057,39361,39665,39969,40273,40577,40881,41185,41489,41793,42097,42401,42705,43009,43313,43617,43921,44225,44529,44833,45137,45441,45745,46049,46353,46657,46961,47265,47569,47873,48177,48481,48785,49089,49393,49697,50001,50305,50609,50913,51217,51521,51825,52129,52433,52737,53041,53345,53649,53953,54257,54561,54865,55169,55473,55777,56081,56385,56689,56993,57297,57601,57905,58209,58513,58817,59121,59425,59729,60033,60337,60641,60945,61249,61553,61857,62161,62465,62769,63073,63377,63681,63985,64289,64593,64897,65201,65505,65809,66113,66417,66721,67025,67329,67633,67937,68241,68545,68849,69153,69457,69761,70065,70369,70673,70977,71281,71585,71889,72193,72497,72801,73105,73409,73713,74017,74321,74625,74929,75233,75537,75841,76145,76449,76753,77057,77361,77665'/>
+  </group>
+  <group name='145'>
+    <ids val='146,450,754,1058,1362,1666,1970,2274,2578,2882,3186,3490,3794,4098,4402,4706,5010,5314,5618,5922,6226,6530,6834,7138,7442,7746,8050,8354,8658,8962,9266,9570,9874,10178,10482,10786,11090,11394,11698,12002,12306,12610,12914,13218,13522,13826,14130,14434,14738,15042,15346,15650,15954,16258,16562,16866,17170,17474,17778,18082,18386,18690,18994,19298,19602,19906,20210,20514,20818,21122,21426,21730,22034,22338,22642,22946,23250,23554,23858,24162,24466,24770,25074,25378,25682,25986,26290,26594,26898,27202,27506,27810,28114,28418,28722,29026,29330,29634,29938,30242,30546,30850,31154,31458,31762,32066,32370,32674,32978,33282,33586,33890,34194,34498,34802,35106,35410,35714,36018,36322,36626,36930,37234,37538,37842,38146,38450,38754,39058,39362,39666,39970,40274,40578,40882,41186,41490,41794,42098,42402,42706,43010,43314,43618,43922,44226,44530,44834,45138,45442,45746,46050,46354,46658,46962,47266,47570,47874,48178,48482,48786,49090,49394,49698,50002,50306,50610,50914,51218,51522,51826,52130,52434,52738,53042,53346,53650,53954,54258,54562,54866,55170,55474,55778,56082,56386,56690,56994,57298,57602,57906,58210,58514,58818,59122,59426,59730,60034,60338,60642,60946,61250,61554,61858,62162,62466,62770,63074,63378,63682,63986,64290,64594,64898,65202,65506,65810,66114,66418,66722,67026,67330,67634,67938,68242,68546,68850,69154,69458,69762,70066,70370,70674,70978,71282,71586,71890,72194,72498,72802,73106,73410,73714,74018,74322,74626,74930,75234,75538,75842,76146,76450,76754,77058,77362,77666'/>
+  </group>
+  <group name='146'>
+    <ids val='147,451,755,1059,1363,1667,1971,2275,2579,2883,3187,3491,3795,4099,4403,4707,5011,5315,5619,5923,6227,6531,6835,7139,7443,7747,8051,8355,8659,8963,9267,9571,9875,10179,10483,10787,11091,11395,11699,12003,12307,12611,12915,13219,13523,13827,14131,14435,14739,15043,15347,15651,15955,16259,16563,16867,17171,17475,17779,18083,18387,18691,18995,19299,19603,19907,20211,20515,20819,21123,21427,21731,22035,22339,22643,22947,23251,23555,23859,24163,24467,24771,25075,25379,25683,25987,26291,26595,26899,27203,27507,27811,28115,28419,28723,29027,29331,29635,29939,30243,30547,30851,31155,31459,31763,32067,32371,32675,32979,33283,33587,33891,34195,34499,34803,35107,35411,35715,36019,36323,36627,36931,37235,37539,37843,38147,38451,38755,39059,39363,39667,39971,40275,40579,40883,41187,41491,41795,42099,42403,42707,43011,43315,43619,43923,44227,44531,44835,45139,45443,45747,46051,46355,46659,46963,47267,47571,47875,48179,48483,48787,49091,49395,49699,50003,50307,50611,50915,51219,51523,51827,52131,52435,52739,53043,53347,53651,53955,54259,54563,54867,55171,55475,55779,56083,56387,56691,56995,57299,57603,57907,58211,58515,58819,59123,59427,59731,60035,60339,60643,60947,61251,61555,61859,62163,62467,62771,63075,63379,63683,63987,64291,64595,64899,65203,65507,65811,66115,66419,66723,67027,67331,67635,67939,68243,68547,68851,69155,69459,69763,70067,70371,70675,70979,71283,71587,71891,72195,72499,72803,73107,73411,73715,74019,74323,74627,74931,75235,75539,75843,76147,76451,76755,77059,77363,77667'/>
+  </group>
+  <group name='147'>
+    <ids val='148,452,756,1060,1364,1668,1972,2276,2580,2884,3188,3492,3796,4100,4404,4708,5012,5316,5620,5924,6228,6532,6836,7140,7444,7748,8052,8356,8660,8964,9268,9572,9876,10180,10484,10788,11092,11396,11700,12004,12308,12612,12916,13220,13524,13828,14132,14436,14740,15044,15348,15652,15956,16260,16564,16868,17172,17476,17780,18084,18388,18692,18996,19300,19604,19908,20212,20516,20820,21124,21428,21732,22036,22340,22644,22948,23252,23556,23860,24164,24468,24772,25076,25380,25684,25988,26292,26596,26900,27204,27508,27812,28116,28420,28724,29028,29332,29636,29940,30244,30548,30852,31156,31460,31764,32068,32372,32676,32980,33284,33588,33892,34196,34500,34804,35108,35412,35716,36020,36324,36628,36932,37236,37540,37844,38148,38452,38756,39060,39364,39668,39972,40276,40580,40884,41188,41492,41796,42100,42404,42708,43012,43316,43620,43924,44228,44532,44836,45140,45444,45748,46052,46356,46660,46964,47268,47572,47876,48180,48484,48788,49092,49396,49700,50004,50308,50612,50916,51220,51524,51828,52132,52436,52740,53044,53348,53652,53956,54260,54564,54868,55172,55476,55780,56084,56388,56692,56996,57300,57604,57908,58212,58516,58820,59124,59428,59732,60036,60340,60644,60948,61252,61556,61860,62164,62468,62772,63076,63380,63684,63988,64292,64596,64900,65204,65508,65812,66116,66420,66724,67028,67332,67636,67940,68244,68548,68852,69156,69460,69764,70068,70372,70676,70980,71284,71588,71892,72196,72500,72804,73108,73412,73716,74020,74324,74628,74932,75236,75540,75844,76148,76452,76756,77060,77364,77668'/>
+  </group>
+  <group name='148'>
+    <ids val='149,453,757,1061,1365,1669,1973,2277,2581,2885,3189,3493,3797,4101,4405,4709,5013,5317,5621,5925,6229,6533,6837,7141,7445,7749,8053,8357,8661,8965,9269,9573,9877,10181,10485,10789,11093,11397,11701,12005,12309,12613,12917,13221,13525,13829,14133,14437,14741,15045,15349,15653,15957,16261,16565,16869,17173,17477,17781,18085,18389,18693,18997,19301,19605,19909,20213,20517,20821,21125,21429,21733,22037,22341,22645,22949,23253,23557,23861,24165,24469,24773,25077,25381,25685,25989,26293,26597,26901,27205,27509,27813,28117,28421,28725,29029,29333,29637,29941,30245,30549,30853,31157,31461,31765,32069,32373,32677,32981,33285,33589,33893,34197,34501,34805,35109,35413,35717,36021,36325,36629,36933,37237,37541,37845,38149,38453,38757,39061,39365,39669,39973,40277,40581,40885,41189,41493,41797,42101,42405,42709,43013,43317,43621,43925,44229,44533,44837,45141,45445,45749,46053,46357,46661,46965,47269,47573,47877,48181,48485,48789,49093,49397,49701,50005,50309,50613,50917,51221,51525,51829,52133,52437,52741,53045,53349,53653,53957,54261,54565,54869,55173,55477,55781,56085,56389,56693,56997,57301,57605,57909,58213,58517,58821,59125,59429,59733,60037,60341,60645,60949,61253,61557,61861,62165,62469,62773,63077,63381,63685,63989,64293,64597,64901,65205,65509,65813,66117,66421,66725,67029,67333,67637,67941,68245,68549,68853,69157,69461,69765,70069,70373,70677,70981,71285,71589,71893,72197,72501,72805,73109,73413,73717,74021,74325,74629,74933,75237,75541,75845,76149,76453,76757,77061,77365,77669'/>
+  </group>
+  <group name='149'>
+    <ids val='150,454,758,1062,1366,1670,1974,2278,2582,2886,3190,3494,3798,4102,4406,4710,5014,5318,5622,5926,6230,6534,6838,7142,7446,7750,8054,8358,8662,8966,9270,9574,9878,10182,10486,10790,11094,11398,11702,12006,12310,12614,12918,13222,13526,13830,14134,14438,14742,15046,15350,15654,15958,16262,16566,16870,17174,17478,17782,18086,18390,18694,18998,19302,19606,19910,20214,20518,20822,21126,21430,21734,22038,22342,22646,22950,23254,23558,23862,24166,24470,24774,25078,25382,25686,25990,26294,26598,26902,27206,27510,27814,28118,28422,28726,29030,29334,29638,29942,30246,30550,30854,31158,31462,31766,32070,32374,32678,32982,33286,33590,33894,34198,34502,34806,35110,35414,35718,36022,36326,36630,36934,37238,37542,37846,38150,38454,38758,39062,39366,39670,39974,40278,40582,40886,41190,41494,41798,42102,42406,42710,43014,43318,43622,43926,44230,44534,44838,45142,45446,45750,46054,46358,46662,46966,47270,47574,47878,48182,48486,48790,49094,49398,49702,50006,50310,50614,50918,51222,51526,51830,52134,52438,52742,53046,53350,53654,53958,54262,54566,54870,55174,55478,55782,56086,56390,56694,56998,57302,57606,57910,58214,58518,58822,59126,59430,59734,60038,60342,60646,60950,61254,61558,61862,62166,62470,62774,63078,63382,63686,63990,64294,64598,64902,65206,65510,65814,66118,66422,66726,67030,67334,67638,67942,68246,68550,68854,69158,69462,69766,70070,70374,70678,70982,71286,71590,71894,72198,72502,72806,73110,73414,73718,74022,74326,74630,74934,75238,75542,75846,76150,76454,76758,77062,77366,77670'/>
+  </group>
+  <group name='150'>
+    <ids val='151,455,759,1063,1367,1671,1975,2279,2583,2887,3191,3495,3799,4103,4407,4711,5015,5319,5623,5927,6231,6535,6839,7143,7447,7751,8055,8359,8663,8967,9271,9575,9879,10183,10487,10791,11095,11399,11703,12007,12311,12615,12919,13223,13527,13831,14135,14439,14743,15047,15351,15655,15959,16263,16567,16871,17175,17479,17783,18087,18391,18695,18999,19303,19607,19911,20215,20519,20823,21127,21431,21735,22039,22343,22647,22951,23255,23559,23863,24167,24471,24775,25079,25383,25687,25991,26295,26599,26903,27207,27511,27815,28119,28423,28727,29031,29335,29639,29943,30247,30551,30855,31159,31463,31767,32071,32375,32679,32983,33287,33591,33895,34199,34503,34807,35111,35415,35719,36023,36327,36631,36935,37239,37543,37847,38151,38455,38759,39063,39367,39671,39975,40279,40583,40887,41191,41495,41799,42103,42407,42711,43015,43319,43623,43927,44231,44535,44839,45143,45447,45751,46055,46359,46663,46967,47271,47575,47879,48183,48487,48791,49095,49399,49703,50007,50311,50615,50919,51223,51527,51831,52135,52439,52743,53047,53351,53655,53959,54263,54567,54871,55175,55479,55783,56087,56391,56695,56999,57303,57607,57911,58215,58519,58823,59127,59431,59735,60039,60343,60647,60951,61255,61559,61863,62167,62471,62775,63079,63383,63687,63991,64295,64599,64903,65207,65511,65815,66119,66423,66727,67031,67335,67639,67943,68247,68551,68855,69159,69463,69767,70071,70375,70679,70983,71287,71591,71895,72199,72503,72807,73111,73415,73719,74023,74327,74631,74935,75239,75543,75847,76151,76455,76759,77063,77367,77671'/>
+  </group>
+  <group name='151'>
+    <ids val='152,456,760,1064,1368,1672,1976,2280,2584,2888,3192,3496,3800,4104,4408,4712,5016,5320,5624,5928,6232,6536,6840,7144,7448,7752,8056,8360,8664,8968,9272,9576,9880,10184,10488,10792,11096,11400,11704,12008,12312,12616,12920,13224,13528,13832,14136,14440,14744,15048,15352,15656,15960,16264,16568,16872,17176,17480,17784,18088,18392,18696,19000,19304,19608,19912,20216,20520,20824,21128,21432,21736,22040,22344,22648,22952,23256,23560,23864,24168,24472,24776,25080,25384,25688,25992,26296,26600,26904,27208,27512,27816,28120,28424,28728,29032,29336,29640,29944,30248,30552,30856,31160,31464,31768,32072,32376,32680,32984,33288,33592,33896,34200,34504,34808,35112,35416,35720,36024,36328,36632,36936,37240,37544,37848,38152,38456,38760,39064,39368,39672,39976,40280,40584,40888,41192,41496,41800,42104,42408,42712,43016,43320,43624,43928,44232,44536,44840,45144,45448,45752,46056,46360,46664,46968,47272,47576,47880,48184,48488,48792,49096,49400,49704,50008,50312,50616,50920,51224,51528,51832,52136,52440,52744,53048,53352,53656,53960,54264,54568,54872,55176,55480,55784,56088,56392,56696,57000,57304,57608,57912,58216,58520,58824,59128,59432,59736,60040,60344,60648,60952,61256,61560,61864,62168,62472,62776,63080,63384,63688,63992,64296,64600,64904,65208,65512,65816,66120,66424,66728,67032,67336,67640,67944,68248,68552,68856,69160,69464,69768,70072,70376,70680,70984,71288,71592,71896,72200,72504,72808,73112,73416,73720,74024,74328,74632,74936,75240,75544,75848,76152,76456,76760,77064,77368,77672'/>
+  </group>
+  <group name='152'>
+    <ids val='153,457,761,1065,1369,1673,1977,2281,2585,2889,3193,3497,3801,4105,4409,4713,5017,5321,5625,5929,6233,6537,6841,7145,7449,7753,8057,8361,8665,8969,9273,9577,9881,10185,10489,10793,11097,11401,11705,12009,12313,12617,12921,13225,13529,13833,14137,14441,14745,15049,15353,15657,15961,16265,16569,16873,17177,17481,17785,18089,18393,18697,19001,19305,19609,19913,20217,20521,20825,21129,21433,21737,22041,22345,22649,22953,23257,23561,23865,24169,24473,24777,25081,25385,25689,25993,26297,26601,26905,27209,27513,27817,28121,28425,28729,29033,29337,29641,29945,30249,30553,30857,31161,31465,31769,32073,32377,32681,32985,33289,33593,33897,34201,34505,34809,35113,35417,35721,36025,36329,36633,36937,37241,37545,37849,38153,38457,38761,39065,39369,39673,39977,40281,40585,40889,41193,41497,41801,42105,42409,42713,43017,43321,43625,43929,44233,44537,44841,45145,45449,45753,46057,46361,46665,46969,47273,47577,47881,48185,48489,48793,49097,49401,49705,50009,50313,50617,50921,51225,51529,51833,52137,52441,52745,53049,53353,53657,53961,54265,54569,54873,55177,55481,55785,56089,56393,56697,57001,57305,57609,57913,58217,58521,58825,59129,59433,59737,60041,60345,60649,60953,61257,61561,61865,62169,62473,62777,63081,63385,63689,63993,64297,64601,64905,65209,65513,65817,66121,66425,66729,67033,67337,67641,67945,68249,68553,68857,69161,69465,69769,70073,70377,70681,70985,71289,71593,71897,72201,72505,72809,73113,73417,73721,74025,74329,74633,74937,75241,75545,75849,76153,76457,76761,77065,77369,77673'/>
+  </group>
+  <group name='153'>
+    <ids val='154,458,762,1066,1370,1674,1978,2282,2586,2890,3194,3498,3802,4106,4410,4714,5018,5322,5626,5930,6234,6538,6842,7146,7450,7754,8058,8362,8666,8970,9274,9578,9882,10186,10490,10794,11098,11402,11706,12010,12314,12618,12922,13226,13530,13834,14138,14442,14746,15050,15354,15658,15962,16266,16570,16874,17178,17482,17786,18090,18394,18698,19002,19306,19610,19914,20218,20522,20826,21130,21434,21738,22042,22346,22650,22954,23258,23562,23866,24170,24474,24778,25082,25386,25690,25994,26298,26602,26906,27210,27514,27818,28122,28426,28730,29034,29338,29642,29946,30250,30554,30858,31162,31466,31770,32074,32378,32682,32986,33290,33594,33898,34202,34506,34810,35114,35418,35722,36026,36330,36634,36938,37242,37546,37850,38154,38458,38762,39066,39370,39674,39978,40282,40586,40890,41194,41498,41802,42106,42410,42714,43018,43322,43626,43930,44234,44538,44842,45146,45450,45754,46058,46362,46666,46970,47274,47578,47882,48186,48490,48794,49098,49402,49706,50010,50314,50618,50922,51226,51530,51834,52138,52442,52746,53050,53354,53658,53962,54266,54570,54874,55178,55482,55786,56090,56394,56698,57002,57306,57610,57914,58218,58522,58826,59130,59434,59738,60042,60346,60650,60954,61258,61562,61866,62170,62474,62778,63082,63386,63690,63994,64298,64602,64906,65210,65514,65818,66122,66426,66730,67034,67338,67642,67946,68250,68554,68858,69162,69466,69770,70074,70378,70682,70986,71290,71594,71898,72202,72506,72810,73114,73418,73722,74026,74330,74634,74938,75242,75546,75850,76154,76458,76762,77066,77370,77674'/>
+  </group>
+  <group name='154'>
+    <ids val='155,459,763,1067,1371,1675,1979,2283,2587,2891,3195,3499,3803,4107,4411,4715,5019,5323,5627,5931,6235,6539,6843,7147,7451,7755,8059,8363,8667,8971,9275,9579,9883,10187,10491,10795,11099,11403,11707,12011,12315,12619,12923,13227,13531,13835,14139,14443,14747,15051,15355,15659,15963,16267,16571,16875,17179,17483,17787,18091,18395,18699,19003,19307,19611,19915,20219,20523,20827,21131,21435,21739,22043,22347,22651,22955,23259,23563,23867,24171,24475,24779,25083,25387,25691,25995,26299,26603,26907,27211,27515,27819,28123,28427,28731,29035,29339,29643,29947,30251,30555,30859,31163,31467,31771,32075,32379,32683,32987,33291,33595,33899,34203,34507,34811,35115,35419,35723,36027,36331,36635,36939,37243,37547,37851,38155,38459,38763,39067,39371,39675,39979,40283,40587,40891,41195,41499,41803,42107,42411,42715,43019,43323,43627,43931,44235,44539,44843,45147,45451,45755,46059,46363,46667,46971,47275,47579,47883,48187,48491,48795,49099,49403,49707,50011,50315,50619,50923,51227,51531,51835,52139,52443,52747,53051,53355,53659,53963,54267,54571,54875,55179,55483,55787,56091,56395,56699,57003,57307,57611,57915,58219,58523,58827,59131,59435,59739,60043,60347,60651,60955,61259,61563,61867,62171,62475,62779,63083,63387,63691,63995,64299,64603,64907,65211,65515,65819,66123,66427,66731,67035,67339,67643,67947,68251,68555,68859,69163,69467,69771,70075,70379,70683,70987,71291,71595,71899,72203,72507,72811,73115,73419,73723,74027,74331,74635,74939,75243,75547,75851,76155,76459,76763,77067,77371,77675'/>
+  </group>
+  <group name='155'>
+    <ids val='156,460,764,1068,1372,1676,1980,2284,2588,2892,3196,3500,3804,4108,4412,4716,5020,5324,5628,5932,6236,6540,6844,7148,7452,7756,8060,8364,8668,8972,9276,9580,9884,10188,10492,10796,11100,11404,11708,12012,12316,12620,12924,13228,13532,13836,14140,14444,14748,15052,15356,15660,15964,16268,16572,16876,17180,17484,17788,18092,18396,18700,19004,19308,19612,19916,20220,20524,20828,21132,21436,21740,22044,22348,22652,22956,23260,23564,23868,24172,24476,24780,25084,25388,25692,25996,26300,26604,26908,27212,27516,27820,28124,28428,28732,29036,29340,29644,29948,30252,30556,30860,31164,31468,31772,32076,32380,32684,32988,33292,33596,33900,34204,34508,34812,35116,35420,35724,36028,36332,36636,36940,37244,37548,37852,38156,38460,38764,39068,39372,39676,39980,40284,40588,40892,41196,41500,41804,42108,42412,42716,43020,43324,43628,43932,44236,44540,44844,45148,45452,45756,46060,46364,46668,46972,47276,47580,47884,48188,48492,48796,49100,49404,49708,50012,50316,50620,50924,51228,51532,51836,52140,52444,52748,53052,53356,53660,53964,54268,54572,54876,55180,55484,55788,56092,56396,56700,57004,57308,57612,57916,58220,58524,58828,59132,59436,59740,60044,60348,60652,60956,61260,61564,61868,62172,62476,62780,63084,63388,63692,63996,64300,64604,64908,65212,65516,65820,66124,66428,66732,67036,67340,67644,67948,68252,68556,68860,69164,69468,69772,70076,70380,70684,70988,71292,71596,71900,72204,72508,72812,73116,73420,73724,74028,74332,74636,74940,75244,75548,75852,76156,76460,76764,77068,77372,77676'/>
+  </group>
+  <group name='156'>
+    <ids val='157,461,765,1069,1373,1677,1981,2285,2589,2893,3197,3501,3805,4109,4413,4717,5021,5325,5629,5933,6237,6541,6845,7149,7453,7757,8061,8365,8669,8973,9277,9581,9885,10189,10493,10797,11101,11405,11709,12013,12317,12621,12925,13229,13533,13837,14141,14445,14749,15053,15357,15661,15965,16269,16573,16877,17181,17485,17789,18093,18397,18701,19005,19309,19613,19917,20221,20525,20829,21133,21437,21741,22045,22349,22653,22957,23261,23565,23869,24173,24477,24781,25085,25389,25693,25997,26301,26605,26909,27213,27517,27821,28125,28429,28733,29037,29341,29645,29949,30253,30557,30861,31165,31469,31773,32077,32381,32685,32989,33293,33597,33901,34205,34509,34813,35117,35421,35725,36029,36333,36637,36941,37245,37549,37853,38157,38461,38765,39069,39373,39677,39981,40285,40589,40893,41197,41501,41805,42109,42413,42717,43021,43325,43629,43933,44237,44541,44845,45149,45453,45757,46061,46365,46669,46973,47277,47581,47885,48189,48493,48797,49101,49405,49709,50013,50317,50621,50925,51229,51533,51837,52141,52445,52749,53053,53357,53661,53965,54269,54573,54877,55181,55485,55789,56093,56397,56701,57005,57309,57613,57917,58221,58525,58829,59133,59437,59741,60045,60349,60653,60957,61261,61565,61869,62173,62477,62781,63085,63389,63693,63997,64301,64605,64909,65213,65517,65821,66125,66429,66733,67037,67341,67645,67949,68253,68557,68861,69165,69469,69773,70077,70381,70685,70989,71293,71597,71901,72205,72509,72813,73117,73421,73725,74029,74333,74637,74941,75245,75549,75853,76157,76461,76765,77069,77373,77677'/>
+  </group>
+  <group name='157'>
+    <ids val='158,462,766,1070,1374,1678,1982,2286,2590,2894,3198,3502,3806,4110,4414,4718,5022,5326,5630,5934,6238,6542,6846,7150,7454,7758,8062,8366,8670,8974,9278,9582,9886,10190,10494,10798,11102,11406,11710,12014,12318,12622,12926,13230,13534,13838,14142,14446,14750,15054,15358,15662,15966,16270,16574,16878,17182,17486,17790,18094,18398,18702,19006,19310,19614,19918,20222,20526,20830,21134,21438,21742,22046,22350,22654,22958,23262,23566,23870,24174,24478,24782,25086,25390,25694,25998,26302,26606,26910,27214,27518,27822,28126,28430,28734,29038,29342,29646,29950,30254,30558,30862,31166,31470,31774,32078,32382,32686,32990,33294,33598,33902,34206,34510,34814,35118,35422,35726,36030,36334,36638,36942,37246,37550,37854,38158,38462,38766,39070,39374,39678,39982,40286,40590,40894,41198,41502,41806,42110,42414,42718,43022,43326,43630,43934,44238,44542,44846,45150,45454,45758,46062,46366,46670,46974,47278,47582,47886,48190,48494,48798,49102,49406,49710,50014,50318,50622,50926,51230,51534,51838,52142,52446,52750,53054,53358,53662,53966,54270,54574,54878,55182,55486,55790,56094,56398,56702,57006,57310,57614,57918,58222,58526,58830,59134,59438,59742,60046,60350,60654,60958,61262,61566,61870,62174,62478,62782,63086,63390,63694,63998,64302,64606,64910,65214,65518,65822,66126,66430,66734,67038,67342,67646,67950,68254,68558,68862,69166,69470,69774,70078,70382,70686,70990,71294,71598,71902,72206,72510,72814,73118,73422,73726,74030,74334,74638,74942,75246,75550,75854,76158,76462,76766,77070,77374,77678'/>
+  </group>
+  <group name='158'>
+    <ids val='159,463,767,1071,1375,1679,1983,2287,2591,2895,3199,3503,3807,4111,4415,4719,5023,5327,5631,5935,6239,6543,6847,7151,7455,7759,8063,8367,8671,8975,9279,9583,9887,10191,10495,10799,11103,11407,11711,12015,12319,12623,12927,13231,13535,13839,14143,14447,14751,15055,15359,15663,15967,16271,16575,16879,17183,17487,17791,18095,18399,18703,19007,19311,19615,19919,20223,20527,20831,21135,21439,21743,22047,22351,22655,22959,23263,23567,23871,24175,24479,24783,25087,25391,25695,25999,26303,26607,26911,27215,27519,27823,28127,28431,28735,29039,29343,29647,29951,30255,30559,30863,31167,31471,31775,32079,32383,32687,32991,33295,33599,33903,34207,34511,34815,35119,35423,35727,36031,36335,36639,36943,37247,37551,37855,38159,38463,38767,39071,39375,39679,39983,40287,40591,40895,41199,41503,41807,42111,42415,42719,43023,43327,43631,43935,44239,44543,44847,45151,45455,45759,46063,46367,46671,46975,47279,47583,47887,48191,48495,48799,49103,49407,49711,50015,50319,50623,50927,51231,51535,51839,52143,52447,52751,53055,53359,53663,53967,54271,54575,54879,55183,55487,55791,56095,56399,56703,57007,57311,57615,57919,58223,58527,58831,59135,59439,59743,60047,60351,60655,60959,61263,61567,61871,62175,62479,62783,63087,63391,63695,63999,64303,64607,64911,65215,65519,65823,66127,66431,66735,67039,67343,67647,67951,68255,68559,68863,69167,69471,69775,70079,70383,70687,70991,71295,71599,71903,72207,72511,72815,73119,73423,73727,74031,74335,74639,74943,75247,75551,75855,76159,76463,76767,77071,77375,77679'/>
+  </group>
+  <group name='159'>
+    <ids val='160,464,768,1072,1376,1680,1984,2288,2592,2896,3200,3504,3808,4112,4416,4720,5024,5328,5632,5936,6240,6544,6848,7152,7456,7760,8064,8368,8672,8976,9280,9584,9888,10192,10496,10800,11104,11408,11712,12016,12320,12624,12928,13232,13536,13840,14144,14448,14752,15056,15360,15664,15968,16272,16576,16880,17184,17488,17792,18096,18400,18704,19008,19312,19616,19920,20224,20528,20832,21136,21440,21744,22048,22352,22656,22960,23264,23568,23872,24176,24480,24784,25088,25392,25696,26000,26304,26608,26912,27216,27520,27824,28128,28432,28736,29040,29344,29648,29952,30256,30560,30864,31168,31472,31776,32080,32384,32688,32992,33296,33600,33904,34208,34512,34816,35120,35424,35728,36032,36336,36640,36944,37248,37552,37856,38160,38464,38768,39072,39376,39680,39984,40288,40592,40896,41200,41504,41808,42112,42416,42720,43024,43328,43632,43936,44240,44544,44848,45152,45456,45760,46064,46368,46672,46976,47280,47584,47888,48192,48496,48800,49104,49408,49712,50016,50320,50624,50928,51232,51536,51840,52144,52448,52752,53056,53360,53664,53968,54272,54576,54880,55184,55488,55792,56096,56400,56704,57008,57312,57616,57920,58224,58528,58832,59136,59440,59744,60048,60352,60656,60960,61264,61568,61872,62176,62480,62784,63088,63392,63696,64000,64304,64608,64912,65216,65520,65824,66128,66432,66736,67040,67344,67648,67952,68256,68560,68864,69168,69472,69776,70080,70384,70688,70992,71296,71600,71904,72208,72512,72816,73120,73424,73728,74032,74336,74640,74944,75248,75552,75856,76160,76464,76768,77072,77376,77680'/>
+  </group>
+  <group name='160'>
+    <ids val='161,465,769,1073,1377,1681,1985,2289,2593,2897,3201,3505,3809,4113,4417,4721,5025,5329,5633,5937,6241,6545,6849,7153,7457,7761,8065,8369,8673,8977,9281,9585,9889,10193,10497,10801,11105,11409,11713,12017,12321,12625,12929,13233,13537,13841,14145,14449,14753,15057,15361,15665,15969,16273,16577,16881,17185,17489,17793,18097,18401,18705,19009,19313,19617,19921,20225,20529,20833,21137,21441,21745,22049,22353,22657,22961,23265,23569,23873,24177,24481,24785,25089,25393,25697,26001,26305,26609,26913,27217,27521,27825,28129,28433,28737,29041,29345,29649,29953,30257,30561,30865,31169,31473,31777,32081,32385,32689,32993,33297,33601,33905,34209,34513,34817,35121,35425,35729,36033,36337,36641,36945,37249,37553,37857,38161,38465,38769,39073,39377,39681,39985,40289,40593,40897,41201,41505,41809,42113,42417,42721,43025,43329,43633,43937,44241,44545,44849,45153,45457,45761,46065,46369,46673,46977,47281,47585,47889,48193,48497,48801,49105,49409,49713,50017,50321,50625,50929,51233,51537,51841,52145,52449,52753,53057,53361,53665,53969,54273,54577,54881,55185,55489,55793,56097,56401,56705,57009,57313,57617,57921,58225,58529,58833,59137,59441,59745,60049,60353,60657,60961,61265,61569,61873,62177,62481,62785,63089,63393,63697,64001,64305,64609,64913,65217,65521,65825,66129,66433,66737,67041,67345,67649,67953,68257,68561,68865,69169,69473,69777,70081,70385,70689,70993,71297,71601,71905,72209,72513,72817,73121,73425,73729,74033,74337,74641,74945,75249,75553,75857,76161,76465,76769,77073,77377,77681'/>
+  </group>
+  <group name='161'>
+    <ids val='162,466,770,1074,1378,1682,1986,2290,2594,2898,3202,3506,3810,4114,4418,4722,5026,5330,5634,5938,6242,6546,6850,7154,7458,7762,8066,8370,8674,8978,9282,9586,9890,10194,10498,10802,11106,11410,11714,12018,12322,12626,12930,13234,13538,13842,14146,14450,14754,15058,15362,15666,15970,16274,16578,16882,17186,17490,17794,18098,18402,18706,19010,19314,19618,19922,20226,20530,20834,21138,21442,21746,22050,22354,22658,22962,23266,23570,23874,24178,24482,24786,25090,25394,25698,26002,26306,26610,26914,27218,27522,27826,28130,28434,28738,29042,29346,29650,29954,30258,30562,30866,31170,31474,31778,32082,32386,32690,32994,33298,33602,33906,34210,34514,34818,35122,35426,35730,36034,36338,36642,36946,37250,37554,37858,38162,38466,38770,39074,39378,39682,39986,40290,40594,40898,41202,41506,41810,42114,42418,42722,43026,43330,43634,43938,44242,44546,44850,45154,45458,45762,46066,46370,46674,46978,47282,47586,47890,48194,48498,48802,49106,49410,49714,50018,50322,50626,50930,51234,51538,51842,52146,52450,52754,53058,53362,53666,53970,54274,54578,54882,55186,55490,55794,56098,56402,56706,57010,57314,57618,57922,58226,58530,58834,59138,59442,59746,60050,60354,60658,60962,61266,61570,61874,62178,62482,62786,63090,63394,63698,64002,64306,64610,64914,65218,65522,65826,66130,66434,66738,67042,67346,67650,67954,68258,68562,68866,69170,69474,69778,70082,70386,70690,70994,71298,71602,71906,72210,72514,72818,73122,73426,73730,74034,74338,74642,74946,75250,75554,75858,76162,76466,76770,77074,77378,77682'/>
+  </group>
+  <group name='162'>
+    <ids val='163,467,771,1075,1379,1683,1987,2291,2595,2899,3203,3507,3811,4115,4419,4723,5027,5331,5635,5939,6243,6547,6851,7155,7459,7763,8067,8371,8675,8979,9283,9587,9891,10195,10499,10803,11107,11411,11715,12019,12323,12627,12931,13235,13539,13843,14147,14451,14755,15059,15363,15667,15971,16275,16579,16883,17187,17491,17795,18099,18403,18707,19011,19315,19619,19923,20227,20531,20835,21139,21443,21747,22051,22355,22659,22963,23267,23571,23875,24179,24483,24787,25091,25395,25699,26003,26307,26611,26915,27219,27523,27827,28131,28435,28739,29043,29347,29651,29955,30259,30563,30867,31171,31475,31779,32083,32387,32691,32995,33299,33603,33907,34211,34515,34819,35123,35427,35731,36035,36339,36643,36947,37251,37555,37859,38163,38467,38771,39075,39379,39683,39987,40291,40595,40899,41203,41507,41811,42115,42419,42723,43027,43331,43635,43939,44243,44547,44851,45155,45459,45763,46067,46371,46675,46979,47283,47587,47891,48195,48499,48803,49107,49411,49715,50019,50323,50627,50931,51235,51539,51843,52147,52451,52755,53059,53363,53667,53971,54275,54579,54883,55187,55491,55795,56099,56403,56707,57011,57315,57619,57923,58227,58531,58835,59139,59443,59747,60051,60355,60659,60963,61267,61571,61875,62179,62483,62787,63091,63395,63699,64003,64307,64611,64915,65219,65523,65827,66131,66435,66739,67043,67347,67651,67955,68259,68563,68867,69171,69475,69779,70083,70387,70691,70995,71299,71603,71907,72211,72515,72819,73123,73427,73731,74035,74339,74643,74947,75251,75555,75859,76163,76467,76771,77075,77379,77683'/>
+  </group>
+  <group name='163'>
+    <ids val='164,468,772,1076,1380,1684,1988,2292,2596,2900,3204,3508,3812,4116,4420,4724,5028,5332,5636,5940,6244,6548,6852,7156,7460,7764,8068,8372,8676,8980,9284,9588,9892,10196,10500,10804,11108,11412,11716,12020,12324,12628,12932,13236,13540,13844,14148,14452,14756,15060,15364,15668,15972,16276,16580,16884,17188,17492,17796,18100,18404,18708,19012,19316,19620,19924,20228,20532,20836,21140,21444,21748,22052,22356,22660,22964,23268,23572,23876,24180,24484,24788,25092,25396,25700,26004,26308,26612,26916,27220,27524,27828,28132,28436,28740,29044,29348,29652,29956,30260,30564,30868,31172,31476,31780,32084,32388,32692,32996,33300,33604,33908,34212,34516,34820,35124,35428,35732,36036,36340,36644,36948,37252,37556,37860,38164,38468,38772,39076,39380,39684,39988,40292,40596,40900,41204,41508,41812,42116,42420,42724,43028,43332,43636,43940,44244,44548,44852,45156,45460,45764,46068,46372,46676,46980,47284,47588,47892,48196,48500,48804,49108,49412,49716,50020,50324,50628,50932,51236,51540,51844,52148,52452,52756,53060,53364,53668,53972,54276,54580,54884,55188,55492,55796,56100,56404,56708,57012,57316,57620,57924,58228,58532,58836,59140,59444,59748,60052,60356,60660,60964,61268,61572,61876,62180,62484,62788,63092,63396,63700,64004,64308,64612,64916,65220,65524,65828,66132,66436,66740,67044,67348,67652,67956,68260,68564,68868,69172,69476,69780,70084,70388,70692,70996,71300,71604,71908,72212,72516,72820,73124,73428,73732,74036,74340,74644,74948,75252,75556,75860,76164,76468,76772,77076,77380,77684'/>
+  </group>
+  <group name='164'>
+    <ids val='165,469,773,1077,1381,1685,1989,2293,2597,2901,3205,3509,3813,4117,4421,4725,5029,5333,5637,5941,6245,6549,6853,7157,7461,7765,8069,8373,8677,8981,9285,9589,9893,10197,10501,10805,11109,11413,11717,12021,12325,12629,12933,13237,13541,13845,14149,14453,14757,15061,15365,15669,15973,16277,16581,16885,17189,17493,17797,18101,18405,18709,19013,19317,19621,19925,20229,20533,20837,21141,21445,21749,22053,22357,22661,22965,23269,23573,23877,24181,24485,24789,25093,25397,25701,26005,26309,26613,26917,27221,27525,27829,28133,28437,28741,29045,29349,29653,29957,30261,30565,30869,31173,31477,31781,32085,32389,32693,32997,33301,33605,33909,34213,34517,34821,35125,35429,35733,36037,36341,36645,36949,37253,37557,37861,38165,38469,38773,39077,39381,39685,39989,40293,40597,40901,41205,41509,41813,42117,42421,42725,43029,43333,43637,43941,44245,44549,44853,45157,45461,45765,46069,46373,46677,46981,47285,47589,47893,48197,48501,48805,49109,49413,49717,50021,50325,50629,50933,51237,51541,51845,52149,52453,52757,53061,53365,53669,53973,54277,54581,54885,55189,55493,55797,56101,56405,56709,57013,57317,57621,57925,58229,58533,58837,59141,59445,59749,60053,60357,60661,60965,61269,61573,61877,62181,62485,62789,63093,63397,63701,64005,64309,64613,64917,65221,65525,65829,66133,66437,66741,67045,67349,67653,67957,68261,68565,68869,69173,69477,69781,70085,70389,70693,70997,71301,71605,71909,72213,72517,72821,73125,73429,73733,74037,74341,74645,74949,75253,75557,75861,76165,76469,76773,77077,77381,77685'/>
+  </group>
+  <group name='165'>
+    <ids val='166,470,774,1078,1382,1686,1990,2294,2598,2902,3206,3510,3814,4118,4422,4726,5030,5334,5638,5942,6246,6550,6854,7158,7462,7766,8070,8374,8678,8982,9286,9590,9894,10198,10502,10806,11110,11414,11718,12022,12326,12630,12934,13238,13542,13846,14150,14454,14758,15062,15366,15670,15974,16278,16582,16886,17190,17494,17798,18102,18406,18710,19014,19318,19622,19926,20230,20534,20838,21142,21446,21750,22054,22358,22662,22966,23270,23574,23878,24182,24486,24790,25094,25398,25702,26006,26310,26614,26918,27222,27526,27830,28134,28438,28742,29046,29350,29654,29958,30262,30566,30870,31174,31478,31782,32086,32390,32694,32998,33302,33606,33910,34214,34518,34822,35126,35430,35734,36038,36342,36646,36950,37254,37558,37862,38166,38470,38774,39078,39382,39686,39990,40294,40598,40902,41206,41510,41814,42118,42422,42726,43030,43334,43638,43942,44246,44550,44854,45158,45462,45766,46070,46374,46678,46982,47286,47590,47894,48198,48502,48806,49110,49414,49718,50022,50326,50630,50934,51238,51542,51846,52150,52454,52758,53062,53366,53670,53974,54278,54582,54886,55190,55494,55798,56102,56406,56710,57014,57318,57622,57926,58230,58534,58838,59142,59446,59750,60054,60358,60662,60966,61270,61574,61878,62182,62486,62790,63094,63398,63702,64006,64310,64614,64918,65222,65526,65830,66134,66438,66742,67046,67350,67654,67958,68262,68566,68870,69174,69478,69782,70086,70390,70694,70998,71302,71606,71910,72214,72518,72822,73126,73430,73734,74038,74342,74646,74950,75254,75558,75862,76166,76470,76774,77078,77382,77686'/>
+  </group>
+  <group name='166'>
+    <ids val='167,471,775,1079,1383,1687,1991,2295,2599,2903,3207,3511,3815,4119,4423,4727,5031,5335,5639,5943,6247,6551,6855,7159,7463,7767,8071,8375,8679,8983,9287,9591,9895,10199,10503,10807,11111,11415,11719,12023,12327,12631,12935,13239,13543,13847,14151,14455,14759,15063,15367,15671,15975,16279,16583,16887,17191,17495,17799,18103,18407,18711,19015,19319,19623,19927,20231,20535,20839,21143,21447,21751,22055,22359,22663,22967,23271,23575,23879,24183,24487,24791,25095,25399,25703,26007,26311,26615,26919,27223,27527,27831,28135,28439,28743,29047,29351,29655,29959,30263,30567,30871,31175,31479,31783,32087,32391,32695,32999,33303,33607,33911,34215,34519,34823,35127,35431,35735,36039,36343,36647,36951,37255,37559,37863,38167,38471,38775,39079,39383,39687,39991,40295,40599,40903,41207,41511,41815,42119,42423,42727,43031,43335,43639,43943,44247,44551,44855,45159,45463,45767,46071,46375,46679,46983,47287,47591,47895,48199,48503,48807,49111,49415,49719,50023,50327,50631,50935,51239,51543,51847,52151,52455,52759,53063,53367,53671,53975,54279,54583,54887,55191,55495,55799,56103,56407,56711,57015,57319,57623,57927,58231,58535,58839,59143,59447,59751,60055,60359,60663,60967,61271,61575,61879,62183,62487,62791,63095,63399,63703,64007,64311,64615,64919,65223,65527,65831,66135,66439,66743,67047,67351,67655,67959,68263,68567,68871,69175,69479,69783,70087,70391,70695,70999,71303,71607,71911,72215,72519,72823,73127,73431,73735,74039,74343,74647,74951,75255,75559,75863,76167,76471,76775,77079,77383,77687'/>
+  </group>
+  <group name='167'>
+    <ids val='168,472,776,1080,1384,1688,1992,2296,2600,2904,3208,3512,3816,4120,4424,4728,5032,5336,5640,5944,6248,6552,6856,7160,7464,7768,8072,8376,8680,8984,9288,9592,9896,10200,10504,10808,11112,11416,11720,12024,12328,12632,12936,13240,13544,13848,14152,14456,14760,15064,15368,15672,15976,16280,16584,16888,17192,17496,17800,18104,18408,18712,19016,19320,19624,19928,20232,20536,20840,21144,21448,21752,22056,22360,22664,22968,23272,23576,23880,24184,24488,24792,25096,25400,25704,26008,26312,26616,26920,27224,27528,27832,28136,28440,28744,29048,29352,29656,29960,30264,30568,30872,31176,31480,31784,32088,32392,32696,33000,33304,33608,33912,34216,34520,34824,35128,35432,35736,36040,36344,36648,36952,37256,37560,37864,38168,38472,38776,39080,39384,39688,39992,40296,40600,40904,41208,41512,41816,42120,42424,42728,43032,43336,43640,43944,44248,44552,44856,45160,45464,45768,46072,46376,46680,46984,47288,47592,47896,48200,48504,48808,49112,49416,49720,50024,50328,50632,50936,51240,51544,51848,52152,52456,52760,53064,53368,53672,53976,54280,54584,54888,55192,55496,55800,56104,56408,56712,57016,57320,57624,57928,58232,58536,58840,59144,59448,59752,60056,60360,60664,60968,61272,61576,61880,62184,62488,62792,63096,63400,63704,64008,64312,64616,64920,65224,65528,65832,66136,66440,66744,67048,67352,67656,67960,68264,68568,68872,69176,69480,69784,70088,70392,70696,71000,71304,71608,71912,72216,72520,72824,73128,73432,73736,74040,74344,74648,74952,75256,75560,75864,76168,76472,76776,77080,77384,77688'/>
+  </group>
+  <group name='168'>
+    <ids val='169,473,777,1081,1385,1689,1993,2297,2601,2905,3209,3513,3817,4121,4425,4729,5033,5337,5641,5945,6249,6553,6857,7161,7465,7769,8073,8377,8681,8985,9289,9593,9897,10201,10505,10809,11113,11417,11721,12025,12329,12633,12937,13241,13545,13849,14153,14457,14761,15065,15369,15673,15977,16281,16585,16889,17193,17497,17801,18105,18409,18713,19017,19321,19625,19929,20233,20537,20841,21145,21449,21753,22057,22361,22665,22969,23273,23577,23881,24185,24489,24793,25097,25401,25705,26009,26313,26617,26921,27225,27529,27833,28137,28441,28745,29049,29353,29657,29961,30265,30569,30873,31177,31481,31785,32089,32393,32697,33001,33305,33609,33913,34217,34521,34825,35129,35433,35737,36041,36345,36649,36953,37257,37561,37865,38169,38473,38777,39081,39385,39689,39993,40297,40601,40905,41209,41513,41817,42121,42425,42729,43033,43337,43641,43945,44249,44553,44857,45161,45465,45769,46073,46377,46681,46985,47289,47593,47897,48201,48505,48809,49113,49417,49721,50025,50329,50633,50937,51241,51545,51849,52153,52457,52761,53065,53369,53673,53977,54281,54585,54889,55193,55497,55801,56105,56409,56713,57017,57321,57625,57929,58233,58537,58841,59145,59449,59753,60057,60361,60665,60969,61273,61577,61881,62185,62489,62793,63097,63401,63705,64009,64313,64617,64921,65225,65529,65833,66137,66441,66745,67049,67353,67657,67961,68265,68569,68873,69177,69481,69785,70089,70393,70697,71001,71305,71609,71913,72217,72521,72825,73129,73433,73737,74041,74345,74649,74953,75257,75561,75865,76169,76473,76777,77081,77385,77689'/>
+  </group>
+  <group name='169'>
+    <ids val='170,474,778,1082,1386,1690,1994,2298,2602,2906,3210,3514,3818,4122,4426,4730,5034,5338,5642,5946,6250,6554,6858,7162,7466,7770,8074,8378,8682,8986,9290,9594,9898,10202,10506,10810,11114,11418,11722,12026,12330,12634,12938,13242,13546,13850,14154,14458,14762,15066,15370,15674,15978,16282,16586,16890,17194,17498,17802,18106,18410,18714,19018,19322,19626,19930,20234,20538,20842,21146,21450,21754,22058,22362,22666,22970,23274,23578,23882,24186,24490,24794,25098,25402,25706,26010,26314,26618,26922,27226,27530,27834,28138,28442,28746,29050,29354,29658,29962,30266,30570,30874,31178,31482,31786,32090,32394,32698,33002,33306,33610,33914,34218,34522,34826,35130,35434,35738,36042,36346,36650,36954,37258,37562,37866,38170,38474,38778,39082,39386,39690,39994,40298,40602,40906,41210,41514,41818,42122,42426,42730,43034,43338,43642,43946,44250,44554,44858,45162,45466,45770,46074,46378,46682,46986,47290,47594,47898,48202,48506,48810,49114,49418,49722,50026,50330,50634,50938,51242,51546,51850,52154,52458,52762,53066,53370,53674,53978,54282,54586,54890,55194,55498,55802,56106,56410,56714,57018,57322,57626,57930,58234,58538,58842,59146,59450,59754,60058,60362,60666,60970,61274,61578,61882,62186,62490,62794,63098,63402,63706,64010,64314,64618,64922,65226,65530,65834,66138,66442,66746,67050,67354,67658,67962,68266,68570,68874,69178,69482,69786,70090,70394,70698,71002,71306,71610,71914,72218,72522,72826,73130,73434,73738,74042,74346,74650,74954,75258,75562,75866,76170,76474,76778,77082,77386,77690'/>
+  </group>
+  <group name='170'>
+    <ids val='171,475,779,1083,1387,1691,1995,2299,2603,2907,3211,3515,3819,4123,4427,4731,5035,5339,5643,5947,6251,6555,6859,7163,7467,7771,8075,8379,8683,8987,9291,9595,9899,10203,10507,10811,11115,11419,11723,12027,12331,12635,12939,13243,13547,13851,14155,14459,14763,15067,15371,15675,15979,16283,16587,16891,17195,17499,17803,18107,18411,18715,19019,19323,19627,19931,20235,20539,20843,21147,21451,21755,22059,22363,22667,22971,23275,23579,23883,24187,24491,24795,25099,25403,25707,26011,26315,26619,26923,27227,27531,27835,28139,28443,28747,29051,29355,29659,29963,30267,30571,30875,31179,31483,31787,32091,32395,32699,33003,33307,33611,33915,34219,34523,34827,35131,35435,35739,36043,36347,36651,36955,37259,37563,37867,38171,38475,38779,39083,39387,39691,39995,40299,40603,40907,41211,41515,41819,42123,42427,42731,43035,43339,43643,43947,44251,44555,44859,45163,45467,45771,46075,46379,46683,46987,47291,47595,47899,48203,48507,48811,49115,49419,49723,50027,50331,50635,50939,51243,51547,51851,52155,52459,52763,53067,53371,53675,53979,54283,54587,54891,55195,55499,55803,56107,56411,56715,57019,57323,57627,57931,58235,58539,58843,59147,59451,59755,60059,60363,60667,60971,61275,61579,61883,62187,62491,62795,63099,63403,63707,64011,64315,64619,64923,65227,65531,65835,66139,66443,66747,67051,67355,67659,67963,68267,68571,68875,69179,69483,69787,70091,70395,70699,71003,71307,71611,71915,72219,72523,72827,73131,73435,73739,74043,74347,74651,74955,75259,75563,75867,76171,76475,76779,77083,77387,77691'/>
+  </group>
+  <group name='171'>
+    <ids val='172,476,780,1084,1388,1692,1996,2300,2604,2908,3212,3516,3820,4124,4428,4732,5036,5340,5644,5948,6252,6556,6860,7164,7468,7772,8076,8380,8684,8988,9292,9596,9900,10204,10508,10812,11116,11420,11724,12028,12332,12636,12940,13244,13548,13852,14156,14460,14764,15068,15372,15676,15980,16284,16588,16892,17196,17500,17804,18108,18412,18716,19020,19324,19628,19932,20236,20540,20844,21148,21452,21756,22060,22364,22668,22972,23276,23580,23884,24188,24492,24796,25100,25404,25708,26012,26316,26620,26924,27228,27532,27836,28140,28444,28748,29052,29356,29660,29964,30268,30572,30876,31180,31484,31788,32092,32396,32700,33004,33308,33612,33916,34220,34524,34828,35132,35436,35740,36044,36348,36652,36956,37260,37564,37868,38172,38476,38780,39084,39388,39692,39996,40300,40604,40908,41212,41516,41820,42124,42428,42732,43036,43340,43644,43948,44252,44556,44860,45164,45468,45772,46076,46380,46684,46988,47292,47596,47900,48204,48508,48812,49116,49420,49724,50028,50332,50636,50940,51244,51548,51852,52156,52460,52764,53068,53372,53676,53980,54284,54588,54892,55196,55500,55804,56108,56412,56716,57020,57324,57628,57932,58236,58540,58844,59148,59452,59756,60060,60364,60668,60972,61276,61580,61884,62188,62492,62796,63100,63404,63708,64012,64316,64620,64924,65228,65532,65836,66140,66444,66748,67052,67356,67660,67964,68268,68572,68876,69180,69484,69788,70092,70396,70700,71004,71308,71612,71916,72220,72524,72828,73132,73436,73740,74044,74348,74652,74956,75260,75564,75868,76172,76476,76780,77084,77388,77692'/>
+  </group>
+  <group name='172'>
+    <ids val='173,477,781,1085,1389,1693,1997,2301,2605,2909,3213,3517,3821,4125,4429,4733,5037,5341,5645,5949,6253,6557,6861,7165,7469,7773,8077,8381,8685,8989,9293,9597,9901,10205,10509,10813,11117,11421,11725,12029,12333,12637,12941,13245,13549,13853,14157,14461,14765,15069,15373,15677,15981,16285,16589,16893,17197,17501,17805,18109,18413,18717,19021,19325,19629,19933,20237,20541,20845,21149,21453,21757,22061,22365,22669,22973,23277,23581,23885,24189,24493,24797,25101,25405,25709,26013,26317,26621,26925,27229,27533,27837,28141,28445,28749,29053,29357,29661,29965,30269,30573,30877,31181,31485,31789,32093,32397,32701,33005,33309,33613,33917,34221,34525,34829,35133,35437,35741,36045,36349,36653,36957,37261,37565,37869,38173,38477,38781,39085,39389,39693,39997,40301,40605,40909,41213,41517,41821,42125,42429,42733,43037,43341,43645,43949,44253,44557,44861,45165,45469,45773,46077,46381,46685,46989,47293,47597,47901,48205,48509,48813,49117,49421,49725,50029,50333,50637,50941,51245,51549,51853,52157,52461,52765,53069,53373,53677,53981,54285,54589,54893,55197,55501,55805,56109,56413,56717,57021,57325,57629,57933,58237,58541,58845,59149,59453,59757,60061,60365,60669,60973,61277,61581,61885,62189,62493,62797,63101,63405,63709,64013,64317,64621,64925,65229,65533,65837,66141,66445,66749,67053,67357,67661,67965,68269,68573,68877,69181,69485,69789,70093,70397,70701,71005,71309,71613,71917,72221,72525,72829,73133,73437,73741,74045,74349,74653,74957,75261,75565,75869,76173,76477,76781,77085,77389,77693'/>
+  </group>
+  <group name='173'>
+    <ids val='174,478,782,1086,1390,1694,1998,2302,2606,2910,3214,3518,3822,4126,4430,4734,5038,5342,5646,5950,6254,6558,6862,7166,7470,7774,8078,8382,8686,8990,9294,9598,9902,10206,10510,10814,11118,11422,11726,12030,12334,12638,12942,13246,13550,13854,14158,14462,14766,15070,15374,15678,15982,16286,16590,16894,17198,17502,17806,18110,18414,18718,19022,19326,19630,19934,20238,20542,20846,21150,21454,21758,22062,22366,22670,22974,23278,23582,23886,24190,24494,24798,25102,25406,25710,26014,26318,26622,26926,27230,27534,27838,28142,28446,28750,29054,29358,29662,29966,30270,30574,30878,31182,31486,31790,32094,32398,32702,33006,33310,33614,33918,34222,34526,34830,35134,35438,35742,36046,36350,36654,36958,37262,37566,37870,38174,38478,38782,39086,39390,39694,39998,40302,40606,40910,41214,41518,41822,42126,42430,42734,43038,43342,43646,43950,44254,44558,44862,45166,45470,45774,46078,46382,46686,46990,47294,47598,47902,48206,48510,48814,49118,49422,49726,50030,50334,50638,50942,51246,51550,51854,52158,52462,52766,53070,53374,53678,53982,54286,54590,54894,55198,55502,55806,56110,56414,56718,57022,57326,57630,57934,58238,58542,58846,59150,59454,59758,60062,60366,60670,60974,61278,61582,61886,62190,62494,62798,63102,63406,63710,64014,64318,64622,64926,65230,65534,65838,66142,66446,66750,67054,67358,67662,67966,68270,68574,68878,69182,69486,69790,70094,70398,70702,71006,71310,71614,71918,72222,72526,72830,73134,73438,73742,74046,74350,74654,74958,75262,75566,75870,76174,76478,76782,77086,77390,77694'/>
+  </group>
+  <group name='174'>
+    <ids val='175,479,783,1087,1391,1695,1999,2303,2607,2911,3215,3519,3823,4127,4431,4735,5039,5343,5647,5951,6255,6559,6863,7167,7471,7775,8079,8383,8687,8991,9295,9599,9903,10207,10511,10815,11119,11423,11727,12031,12335,12639,12943,13247,13551,13855,14159,14463,14767,15071,15375,15679,15983,16287,16591,16895,17199,17503,17807,18111,18415,18719,19023,19327,19631,19935,20239,20543,20847,21151,21455,21759,22063,22367,22671,22975,23279,23583,23887,24191,24495,24799,25103,25407,25711,26015,26319,26623,26927,27231,27535,27839,28143,28447,28751,29055,29359,29663,29967,30271,30575,30879,31183,31487,31791,32095,32399,32703,33007,33311,33615,33919,34223,34527,34831,35135,35439,35743,36047,36351,36655,36959,37263,37567,37871,38175,38479,38783,39087,39391,39695,39999,40303,40607,40911,41215,41519,41823,42127,42431,42735,43039,43343,43647,43951,44255,44559,44863,45167,45471,45775,46079,46383,46687,46991,47295,47599,47903,48207,48511,48815,49119,49423,49727,50031,50335,50639,50943,51247,51551,51855,52159,52463,52767,53071,53375,53679,53983,54287,54591,54895,55199,55503,55807,56111,56415,56719,57023,57327,57631,57935,58239,58543,58847,59151,59455,59759,60063,60367,60671,60975,61279,61583,61887,62191,62495,62799,63103,63407,63711,64015,64319,64623,64927,65231,65535,65839,66143,66447,66751,67055,67359,67663,67967,68271,68575,68879,69183,69487,69791,70095,70399,70703,71007,71311,71615,71919,72223,72527,72831,73135,73439,73743,74047,74351,74655,74959,75263,75567,75871,76175,76479,76783,77087,77391,77695'/>
+  </group>
+  <group name='175'>
+    <ids val='176,480,784,1088,1392,1696,2000,2304,2608,2912,3216,3520,3824,4128,4432,4736,5040,5344,5648,5952,6256,6560,6864,7168,7472,7776,8080,8384,8688,8992,9296,9600,9904,10208,10512,10816,11120,11424,11728,12032,12336,12640,12944,13248,13552,13856,14160,14464,14768,15072,15376,15680,15984,16288,16592,16896,17200,17504,17808,18112,18416,18720,19024,19328,19632,19936,20240,20544,20848,21152,21456,21760,22064,22368,22672,22976,23280,23584,23888,24192,24496,24800,25104,25408,25712,26016,26320,26624,26928,27232,27536,27840,28144,28448,28752,29056,29360,29664,29968,30272,30576,30880,31184,31488,31792,32096,32400,32704,33008,33312,33616,33920,34224,34528,34832,35136,35440,35744,36048,36352,36656,36960,37264,37568,37872,38176,38480,38784,39088,39392,39696,40000,40304,40608,40912,41216,41520,41824,42128,42432,42736,43040,43344,43648,43952,44256,44560,44864,45168,45472,45776,46080,46384,46688,46992,47296,47600,47904,48208,48512,48816,49120,49424,49728,50032,50336,50640,50944,51248,51552,51856,52160,52464,52768,53072,53376,53680,53984,54288,54592,54896,55200,55504,55808,56112,56416,56720,57024,57328,57632,57936,58240,58544,58848,59152,59456,59760,60064,60368,60672,60976,61280,61584,61888,62192,62496,62800,63104,63408,63712,64016,64320,64624,64928,65232,65536,65840,66144,66448,66752,67056,67360,67664,67968,68272,68576,68880,69184,69488,69792,70096,70400,70704,71008,71312,71616,71920,72224,72528,72832,73136,73440,73744,74048,74352,74656,74960,75264,75568,75872,76176,76480,76784,77088,77392,77696'/>
+  </group>
+  <group name='176'>
+    <ids val='177,481,785,1089,1393,1697,2001,2305,2609,2913,3217,3521,3825,4129,4433,4737,5041,5345,5649,5953,6257,6561,6865,7169,7473,7777,8081,8385,8689,8993,9297,9601,9905,10209,10513,10817,11121,11425,11729,12033,12337,12641,12945,13249,13553,13857,14161,14465,14769,15073,15377,15681,15985,16289,16593,16897,17201,17505,17809,18113,18417,18721,19025,19329,19633,19937,20241,20545,20849,21153,21457,21761,22065,22369,22673,22977,23281,23585,23889,24193,24497,24801,25105,25409,25713,26017,26321,26625,26929,27233,27537,27841,28145,28449,28753,29057,29361,29665,29969,30273,30577,30881,31185,31489,31793,32097,32401,32705,33009,33313,33617,33921,34225,34529,34833,35137,35441,35745,36049,36353,36657,36961,37265,37569,37873,38177,38481,38785,39089,39393,39697,40001,40305,40609,40913,41217,41521,41825,42129,42433,42737,43041,43345,43649,43953,44257,44561,44865,45169,45473,45777,46081,46385,46689,46993,47297,47601,47905,48209,48513,48817,49121,49425,49729,50033,50337,50641,50945,51249,51553,51857,52161,52465,52769,53073,53377,53681,53985,54289,54593,54897,55201,55505,55809,56113,56417,56721,57025,57329,57633,57937,58241,58545,58849,59153,59457,59761,60065,60369,60673,60977,61281,61585,61889,62193,62497,62801,63105,63409,63713,64017,64321,64625,64929,65233,65537,65841,66145,66449,66753,67057,67361,67665,67969,68273,68577,68881,69185,69489,69793,70097,70401,70705,71009,71313,71617,71921,72225,72529,72833,73137,73441,73745,74049,74353,74657,74961,75265,75569,75873,76177,76481,76785,77089,77393,77697'/>
+  </group>
+  <group name='177'>
+    <ids val='178,482,786,1090,1394,1698,2002,2306,2610,2914,3218,3522,3826,4130,4434,4738,5042,5346,5650,5954,6258,6562,6866,7170,7474,7778,8082,8386,8690,8994,9298,9602,9906,10210,10514,10818,11122,11426,11730,12034,12338,12642,12946,13250,13554,13858,14162,14466,14770,15074,15378,15682,15986,16290,16594,16898,17202,17506,17810,18114,18418,18722,19026,19330,19634,19938,20242,20546,20850,21154,21458,21762,22066,22370,22674,22978,23282,23586,23890,24194,24498,24802,25106,25410,25714,26018,26322,26626,26930,27234,27538,27842,28146,28450,28754,29058,29362,29666,29970,30274,30578,30882,31186,31490,31794,32098,32402,32706,33010,33314,33618,33922,34226,34530,34834,35138,35442,35746,36050,36354,36658,36962,37266,37570,37874,38178,38482,38786,39090,39394,39698,40002,40306,40610,40914,41218,41522,41826,42130,42434,42738,43042,43346,43650,43954,44258,44562,44866,45170,45474,45778,46082,46386,46690,46994,47298,47602,47906,48210,48514,48818,49122,49426,49730,50034,50338,50642,50946,51250,51554,51858,52162,52466,52770,53074,53378,53682,53986,54290,54594,54898,55202,55506,55810,56114,56418,56722,57026,57330,57634,57938,58242,58546,58850,59154,59458,59762,60066,60370,60674,60978,61282,61586,61890,62194,62498,62802,63106,63410,63714,64018,64322,64626,64930,65234,65538,65842,66146,66450,66754,67058,67362,67666,67970,68274,68578,68882,69186,69490,69794,70098,70402,70706,71010,71314,71618,71922,72226,72530,72834,73138,73442,73746,74050,74354,74658,74962,75266,75570,75874,76178,76482,76786,77090,77394,77698'/>
+  </group>
+  <group name='178'>
+    <ids val='179,483,787,1091,1395,1699,2003,2307,2611,2915,3219,3523,3827,4131,4435,4739,5043,5347,5651,5955,6259,6563,6867,7171,7475,7779,8083,8387,8691,8995,9299,9603,9907,10211,10515,10819,11123,11427,11731,12035,12339,12643,12947,13251,13555,13859,14163,14467,14771,15075,15379,15683,15987,16291,16595,16899,17203,17507,17811,18115,18419,18723,19027,19331,19635,19939,20243,20547,20851,21155,21459,21763,22067,22371,22675,22979,23283,23587,23891,24195,24499,24803,25107,25411,25715,26019,26323,26627,26931,27235,27539,27843,28147,28451,28755,29059,29363,29667,29971,30275,30579,30883,31187,31491,31795,32099,32403,32707,33011,33315,33619,33923,34227,34531,34835,35139,35443,35747,36051,36355,36659,36963,37267,37571,37875,38179,38483,38787,39091,39395,39699,40003,40307,40611,40915,41219,41523,41827,42131,42435,42739,43043,43347,43651,43955,44259,44563,44867,45171,45475,45779,46083,46387,46691,46995,47299,47603,47907,48211,48515,48819,49123,49427,49731,50035,50339,50643,50947,51251,51555,51859,52163,52467,52771,53075,53379,53683,53987,54291,54595,54899,55203,55507,55811,56115,56419,56723,57027,57331,57635,57939,58243,58547,58851,59155,59459,59763,60067,60371,60675,60979,61283,61587,61891,62195,62499,62803,63107,63411,63715,64019,64323,64627,64931,65235,65539,65843,66147,66451,66755,67059,67363,67667,67971,68275,68579,68883,69187,69491,69795,70099,70403,70707,71011,71315,71619,71923,72227,72531,72835,73139,73443,73747,74051,74355,74659,74963,75267,75571,75875,76179,76483,76787,77091,77395,77699'/>
+  </group>
+  <group name='179'>
+    <ids val='180,484,788,1092,1396,1700,2004,2308,2612,2916,3220,3524,3828,4132,4436,4740,5044,5348,5652,5956,6260,6564,6868,7172,7476,7780,8084,8388,8692,8996,9300,9604,9908,10212,10516,10820,11124,11428,11732,12036,12340,12644,12948,13252,13556,13860,14164,14468,14772,15076,15380,15684,15988,16292,16596,16900,17204,17508,17812,18116,18420,18724,19028,19332,19636,19940,20244,20548,20852,21156,21460,21764,22068,22372,22676,22980,23284,23588,23892,24196,24500,24804,25108,25412,25716,26020,26324,26628,26932,27236,27540,27844,28148,28452,28756,29060,29364,29668,29972,30276,30580,30884,31188,31492,31796,32100,32404,32708,33012,33316,33620,33924,34228,34532,34836,35140,35444,35748,36052,36356,36660,36964,37268,37572,37876,38180,38484,38788,39092,39396,39700,40004,40308,40612,40916,41220,41524,41828,42132,42436,42740,43044,43348,43652,43956,44260,44564,44868,45172,45476,45780,46084,46388,46692,46996,47300,47604,47908,48212,48516,48820,49124,49428,49732,50036,50340,50644,50948,51252,51556,51860,52164,52468,52772,53076,53380,53684,53988,54292,54596,54900,55204,55508,55812,56116,56420,56724,57028,57332,57636,57940,58244,58548,58852,59156,59460,59764,60068,60372,60676,60980,61284,61588,61892,62196,62500,62804,63108,63412,63716,64020,64324,64628,64932,65236,65540,65844,66148,66452,66756,67060,67364,67668,67972,68276,68580,68884,69188,69492,69796,70100,70404,70708,71012,71316,71620,71924,72228,72532,72836,73140,73444,73748,74052,74356,74660,74964,75268,75572,75876,76180,76484,76788,77092,77396,77700'/>
+  </group>
+  <group name='180'>
+    <ids val='181,485,789,1093,1397,1701,2005,2309,2613,2917,3221,3525,3829,4133,4437,4741,5045,5349,5653,5957,6261,6565,6869,7173,7477,7781,8085,8389,8693,8997,9301,9605,9909,10213,10517,10821,11125,11429,11733,12037,12341,12645,12949,13253,13557,13861,14165,14469,14773,15077,15381,15685,15989,16293,16597,16901,17205,17509,17813,18117,18421,18725,19029,19333,19637,19941,20245,20549,20853,21157,21461,21765,22069,22373,22677,22981,23285,23589,23893,24197,24501,24805,25109,25413,25717,26021,26325,26629,26933,27237,27541,27845,28149,28453,28757,29061,29365,29669,29973,30277,30581,30885,31189,31493,31797,32101,32405,32709,33013,33317,33621,33925,34229,34533,34837,35141,35445,35749,36053,36357,36661,36965,37269,37573,37877,38181,38485,38789,39093,39397,39701,40005,40309,40613,40917,41221,41525,41829,42133,42437,42741,43045,43349,43653,43957,44261,44565,44869,45173,45477,45781,46085,46389,46693,46997,47301,47605,47909,48213,48517,48821,49125,49429,49733,50037,50341,50645,50949,51253,51557,51861,52165,52469,52773,53077,53381,53685,53989,54293,54597,54901,55205,55509,55813,56117,56421,56725,57029,57333,57637,57941,58245,58549,58853,59157,59461,59765,60069,60373,60677,60981,61285,61589,61893,62197,62501,62805,63109,63413,63717,64021,64325,64629,64933,65237,65541,65845,66149,66453,66757,67061,67365,67669,67973,68277,68581,68885,69189,69493,69797,70101,70405,70709,71013,71317,71621,71925,72229,72533,72837,73141,73445,73749,74053,74357,74661,74965,75269,75573,75877,76181,76485,76789,77093,77397,77701'/>
+  </group>
+  <group name='181'>
+    <ids val='182,486,790,1094,1398,1702,2006,2310,2614,2918,3222,3526,3830,4134,4438,4742,5046,5350,5654,5958,6262,6566,6870,7174,7478,7782,8086,8390,8694,8998,9302,9606,9910,10214,10518,10822,11126,11430,11734,12038,12342,12646,12950,13254,13558,13862,14166,14470,14774,15078,15382,15686,15990,16294,16598,16902,17206,17510,17814,18118,18422,18726,19030,19334,19638,19942,20246,20550,20854,21158,21462,21766,22070,22374,22678,22982,23286,23590,23894,24198,24502,24806,25110,25414,25718,26022,26326,26630,26934,27238,27542,27846,28150,28454,28758,29062,29366,29670,29974,30278,30582,30886,31190,31494,31798,32102,32406,32710,33014,33318,33622,33926,34230,34534,34838,35142,35446,35750,36054,36358,36662,36966,37270,37574,37878,38182,38486,38790,39094,39398,39702,40006,40310,40614,40918,41222,41526,41830,42134,42438,42742,43046,43350,43654,43958,44262,44566,44870,45174,45478,45782,46086,46390,46694,46998,47302,47606,47910,48214,48518,48822,49126,49430,49734,50038,50342,50646,50950,51254,51558,51862,52166,52470,52774,53078,53382,53686,53990,54294,54598,54902,55206,55510,55814,56118,56422,56726,57030,57334,57638,57942,58246,58550,58854,59158,59462,59766,60070,60374,60678,60982,61286,61590,61894,62198,62502,62806,63110,63414,63718,64022,64326,64630,64934,65238,65542,65846,66150,66454,66758,67062,67366,67670,67974,68278,68582,68886,69190,69494,69798,70102,70406,70710,71014,71318,71622,71926,72230,72534,72838,73142,73446,73750,74054,74358,74662,74966,75270,75574,75878,76182,76486,76790,77094,77398,77702'/>
+  </group>
+  <group name='182'>
+    <ids val='183,487,791,1095,1399,1703,2007,2311,2615,2919,3223,3527,3831,4135,4439,4743,5047,5351,5655,5959,6263,6567,6871,7175,7479,7783,8087,8391,8695,8999,9303,9607,9911,10215,10519,10823,11127,11431,11735,12039,12343,12647,12951,13255,13559,13863,14167,14471,14775,15079,15383,15687,15991,16295,16599,16903,17207,17511,17815,18119,18423,18727,19031,19335,19639,19943,20247,20551,20855,21159,21463,21767,22071,22375,22679,22983,23287,23591,23895,24199,24503,24807,25111,25415,25719,26023,26327,26631,26935,27239,27543,27847,28151,28455,28759,29063,29367,29671,29975,30279,30583,30887,31191,31495,31799,32103,32407,32711,33015,33319,33623,33927,34231,34535,34839,35143,35447,35751,36055,36359,36663,36967,37271,37575,37879,38183,38487,38791,39095,39399,39703,40007,40311,40615,40919,41223,41527,41831,42135,42439,42743,43047,43351,43655,43959,44263,44567,44871,45175,45479,45783,46087,46391,46695,46999,47303,47607,47911,48215,48519,48823,49127,49431,49735,50039,50343,50647,50951,51255,51559,51863,52167,52471,52775,53079,53383,53687,53991,54295,54599,54903,55207,55511,55815,56119,56423,56727,57031,57335,57639,57943,58247,58551,58855,59159,59463,59767,60071,60375,60679,60983,61287,61591,61895,62199,62503,62807,63111,63415,63719,64023,64327,64631,64935,65239,65543,65847,66151,66455,66759,67063,67367,67671,67975,68279,68583,68887,69191,69495,69799,70103,70407,70711,71015,71319,71623,71927,72231,72535,72839,73143,73447,73751,74055,74359,74663,74967,75271,75575,75879,76183,76487,76791,77095,77399,77703'/>
+  </group>
+  <group name='183'>
+    <ids val='184,488,792,1096,1400,1704,2008,2312,2616,2920,3224,3528,3832,4136,4440,4744,5048,5352,5656,5960,6264,6568,6872,7176,7480,7784,8088,8392,8696,9000,9304,9608,9912,10216,10520,10824,11128,11432,11736,12040,12344,12648,12952,13256,13560,13864,14168,14472,14776,15080,15384,15688,15992,16296,16600,16904,17208,17512,17816,18120,18424,18728,19032,19336,19640,19944,20248,20552,20856,21160,21464,21768,22072,22376,22680,22984,23288,23592,23896,24200,24504,24808,25112,25416,25720,26024,26328,26632,26936,27240,27544,27848,28152,28456,28760,29064,29368,29672,29976,30280,30584,30888,31192,31496,31800,32104,32408,32712,33016,33320,33624,33928,34232,34536,34840,35144,35448,35752,36056,36360,36664,36968,37272,37576,37880,38184,38488,38792,39096,39400,39704,40008,40312,40616,40920,41224,41528,41832,42136,42440,42744,43048,43352,43656,43960,44264,44568,44872,45176,45480,45784,46088,46392,46696,47000,47304,47608,47912,48216,48520,48824,49128,49432,49736,50040,50344,50648,50952,51256,51560,51864,52168,52472,52776,53080,53384,53688,53992,54296,54600,54904,55208,55512,55816,56120,56424,56728,57032,57336,57640,57944,58248,58552,58856,59160,59464,59768,60072,60376,60680,60984,61288,61592,61896,62200,62504,62808,63112,63416,63720,64024,64328,64632,64936,65240,65544,65848,66152,66456,66760,67064,67368,67672,67976,68280,68584,68888,69192,69496,69800,70104,70408,70712,71016,71320,71624,71928,72232,72536,72840,73144,73448,73752,74056,74360,74664,74968,75272,75576,75880,76184,76488,76792,77096,77400,77704'/>
+  </group>
+  <group name='184'>
+    <ids val='185,489,793,1097,1401,1705,2009,2313,2617,2921,3225,3529,3833,4137,4441,4745,5049,5353,5657,5961,6265,6569,6873,7177,7481,7785,8089,8393,8697,9001,9305,9609,9913,10217,10521,10825,11129,11433,11737,12041,12345,12649,12953,13257,13561,13865,14169,14473,14777,15081,15385,15689,15993,16297,16601,16905,17209,17513,17817,18121,18425,18729,19033,19337,19641,19945,20249,20553,20857,21161,21465,21769,22073,22377,22681,22985,23289,23593,23897,24201,24505,24809,25113,25417,25721,26025,26329,26633,26937,27241,27545,27849,28153,28457,28761,29065,29369,29673,29977,30281,30585,30889,31193,31497,31801,32105,32409,32713,33017,33321,33625,33929,34233,34537,34841,35145,35449,35753,36057,36361,36665,36969,37273,37577,37881,38185,38489,38793,39097,39401,39705,40009,40313,40617,40921,41225,41529,41833,42137,42441,42745,43049,43353,43657,43961,44265,44569,44873,45177,45481,45785,46089,46393,46697,47001,47305,47609,47913,48217,48521,48825,49129,49433,49737,50041,50345,50649,50953,51257,51561,51865,52169,52473,52777,53081,53385,53689,53993,54297,54601,54905,55209,55513,55817,56121,56425,56729,57033,57337,57641,57945,58249,58553,58857,59161,59465,59769,60073,60377,60681,60985,61289,61593,61897,62201,62505,62809,63113,63417,63721,64025,64329,64633,64937,65241,65545,65849,66153,66457,66761,67065,67369,67673,67977,68281,68585,68889,69193,69497,69801,70105,70409,70713,71017,71321,71625,71929,72233,72537,72841,73145,73449,73753,74057,74361,74665,74969,75273,75577,75881,76185,76489,76793,77097,77401,77705'/>
+  </group>
+  <group name='185'>
+    <ids val='186,490,794,1098,1402,1706,2010,2314,2618,2922,3226,3530,3834,4138,4442,4746,5050,5354,5658,5962,6266,6570,6874,7178,7482,7786,8090,8394,8698,9002,9306,9610,9914,10218,10522,10826,11130,11434,11738,12042,12346,12650,12954,13258,13562,13866,14170,14474,14778,15082,15386,15690,15994,16298,16602,16906,17210,17514,17818,18122,18426,18730,19034,19338,19642,19946,20250,20554,20858,21162,21466,21770,22074,22378,22682,22986,23290,23594,23898,24202,24506,24810,25114,25418,25722,26026,26330,26634,26938,27242,27546,27850,28154,28458,28762,29066,29370,29674,29978,30282,30586,30890,31194,31498,31802,32106,32410,32714,33018,33322,33626,33930,34234,34538,34842,35146,35450,35754,36058,36362,36666,36970,37274,37578,37882,38186,38490,38794,39098,39402,39706,40010,40314,40618,40922,41226,41530,41834,42138,42442,42746,43050,43354,43658,43962,44266,44570,44874,45178,45482,45786,46090,46394,46698,47002,47306,47610,47914,48218,48522,48826,49130,49434,49738,50042,50346,50650,50954,51258,51562,51866,52170,52474,52778,53082,53386,53690,53994,54298,54602,54906,55210,55514,55818,56122,56426,56730,57034,57338,57642,57946,58250,58554,58858,59162,59466,59770,60074,60378,60682,60986,61290,61594,61898,62202,62506,62810,63114,63418,63722,64026,64330,64634,64938,65242,65546,65850,66154,66458,66762,67066,67370,67674,67978,68282,68586,68890,69194,69498,69802,70106,70410,70714,71018,71322,71626,71930,72234,72538,72842,73146,73450,73754,74058,74362,74666,74970,75274,75578,75882,76186,76490,76794,77098,77402,77706'/>
+  </group>
+  <group name='186'>
+    <ids val='187,491,795,1099,1403,1707,2011,2315,2619,2923,3227,3531,3835,4139,4443,4747,5051,5355,5659,5963,6267,6571,6875,7179,7483,7787,8091,8395,8699,9003,9307,9611,9915,10219,10523,10827,11131,11435,11739,12043,12347,12651,12955,13259,13563,13867,14171,14475,14779,15083,15387,15691,15995,16299,16603,16907,17211,17515,17819,18123,18427,18731,19035,19339,19643,19947,20251,20555,20859,21163,21467,21771,22075,22379,22683,22987,23291,23595,23899,24203,24507,24811,25115,25419,25723,26027,26331,26635,26939,27243,27547,27851,28155,28459,28763,29067,29371,29675,29979,30283,30587,30891,31195,31499,31803,32107,32411,32715,33019,33323,33627,33931,34235,34539,34843,35147,35451,35755,36059,36363,36667,36971,37275,37579,37883,38187,38491,38795,39099,39403,39707,40011,40315,40619,40923,41227,41531,41835,42139,42443,42747,43051,43355,43659,43963,44267,44571,44875,45179,45483,45787,46091,46395,46699,47003,47307,47611,47915,48219,48523,48827,49131,49435,49739,50043,50347,50651,50955,51259,51563,51867,52171,52475,52779,53083,53387,53691,53995,54299,54603,54907,55211,55515,55819,56123,56427,56731,57035,57339,57643,57947,58251,58555,58859,59163,59467,59771,60075,60379,60683,60987,61291,61595,61899,62203,62507,62811,63115,63419,63723,64027,64331,64635,64939,65243,65547,65851,66155,66459,66763,67067,67371,67675,67979,68283,68587,68891,69195,69499,69803,70107,70411,70715,71019,71323,71627,71931,72235,72539,72843,73147,73451,73755,74059,74363,74667,74971,75275,75579,75883,76187,76491,76795,77099,77403,77707'/>
+  </group>
+  <group name='187'>
+    <ids val='188,492,796,1100,1404,1708,2012,2316,2620,2924,3228,3532,3836,4140,4444,4748,5052,5356,5660,5964,6268,6572,6876,7180,7484,7788,8092,8396,8700,9004,9308,9612,9916,10220,10524,10828,11132,11436,11740,12044,12348,12652,12956,13260,13564,13868,14172,14476,14780,15084,15388,15692,15996,16300,16604,16908,17212,17516,17820,18124,18428,18732,19036,19340,19644,19948,20252,20556,20860,21164,21468,21772,22076,22380,22684,22988,23292,23596,23900,24204,24508,24812,25116,25420,25724,26028,26332,26636,26940,27244,27548,27852,28156,28460,28764,29068,29372,29676,29980,30284,30588,30892,31196,31500,31804,32108,32412,32716,33020,33324,33628,33932,34236,34540,34844,35148,35452,35756,36060,36364,36668,36972,37276,37580,37884,38188,38492,38796,39100,39404,39708,40012,40316,40620,40924,41228,41532,41836,42140,42444,42748,43052,43356,43660,43964,44268,44572,44876,45180,45484,45788,46092,46396,46700,47004,47308,47612,47916,48220,48524,48828,49132,49436,49740,50044,50348,50652,50956,51260,51564,51868,52172,52476,52780,53084,53388,53692,53996,54300,54604,54908,55212,55516,55820,56124,56428,56732,57036,57340,57644,57948,58252,58556,58860,59164,59468,59772,60076,60380,60684,60988,61292,61596,61900,62204,62508,62812,63116,63420,63724,64028,64332,64636,64940,65244,65548,65852,66156,66460,66764,67068,67372,67676,67980,68284,68588,68892,69196,69500,69804,70108,70412,70716,71020,71324,71628,71932,72236,72540,72844,73148,73452,73756,74060,74364,74668,74972,75276,75580,75884,76188,76492,76796,77100,77404,77708'/>
+  </group>
+  <group name='188'>
+    <ids val='189,493,797,1101,1405,1709,2013,2317,2621,2925,3229,3533,3837,4141,4445,4749,5053,5357,5661,5965,6269,6573,6877,7181,7485,7789,8093,8397,8701,9005,9309,9613,9917,10221,10525,10829,11133,11437,11741,12045,12349,12653,12957,13261,13565,13869,14173,14477,14781,15085,15389,15693,15997,16301,16605,16909,17213,17517,17821,18125,18429,18733,19037,19341,19645,19949,20253,20557,20861,21165,21469,21773,22077,22381,22685,22989,23293,23597,23901,24205,24509,24813,25117,25421,25725,26029,26333,26637,26941,27245,27549,27853,28157,28461,28765,29069,29373,29677,29981,30285,30589,30893,31197,31501,31805,32109,32413,32717,33021,33325,33629,33933,34237,34541,34845,35149,35453,35757,36061,36365,36669,36973,37277,37581,37885,38189,38493,38797,39101,39405,39709,40013,40317,40621,40925,41229,41533,41837,42141,42445,42749,43053,43357,43661,43965,44269,44573,44877,45181,45485,45789,46093,46397,46701,47005,47309,47613,47917,48221,48525,48829,49133,49437,49741,50045,50349,50653,50957,51261,51565,51869,52173,52477,52781,53085,53389,53693,53997,54301,54605,54909,55213,55517,55821,56125,56429,56733,57037,57341,57645,57949,58253,58557,58861,59165,59469,59773,60077,60381,60685,60989,61293,61597,61901,62205,62509,62813,63117,63421,63725,64029,64333,64637,64941,65245,65549,65853,66157,66461,66765,67069,67373,67677,67981,68285,68589,68893,69197,69501,69805,70109,70413,70717,71021,71325,71629,71933,72237,72541,72845,73149,73453,73757,74061,74365,74669,74973,75277,75581,75885,76189,76493,76797,77101,77405,77709'/>
+  </group>
+  <group name='189'>
+    <ids val='190,494,798,1102,1406,1710,2014,2318,2622,2926,3230,3534,3838,4142,4446,4750,5054,5358,5662,5966,6270,6574,6878,7182,7486,7790,8094,8398,8702,9006,9310,9614,9918,10222,10526,10830,11134,11438,11742,12046,12350,12654,12958,13262,13566,13870,14174,14478,14782,15086,15390,15694,15998,16302,16606,16910,17214,17518,17822,18126,18430,18734,19038,19342,19646,19950,20254,20558,20862,21166,21470,21774,22078,22382,22686,22990,23294,23598,23902,24206,24510,24814,25118,25422,25726,26030,26334,26638,26942,27246,27550,27854,28158,28462,28766,29070,29374,29678,29982,30286,30590,30894,31198,31502,31806,32110,32414,32718,33022,33326,33630,33934,34238,34542,34846,35150,35454,35758,36062,36366,36670,36974,37278,37582,37886,38190,38494,38798,39102,39406,39710,40014,40318,40622,40926,41230,41534,41838,42142,42446,42750,43054,43358,43662,43966,44270,44574,44878,45182,45486,45790,46094,46398,46702,47006,47310,47614,47918,48222,48526,48830,49134,49438,49742,50046,50350,50654,50958,51262,51566,51870,52174,52478,52782,53086,53390,53694,53998,54302,54606,54910,55214,55518,55822,56126,56430,56734,57038,57342,57646,57950,58254,58558,58862,59166,59470,59774,60078,60382,60686,60990,61294,61598,61902,62206,62510,62814,63118,63422,63726,64030,64334,64638,64942,65246,65550,65854,66158,66462,66766,67070,67374,67678,67982,68286,68590,68894,69198,69502,69806,70110,70414,70718,71022,71326,71630,71934,72238,72542,72846,73150,73454,73758,74062,74366,74670,74974,75278,75582,75886,76190,76494,76798,77102,77406,77710'/>
+  </group>
+  <group name='190'>
+    <ids val='191,495,799,1103,1407,1711,2015,2319,2623,2927,3231,3535,3839,4143,4447,4751,5055,5359,5663,5967,6271,6575,6879,7183,7487,7791,8095,8399,8703,9007,9311,9615,9919,10223,10527,10831,11135,11439,11743,12047,12351,12655,12959,13263,13567,13871,14175,14479,14783,15087,15391,15695,15999,16303,16607,16911,17215,17519,17823,18127,18431,18735,19039,19343,19647,19951,20255,20559,20863,21167,21471,21775,22079,22383,22687,22991,23295,23599,23903,24207,24511,24815,25119,25423,25727,26031,26335,26639,26943,27247,27551,27855,28159,28463,28767,29071,29375,29679,29983,30287,30591,30895,31199,31503,31807,32111,32415,32719,33023,33327,33631,33935,34239,34543,34847,35151,35455,35759,36063,36367,36671,36975,37279,37583,37887,38191,38495,38799,39103,39407,39711,40015,40319,40623,40927,41231,41535,41839,42143,42447,42751,43055,43359,43663,43967,44271,44575,44879,45183,45487,45791,46095,46399,46703,47007,47311,47615,47919,48223,48527,48831,49135,49439,49743,50047,50351,50655,50959,51263,51567,51871,52175,52479,52783,53087,53391,53695,53999,54303,54607,54911,55215,55519,55823,56127,56431,56735,57039,57343,57647,57951,58255,58559,58863,59167,59471,59775,60079,60383,60687,60991,61295,61599,61903,62207,62511,62815,63119,63423,63727,64031,64335,64639,64943,65247,65551,65855,66159,66463,66767,67071,67375,67679,67983,68287,68591,68895,69199,69503,69807,70111,70415,70719,71023,71327,71631,71935,72239,72543,72847,73151,73455,73759,74063,74367,74671,74975,75279,75583,75887,76191,76495,76799,77103,77407,77711'/>
+  </group>
+  <group name='191'>
+    <ids val='192,496,800,1104,1408,1712,2016,2320,2624,2928,3232,3536,3840,4144,4448,4752,5056,5360,5664,5968,6272,6576,6880,7184,7488,7792,8096,8400,8704,9008,9312,9616,9920,10224,10528,10832,11136,11440,11744,12048,12352,12656,12960,13264,13568,13872,14176,14480,14784,15088,15392,15696,16000,16304,16608,16912,17216,17520,17824,18128,18432,18736,19040,19344,19648,19952,20256,20560,20864,21168,21472,21776,22080,22384,22688,22992,23296,23600,23904,24208,24512,24816,25120,25424,25728,26032,26336,26640,26944,27248,27552,27856,28160,28464,28768,29072,29376,29680,29984,30288,30592,30896,31200,31504,31808,32112,32416,32720,33024,33328,33632,33936,34240,34544,34848,35152,35456,35760,36064,36368,36672,36976,37280,37584,37888,38192,38496,38800,39104,39408,39712,40016,40320,40624,40928,41232,41536,41840,42144,42448,42752,43056,43360,43664,43968,44272,44576,44880,45184,45488,45792,46096,46400,46704,47008,47312,47616,47920,48224,48528,48832,49136,49440,49744,50048,50352,50656,50960,51264,51568,51872,52176,52480,52784,53088,53392,53696,54000,54304,54608,54912,55216,55520,55824,56128,56432,56736,57040,57344,57648,57952,58256,58560,58864,59168,59472,59776,60080,60384,60688,60992,61296,61600,61904,62208,62512,62816,63120,63424,63728,64032,64336,64640,64944,65248,65552,65856,66160,66464,66768,67072,67376,67680,67984,68288,68592,68896,69200,69504,69808,70112,70416,70720,71024,71328,71632,71936,72240,72544,72848,73152,73456,73760,74064,74368,74672,74976,75280,75584,75888,76192,76496,76800,77104,77408,77712'/>
+  </group>
+  <group name='192'>
+    <ids val='193,497,801,1105,1409,1713,2017,2321,2625,2929,3233,3537,3841,4145,4449,4753,5057,5361,5665,5969,6273,6577,6881,7185,7489,7793,8097,8401,8705,9009,9313,9617,9921,10225,10529,10833,11137,11441,11745,12049,12353,12657,12961,13265,13569,13873,14177,14481,14785,15089,15393,15697,16001,16305,16609,16913,17217,17521,17825,18129,18433,18737,19041,19345,19649,19953,20257,20561,20865,21169,21473,21777,22081,22385,22689,22993,23297,23601,23905,24209,24513,24817,25121,25425,25729,26033,26337,26641,26945,27249,27553,27857,28161,28465,28769,29073,29377,29681,29985,30289,30593,30897,31201,31505,31809,32113,32417,32721,33025,33329,33633,33937,34241,34545,34849,35153,35457,35761,36065,36369,36673,36977,37281,37585,37889,38193,38497,38801,39105,39409,39713,40017,40321,40625,40929,41233,41537,41841,42145,42449,42753,43057,43361,43665,43969,44273,44577,44881,45185,45489,45793,46097,46401,46705,47009,47313,47617,47921,48225,48529,48833,49137,49441,49745,50049,50353,50657,50961,51265,51569,51873,52177,52481,52785,53089,53393,53697,54001,54305,54609,54913,55217,55521,55825,56129,56433,56737,57041,57345,57649,57953,58257,58561,58865,59169,59473,59777,60081,60385,60689,60993,61297,61601,61905,62209,62513,62817,63121,63425,63729,64033,64337,64641,64945,65249,65553,65857,66161,66465,66769,67073,67377,67681,67985,68289,68593,68897,69201,69505,69809,70113,70417,70721,71025,71329,71633,71937,72241,72545,72849,73153,73457,73761,74065,74369,74673,74977,75281,75585,75889,76193,76497,76801,77105,77409,77713'/>
+  </group>
+  <group name='193'>
+    <ids val='194,498,802,1106,1410,1714,2018,2322,2626,2930,3234,3538,3842,4146,4450,4754,5058,5362,5666,5970,6274,6578,6882,7186,7490,7794,8098,8402,8706,9010,9314,9618,9922,10226,10530,10834,11138,11442,11746,12050,12354,12658,12962,13266,13570,13874,14178,14482,14786,15090,15394,15698,16002,16306,16610,16914,17218,17522,17826,18130,18434,18738,19042,19346,19650,19954,20258,20562,20866,21170,21474,21778,22082,22386,22690,22994,23298,23602,23906,24210,24514,24818,25122,25426,25730,26034,26338,26642,26946,27250,27554,27858,28162,28466,28770,29074,29378,29682,29986,30290,30594,30898,31202,31506,31810,32114,32418,32722,33026,33330,33634,33938,34242,34546,34850,35154,35458,35762,36066,36370,36674,36978,37282,37586,37890,38194,38498,38802,39106,39410,39714,40018,40322,40626,40930,41234,41538,41842,42146,42450,42754,43058,43362,43666,43970,44274,44578,44882,45186,45490,45794,46098,46402,46706,47010,47314,47618,47922,48226,48530,48834,49138,49442,49746,50050,50354,50658,50962,51266,51570,51874,52178,52482,52786,53090,53394,53698,54002,54306,54610,54914,55218,55522,55826,56130,56434,56738,57042,57346,57650,57954,58258,58562,58866,59170,59474,59778,60082,60386,60690,60994,61298,61602,61906,62210,62514,62818,63122,63426,63730,64034,64338,64642,64946,65250,65554,65858,66162,66466,66770,67074,67378,67682,67986,68290,68594,68898,69202,69506,69810,70114,70418,70722,71026,71330,71634,71938,72242,72546,72850,73154,73458,73762,74066,74370,74674,74978,75282,75586,75890,76194,76498,76802,77106,77410,77714'/>
+  </group>
+  <group name='194'>
+    <ids val='195,499,803,1107,1411,1715,2019,2323,2627,2931,3235,3539,3843,4147,4451,4755,5059,5363,5667,5971,6275,6579,6883,7187,7491,7795,8099,8403,8707,9011,9315,9619,9923,10227,10531,10835,11139,11443,11747,12051,12355,12659,12963,13267,13571,13875,14179,14483,14787,15091,15395,15699,16003,16307,16611,16915,17219,17523,17827,18131,18435,18739,19043,19347,19651,19955,20259,20563,20867,21171,21475,21779,22083,22387,22691,22995,23299,23603,23907,24211,24515,24819,25123,25427,25731,26035,26339,26643,26947,27251,27555,27859,28163,28467,28771,29075,29379,29683,29987,30291,30595,30899,31203,31507,31811,32115,32419,32723,33027,33331,33635,33939,34243,34547,34851,35155,35459,35763,36067,36371,36675,36979,37283,37587,37891,38195,38499,38803,39107,39411,39715,40019,40323,40627,40931,41235,41539,41843,42147,42451,42755,43059,43363,43667,43971,44275,44579,44883,45187,45491,45795,46099,46403,46707,47011,47315,47619,47923,48227,48531,48835,49139,49443,49747,50051,50355,50659,50963,51267,51571,51875,52179,52483,52787,53091,53395,53699,54003,54307,54611,54915,55219,55523,55827,56131,56435,56739,57043,57347,57651,57955,58259,58563,58867,59171,59475,59779,60083,60387,60691,60995,61299,61603,61907,62211,62515,62819,63123,63427,63731,64035,64339,64643,64947,65251,65555,65859,66163,66467,66771,67075,67379,67683,67987,68291,68595,68899,69203,69507,69811,70115,70419,70723,71027,71331,71635,71939,72243,72547,72851,73155,73459,73763,74067,74371,74675,74979,75283,75587,75891,76195,76499,76803,77107,77411,77715'/>
+  </group>
+  <group name='195'>
+    <ids val='196,500,804,1108,1412,1716,2020,2324,2628,2932,3236,3540,3844,4148,4452,4756,5060,5364,5668,5972,6276,6580,6884,7188,7492,7796,8100,8404,8708,9012,9316,9620,9924,10228,10532,10836,11140,11444,11748,12052,12356,12660,12964,13268,13572,13876,14180,14484,14788,15092,15396,15700,16004,16308,16612,16916,17220,17524,17828,18132,18436,18740,19044,19348,19652,19956,20260,20564,20868,21172,21476,21780,22084,22388,22692,22996,23300,23604,23908,24212,24516,24820,25124,25428,25732,26036,26340,26644,26948,27252,27556,27860,28164,28468,28772,29076,29380,29684,29988,30292,30596,30900,31204,31508,31812,32116,32420,32724,33028,33332,33636,33940,34244,34548,34852,35156,35460,35764,36068,36372,36676,36980,37284,37588,37892,38196,38500,38804,39108,39412,39716,40020,40324,40628,40932,41236,41540,41844,42148,42452,42756,43060,43364,43668,43972,44276,44580,44884,45188,45492,45796,46100,46404,46708,47012,47316,47620,47924,48228,48532,48836,49140,49444,49748,50052,50356,50660,50964,51268,51572,51876,52180,52484,52788,53092,53396,53700,54004,54308,54612,54916,55220,55524,55828,56132,56436,56740,57044,57348,57652,57956,58260,58564,58868,59172,59476,59780,60084,60388,60692,60996,61300,61604,61908,62212,62516,62820,63124,63428,63732,64036,64340,64644,64948,65252,65556,65860,66164,66468,66772,67076,67380,67684,67988,68292,68596,68900,69204,69508,69812,70116,70420,70724,71028,71332,71636,71940,72244,72548,72852,73156,73460,73764,74068,74372,74676,74980,75284,75588,75892,76196,76500,76804,77108,77412,77716'/>
+  </group>
+  <group name='196'>
+    <ids val='197,501,805,1109,1413,1717,2021,2325,2629,2933,3237,3541,3845,4149,4453,4757,5061,5365,5669,5973,6277,6581,6885,7189,7493,7797,8101,8405,8709,9013,9317,9621,9925,10229,10533,10837,11141,11445,11749,12053,12357,12661,12965,13269,13573,13877,14181,14485,14789,15093,15397,15701,16005,16309,16613,16917,17221,17525,17829,18133,18437,18741,19045,19349,19653,19957,20261,20565,20869,21173,21477,21781,22085,22389,22693,22997,23301,23605,23909,24213,24517,24821,25125,25429,25733,26037,26341,26645,26949,27253,27557,27861,28165,28469,28773,29077,29381,29685,29989,30293,30597,30901,31205,31509,31813,32117,32421,32725,33029,33333,33637,33941,34245,34549,34853,35157,35461,35765,36069,36373,36677,36981,37285,37589,37893,38197,38501,38805,39109,39413,39717,40021,40325,40629,40933,41237,41541,41845,42149,42453,42757,43061,43365,43669,43973,44277,44581,44885,45189,45493,45797,46101,46405,46709,47013,47317,47621,47925,48229,48533,48837,49141,49445,49749,50053,50357,50661,50965,51269,51573,51877,52181,52485,52789,53093,53397,53701,54005,54309,54613,54917,55221,55525,55829,56133,56437,56741,57045,57349,57653,57957,58261,58565,58869,59173,59477,59781,60085,60389,60693,60997,61301,61605,61909,62213,62517,62821,63125,63429,63733,64037,64341,64645,64949,65253,65557,65861,66165,66469,66773,67077,67381,67685,67989,68293,68597,68901,69205,69509,69813,70117,70421,70725,71029,71333,71637,71941,72245,72549,72853,73157,73461,73765,74069,74373,74677,74981,75285,75589,75893,76197,76501,76805,77109,77413,77717'/>
+  </group>
+  <group name='197'>
+    <ids val='198,502,806,1110,1414,1718,2022,2326,2630,2934,3238,3542,3846,4150,4454,4758,5062,5366,5670,5974,6278,6582,6886,7190,7494,7798,8102,8406,8710,9014,9318,9622,9926,10230,10534,10838,11142,11446,11750,12054,12358,12662,12966,13270,13574,13878,14182,14486,14790,15094,15398,15702,16006,16310,16614,16918,17222,17526,17830,18134,18438,18742,19046,19350,19654,19958,20262,20566,20870,21174,21478,21782,22086,22390,22694,22998,23302,23606,23910,24214,24518,24822,25126,25430,25734,26038,26342,26646,26950,27254,27558,27862,28166,28470,28774,29078,29382,29686,29990,30294,30598,30902,31206,31510,31814,32118,32422,32726,33030,33334,33638,33942,34246,34550,34854,35158,35462,35766,36070,36374,36678,36982,37286,37590,37894,38198,38502,38806,39110,39414,39718,40022,40326,40630,40934,41238,41542,41846,42150,42454,42758,43062,43366,43670,43974,44278,44582,44886,45190,45494,45798,46102,46406,46710,47014,47318,47622,47926,48230,48534,48838,49142,49446,49750,50054,50358,50662,50966,51270,51574,51878,52182,52486,52790,53094,53398,53702,54006,54310,54614,54918,55222,55526,55830,56134,56438,56742,57046,57350,57654,57958,58262,58566,58870,59174,59478,59782,60086,60390,60694,60998,61302,61606,61910,62214,62518,62822,63126,63430,63734,64038,64342,64646,64950,65254,65558,65862,66166,66470,66774,67078,67382,67686,67990,68294,68598,68902,69206,69510,69814,70118,70422,70726,71030,71334,71638,71942,72246,72550,72854,73158,73462,73766,74070,74374,74678,74982,75286,75590,75894,76198,76502,76806,77110,77414,77718'/>
+  </group>
+  <group name='198'>
+    <ids val='199,503,807,1111,1415,1719,2023,2327,2631,2935,3239,3543,3847,4151,4455,4759,5063,5367,5671,5975,6279,6583,6887,7191,7495,7799,8103,8407,8711,9015,9319,9623,9927,10231,10535,10839,11143,11447,11751,12055,12359,12663,12967,13271,13575,13879,14183,14487,14791,15095,15399,15703,16007,16311,16615,16919,17223,17527,17831,18135,18439,18743,19047,19351,19655,19959,20263,20567,20871,21175,21479,21783,22087,22391,22695,22999,23303,23607,23911,24215,24519,24823,25127,25431,25735,26039,26343,26647,26951,27255,27559,27863,28167,28471,28775,29079,29383,29687,29991,30295,30599,30903,31207,31511,31815,32119,32423,32727,33031,33335,33639,33943,34247,34551,34855,35159,35463,35767,36071,36375,36679,36983,37287,37591,37895,38199,38503,38807,39111,39415,39719,40023,40327,40631,40935,41239,41543,41847,42151,42455,42759,43063,43367,43671,43975,44279,44583,44887,45191,45495,45799,46103,46407,46711,47015,47319,47623,47927,48231,48535,48839,49143,49447,49751,50055,50359,50663,50967,51271,51575,51879,52183,52487,52791,53095,53399,53703,54007,54311,54615,54919,55223,55527,55831,56135,56439,56743,57047,57351,57655,57959,58263,58567,58871,59175,59479,59783,60087,60391,60695,60999,61303,61607,61911,62215,62519,62823,63127,63431,63735,64039,64343,64647,64951,65255,65559,65863,66167,66471,66775,67079,67383,67687,67991,68295,68599,68903,69207,69511,69815,70119,70423,70727,71031,71335,71639,71943,72247,72551,72855,73159,73463,73767,74071,74375,74679,74983,75287,75591,75895,76199,76503,76807,77111,77415,77719'/>
+  </group>
+  <group name='199'>
+    <ids val='200,504,808,1112,1416,1720,2024,2328,2632,2936,3240,3544,3848,4152,4456,4760,5064,5368,5672,5976,6280,6584,6888,7192,7496,7800,8104,8408,8712,9016,9320,9624,9928,10232,10536,10840,11144,11448,11752,12056,12360,12664,12968,13272,13576,13880,14184,14488,14792,15096,15400,15704,16008,16312,16616,16920,17224,17528,17832,18136,18440,18744,19048,19352,19656,19960,20264,20568,20872,21176,21480,21784,22088,22392,22696,23000,23304,23608,23912,24216,24520,24824,25128,25432,25736,26040,26344,26648,26952,27256,27560,27864,28168,28472,28776,29080,29384,29688,29992,30296,30600,30904,31208,31512,31816,32120,32424,32728,33032,33336,33640,33944,34248,34552,34856,35160,35464,35768,36072,36376,36680,36984,37288,37592,37896,38200,38504,38808,39112,39416,39720,40024,40328,40632,40936,41240,41544,41848,42152,42456,42760,43064,43368,43672,43976,44280,44584,44888,45192,45496,45800,46104,46408,46712,47016,47320,47624,47928,48232,48536,48840,49144,49448,49752,50056,50360,50664,50968,51272,51576,51880,52184,52488,52792,53096,53400,53704,54008,54312,54616,54920,55224,55528,55832,56136,56440,56744,57048,57352,57656,57960,58264,58568,58872,59176,59480,59784,60088,60392,60696,61000,61304,61608,61912,62216,62520,62824,63128,63432,63736,64040,64344,64648,64952,65256,65560,65864,66168,66472,66776,67080,67384,67688,67992,68296,68600,68904,69208,69512,69816,70120,70424,70728,71032,71336,71640,71944,72248,72552,72856,73160,73464,73768,74072,74376,74680,74984,75288,75592,75896,76200,76504,76808,77112,77416,77720'/>
+  </group>
+  <group name='200'>
+    <ids val='201,505,809,1113,1417,1721,2025,2329,2633,2937,3241,3545,3849,4153,4457,4761,5065,5369,5673,5977,6281,6585,6889,7193,7497,7801,8105,8409,8713,9017,9321,9625,9929,10233,10537,10841,11145,11449,11753,12057,12361,12665,12969,13273,13577,13881,14185,14489,14793,15097,15401,15705,16009,16313,16617,16921,17225,17529,17833,18137,18441,18745,19049,19353,19657,19961,20265,20569,20873,21177,21481,21785,22089,22393,22697,23001,23305,23609,23913,24217,24521,24825,25129,25433,25737,26041,26345,26649,26953,27257,27561,27865,28169,28473,28777,29081,29385,29689,29993,30297,30601,30905,31209,31513,31817,32121,32425,32729,33033,33337,33641,33945,34249,34553,34857,35161,35465,35769,36073,36377,36681,36985,37289,37593,37897,38201,38505,38809,39113,39417,39721,40025,40329,40633,40937,41241,41545,41849,42153,42457,42761,43065,43369,43673,43977,44281,44585,44889,45193,45497,45801,46105,46409,46713,47017,47321,47625,47929,48233,48537,48841,49145,49449,49753,50057,50361,50665,50969,51273,51577,51881,52185,52489,52793,53097,53401,53705,54009,54313,54617,54921,55225,55529,55833,56137,56441,56745,57049,57353,57657,57961,58265,58569,58873,59177,59481,59785,60089,60393,60697,61001,61305,61609,61913,62217,62521,62825,63129,63433,63737,64041,64345,64649,64953,65257,65561,65865,66169,66473,66777,67081,67385,67689,67993,68297,68601,68905,69209,69513,69817,70121,70425,70729,71033,71337,71641,71945,72249,72553,72857,73161,73465,73769,74073,74377,74681,74985,75289,75593,75897,76201,76505,76809,77113,77417,77721'/>
+  </group>
+  <group name='201'>
+    <ids val='202,506,810,1114,1418,1722,2026,2330,2634,2938,3242,3546,3850,4154,4458,4762,5066,5370,5674,5978,6282,6586,6890,7194,7498,7802,8106,8410,8714,9018,9322,9626,9930,10234,10538,10842,11146,11450,11754,12058,12362,12666,12970,13274,13578,13882,14186,14490,14794,15098,15402,15706,16010,16314,16618,16922,17226,17530,17834,18138,18442,18746,19050,19354,19658,19962,20266,20570,20874,21178,21482,21786,22090,22394,22698,23002,23306,23610,23914,24218,24522,24826,25130,25434,25738,26042,26346,26650,26954,27258,27562,27866,28170,28474,28778,29082,29386,29690,29994,30298,30602,30906,31210,31514,31818,32122,32426,32730,33034,33338,33642,33946,34250,34554,34858,35162,35466,35770,36074,36378,36682,36986,37290,37594,37898,38202,38506,38810,39114,39418,39722,40026,40330,40634,40938,41242,41546,41850,42154,42458,42762,43066,43370,43674,43978,44282,44586,44890,45194,45498,45802,46106,46410,46714,47018,47322,47626,47930,48234,48538,48842,49146,49450,49754,50058,50362,50666,50970,51274,51578,51882,52186,52490,52794,53098,53402,53706,54010,54314,54618,54922,55226,55530,55834,56138,56442,56746,57050,57354,57658,57962,58266,58570,58874,59178,59482,59786,60090,60394,60698,61002,61306,61610,61914,62218,62522,62826,63130,63434,63738,64042,64346,64650,64954,65258,65562,65866,66170,66474,66778,67082,67386,67690,67994,68298,68602,68906,69210,69514,69818,70122,70426,70730,71034,71338,71642,71946,72250,72554,72858,73162,73466,73770,74074,74378,74682,74986,75290,75594,75898,76202,76506,76810,77114,77418,77722'/>
+  </group>
+  <group name='202'>
+    <ids val='203,507,811,1115,1419,1723,2027,2331,2635,2939,3243,3547,3851,4155,4459,4763,5067,5371,5675,5979,6283,6587,6891,7195,7499,7803,8107,8411,8715,9019,9323,9627,9931,10235,10539,10843,11147,11451,11755,12059,12363,12667,12971,13275,13579,13883,14187,14491,14795,15099,15403,15707,16011,16315,16619,16923,17227,17531,17835,18139,18443,18747,19051,19355,19659,19963,20267,20571,20875,21179,21483,21787,22091,22395,22699,23003,23307,23611,23915,24219,24523,24827,25131,25435,25739,26043,26347,26651,26955,27259,27563,27867,28171,28475,28779,29083,29387,29691,29995,30299,30603,30907,31211,31515,31819,32123,32427,32731,33035,33339,33643,33947,34251,34555,34859,35163,35467,35771,36075,36379,36683,36987,37291,37595,37899,38203,38507,38811,39115,39419,39723,40027,40331,40635,40939,41243,41547,41851,42155,42459,42763,43067,43371,43675,43979,44283,44587,44891,45195,45499,45803,46107,46411,46715,47019,47323,47627,47931,48235,48539,48843,49147,49451,49755,50059,50363,50667,50971,51275,51579,51883,52187,52491,52795,53099,53403,53707,54011,54315,54619,54923,55227,55531,55835,56139,56443,56747,57051,57355,57659,57963,58267,58571,58875,59179,59483,59787,60091,60395,60699,61003,61307,61611,61915,62219,62523,62827,63131,63435,63739,64043,64347,64651,64955,65259,65563,65867,66171,66475,66779,67083,67387,67691,67995,68299,68603,68907,69211,69515,69819,70123,70427,70731,71035,71339,71643,71947,72251,72555,72859,73163,73467,73771,74075,74379,74683,74987,75291,75595,75899,76203,76507,76811,77115,77419,77723'/>
+  </group>
+  <group name='203'>
+    <ids val='204,508,812,1116,1420,1724,2028,2332,2636,2940,3244,3548,3852,4156,4460,4764,5068,5372,5676,5980,6284,6588,6892,7196,7500,7804,8108,8412,8716,9020,9324,9628,9932,10236,10540,10844,11148,11452,11756,12060,12364,12668,12972,13276,13580,13884,14188,14492,14796,15100,15404,15708,16012,16316,16620,16924,17228,17532,17836,18140,18444,18748,19052,19356,19660,19964,20268,20572,20876,21180,21484,21788,22092,22396,22700,23004,23308,23612,23916,24220,24524,24828,25132,25436,25740,26044,26348,26652,26956,27260,27564,27868,28172,28476,28780,29084,29388,29692,29996,30300,30604,30908,31212,31516,31820,32124,32428,32732,33036,33340,33644,33948,34252,34556,34860,35164,35468,35772,36076,36380,36684,36988,37292,37596,37900,38204,38508,38812,39116,39420,39724,40028,40332,40636,40940,41244,41548,41852,42156,42460,42764,43068,43372,43676,43980,44284,44588,44892,45196,45500,45804,46108,46412,46716,47020,47324,47628,47932,48236,48540,48844,49148,49452,49756,50060,50364,50668,50972,51276,51580,51884,52188,52492,52796,53100,53404,53708,54012,54316,54620,54924,55228,55532,55836,56140,56444,56748,57052,57356,57660,57964,58268,58572,58876,59180,59484,59788,60092,60396,60700,61004,61308,61612,61916,62220,62524,62828,63132,63436,63740,64044,64348,64652,64956,65260,65564,65868,66172,66476,66780,67084,67388,67692,67996,68300,68604,68908,69212,69516,69820,70124,70428,70732,71036,71340,71644,71948,72252,72556,72860,73164,73468,73772,74076,74380,74684,74988,75292,75596,75900,76204,76508,76812,77116,77420,77724'/>
+  </group>
+  <group name='204'>
+    <ids val='205,509,813,1117,1421,1725,2029,2333,2637,2941,3245,3549,3853,4157,4461,4765,5069,5373,5677,5981,6285,6589,6893,7197,7501,7805,8109,8413,8717,9021,9325,9629,9933,10237,10541,10845,11149,11453,11757,12061,12365,12669,12973,13277,13581,13885,14189,14493,14797,15101,15405,15709,16013,16317,16621,16925,17229,17533,17837,18141,18445,18749,19053,19357,19661,19965,20269,20573,20877,21181,21485,21789,22093,22397,22701,23005,23309,23613,23917,24221,24525,24829,25133,25437,25741,26045,26349,26653,26957,27261,27565,27869,28173,28477,28781,29085,29389,29693,29997,30301,30605,30909,31213,31517,31821,32125,32429,32733,33037,33341,33645,33949,34253,34557,34861,35165,35469,35773,36077,36381,36685,36989,37293,37597,37901,38205,38509,38813,39117,39421,39725,40029,40333,40637,40941,41245,41549,41853,42157,42461,42765,43069,43373,43677,43981,44285,44589,44893,45197,45501,45805,46109,46413,46717,47021,47325,47629,47933,48237,48541,48845,49149,49453,49757,50061,50365,50669,50973,51277,51581,51885,52189,52493,52797,53101,53405,53709,54013,54317,54621,54925,55229,55533,55837,56141,56445,56749,57053,57357,57661,57965,58269,58573,58877,59181,59485,59789,60093,60397,60701,61005,61309,61613,61917,62221,62525,62829,63133,63437,63741,64045,64349,64653,64957,65261,65565,65869,66173,66477,66781,67085,67389,67693,67997,68301,68605,68909,69213,69517,69821,70125,70429,70733,71037,71341,71645,71949,72253,72557,72861,73165,73469,73773,74077,74381,74685,74989,75293,75597,75901,76205,76509,76813,77117,77421,77725'/>
+  </group>
+  <group name='205'>
+    <ids val='206,510,814,1118,1422,1726,2030,2334,2638,2942,3246,3550,3854,4158,4462,4766,5070,5374,5678,5982,6286,6590,6894,7198,7502,7806,8110,8414,8718,9022,9326,9630,9934,10238,10542,10846,11150,11454,11758,12062,12366,12670,12974,13278,13582,13886,14190,14494,14798,15102,15406,15710,16014,16318,16622,16926,17230,17534,17838,18142,18446,18750,19054,19358,19662,19966,20270,20574,20878,21182,21486,21790,22094,22398,22702,23006,23310,23614,23918,24222,24526,24830,25134,25438,25742,26046,26350,26654,26958,27262,27566,27870,28174,28478,28782,29086,29390,29694,29998,30302,30606,30910,31214,31518,31822,32126,32430,32734,33038,33342,33646,33950,34254,34558,34862,35166,35470,35774,36078,36382,36686,36990,37294,37598,37902,38206,38510,38814,39118,39422,39726,40030,40334,40638,40942,41246,41550,41854,42158,42462,42766,43070,43374,43678,43982,44286,44590,44894,45198,45502,45806,46110,46414,46718,47022,47326,47630,47934,48238,48542,48846,49150,49454,49758,50062,50366,50670,50974,51278,51582,51886,52190,52494,52798,53102,53406,53710,54014,54318,54622,54926,55230,55534,55838,56142,56446,56750,57054,57358,57662,57966,58270,58574,58878,59182,59486,59790,60094,60398,60702,61006,61310,61614,61918,62222,62526,62830,63134,63438,63742,64046,64350,64654,64958,65262,65566,65870,66174,66478,66782,67086,67390,67694,67998,68302,68606,68910,69214,69518,69822,70126,70430,70734,71038,71342,71646,71950,72254,72558,72862,73166,73470,73774,74078,74382,74686,74990,75294,75598,75902,76206,76510,76814,77118,77422,77726'/>
+  </group>
+  <group name='206'>
+    <ids val='207,511,815,1119,1423,1727,2031,2335,2639,2943,3247,3551,3855,4159,4463,4767,5071,5375,5679,5983,6287,6591,6895,7199,7503,7807,8111,8415,8719,9023,9327,9631,9935,10239,10543,10847,11151,11455,11759,12063,12367,12671,12975,13279,13583,13887,14191,14495,14799,15103,15407,15711,16015,16319,16623,16927,17231,17535,17839,18143,18447,18751,19055,19359,19663,19967,20271,20575,20879,21183,21487,21791,22095,22399,22703,23007,23311,23615,23919,24223,24527,24831,25135,25439,25743,26047,26351,26655,26959,27263,27567,27871,28175,28479,28783,29087,29391,29695,29999,30303,30607,30911,31215,31519,31823,32127,32431,32735,33039,33343,33647,33951,34255,34559,34863,35167,35471,35775,36079,36383,36687,36991,37295,37599,37903,38207,38511,38815,39119,39423,39727,40031,40335,40639,40943,41247,41551,41855,42159,42463,42767,43071,43375,43679,43983,44287,44591,44895,45199,45503,45807,46111,46415,46719,47023,47327,47631,47935,48239,48543,48847,49151,49455,49759,50063,50367,50671,50975,51279,51583,51887,52191,52495,52799,53103,53407,53711,54015,54319,54623,54927,55231,55535,55839,56143,56447,56751,57055,57359,57663,57967,58271,58575,58879,59183,59487,59791,60095,60399,60703,61007,61311,61615,61919,62223,62527,62831,63135,63439,63743,64047,64351,64655,64959,65263,65567,65871,66175,66479,66783,67087,67391,67695,67999,68303,68607,68911,69215,69519,69823,70127,70431,70735,71039,71343,71647,71951,72255,72559,72863,73167,73471,73775,74079,74383,74687,74991,75295,75599,75903,76207,76511,76815,77119,77423,77727'/>
+  </group>
+  <group name='207'>
+    <ids val='208,512,816,1120,1424,1728,2032,2336,2640,2944,3248,3552,3856,4160,4464,4768,5072,5376,5680,5984,6288,6592,6896,7200,7504,7808,8112,8416,8720,9024,9328,9632,9936,10240,10544,10848,11152,11456,11760,12064,12368,12672,12976,13280,13584,13888,14192,14496,14800,15104,15408,15712,16016,16320,16624,16928,17232,17536,17840,18144,18448,18752,19056,19360,19664,19968,20272,20576,20880,21184,21488,21792,22096,22400,22704,23008,23312,23616,23920,24224,24528,24832,25136,25440,25744,26048,26352,26656,26960,27264,27568,27872,28176,28480,28784,29088,29392,29696,30000,30304,30608,30912,31216,31520,31824,32128,32432,32736,33040,33344,33648,33952,34256,34560,34864,35168,35472,35776,36080,36384,36688,36992,37296,37600,37904,38208,38512,38816,39120,39424,39728,40032,40336,40640,40944,41248,41552,41856,42160,42464,42768,43072,43376,43680,43984,44288,44592,44896,45200,45504,45808,46112,46416,46720,47024,47328,47632,47936,48240,48544,48848,49152,49456,49760,50064,50368,50672,50976,51280,51584,51888,52192,52496,52800,53104,53408,53712,54016,54320,54624,54928,55232,55536,55840,56144,56448,56752,57056,57360,57664,57968,58272,58576,58880,59184,59488,59792,60096,60400,60704,61008,61312,61616,61920,62224,62528,62832,63136,63440,63744,64048,64352,64656,64960,65264,65568,65872,66176,66480,66784,67088,67392,67696,68000,68304,68608,68912,69216,69520,69824,70128,70432,70736,71040,71344,71648,71952,72256,72560,72864,73168,73472,73776,74080,74384,74688,74992,75296,75600,75904,76208,76512,76816,77120,77424,77728'/>
+  </group>
+  <group name='208'>
+    <ids val='209,513,817,1121,1425,1729,2033,2337,2641,2945,3249,3553,3857,4161,4465,4769,5073,5377,5681,5985,6289,6593,6897,7201,7505,7809,8113,8417,8721,9025,9329,9633,9937,10241,10545,10849,11153,11457,11761,12065,12369,12673,12977,13281,13585,13889,14193,14497,14801,15105,15409,15713,16017,16321,16625,16929,17233,17537,17841,18145,18449,18753,19057,19361,19665,19969,20273,20577,20881,21185,21489,21793,22097,22401,22705,23009,23313,23617,23921,24225,24529,24833,25137,25441,25745,26049,26353,26657,26961,27265,27569,27873,28177,28481,28785,29089,29393,29697,30001,30305,30609,30913,31217,31521,31825,32129,32433,32737,33041,33345,33649,33953,34257,34561,34865,35169,35473,35777,36081,36385,36689,36993,37297,37601,37905,38209,38513,38817,39121,39425,39729,40033,40337,40641,40945,41249,41553,41857,42161,42465,42769,43073,43377,43681,43985,44289,44593,44897,45201,45505,45809,46113,46417,46721,47025,47329,47633,47937,48241,48545,48849,49153,49457,49761,50065,50369,50673,50977,51281,51585,51889,52193,52497,52801,53105,53409,53713,54017,54321,54625,54929,55233,55537,55841,56145,56449,56753,57057,57361,57665,57969,58273,58577,58881,59185,59489,59793,60097,60401,60705,61009,61313,61617,61921,62225,62529,62833,63137,63441,63745,64049,64353,64657,64961,65265,65569,65873,66177,66481,66785,67089,67393,67697,68001,68305,68609,68913,69217,69521,69825,70129,70433,70737,71041,71345,71649,71953,72257,72561,72865,73169,73473,73777,74081,74385,74689,74993,75297,75601,75905,76209,76513,76817,77121,77425,77729'/>
+  </group>
+  <group name='209'>
+    <ids val='210,514,818,1122,1426,1730,2034,2338,2642,2946,3250,3554,3858,4162,4466,4770,5074,5378,5682,5986,6290,6594,6898,7202,7506,7810,8114,8418,8722,9026,9330,9634,9938,10242,10546,10850,11154,11458,11762,12066,12370,12674,12978,13282,13586,13890,14194,14498,14802,15106,15410,15714,16018,16322,16626,16930,17234,17538,17842,18146,18450,18754,19058,19362,19666,19970,20274,20578,20882,21186,21490,21794,22098,22402,22706,23010,23314,23618,23922,24226,24530,24834,25138,25442,25746,26050,26354,26658,26962,27266,27570,27874,28178,28482,28786,29090,29394,29698,30002,30306,30610,30914,31218,31522,31826,32130,32434,32738,33042,33346,33650,33954,34258,34562,34866,35170,35474,35778,36082,36386,36690,36994,37298,37602,37906,38210,38514,38818,39122,39426,39730,40034,40338,40642,40946,41250,41554,41858,42162,42466,42770,43074,43378,43682,43986,44290,44594,44898,45202,45506,45810,46114,46418,46722,47026,47330,47634,47938,48242,48546,48850,49154,49458,49762,50066,50370,50674,50978,51282,51586,51890,52194,52498,52802,53106,53410,53714,54018,54322,54626,54930,55234,55538,55842,56146,56450,56754,57058,57362,57666,57970,58274,58578,58882,59186,59490,59794,60098,60402,60706,61010,61314,61618,61922,62226,62530,62834,63138,63442,63746,64050,64354,64658,64962,65266,65570,65874,66178,66482,66786,67090,67394,67698,68002,68306,68610,68914,69218,69522,69826,70130,70434,70738,71042,71346,71650,71954,72258,72562,72866,73170,73474,73778,74082,74386,74690,74994,75298,75602,75906,76210,76514,76818,77122,77426,77730'/>
+  </group>
+  <group name='210'>
+    <ids val='211,515,819,1123,1427,1731,2035,2339,2643,2947,3251,3555,3859,4163,4467,4771,5075,5379,5683,5987,6291,6595,6899,7203,7507,7811,8115,8419,8723,9027,9331,9635,9939,10243,10547,10851,11155,11459,11763,12067,12371,12675,12979,13283,13587,13891,14195,14499,14803,15107,15411,15715,16019,16323,16627,16931,17235,17539,17843,18147,18451,18755,19059,19363,19667,19971,20275,20579,20883,21187,21491,21795,22099,22403,22707,23011,23315,23619,23923,24227,24531,24835,25139,25443,25747,26051,26355,26659,26963,27267,27571,27875,28179,28483,28787,29091,29395,29699,30003,30307,30611,30915,31219,31523,31827,32131,32435,32739,33043,33347,33651,33955,34259,34563,34867,35171,35475,35779,36083,36387,36691,36995,37299,37603,37907,38211,38515,38819,39123,39427,39731,40035,40339,40643,40947,41251,41555,41859,42163,42467,42771,43075,43379,43683,43987,44291,44595,44899,45203,45507,45811,46115,46419,46723,47027,47331,47635,47939,48243,48547,48851,49155,49459,49763,50067,50371,50675,50979,51283,51587,51891,52195,52499,52803,53107,53411,53715,54019,54323,54627,54931,55235,55539,55843,56147,56451,56755,57059,57363,57667,57971,58275,58579,58883,59187,59491,59795,60099,60403,60707,61011,61315,61619,61923,62227,62531,62835,63139,63443,63747,64051,64355,64659,64963,65267,65571,65875,66179,66483,66787,67091,67395,67699,68003,68307,68611,68915,69219,69523,69827,70131,70435,70739,71043,71347,71651,71955,72259,72563,72867,73171,73475,73779,74083,74387,74691,74995,75299,75603,75907,76211,76515,76819,77123,77427,77731'/>
+  </group>
+  <group name='211'>
+    <ids val='212,516,820,1124,1428,1732,2036,2340,2644,2948,3252,3556,3860,4164,4468,4772,5076,5380,5684,5988,6292,6596,6900,7204,7508,7812,8116,8420,8724,9028,9332,9636,9940,10244,10548,10852,11156,11460,11764,12068,12372,12676,12980,13284,13588,13892,14196,14500,14804,15108,15412,15716,16020,16324,16628,16932,17236,17540,17844,18148,18452,18756,19060,19364,19668,19972,20276,20580,20884,21188,21492,21796,22100,22404,22708,23012,23316,23620,23924,24228,24532,24836,25140,25444,25748,26052,26356,26660,26964,27268,27572,27876,28180,28484,28788,29092,29396,29700,30004,30308,30612,30916,31220,31524,31828,32132,32436,32740,33044,33348,33652,33956,34260,34564,34868,35172,35476,35780,36084,36388,36692,36996,37300,37604,37908,38212,38516,38820,39124,39428,39732,40036,40340,40644,40948,41252,41556,41860,42164,42468,42772,43076,43380,43684,43988,44292,44596,44900,45204,45508,45812,46116,46420,46724,47028,47332,47636,47940,48244,48548,48852,49156,49460,49764,50068,50372,50676,50980,51284,51588,51892,52196,52500,52804,53108,53412,53716,54020,54324,54628,54932,55236,55540,55844,56148,56452,56756,57060,57364,57668,57972,58276,58580,58884,59188,59492,59796,60100,60404,60708,61012,61316,61620,61924,62228,62532,62836,63140,63444,63748,64052,64356,64660,64964,65268,65572,65876,66180,66484,66788,67092,67396,67700,68004,68308,68612,68916,69220,69524,69828,70132,70436,70740,71044,71348,71652,71956,72260,72564,72868,73172,73476,73780,74084,74388,74692,74996,75300,75604,75908,76212,76516,76820,77124,77428,77732'/>
+  </group>
+  <group name='212'>
+    <ids val='213,517,821,1125,1429,1733,2037,2341,2645,2949,3253,3557,3861,4165,4469,4773,5077,5381,5685,5989,6293,6597,6901,7205,7509,7813,8117,8421,8725,9029,9333,9637,9941,10245,10549,10853,11157,11461,11765,12069,12373,12677,12981,13285,13589,13893,14197,14501,14805,15109,15413,15717,16021,16325,16629,16933,17237,17541,17845,18149,18453,18757,19061,19365,19669,19973,20277,20581,20885,21189,21493,21797,22101,22405,22709,23013,23317,23621,23925,24229,24533,24837,25141,25445,25749,26053,26357,26661,26965,27269,27573,27877,28181,28485,28789,29093,29397,29701,30005,30309,30613,30917,31221,31525,31829,32133,32437,32741,33045,33349,33653,33957,34261,34565,34869,35173,35477,35781,36085,36389,36693,36997,37301,37605,37909,38213,38517,38821,39125,39429,39733,40037,40341,40645,40949,41253,41557,41861,42165,42469,42773,43077,43381,43685,43989,44293,44597,44901,45205,45509,45813,46117,46421,46725,47029,47333,47637,47941,48245,48549,48853,49157,49461,49765,50069,50373,50677,50981,51285,51589,51893,52197,52501,52805,53109,53413,53717,54021,54325,54629,54933,55237,55541,55845,56149,56453,56757,57061,57365,57669,57973,58277,58581,58885,59189,59493,59797,60101,60405,60709,61013,61317,61621,61925,62229,62533,62837,63141,63445,63749,64053,64357,64661,64965,65269,65573,65877,66181,66485,66789,67093,67397,67701,68005,68309,68613,68917,69221,69525,69829,70133,70437,70741,71045,71349,71653,71957,72261,72565,72869,73173,73477,73781,74085,74389,74693,74997,75301,75605,75909,76213,76517,76821,77125,77429,77733'/>
+  </group>
+  <group name='213'>
+    <ids val='214,518,822,1126,1430,1734,2038,2342,2646,2950,3254,3558,3862,4166,4470,4774,5078,5382,5686,5990,6294,6598,6902,7206,7510,7814,8118,8422,8726,9030,9334,9638,9942,10246,10550,10854,11158,11462,11766,12070,12374,12678,12982,13286,13590,13894,14198,14502,14806,15110,15414,15718,16022,16326,16630,16934,17238,17542,17846,18150,18454,18758,19062,19366,19670,19974,20278,20582,20886,21190,21494,21798,22102,22406,22710,23014,23318,23622,23926,24230,24534,24838,25142,25446,25750,26054,26358,26662,26966,27270,27574,27878,28182,28486,28790,29094,29398,29702,30006,30310,30614,30918,31222,31526,31830,32134,32438,32742,33046,33350,33654,33958,34262,34566,34870,35174,35478,35782,36086,36390,36694,36998,37302,37606,37910,38214,38518,38822,39126,39430,39734,40038,40342,40646,40950,41254,41558,41862,42166,42470,42774,43078,43382,43686,43990,44294,44598,44902,45206,45510,45814,46118,46422,46726,47030,47334,47638,47942,48246,48550,48854,49158,49462,49766,50070,50374,50678,50982,51286,51590,51894,52198,52502,52806,53110,53414,53718,54022,54326,54630,54934,55238,55542,55846,56150,56454,56758,57062,57366,57670,57974,58278,58582,58886,59190,59494,59798,60102,60406,60710,61014,61318,61622,61926,62230,62534,62838,63142,63446,63750,64054,64358,64662,64966,65270,65574,65878,66182,66486,66790,67094,67398,67702,68006,68310,68614,68918,69222,69526,69830,70134,70438,70742,71046,71350,71654,71958,72262,72566,72870,73174,73478,73782,74086,74390,74694,74998,75302,75606,75910,76214,76518,76822,77126,77430,77734'/>
+  </group>
+  <group name='214'>
+    <ids val='215,519,823,1127,1431,1735,2039,2343,2647,2951,3255,3559,3863,4167,4471,4775,5079,5383,5687,5991,6295,6599,6903,7207,7511,7815,8119,8423,8727,9031,9335,9639,9943,10247,10551,10855,11159,11463,11767,12071,12375,12679,12983,13287,13591,13895,14199,14503,14807,15111,15415,15719,16023,16327,16631,16935,17239,17543,17847,18151,18455,18759,19063,19367,19671,19975,20279,20583,20887,21191,21495,21799,22103,22407,22711,23015,23319,23623,23927,24231,24535,24839,25143,25447,25751,26055,26359,26663,26967,27271,27575,27879,28183,28487,28791,29095,29399,29703,30007,30311,30615,30919,31223,31527,31831,32135,32439,32743,33047,33351,33655,33959,34263,34567,34871,35175,35479,35783,36087,36391,36695,36999,37303,37607,37911,38215,38519,38823,39127,39431,39735,40039,40343,40647,40951,41255,41559,41863,42167,42471,42775,43079,43383,43687,43991,44295,44599,44903,45207,45511,45815,46119,46423,46727,47031,47335,47639,47943,48247,48551,48855,49159,49463,49767,50071,50375,50679,50983,51287,51591,51895,52199,52503,52807,53111,53415,53719,54023,54327,54631,54935,55239,55543,55847,56151,56455,56759,57063,57367,57671,57975,58279,58583,58887,59191,59495,59799,60103,60407,60711,61015,61319,61623,61927,62231,62535,62839,63143,63447,63751,64055,64359,64663,64967,65271,65575,65879,66183,66487,66791,67095,67399,67703,68007,68311,68615,68919,69223,69527,69831,70135,70439,70743,71047,71351,71655,71959,72263,72567,72871,73175,73479,73783,74087,74391,74695,74999,75303,75607,75911,76215,76519,76823,77127,77431,77735'/>
+  </group>
+  <group name='215'>
+    <ids val='216,520,824,1128,1432,1736,2040,2344,2648,2952,3256,3560,3864,4168,4472,4776,5080,5384,5688,5992,6296,6600,6904,7208,7512,7816,8120,8424,8728,9032,9336,9640,9944,10248,10552,10856,11160,11464,11768,12072,12376,12680,12984,13288,13592,13896,14200,14504,14808,15112,15416,15720,16024,16328,16632,16936,17240,17544,17848,18152,18456,18760,19064,19368,19672,19976,20280,20584,20888,21192,21496,21800,22104,22408,22712,23016,23320,23624,23928,24232,24536,24840,25144,25448,25752,26056,26360,26664,26968,27272,27576,27880,28184,28488,28792,29096,29400,29704,30008,30312,30616,30920,31224,31528,31832,32136,32440,32744,33048,33352,33656,33960,34264,34568,34872,35176,35480,35784,36088,36392,36696,37000,37304,37608,37912,38216,38520,38824,39128,39432,39736,40040,40344,40648,40952,41256,41560,41864,42168,42472,42776,43080,43384,43688,43992,44296,44600,44904,45208,45512,45816,46120,46424,46728,47032,47336,47640,47944,48248,48552,48856,49160,49464,49768,50072,50376,50680,50984,51288,51592,51896,52200,52504,52808,53112,53416,53720,54024,54328,54632,54936,55240,55544,55848,56152,56456,56760,57064,57368,57672,57976,58280,58584,58888,59192,59496,59800,60104,60408,60712,61016,61320,61624,61928,62232,62536,62840,63144,63448,63752,64056,64360,64664,64968,65272,65576,65880,66184,66488,66792,67096,67400,67704,68008,68312,68616,68920,69224,69528,69832,70136,70440,70744,71048,71352,71656,71960,72264,72568,72872,73176,73480,73784,74088,74392,74696,75000,75304,75608,75912,76216,76520,76824,77128,77432,77736'/>
+  </group>
+  <group name='216'>
+    <ids val='217,521,825,1129,1433,1737,2041,2345,2649,2953,3257,3561,3865,4169,4473,4777,5081,5385,5689,5993,6297,6601,6905,7209,7513,7817,8121,8425,8729,9033,9337,9641,9945,10249,10553,10857,11161,11465,11769,12073,12377,12681,12985,13289,13593,13897,14201,14505,14809,15113,15417,15721,16025,16329,16633,16937,17241,17545,17849,18153,18457,18761,19065,19369,19673,19977,20281,20585,20889,21193,21497,21801,22105,22409,22713,23017,23321,23625,23929,24233,24537,24841,25145,25449,25753,26057,26361,26665,26969,27273,27577,27881,28185,28489,28793,29097,29401,29705,30009,30313,30617,30921,31225,31529,31833,32137,32441,32745,33049,33353,33657,33961,34265,34569,34873,35177,35481,35785,36089,36393,36697,37001,37305,37609,37913,38217,38521,38825,39129,39433,39737,40041,40345,40649,40953,41257,41561,41865,42169,42473,42777,43081,43385,43689,43993,44297,44601,44905,45209,45513,45817,46121,46425,46729,47033,47337,47641,47945,48249,48553,48857,49161,49465,49769,50073,50377,50681,50985,51289,51593,51897,52201,52505,52809,53113,53417,53721,54025,54329,54633,54937,55241,55545,55849,56153,56457,56761,57065,57369,57673,57977,58281,58585,58889,59193,59497,59801,60105,60409,60713,61017,61321,61625,61929,62233,62537,62841,63145,63449,63753,64057,64361,64665,64969,65273,65577,65881,66185,66489,66793,67097,67401,67705,68009,68313,68617,68921,69225,69529,69833,70137,70441,70745,71049,71353,71657,71961,72265,72569,72873,73177,73481,73785,74089,74393,74697,75001,75305,75609,75913,76217,76521,76825,77129,77433,77737'/>
+  </group>
+  <group name='217'>
+    <ids val='218,522,826,1130,1434,1738,2042,2346,2650,2954,3258,3562,3866,4170,4474,4778,5082,5386,5690,5994,6298,6602,6906,7210,7514,7818,8122,8426,8730,9034,9338,9642,9946,10250,10554,10858,11162,11466,11770,12074,12378,12682,12986,13290,13594,13898,14202,14506,14810,15114,15418,15722,16026,16330,16634,16938,17242,17546,17850,18154,18458,18762,19066,19370,19674,19978,20282,20586,20890,21194,21498,21802,22106,22410,22714,23018,23322,23626,23930,24234,24538,24842,25146,25450,25754,26058,26362,26666,26970,27274,27578,27882,28186,28490,28794,29098,29402,29706,30010,30314,30618,30922,31226,31530,31834,32138,32442,32746,33050,33354,33658,33962,34266,34570,34874,35178,35482,35786,36090,36394,36698,37002,37306,37610,37914,38218,38522,38826,39130,39434,39738,40042,40346,40650,40954,41258,41562,41866,42170,42474,42778,43082,43386,43690,43994,44298,44602,44906,45210,45514,45818,46122,46426,46730,47034,47338,47642,47946,48250,48554,48858,49162,49466,49770,50074,50378,50682,50986,51290,51594,51898,52202,52506,52810,53114,53418,53722,54026,54330,54634,54938,55242,55546,55850,56154,56458,56762,57066,57370,57674,57978,58282,58586,58890,59194,59498,59802,60106,60410,60714,61018,61322,61626,61930,62234,62538,62842,63146,63450,63754,64058,64362,64666,64970,65274,65578,65882,66186,66490,66794,67098,67402,67706,68010,68314,68618,68922,69226,69530,69834,70138,70442,70746,71050,71354,71658,71962,72266,72570,72874,73178,73482,73786,74090,74394,74698,75002,75306,75610,75914,76218,76522,76826,77130,77434,77738'/>
+  </group>
+  <group name='218'>
+    <ids val='219,523,827,1131,1435,1739,2043,2347,2651,2955,3259,3563,3867,4171,4475,4779,5083,5387,5691,5995,6299,6603,6907,7211,7515,7819,8123,8427,8731,9035,9339,9643,9947,10251,10555,10859,11163,11467,11771,12075,12379,12683,12987,13291,13595,13899,14203,14507,14811,15115,15419,15723,16027,16331,16635,16939,17243,17547,17851,18155,18459,18763,19067,19371,19675,19979,20283,20587,20891,21195,21499,21803,22107,22411,22715,23019,23323,23627,23931,24235,24539,24843,25147,25451,25755,26059,26363,26667,26971,27275,27579,27883,28187,28491,28795,29099,29403,29707,30011,30315,30619,30923,31227,31531,31835,32139,32443,32747,33051,33355,33659,33963,34267,34571,34875,35179,35483,35787,36091,36395,36699,37003,37307,37611,37915,38219,38523,38827,39131,39435,39739,40043,40347,40651,40955,41259,41563,41867,42171,42475,42779,43083,43387,43691,43995,44299,44603,44907,45211,45515,45819,46123,46427,46731,47035,47339,47643,47947,48251,48555,48859,49163,49467,49771,50075,50379,50683,50987,51291,51595,51899,52203,52507,52811,53115,53419,53723,54027,54331,54635,54939,55243,55547,55851,56155,56459,56763,57067,57371,57675,57979,58283,58587,58891,59195,59499,59803,60107,60411,60715,61019,61323,61627,61931,62235,62539,62843,63147,63451,63755,64059,64363,64667,64971,65275,65579,65883,66187,66491,66795,67099,67403,67707,68011,68315,68619,68923,69227,69531,69835,70139,70443,70747,71051,71355,71659,71963,72267,72571,72875,73179,73483,73787,74091,74395,74699,75003,75307,75611,75915,76219,76523,76827,77131,77435,77739'/>
+  </group>
+  <group name='219'>
+    <ids val='220,524,828,1132,1436,1740,2044,2348,2652,2956,3260,3564,3868,4172,4476,4780,5084,5388,5692,5996,6300,6604,6908,7212,7516,7820,8124,8428,8732,9036,9340,9644,9948,10252,10556,10860,11164,11468,11772,12076,12380,12684,12988,13292,13596,13900,14204,14508,14812,15116,15420,15724,16028,16332,16636,16940,17244,17548,17852,18156,18460,18764,19068,19372,19676,19980,20284,20588,20892,21196,21500,21804,22108,22412,22716,23020,23324,23628,23932,24236,24540,24844,25148,25452,25756,26060,26364,26668,26972,27276,27580,27884,28188,28492,28796,29100,29404,29708,30012,30316,30620,30924,31228,31532,31836,32140,32444,32748,33052,33356,33660,33964,34268,34572,34876,35180,35484,35788,36092,36396,36700,37004,37308,37612,37916,38220,38524,38828,39132,39436,39740,40044,40348,40652,40956,41260,41564,41868,42172,42476,42780,43084,43388,43692,43996,44300,44604,44908,45212,45516,45820,46124,46428,46732,47036,47340,47644,47948,48252,48556,48860,49164,49468,49772,50076,50380,50684,50988,51292,51596,51900,52204,52508,52812,53116,53420,53724,54028,54332,54636,54940,55244,55548,55852,56156,56460,56764,57068,57372,57676,57980,58284,58588,58892,59196,59500,59804,60108,60412,60716,61020,61324,61628,61932,62236,62540,62844,63148,63452,63756,64060,64364,64668,64972,65276,65580,65884,66188,66492,66796,67100,67404,67708,68012,68316,68620,68924,69228,69532,69836,70140,70444,70748,71052,71356,71660,71964,72268,72572,72876,73180,73484,73788,74092,74396,74700,75004,75308,75612,75916,76220,76524,76828,77132,77436,77740'/>
+  </group>
+  <group name='220'>
+    <ids val='221,525,829,1133,1437,1741,2045,2349,2653,2957,3261,3565,3869,4173,4477,4781,5085,5389,5693,5997,6301,6605,6909,7213,7517,7821,8125,8429,8733,9037,9341,9645,9949,10253,10557,10861,11165,11469,11773,12077,12381,12685,12989,13293,13597,13901,14205,14509,14813,15117,15421,15725,16029,16333,16637,16941,17245,17549,17853,18157,18461,18765,19069,19373,19677,19981,20285,20589,20893,21197,21501,21805,22109,22413,22717,23021,23325,23629,23933,24237,24541,24845,25149,25453,25757,26061,26365,26669,26973,27277,27581,27885,28189,28493,28797,29101,29405,29709,30013,30317,30621,30925,31229,31533,31837,32141,32445,32749,33053,33357,33661,33965,34269,34573,34877,35181,35485,35789,36093,36397,36701,37005,37309,37613,37917,38221,38525,38829,39133,39437,39741,40045,40349,40653,40957,41261,41565,41869,42173,42477,42781,43085,43389,43693,43997,44301,44605,44909,45213,45517,45821,46125,46429,46733,47037,47341,47645,47949,48253,48557,48861,49165,49469,49773,50077,50381,50685,50989,51293,51597,51901,52205,52509,52813,53117,53421,53725,54029,54333,54637,54941,55245,55549,55853,56157,56461,56765,57069,57373,57677,57981,58285,58589,58893,59197,59501,59805,60109,60413,60717,61021,61325,61629,61933,62237,62541,62845,63149,63453,63757,64061,64365,64669,64973,65277,65581,65885,66189,66493,66797,67101,67405,67709,68013,68317,68621,68925,69229,69533,69837,70141,70445,70749,71053,71357,71661,71965,72269,72573,72877,73181,73485,73789,74093,74397,74701,75005,75309,75613,75917,76221,76525,76829,77133,77437,77741'/>
+  </group>
+  <group name='221'>
+    <ids val='222,526,830,1134,1438,1742,2046,2350,2654,2958,3262,3566,3870,4174,4478,4782,5086,5390,5694,5998,6302,6606,6910,7214,7518,7822,8126,8430,8734,9038,9342,9646,9950,10254,10558,10862,11166,11470,11774,12078,12382,12686,12990,13294,13598,13902,14206,14510,14814,15118,15422,15726,16030,16334,16638,16942,17246,17550,17854,18158,18462,18766,19070,19374,19678,19982,20286,20590,20894,21198,21502,21806,22110,22414,22718,23022,23326,23630,23934,24238,24542,24846,25150,25454,25758,26062,26366,26670,26974,27278,27582,27886,28190,28494,28798,29102,29406,29710,30014,30318,30622,30926,31230,31534,31838,32142,32446,32750,33054,33358,33662,33966,34270,34574,34878,35182,35486,35790,36094,36398,36702,37006,37310,37614,37918,38222,38526,38830,39134,39438,39742,40046,40350,40654,40958,41262,41566,41870,42174,42478,42782,43086,43390,43694,43998,44302,44606,44910,45214,45518,45822,46126,46430,46734,47038,47342,47646,47950,48254,48558,48862,49166,49470,49774,50078,50382,50686,50990,51294,51598,51902,52206,52510,52814,53118,53422,53726,54030,54334,54638,54942,55246,55550,55854,56158,56462,56766,57070,57374,57678,57982,58286,58590,58894,59198,59502,59806,60110,60414,60718,61022,61326,61630,61934,62238,62542,62846,63150,63454,63758,64062,64366,64670,64974,65278,65582,65886,66190,66494,66798,67102,67406,67710,68014,68318,68622,68926,69230,69534,69838,70142,70446,70750,71054,71358,71662,71966,72270,72574,72878,73182,73486,73790,74094,74398,74702,75006,75310,75614,75918,76222,76526,76830,77134,77438,77742'/>
+  </group>
+  <group name='222'>
+    <ids val='223,527,831,1135,1439,1743,2047,2351,2655,2959,3263,3567,3871,4175,4479,4783,5087,5391,5695,5999,6303,6607,6911,7215,7519,7823,8127,8431,8735,9039,9343,9647,9951,10255,10559,10863,11167,11471,11775,12079,12383,12687,12991,13295,13599,13903,14207,14511,14815,15119,15423,15727,16031,16335,16639,16943,17247,17551,17855,18159,18463,18767,19071,19375,19679,19983,20287,20591,20895,21199,21503,21807,22111,22415,22719,23023,23327,23631,23935,24239,24543,24847,25151,25455,25759,26063,26367,26671,26975,27279,27583,27887,28191,28495,28799,29103,29407,29711,30015,30319,30623,30927,31231,31535,31839,32143,32447,32751,33055,33359,33663,33967,34271,34575,34879,35183,35487,35791,36095,36399,36703,37007,37311,37615,37919,38223,38527,38831,39135,39439,39743,40047,40351,40655,40959,41263,41567,41871,42175,42479,42783,43087,43391,43695,43999,44303,44607,44911,45215,45519,45823,46127,46431,46735,47039,47343,47647,47951,48255,48559,48863,49167,49471,49775,50079,50383,50687,50991,51295,51599,51903,52207,52511,52815,53119,53423,53727,54031,54335,54639,54943,55247,55551,55855,56159,56463,56767,57071,57375,57679,57983,58287,58591,58895,59199,59503,59807,60111,60415,60719,61023,61327,61631,61935,62239,62543,62847,63151,63455,63759,64063,64367,64671,64975,65279,65583,65887,66191,66495,66799,67103,67407,67711,68015,68319,68623,68927,69231,69535,69839,70143,70447,70751,71055,71359,71663,71967,72271,72575,72879,73183,73487,73791,74095,74399,74703,75007,75311,75615,75919,76223,76527,76831,77135,77439,77743'/>
+  </group>
+  <group name='223'>
+    <ids val='224,528,832,1136,1440,1744,2048,2352,2656,2960,3264,3568,3872,4176,4480,4784,5088,5392,5696,6000,6304,6608,6912,7216,7520,7824,8128,8432,8736,9040,9344,9648,9952,10256,10560,10864,11168,11472,11776,12080,12384,12688,12992,13296,13600,13904,14208,14512,14816,15120,15424,15728,16032,16336,16640,16944,17248,17552,17856,18160,18464,18768,19072,19376,19680,19984,20288,20592,20896,21200,21504,21808,22112,22416,22720,23024,23328,23632,23936,24240,24544,24848,25152,25456,25760,26064,26368,26672,26976,27280,27584,27888,28192,28496,28800,29104,29408,29712,30016,30320,30624,30928,31232,31536,31840,32144,32448,32752,33056,33360,33664,33968,34272,34576,34880,35184,35488,35792,36096,36400,36704,37008,37312,37616,37920,38224,38528,38832,39136,39440,39744,40048,40352,40656,40960,41264,41568,41872,42176,42480,42784,43088,43392,43696,44000,44304,44608,44912,45216,45520,45824,46128,46432,46736,47040,47344,47648,47952,48256,48560,48864,49168,49472,49776,50080,50384,50688,50992,51296,51600,51904,52208,52512,52816,53120,53424,53728,54032,54336,54640,54944,55248,55552,55856,56160,56464,56768,57072,57376,57680,57984,58288,58592,58896,59200,59504,59808,60112,60416,60720,61024,61328,61632,61936,62240,62544,62848,63152,63456,63760,64064,64368,64672,64976,65280,65584,65888,66192,66496,66800,67104,67408,67712,68016,68320,68624,68928,69232,69536,69840,70144,70448,70752,71056,71360,71664,71968,72272,72576,72880,73184,73488,73792,74096,74400,74704,75008,75312,75616,75920,76224,76528,76832,77136,77440,77744'/>
+  </group>
+  <group name='224'>
+    <ids val='225,529,833,1137,1441,1745,2049,2353,2657,2961,3265,3569,3873,4177,4481,4785,5089,5393,5697,6001,6305,6609,6913,7217,7521,7825,8129,8433,8737,9041,9345,9649,9953,10257,10561,10865,11169,11473,11777,12081,12385,12689,12993,13297,13601,13905,14209,14513,14817,15121,15425,15729,16033,16337,16641,16945,17249,17553,17857,18161,18465,18769,19073,19377,19681,19985,20289,20593,20897,21201,21505,21809,22113,22417,22721,23025,23329,23633,23937,24241,24545,24849,25153,25457,25761,26065,26369,26673,26977,27281,27585,27889,28193,28497,28801,29105,29409,29713,30017,30321,30625,30929,31233,31537,31841,32145,32449,32753,33057,33361,33665,33969,34273,34577,34881,35185,35489,35793,36097,36401,36705,37009,37313,37617,37921,38225,38529,38833,39137,39441,39745,40049,40353,40657,40961,41265,41569,41873,42177,42481,42785,43089,43393,43697,44001,44305,44609,44913,45217,45521,45825,46129,46433,46737,47041,47345,47649,47953,48257,48561,48865,49169,49473,49777,50081,50385,50689,50993,51297,51601,51905,52209,52513,52817,53121,53425,53729,54033,54337,54641,54945,55249,55553,55857,56161,56465,56769,57073,57377,57681,57985,58289,58593,58897,59201,59505,59809,60113,60417,60721,61025,61329,61633,61937,62241,62545,62849,63153,63457,63761,64065,64369,64673,64977,65281,65585,65889,66193,66497,66801,67105,67409,67713,68017,68321,68625,68929,69233,69537,69841,70145,70449,70753,71057,71361,71665,71969,72273,72577,72881,73185,73489,73793,74097,74401,74705,75009,75313,75617,75921,76225,76529,76833,77137,77441,77745'/>
+  </group>
+  <group name='225'>
+    <ids val='226,530,834,1138,1442,1746,2050,2354,2658,2962,3266,3570,3874,4178,4482,4786,5090,5394,5698,6002,6306,6610,6914,7218,7522,7826,8130,8434,8738,9042,9346,9650,9954,10258,10562,10866,11170,11474,11778,12082,12386,12690,12994,13298,13602,13906,14210,14514,14818,15122,15426,15730,16034,16338,16642,16946,17250,17554,17858,18162,18466,18770,19074,19378,19682,19986,20290,20594,20898,21202,21506,21810,22114,22418,22722,23026,23330,23634,23938,24242,24546,24850,25154,25458,25762,26066,26370,26674,26978,27282,27586,27890,28194,28498,28802,29106,29410,29714,30018,30322,30626,30930,31234,31538,31842,32146,32450,32754,33058,33362,33666,33970,34274,34578,34882,35186,35490,35794,36098,36402,36706,37010,37314,37618,37922,38226,38530,38834,39138,39442,39746,40050,40354,40658,40962,41266,41570,41874,42178,42482,42786,43090,43394,43698,44002,44306,44610,44914,45218,45522,45826,46130,46434,46738,47042,47346,47650,47954,48258,48562,48866,49170,49474,49778,50082,50386,50690,50994,51298,51602,51906,52210,52514,52818,53122,53426,53730,54034,54338,54642,54946,55250,55554,55858,56162,56466,56770,57074,57378,57682,57986,58290,58594,58898,59202,59506,59810,60114,60418,60722,61026,61330,61634,61938,62242,62546,62850,63154,63458,63762,64066,64370,64674,64978,65282,65586,65890,66194,66498,66802,67106,67410,67714,68018,68322,68626,68930,69234,69538,69842,70146,70450,70754,71058,71362,71666,71970,72274,72578,72882,73186,73490,73794,74098,74402,74706,75010,75314,75618,75922,76226,76530,76834,77138,77442,77746'/>
+  </group>
+  <group name='226'>
+    <ids val='227,531,835,1139,1443,1747,2051,2355,2659,2963,3267,3571,3875,4179,4483,4787,5091,5395,5699,6003,6307,6611,6915,7219,7523,7827,8131,8435,8739,9043,9347,9651,9955,10259,10563,10867,11171,11475,11779,12083,12387,12691,12995,13299,13603,13907,14211,14515,14819,15123,15427,15731,16035,16339,16643,16947,17251,17555,17859,18163,18467,18771,19075,19379,19683,19987,20291,20595,20899,21203,21507,21811,22115,22419,22723,23027,23331,23635,23939,24243,24547,24851,25155,25459,25763,26067,26371,26675,26979,27283,27587,27891,28195,28499,28803,29107,29411,29715,30019,30323,30627,30931,31235,31539,31843,32147,32451,32755,33059,33363,33667,33971,34275,34579,34883,35187,35491,35795,36099,36403,36707,37011,37315,37619,37923,38227,38531,38835,39139,39443,39747,40051,40355,40659,40963,41267,41571,41875,42179,42483,42787,43091,43395,43699,44003,44307,44611,44915,45219,45523,45827,46131,46435,46739,47043,47347,47651,47955,48259,48563,48867,49171,49475,49779,50083,50387,50691,50995,51299,51603,51907,52211,52515,52819,53123,53427,53731,54035,54339,54643,54947,55251,55555,55859,56163,56467,56771,57075,57379,57683,57987,58291,58595,58899,59203,59507,59811,60115,60419,60723,61027,61331,61635,61939,62243,62547,62851,63155,63459,63763,64067,64371,64675,64979,65283,65587,65891,66195,66499,66803,67107,67411,67715,68019,68323,68627,68931,69235,69539,69843,70147,70451,70755,71059,71363,71667,71971,72275,72579,72883,73187,73491,73795,74099,74403,74707,75011,75315,75619,75923,76227,76531,76835,77139,77443,77747'/>
+  </group>
+  <group name='227'>
+    <ids val='228,532,836,1140,1444,1748,2052,2356,2660,2964,3268,3572,3876,4180,4484,4788,5092,5396,5700,6004,6308,6612,6916,7220,7524,7828,8132,8436,8740,9044,9348,9652,9956,10260,10564,10868,11172,11476,11780,12084,12388,12692,12996,13300,13604,13908,14212,14516,14820,15124,15428,15732,16036,16340,16644,16948,17252,17556,17860,18164,18468,18772,19076,19380,19684,19988,20292,20596,20900,21204,21508,21812,22116,22420,22724,23028,23332,23636,23940,24244,24548,24852,25156,25460,25764,26068,26372,26676,26980,27284,27588,27892,28196,28500,28804,29108,29412,29716,30020,30324,30628,30932,31236,31540,31844,32148,32452,32756,33060,33364,33668,33972,34276,34580,34884,35188,35492,35796,36100,36404,36708,37012,37316,37620,37924,38228,38532,38836,39140,39444,39748,40052,40356,40660,40964,41268,41572,41876,42180,42484,42788,43092,43396,43700,44004,44308,44612,44916,45220,45524,45828,46132,46436,46740,47044,47348,47652,47956,48260,48564,48868,49172,49476,49780,50084,50388,50692,50996,51300,51604,51908,52212,52516,52820,53124,53428,53732,54036,54340,54644,54948,55252,55556,55860,56164,56468,56772,57076,57380,57684,57988,58292,58596,58900,59204,59508,59812,60116,60420,60724,61028,61332,61636,61940,62244,62548,62852,63156,63460,63764,64068,64372,64676,64980,65284,65588,65892,66196,66500,66804,67108,67412,67716,68020,68324,68628,68932,69236,69540,69844,70148,70452,70756,71060,71364,71668,71972,72276,72580,72884,73188,73492,73796,74100,74404,74708,75012,75316,75620,75924,76228,76532,76836,77140,77444,77748'/>
+  </group>
+  <group name='228'>
+    <ids val='229,533,837,1141,1445,1749,2053,2357,2661,2965,3269,3573,3877,4181,4485,4789,5093,5397,5701,6005,6309,6613,6917,7221,7525,7829,8133,8437,8741,9045,9349,9653,9957,10261,10565,10869,11173,11477,11781,12085,12389,12693,12997,13301,13605,13909,14213,14517,14821,15125,15429,15733,16037,16341,16645,16949,17253,17557,17861,18165,18469,18773,19077,19381,19685,19989,20293,20597,20901,21205,21509,21813,22117,22421,22725,23029,23333,23637,23941,24245,24549,24853,25157,25461,25765,26069,26373,26677,26981,27285,27589,27893,28197,28501,28805,29109,29413,29717,30021,30325,30629,30933,31237,31541,31845,32149,32453,32757,33061,33365,33669,33973,34277,34581,34885,35189,35493,35797,36101,36405,36709,37013,37317,37621,37925,38229,38533,38837,39141,39445,39749,40053,40357,40661,40965,41269,41573,41877,42181,42485,42789,43093,43397,43701,44005,44309,44613,44917,45221,45525,45829,46133,46437,46741,47045,47349,47653,47957,48261,48565,48869,49173,49477,49781,50085,50389,50693,50997,51301,51605,51909,52213,52517,52821,53125,53429,53733,54037,54341,54645,54949,55253,55557,55861,56165,56469,56773,57077,57381,57685,57989,58293,58597,58901,59205,59509,59813,60117,60421,60725,61029,61333,61637,61941,62245,62549,62853,63157,63461,63765,64069,64373,64677,64981,65285,65589,65893,66197,66501,66805,67109,67413,67717,68021,68325,68629,68933,69237,69541,69845,70149,70453,70757,71061,71365,71669,71973,72277,72581,72885,73189,73493,73797,74101,74405,74709,75013,75317,75621,75925,76229,76533,76837,77141,77445,77749'/>
+  </group>
+  <group name='229'>
+    <ids val='230,534,838,1142,1446,1750,2054,2358,2662,2966,3270,3574,3878,4182,4486,4790,5094,5398,5702,6006,6310,6614,6918,7222,7526,7830,8134,8438,8742,9046,9350,9654,9958,10262,10566,10870,11174,11478,11782,12086,12390,12694,12998,13302,13606,13910,14214,14518,14822,15126,15430,15734,16038,16342,16646,16950,17254,17558,17862,18166,18470,18774,19078,19382,19686,19990,20294,20598,20902,21206,21510,21814,22118,22422,22726,23030,23334,23638,23942,24246,24550,24854,25158,25462,25766,26070,26374,26678,26982,27286,27590,27894,28198,28502,28806,29110,29414,29718,30022,30326,30630,30934,31238,31542,31846,32150,32454,32758,33062,33366,33670,33974,34278,34582,34886,35190,35494,35798,36102,36406,36710,37014,37318,37622,37926,38230,38534,38838,39142,39446,39750,40054,40358,40662,40966,41270,41574,41878,42182,42486,42790,43094,43398,43702,44006,44310,44614,44918,45222,45526,45830,46134,46438,46742,47046,47350,47654,47958,48262,48566,48870,49174,49478,49782,50086,50390,50694,50998,51302,51606,51910,52214,52518,52822,53126,53430,53734,54038,54342,54646,54950,55254,55558,55862,56166,56470,56774,57078,57382,57686,57990,58294,58598,58902,59206,59510,59814,60118,60422,60726,61030,61334,61638,61942,62246,62550,62854,63158,63462,63766,64070,64374,64678,64982,65286,65590,65894,66198,66502,66806,67110,67414,67718,68022,68326,68630,68934,69238,69542,69846,70150,70454,70758,71062,71366,71670,71974,72278,72582,72886,73190,73494,73798,74102,74406,74710,75014,75318,75622,75926,76230,76534,76838,77142,77446,77750'/>
+  </group>
+  <group name='230'>
+    <ids val='231,535,839,1143,1447,1751,2055,2359,2663,2967,3271,3575,3879,4183,4487,4791,5095,5399,5703,6007,6311,6615,6919,7223,7527,7831,8135,8439,8743,9047,9351,9655,9959,10263,10567,10871,11175,11479,11783,12087,12391,12695,12999,13303,13607,13911,14215,14519,14823,15127,15431,15735,16039,16343,16647,16951,17255,17559,17863,18167,18471,18775,19079,19383,19687,19991,20295,20599,20903,21207,21511,21815,22119,22423,22727,23031,23335,23639,23943,24247,24551,24855,25159,25463,25767,26071,26375,26679,26983,27287,27591,27895,28199,28503,28807,29111,29415,29719,30023,30327,30631,30935,31239,31543,31847,32151,32455,32759,33063,33367,33671,33975,34279,34583,34887,35191,35495,35799,36103,36407,36711,37015,37319,37623,37927,38231,38535,38839,39143,39447,39751,40055,40359,40663,40967,41271,41575,41879,42183,42487,42791,43095,43399,43703,44007,44311,44615,44919,45223,45527,45831,46135,46439,46743,47047,47351,47655,47959,48263,48567,48871,49175,49479,49783,50087,50391,50695,50999,51303,51607,51911,52215,52519,52823,53127,53431,53735,54039,54343,54647,54951,55255,55559,55863,56167,56471,56775,57079,57383,57687,57991,58295,58599,58903,59207,59511,59815,60119,60423,60727,61031,61335,61639,61943,62247,62551,62855,63159,63463,63767,64071,64375,64679,64983,65287,65591,65895,66199,66503,66807,67111,67415,67719,68023,68327,68631,68935,69239,69543,69847,70151,70455,70759,71063,71367,71671,71975,72279,72583,72887,73191,73495,73799,74103,74407,74711,75015,75319,75623,75927,76231,76535,76839,77143,77447,77751'/>
+  </group>
+  <group name='231'>
+    <ids val='232,536,840,1144,1448,1752,2056,2360,2664,2968,3272,3576,3880,4184,4488,4792,5096,5400,5704,6008,6312,6616,6920,7224,7528,7832,8136,8440,8744,9048,9352,9656,9960,10264,10568,10872,11176,11480,11784,12088,12392,12696,13000,13304,13608,13912,14216,14520,14824,15128,15432,15736,16040,16344,16648,16952,17256,17560,17864,18168,18472,18776,19080,19384,19688,19992,20296,20600,20904,21208,21512,21816,22120,22424,22728,23032,23336,23640,23944,24248,24552,24856,25160,25464,25768,26072,26376,26680,26984,27288,27592,27896,28200,28504,28808,29112,29416,29720,30024,30328,30632,30936,31240,31544,31848,32152,32456,32760,33064,33368,33672,33976,34280,34584,34888,35192,35496,35800,36104,36408,36712,37016,37320,37624,37928,38232,38536,38840,39144,39448,39752,40056,40360,40664,40968,41272,41576,41880,42184,42488,42792,43096,43400,43704,44008,44312,44616,44920,45224,45528,45832,46136,46440,46744,47048,47352,47656,47960,48264,48568,48872,49176,49480,49784,50088,50392,50696,51000,51304,51608,51912,52216,52520,52824,53128,53432,53736,54040,54344,54648,54952,55256,55560,55864,56168,56472,56776,57080,57384,57688,57992,58296,58600,58904,59208,59512,59816,60120,60424,60728,61032,61336,61640,61944,62248,62552,62856,63160,63464,63768,64072,64376,64680,64984,65288,65592,65896,66200,66504,66808,67112,67416,67720,68024,68328,68632,68936,69240,69544,69848,70152,70456,70760,71064,71368,71672,71976,72280,72584,72888,73192,73496,73800,74104,74408,74712,75016,75320,75624,75928,76232,76536,76840,77144,77448,77752'/>
+  </group>
+  <group name='232'>
+    <ids val='233,537,841,1145,1449,1753,2057,2361,2665,2969,3273,3577,3881,4185,4489,4793,5097,5401,5705,6009,6313,6617,6921,7225,7529,7833,8137,8441,8745,9049,9353,9657,9961,10265,10569,10873,11177,11481,11785,12089,12393,12697,13001,13305,13609,13913,14217,14521,14825,15129,15433,15737,16041,16345,16649,16953,17257,17561,17865,18169,18473,18777,19081,19385,19689,19993,20297,20601,20905,21209,21513,21817,22121,22425,22729,23033,23337,23641,23945,24249,24553,24857,25161,25465,25769,26073,26377,26681,26985,27289,27593,27897,28201,28505,28809,29113,29417,29721,30025,30329,30633,30937,31241,31545,31849,32153,32457,32761,33065,33369,33673,33977,34281,34585,34889,35193,35497,35801,36105,36409,36713,37017,37321,37625,37929,38233,38537,38841,39145,39449,39753,40057,40361,40665,40969,41273,41577,41881,42185,42489,42793,43097,43401,43705,44009,44313,44617,44921,45225,45529,45833,46137,46441,46745,47049,47353,47657,47961,48265,48569,48873,49177,49481,49785,50089,50393,50697,51001,51305,51609,51913,52217,52521,52825,53129,53433,53737,54041,54345,54649,54953,55257,55561,55865,56169,56473,56777,57081,57385,57689,57993,58297,58601,58905,59209,59513,59817,60121,60425,60729,61033,61337,61641,61945,62249,62553,62857,63161,63465,63769,64073,64377,64681,64985,65289,65593,65897,66201,66505,66809,67113,67417,67721,68025,68329,68633,68937,69241,69545,69849,70153,70457,70761,71065,71369,71673,71977,72281,72585,72889,73193,73497,73801,74105,74409,74713,75017,75321,75625,75929,76233,76537,76841,77145,77449,77753'/>
+  </group>
+  <group name='233'>
+    <ids val='234,538,842,1146,1450,1754,2058,2362,2666,2970,3274,3578,3882,4186,4490,4794,5098,5402,5706,6010,6314,6618,6922,7226,7530,7834,8138,8442,8746,9050,9354,9658,9962,10266,10570,10874,11178,11482,11786,12090,12394,12698,13002,13306,13610,13914,14218,14522,14826,15130,15434,15738,16042,16346,16650,16954,17258,17562,17866,18170,18474,18778,19082,19386,19690,19994,20298,20602,20906,21210,21514,21818,22122,22426,22730,23034,23338,23642,23946,24250,24554,24858,25162,25466,25770,26074,26378,26682,26986,27290,27594,27898,28202,28506,28810,29114,29418,29722,30026,30330,30634,30938,31242,31546,31850,32154,32458,32762,33066,33370,33674,33978,34282,34586,34890,35194,35498,35802,36106,36410,36714,37018,37322,37626,37930,38234,38538,38842,39146,39450,39754,40058,40362,40666,40970,41274,41578,41882,42186,42490,42794,43098,43402,43706,44010,44314,44618,44922,45226,45530,45834,46138,46442,46746,47050,47354,47658,47962,48266,48570,48874,49178,49482,49786,50090,50394,50698,51002,51306,51610,51914,52218,52522,52826,53130,53434,53738,54042,54346,54650,54954,55258,55562,55866,56170,56474,56778,57082,57386,57690,57994,58298,58602,58906,59210,59514,59818,60122,60426,60730,61034,61338,61642,61946,62250,62554,62858,63162,63466,63770,64074,64378,64682,64986,65290,65594,65898,66202,66506,66810,67114,67418,67722,68026,68330,68634,68938,69242,69546,69850,70154,70458,70762,71066,71370,71674,71978,72282,72586,72890,73194,73498,73802,74106,74410,74714,75018,75322,75626,75930,76234,76538,76842,77146,77450,77754'/>
+  </group>
+  <group name='234'>
+    <ids val='235,539,843,1147,1451,1755,2059,2363,2667,2971,3275,3579,3883,4187,4491,4795,5099,5403,5707,6011,6315,6619,6923,7227,7531,7835,8139,8443,8747,9051,9355,9659,9963,10267,10571,10875,11179,11483,11787,12091,12395,12699,13003,13307,13611,13915,14219,14523,14827,15131,15435,15739,16043,16347,16651,16955,17259,17563,17867,18171,18475,18779,19083,19387,19691,19995,20299,20603,20907,21211,21515,21819,22123,22427,22731,23035,23339,23643,23947,24251,24555,24859,25163,25467,25771,26075,26379,26683,26987,27291,27595,27899,28203,28507,28811,29115,29419,29723,30027,30331,30635,30939,31243,31547,31851,32155,32459,32763,33067,33371,33675,33979,34283,34587,34891,35195,35499,35803,36107,36411,36715,37019,37323,37627,37931,38235,38539,38843,39147,39451,39755,40059,40363,40667,40971,41275,41579,41883,42187,42491,42795,43099,43403,43707,44011,44315,44619,44923,45227,45531,45835,46139,46443,46747,47051,47355,47659,47963,48267,48571,48875,49179,49483,49787,50091,50395,50699,51003,51307,51611,51915,52219,52523,52827,53131,53435,53739,54043,54347,54651,54955,55259,55563,55867,56171,56475,56779,57083,57387,57691,57995,58299,58603,58907,59211,59515,59819,60123,60427,60731,61035,61339,61643,61947,62251,62555,62859,63163,63467,63771,64075,64379,64683,64987,65291,65595,65899,66203,66507,66811,67115,67419,67723,68027,68331,68635,68939,69243,69547,69851,70155,70459,70763,71067,71371,71675,71979,72283,72587,72891,73195,73499,73803,74107,74411,74715,75019,75323,75627,75931,76235,76539,76843,77147,77451,77755'/>
+  </group>
+  <group name='235'>
+    <ids val='236,540,844,1148,1452,1756,2060,2364,2668,2972,3276,3580,3884,4188,4492,4796,5100,5404,5708,6012,6316,6620,6924,7228,7532,7836,8140,8444,8748,9052,9356,9660,9964,10268,10572,10876,11180,11484,11788,12092,12396,12700,13004,13308,13612,13916,14220,14524,14828,15132,15436,15740,16044,16348,16652,16956,17260,17564,17868,18172,18476,18780,19084,19388,19692,19996,20300,20604,20908,21212,21516,21820,22124,22428,22732,23036,23340,23644,23948,24252,24556,24860,25164,25468,25772,26076,26380,26684,26988,27292,27596,27900,28204,28508,28812,29116,29420,29724,30028,30332,30636,30940,31244,31548,31852,32156,32460,32764,33068,33372,33676,33980,34284,34588,34892,35196,35500,35804,36108,36412,36716,37020,37324,37628,37932,38236,38540,38844,39148,39452,39756,40060,40364,40668,40972,41276,41580,41884,42188,42492,42796,43100,43404,43708,44012,44316,44620,44924,45228,45532,45836,46140,46444,46748,47052,47356,47660,47964,48268,48572,48876,49180,49484,49788,50092,50396,50700,51004,51308,51612,51916,52220,52524,52828,53132,53436,53740,54044,54348,54652,54956,55260,55564,55868,56172,56476,56780,57084,57388,57692,57996,58300,58604,58908,59212,59516,59820,60124,60428,60732,61036,61340,61644,61948,62252,62556,62860,63164,63468,63772,64076,64380,64684,64988,65292,65596,65900,66204,66508,66812,67116,67420,67724,68028,68332,68636,68940,69244,69548,69852,70156,70460,70764,71068,71372,71676,71980,72284,72588,72892,73196,73500,73804,74108,74412,74716,75020,75324,75628,75932,76236,76540,76844,77148,77452,77756'/>
+  </group>
+  <group name='236'>
+    <ids val='237,541,845,1149,1453,1757,2061,2365,2669,2973,3277,3581,3885,4189,4493,4797,5101,5405,5709,6013,6317,6621,6925,7229,7533,7837,8141,8445,8749,9053,9357,9661,9965,10269,10573,10877,11181,11485,11789,12093,12397,12701,13005,13309,13613,13917,14221,14525,14829,15133,15437,15741,16045,16349,16653,16957,17261,17565,17869,18173,18477,18781,19085,19389,19693,19997,20301,20605,20909,21213,21517,21821,22125,22429,22733,23037,23341,23645,23949,24253,24557,24861,25165,25469,25773,26077,26381,26685,26989,27293,27597,27901,28205,28509,28813,29117,29421,29725,30029,30333,30637,30941,31245,31549,31853,32157,32461,32765,33069,33373,33677,33981,34285,34589,34893,35197,35501,35805,36109,36413,36717,37021,37325,37629,37933,38237,38541,38845,39149,39453,39757,40061,40365,40669,40973,41277,41581,41885,42189,42493,42797,43101,43405,43709,44013,44317,44621,44925,45229,45533,45837,46141,46445,46749,47053,47357,47661,47965,48269,48573,48877,49181,49485,49789,50093,50397,50701,51005,51309,51613,51917,52221,52525,52829,53133,53437,53741,54045,54349,54653,54957,55261,55565,55869,56173,56477,56781,57085,57389,57693,57997,58301,58605,58909,59213,59517,59821,60125,60429,60733,61037,61341,61645,61949,62253,62557,62861,63165,63469,63773,64077,64381,64685,64989,65293,65597,65901,66205,66509,66813,67117,67421,67725,68029,68333,68637,68941,69245,69549,69853,70157,70461,70765,71069,71373,71677,71981,72285,72589,72893,73197,73501,73805,74109,74413,74717,75021,75325,75629,75933,76237,76541,76845,77149,77453,77757'/>
+  </group>
+  <group name='237'>
+    <ids val='238,542,846,1150,1454,1758,2062,2366,2670,2974,3278,3582,3886,4190,4494,4798,5102,5406,5710,6014,6318,6622,6926,7230,7534,7838,8142,8446,8750,9054,9358,9662,9966,10270,10574,10878,11182,11486,11790,12094,12398,12702,13006,13310,13614,13918,14222,14526,14830,15134,15438,15742,16046,16350,16654,16958,17262,17566,17870,18174,18478,18782,19086,19390,19694,19998,20302,20606,20910,21214,21518,21822,22126,22430,22734,23038,23342,23646,23950,24254,24558,24862,25166,25470,25774,26078,26382,26686,26990,27294,27598,27902,28206,28510,28814,29118,29422,29726,30030,30334,30638,30942,31246,31550,31854,32158,32462,32766,33070,33374,33678,33982,34286,34590,34894,35198,35502,35806,36110,36414,36718,37022,37326,37630,37934,38238,38542,38846,39150,39454,39758,40062,40366,40670,40974,41278,41582,41886,42190,42494,42798,43102,43406,43710,44014,44318,44622,44926,45230,45534,45838,46142,46446,46750,47054,47358,47662,47966,48270,48574,48878,49182,49486,49790,50094,50398,50702,51006,51310,51614,51918,52222,52526,52830,53134,53438,53742,54046,54350,54654,54958,55262,55566,55870,56174,56478,56782,57086,57390,57694,57998,58302,58606,58910,59214,59518,59822,60126,60430,60734,61038,61342,61646,61950,62254,62558,62862,63166,63470,63774,64078,64382,64686,64990,65294,65598,65902,66206,66510,66814,67118,67422,67726,68030,68334,68638,68942,69246,69550,69854,70158,70462,70766,71070,71374,71678,71982,72286,72590,72894,73198,73502,73806,74110,74414,74718,75022,75326,75630,75934,76238,76542,76846,77150,77454,77758'/>
+  </group>
+  <group name='238'>
+    <ids val='239,543,847,1151,1455,1759,2063,2367,2671,2975,3279,3583,3887,4191,4495,4799,5103,5407,5711,6015,6319,6623,6927,7231,7535,7839,8143,8447,8751,9055,9359,9663,9967,10271,10575,10879,11183,11487,11791,12095,12399,12703,13007,13311,13615,13919,14223,14527,14831,15135,15439,15743,16047,16351,16655,16959,17263,17567,17871,18175,18479,18783,19087,19391,19695,19999,20303,20607,20911,21215,21519,21823,22127,22431,22735,23039,23343,23647,23951,24255,24559,24863,25167,25471,25775,26079,26383,26687,26991,27295,27599,27903,28207,28511,28815,29119,29423,29727,30031,30335,30639,30943,31247,31551,31855,32159,32463,32767,33071,33375,33679,33983,34287,34591,34895,35199,35503,35807,36111,36415,36719,37023,37327,37631,37935,38239,38543,38847,39151,39455,39759,40063,40367,40671,40975,41279,41583,41887,42191,42495,42799,43103,43407,43711,44015,44319,44623,44927,45231,45535,45839,46143,46447,46751,47055,47359,47663,47967,48271,48575,48879,49183,49487,49791,50095,50399,50703,51007,51311,51615,51919,52223,52527,52831,53135,53439,53743,54047,54351,54655,54959,55263,55567,55871,56175,56479,56783,57087,57391,57695,57999,58303,58607,58911,59215,59519,59823,60127,60431,60735,61039,61343,61647,61951,62255,62559,62863,63167,63471,63775,64079,64383,64687,64991,65295,65599,65903,66207,66511,66815,67119,67423,67727,68031,68335,68639,68943,69247,69551,69855,70159,70463,70767,71071,71375,71679,71983,72287,72591,72895,73199,73503,73807,74111,74415,74719,75023,75327,75631,75935,76239,76543,76847,77151,77455,77759'/>
+  </group>
+  <group name='239'>
+    <ids val='240,544,848,1152,1456,1760,2064,2368,2672,2976,3280,3584,3888,4192,4496,4800,5104,5408,5712,6016,6320,6624,6928,7232,7536,7840,8144,8448,8752,9056,9360,9664,9968,10272,10576,10880,11184,11488,11792,12096,12400,12704,13008,13312,13616,13920,14224,14528,14832,15136,15440,15744,16048,16352,16656,16960,17264,17568,17872,18176,18480,18784,19088,19392,19696,20000,20304,20608,20912,21216,21520,21824,22128,22432,22736,23040,23344,23648,23952,24256,24560,24864,25168,25472,25776,26080,26384,26688,26992,27296,27600,27904,28208,28512,28816,29120,29424,29728,30032,30336,30640,30944,31248,31552,31856,32160,32464,32768,33072,33376,33680,33984,34288,34592,34896,35200,35504,35808,36112,36416,36720,37024,37328,37632,37936,38240,38544,38848,39152,39456,39760,40064,40368,40672,40976,41280,41584,41888,42192,42496,42800,43104,43408,43712,44016,44320,44624,44928,45232,45536,45840,46144,46448,46752,47056,47360,47664,47968,48272,48576,48880,49184,49488,49792,50096,50400,50704,51008,51312,51616,51920,52224,52528,52832,53136,53440,53744,54048,54352,54656,54960,55264,55568,55872,56176,56480,56784,57088,57392,57696,58000,58304,58608,58912,59216,59520,59824,60128,60432,60736,61040,61344,61648,61952,62256,62560,62864,63168,63472,63776,64080,64384,64688,64992,65296,65600,65904,66208,66512,66816,67120,67424,67728,68032,68336,68640,68944,69248,69552,69856,70160,70464,70768,71072,71376,71680,71984,72288,72592,72896,73200,73504,73808,74112,74416,74720,75024,75328,75632,75936,76240,76544,76848,77152,77456,77760'/>
+  </group>
+  <group name='240'>
+    <ids val='241,545,849,1153,1457,1761,2065,2369,2673,2977,3281,3585,3889,4193,4497,4801,5105,5409,5713,6017,6321,6625,6929,7233,7537,7841,8145,8449,8753,9057,9361,9665,9969,10273,10577,10881,11185,11489,11793,12097,12401,12705,13009,13313,13617,13921,14225,14529,14833,15137,15441,15745,16049,16353,16657,16961,17265,17569,17873,18177,18481,18785,19089,19393,19697,20001,20305,20609,20913,21217,21521,21825,22129,22433,22737,23041,23345,23649,23953,24257,24561,24865,25169,25473,25777,26081,26385,26689,26993,27297,27601,27905,28209,28513,28817,29121,29425,29729,30033,30337,30641,30945,31249,31553,31857,32161,32465,32769,33073,33377,33681,33985,34289,34593,34897,35201,35505,35809,36113,36417,36721,37025,37329,37633,37937,38241,38545,38849,39153,39457,39761,40065,40369,40673,40977,41281,41585,41889,42193,42497,42801,43105,43409,43713,44017,44321,44625,44929,45233,45537,45841,46145,46449,46753,47057,47361,47665,47969,48273,48577,48881,49185,49489,49793,50097,50401,50705,51009,51313,51617,51921,52225,52529,52833,53137,53441,53745,54049,54353,54657,54961,55265,55569,55873,56177,56481,56785,57089,57393,57697,58001,58305,58609,58913,59217,59521,59825,60129,60433,60737,61041,61345,61649,61953,62257,62561,62865,63169,63473,63777,64081,64385,64689,64993,65297,65601,65905,66209,66513,66817,67121,67425,67729,68033,68337,68641,68945,69249,69553,69857,70161,70465,70769,71073,71377,71681,71985,72289,72593,72897,73201,73505,73809,74113,74417,74721,75025,75329,75633,75937,76241,76545,76849,77153,77457,77761'/>
+  </group>
+  <group name='241'>
+    <ids val='242,546,850,1154,1458,1762,2066,2370,2674,2978,3282,3586,3890,4194,4498,4802,5106,5410,5714,6018,6322,6626,6930,7234,7538,7842,8146,8450,8754,9058,9362,9666,9970,10274,10578,10882,11186,11490,11794,12098,12402,12706,13010,13314,13618,13922,14226,14530,14834,15138,15442,15746,16050,16354,16658,16962,17266,17570,17874,18178,18482,18786,19090,19394,19698,20002,20306,20610,20914,21218,21522,21826,22130,22434,22738,23042,23346,23650,23954,24258,24562,24866,25170,25474,25778,26082,26386,26690,26994,27298,27602,27906,28210,28514,28818,29122,29426,29730,30034,30338,30642,30946,31250,31554,31858,32162,32466,32770,33074,33378,33682,33986,34290,34594,34898,35202,35506,35810,36114,36418,36722,37026,37330,37634,37938,38242,38546,38850,39154,39458,39762,40066,40370,40674,40978,41282,41586,41890,42194,42498,42802,43106,43410,43714,44018,44322,44626,44930,45234,45538,45842,46146,46450,46754,47058,47362,47666,47970,48274,48578,48882,49186,49490,49794,50098,50402,50706,51010,51314,51618,51922,52226,52530,52834,53138,53442,53746,54050,54354,54658,54962,55266,55570,55874,56178,56482,56786,57090,57394,57698,58002,58306,58610,58914,59218,59522,59826,60130,60434,60738,61042,61346,61650,61954,62258,62562,62866,63170,63474,63778,64082,64386,64690,64994,65298,65602,65906,66210,66514,66818,67122,67426,67730,68034,68338,68642,68946,69250,69554,69858,70162,70466,70770,71074,71378,71682,71986,72290,72594,72898,73202,73506,73810,74114,74418,74722,75026,75330,75634,75938,76242,76546,76850,77154,77458,77762'/>
+  </group>
+  <group name='242'>
+    <ids val='243,547,851,1155,1459,1763,2067,2371,2675,2979,3283,3587,3891,4195,4499,4803,5107,5411,5715,6019,6323,6627,6931,7235,7539,7843,8147,8451,8755,9059,9363,9667,9971,10275,10579,10883,11187,11491,11795,12099,12403,12707,13011,13315,13619,13923,14227,14531,14835,15139,15443,15747,16051,16355,16659,16963,17267,17571,17875,18179,18483,18787,19091,19395,19699,20003,20307,20611,20915,21219,21523,21827,22131,22435,22739,23043,23347,23651,23955,24259,24563,24867,25171,25475,25779,26083,26387,26691,26995,27299,27603,27907,28211,28515,28819,29123,29427,29731,30035,30339,30643,30947,31251,31555,31859,32163,32467,32771,33075,33379,33683,33987,34291,34595,34899,35203,35507,35811,36115,36419,36723,37027,37331,37635,37939,38243,38547,38851,39155,39459,39763,40067,40371,40675,40979,41283,41587,41891,42195,42499,42803,43107,43411,43715,44019,44323,44627,44931,45235,45539,45843,46147,46451,46755,47059,47363,47667,47971,48275,48579,48883,49187,49491,49795,50099,50403,50707,51011,51315,51619,51923,52227,52531,52835,53139,53443,53747,54051,54355,54659,54963,55267,55571,55875,56179,56483,56787,57091,57395,57699,58003,58307,58611,58915,59219,59523,59827,60131,60435,60739,61043,61347,61651,61955,62259,62563,62867,63171,63475,63779,64083,64387,64691,64995,65299,65603,65907,66211,66515,66819,67123,67427,67731,68035,68339,68643,68947,69251,69555,69859,70163,70467,70771,71075,71379,71683,71987,72291,72595,72899,73203,73507,73811,74115,74419,74723,75027,75331,75635,75939,76243,76547,76851,77155,77459,77763'/>
+  </group>
+  <group name='243'>
+    <ids val='244,548,852,1156,1460,1764,2068,2372,2676,2980,3284,3588,3892,4196,4500,4804,5108,5412,5716,6020,6324,6628,6932,7236,7540,7844,8148,8452,8756,9060,9364,9668,9972,10276,10580,10884,11188,11492,11796,12100,12404,12708,13012,13316,13620,13924,14228,14532,14836,15140,15444,15748,16052,16356,16660,16964,17268,17572,17876,18180,18484,18788,19092,19396,19700,20004,20308,20612,20916,21220,21524,21828,22132,22436,22740,23044,23348,23652,23956,24260,24564,24868,25172,25476,25780,26084,26388,26692,26996,27300,27604,27908,28212,28516,28820,29124,29428,29732,30036,30340,30644,30948,31252,31556,31860,32164,32468,32772,33076,33380,33684,33988,34292,34596,34900,35204,35508,35812,36116,36420,36724,37028,37332,37636,37940,38244,38548,38852,39156,39460,39764,40068,40372,40676,40980,41284,41588,41892,42196,42500,42804,43108,43412,43716,44020,44324,44628,44932,45236,45540,45844,46148,46452,46756,47060,47364,47668,47972,48276,48580,48884,49188,49492,49796,50100,50404,50708,51012,51316,51620,51924,52228,52532,52836,53140,53444,53748,54052,54356,54660,54964,55268,55572,55876,56180,56484,56788,57092,57396,57700,58004,58308,58612,58916,59220,59524,59828,60132,60436,60740,61044,61348,61652,61956,62260,62564,62868,63172,63476,63780,64084,64388,64692,64996,65300,65604,65908,66212,66516,66820,67124,67428,67732,68036,68340,68644,68948,69252,69556,69860,70164,70468,70772,71076,71380,71684,71988,72292,72596,72900,73204,73508,73812,74116,74420,74724,75028,75332,75636,75940,76244,76548,76852,77156,77460,77764'/>
+  </group>
+  <group name='244'>
+    <ids val='245,549,853,1157,1461,1765,2069,2373,2677,2981,3285,3589,3893,4197,4501,4805,5109,5413,5717,6021,6325,6629,6933,7237,7541,7845,8149,8453,8757,9061,9365,9669,9973,10277,10581,10885,11189,11493,11797,12101,12405,12709,13013,13317,13621,13925,14229,14533,14837,15141,15445,15749,16053,16357,16661,16965,17269,17573,17877,18181,18485,18789,19093,19397,19701,20005,20309,20613,20917,21221,21525,21829,22133,22437,22741,23045,23349,23653,23957,24261,24565,24869,25173,25477,25781,26085,26389,26693,26997,27301,27605,27909,28213,28517,28821,29125,29429,29733,30037,30341,30645,30949,31253,31557,31861,32165,32469,32773,33077,33381,33685,33989,34293,34597,34901,35205,35509,35813,36117,36421,36725,37029,37333,37637,37941,38245,38549,38853,39157,39461,39765,40069,40373,40677,40981,41285,41589,41893,42197,42501,42805,43109,43413,43717,44021,44325,44629,44933,45237,45541,45845,46149,46453,46757,47061,47365,47669,47973,48277,48581,48885,49189,49493,49797,50101,50405,50709,51013,51317,51621,51925,52229,52533,52837,53141,53445,53749,54053,54357,54661,54965,55269,55573,55877,56181,56485,56789,57093,57397,57701,58005,58309,58613,58917,59221,59525,59829,60133,60437,60741,61045,61349,61653,61957,62261,62565,62869,63173,63477,63781,64085,64389,64693,64997,65301,65605,65909,66213,66517,66821,67125,67429,67733,68037,68341,68645,68949,69253,69557,69861,70165,70469,70773,71077,71381,71685,71989,72293,72597,72901,73205,73509,73813,74117,74421,74725,75029,75333,75637,75941,76245,76549,76853,77157,77461,77765'/>
+  </group>
+  <group name='245'>
+    <ids val='246,550,854,1158,1462,1766,2070,2374,2678,2982,3286,3590,3894,4198,4502,4806,5110,5414,5718,6022,6326,6630,6934,7238,7542,7846,8150,8454,8758,9062,9366,9670,9974,10278,10582,10886,11190,11494,11798,12102,12406,12710,13014,13318,13622,13926,14230,14534,14838,15142,15446,15750,16054,16358,16662,16966,17270,17574,17878,18182,18486,18790,19094,19398,19702,20006,20310,20614,20918,21222,21526,21830,22134,22438,22742,23046,23350,23654,23958,24262,24566,24870,25174,25478,25782,26086,26390,26694,26998,27302,27606,27910,28214,28518,28822,29126,29430,29734,30038,30342,30646,30950,31254,31558,31862,32166,32470,32774,33078,33382,33686,33990,34294,34598,34902,35206,35510,35814,36118,36422,36726,37030,37334,37638,37942,38246,38550,38854,39158,39462,39766,40070,40374,40678,40982,41286,41590,41894,42198,42502,42806,43110,43414,43718,44022,44326,44630,44934,45238,45542,45846,46150,46454,46758,47062,47366,47670,47974,48278,48582,48886,49190,49494,49798,50102,50406,50710,51014,51318,51622,51926,52230,52534,52838,53142,53446,53750,54054,54358,54662,54966,55270,55574,55878,56182,56486,56790,57094,57398,57702,58006,58310,58614,58918,59222,59526,59830,60134,60438,60742,61046,61350,61654,61958,62262,62566,62870,63174,63478,63782,64086,64390,64694,64998,65302,65606,65910,66214,66518,66822,67126,67430,67734,68038,68342,68646,68950,69254,69558,69862,70166,70470,70774,71078,71382,71686,71990,72294,72598,72902,73206,73510,73814,74118,74422,74726,75030,75334,75638,75942,76246,76550,76854,77158,77462,77766'/>
+  </group>
+  <group name='246'>
+    <ids val='247,551,855,1159,1463,1767,2071,2375,2679,2983,3287,3591,3895,4199,4503,4807,5111,5415,5719,6023,6327,6631,6935,7239,7543,7847,8151,8455,8759,9063,9367,9671,9975,10279,10583,10887,11191,11495,11799,12103,12407,12711,13015,13319,13623,13927,14231,14535,14839,15143,15447,15751,16055,16359,16663,16967,17271,17575,17879,18183,18487,18791,19095,19399,19703,20007,20311,20615,20919,21223,21527,21831,22135,22439,22743,23047,23351,23655,23959,24263,24567,24871,25175,25479,25783,26087,26391,26695,26999,27303,27607,27911,28215,28519,28823,29127,29431,29735,30039,30343,30647,30951,31255,31559,31863,32167,32471,32775,33079,33383,33687,33991,34295,34599,34903,35207,35511,35815,36119,36423,36727,37031,37335,37639,37943,38247,38551,38855,39159,39463,39767,40071,40375,40679,40983,41287,41591,41895,42199,42503,42807,43111,43415,43719,44023,44327,44631,44935,45239,45543,45847,46151,46455,46759,47063,47367,47671,47975,48279,48583,48887,49191,49495,49799,50103,50407,50711,51015,51319,51623,51927,52231,52535,52839,53143,53447,53751,54055,54359,54663,54967,55271,55575,55879,56183,56487,56791,57095,57399,57703,58007,58311,58615,58919,59223,59527,59831,60135,60439,60743,61047,61351,61655,61959,62263,62567,62871,63175,63479,63783,64087,64391,64695,64999,65303,65607,65911,66215,66519,66823,67127,67431,67735,68039,68343,68647,68951,69255,69559,69863,70167,70471,70775,71079,71383,71687,71991,72295,72599,72903,73207,73511,73815,74119,74423,74727,75031,75335,75639,75943,76247,76551,76855,77159,77463,77767'/>
+  </group>
+  <group name='247'>
+    <ids val='248,552,856,1160,1464,1768,2072,2376,2680,2984,3288,3592,3896,4200,4504,4808,5112,5416,5720,6024,6328,6632,6936,7240,7544,7848,8152,8456,8760,9064,9368,9672,9976,10280,10584,10888,11192,11496,11800,12104,12408,12712,13016,13320,13624,13928,14232,14536,14840,15144,15448,15752,16056,16360,16664,16968,17272,17576,17880,18184,18488,18792,19096,19400,19704,20008,20312,20616,20920,21224,21528,21832,22136,22440,22744,23048,23352,23656,23960,24264,24568,24872,25176,25480,25784,26088,26392,26696,27000,27304,27608,27912,28216,28520,28824,29128,29432,29736,30040,30344,30648,30952,31256,31560,31864,32168,32472,32776,33080,33384,33688,33992,34296,34600,34904,35208,35512,35816,36120,36424,36728,37032,37336,37640,37944,38248,38552,38856,39160,39464,39768,40072,40376,40680,40984,41288,41592,41896,42200,42504,42808,43112,43416,43720,44024,44328,44632,44936,45240,45544,45848,46152,46456,46760,47064,47368,47672,47976,48280,48584,48888,49192,49496,49800,50104,50408,50712,51016,51320,51624,51928,52232,52536,52840,53144,53448,53752,54056,54360,54664,54968,55272,55576,55880,56184,56488,56792,57096,57400,57704,58008,58312,58616,58920,59224,59528,59832,60136,60440,60744,61048,61352,61656,61960,62264,62568,62872,63176,63480,63784,64088,64392,64696,65000,65304,65608,65912,66216,66520,66824,67128,67432,67736,68040,68344,68648,68952,69256,69560,69864,70168,70472,70776,71080,71384,71688,71992,72296,72600,72904,73208,73512,73816,74120,74424,74728,75032,75336,75640,75944,76248,76552,76856,77160,77464,77768'/>
+  </group>
+  <group name='248'>
+    <ids val='249,553,857,1161,1465,1769,2073,2377,2681,2985,3289,3593,3897,4201,4505,4809,5113,5417,5721,6025,6329,6633,6937,7241,7545,7849,8153,8457,8761,9065,9369,9673,9977,10281,10585,10889,11193,11497,11801,12105,12409,12713,13017,13321,13625,13929,14233,14537,14841,15145,15449,15753,16057,16361,16665,16969,17273,17577,17881,18185,18489,18793,19097,19401,19705,20009,20313,20617,20921,21225,21529,21833,22137,22441,22745,23049,23353,23657,23961,24265,24569,24873,25177,25481,25785,26089,26393,26697,27001,27305,27609,27913,28217,28521,28825,29129,29433,29737,30041,30345,30649,30953,31257,31561,31865,32169,32473,32777,33081,33385,33689,33993,34297,34601,34905,35209,35513,35817,36121,36425,36729,37033,37337,37641,37945,38249,38553,38857,39161,39465,39769,40073,40377,40681,40985,41289,41593,41897,42201,42505,42809,43113,43417,43721,44025,44329,44633,44937,45241,45545,45849,46153,46457,46761,47065,47369,47673,47977,48281,48585,48889,49193,49497,49801,50105,50409,50713,51017,51321,51625,51929,52233,52537,52841,53145,53449,53753,54057,54361,54665,54969,55273,55577,55881,56185,56489,56793,57097,57401,57705,58009,58313,58617,58921,59225,59529,59833,60137,60441,60745,61049,61353,61657,61961,62265,62569,62873,63177,63481,63785,64089,64393,64697,65001,65305,65609,65913,66217,66521,66825,67129,67433,67737,68041,68345,68649,68953,69257,69561,69865,70169,70473,70777,71081,71385,71689,71993,72297,72601,72905,73209,73513,73817,74121,74425,74729,75033,75337,75641,75945,76249,76553,76857,77161,77465,77769'/>
+  </group>
+  <group name='249'>
+    <ids val='250,554,858,1162,1466,1770,2074,2378,2682,2986,3290,3594,3898,4202,4506,4810,5114,5418,5722,6026,6330,6634,6938,7242,7546,7850,8154,8458,8762,9066,9370,9674,9978,10282,10586,10890,11194,11498,11802,12106,12410,12714,13018,13322,13626,13930,14234,14538,14842,15146,15450,15754,16058,16362,16666,16970,17274,17578,17882,18186,18490,18794,19098,19402,19706,20010,20314,20618,20922,21226,21530,21834,22138,22442,22746,23050,23354,23658,23962,24266,24570,24874,25178,25482,25786,26090,26394,26698,27002,27306,27610,27914,28218,28522,28826,29130,29434,29738,30042,30346,30650,30954,31258,31562,31866,32170,32474,32778,33082,33386,33690,33994,34298,34602,34906,35210,35514,35818,36122,36426,36730,37034,37338,37642,37946,38250,38554,38858,39162,39466,39770,40074,40378,40682,40986,41290,41594,41898,42202,42506,42810,43114,43418,43722,44026,44330,44634,44938,45242,45546,45850,46154,46458,46762,47066,47370,47674,47978,48282,48586,48890,49194,49498,49802,50106,50410,50714,51018,51322,51626,51930,52234,52538,52842,53146,53450,53754,54058,54362,54666,54970,55274,55578,55882,56186,56490,56794,57098,57402,57706,58010,58314,58618,58922,59226,59530,59834,60138,60442,60746,61050,61354,61658,61962,62266,62570,62874,63178,63482,63786,64090,64394,64698,65002,65306,65610,65914,66218,66522,66826,67130,67434,67738,68042,68346,68650,68954,69258,69562,69866,70170,70474,70778,71082,71386,71690,71994,72298,72602,72906,73210,73514,73818,74122,74426,74730,75034,75338,75642,75946,76250,76554,76858,77162,77466,77770'/>
+  </group>
+  <group name='250'>
+    <ids val='251,555,859,1163,1467,1771,2075,2379,2683,2987,3291,3595,3899,4203,4507,4811,5115,5419,5723,6027,6331,6635,6939,7243,7547,7851,8155,8459,8763,9067,9371,9675,9979,10283,10587,10891,11195,11499,11803,12107,12411,12715,13019,13323,13627,13931,14235,14539,14843,15147,15451,15755,16059,16363,16667,16971,17275,17579,17883,18187,18491,18795,19099,19403,19707,20011,20315,20619,20923,21227,21531,21835,22139,22443,22747,23051,23355,23659,23963,24267,24571,24875,25179,25483,25787,26091,26395,26699,27003,27307,27611,27915,28219,28523,28827,29131,29435,29739,30043,30347,30651,30955,31259,31563,31867,32171,32475,32779,33083,33387,33691,33995,34299,34603,34907,35211,35515,35819,36123,36427,36731,37035,37339,37643,37947,38251,38555,38859,39163,39467,39771,40075,40379,40683,40987,41291,41595,41899,42203,42507,42811,43115,43419,43723,44027,44331,44635,44939,45243,45547,45851,46155,46459,46763,47067,47371,47675,47979,48283,48587,48891,49195,49499,49803,50107,50411,50715,51019,51323,51627,51931,52235,52539,52843,53147,53451,53755,54059,54363,54667,54971,55275,55579,55883,56187,56491,56795,57099,57403,57707,58011,58315,58619,58923,59227,59531,59835,60139,60443,60747,61051,61355,61659,61963,62267,62571,62875,63179,63483,63787,64091,64395,64699,65003,65307,65611,65915,66219,66523,66827,67131,67435,67739,68043,68347,68651,68955,69259,69563,69867,70171,70475,70779,71083,71387,71691,71995,72299,72603,72907,73211,73515,73819,74123,74427,74731,75035,75339,75643,75947,76251,76555,76859,77163,77467,77771'/>
+  </group>
+  <group name='251'>
+    <ids val='252,556,860,1164,1468,1772,2076,2380,2684,2988,3292,3596,3900,4204,4508,4812,5116,5420,5724,6028,6332,6636,6940,7244,7548,7852,8156,8460,8764,9068,9372,9676,9980,10284,10588,10892,11196,11500,11804,12108,12412,12716,13020,13324,13628,13932,14236,14540,14844,15148,15452,15756,16060,16364,16668,16972,17276,17580,17884,18188,18492,18796,19100,19404,19708,20012,20316,20620,20924,21228,21532,21836,22140,22444,22748,23052,23356,23660,23964,24268,24572,24876,25180,25484,25788,26092,26396,26700,27004,27308,27612,27916,28220,28524,28828,29132,29436,29740,30044,30348,30652,30956,31260,31564,31868,32172,32476,32780,33084,33388,33692,33996,34300,34604,34908,35212,35516,35820,36124,36428,36732,37036,37340,37644,37948,38252,38556,38860,39164,39468,39772,40076,40380,40684,40988,41292,41596,41900,42204,42508,42812,43116,43420,43724,44028,44332,44636,44940,45244,45548,45852,46156,46460,46764,47068,47372,47676,47980,48284,48588,48892,49196,49500,49804,50108,50412,50716,51020,51324,51628,51932,52236,52540,52844,53148,53452,53756,54060,54364,54668,54972,55276,55580,55884,56188,56492,56796,57100,57404,57708,58012,58316,58620,58924,59228,59532,59836,60140,60444,60748,61052,61356,61660,61964,62268,62572,62876,63180,63484,63788,64092,64396,64700,65004,65308,65612,65916,66220,66524,66828,67132,67436,67740,68044,68348,68652,68956,69260,69564,69868,70172,70476,70780,71084,71388,71692,71996,72300,72604,72908,73212,73516,73820,74124,74428,74732,75036,75340,75644,75948,76252,76556,76860,77164,77468,77772'/>
+  </group>
+  <group name='252'>
+    <ids val='253,557,861,1165,1469,1773,2077,2381,2685,2989,3293,3597,3901,4205,4509,4813,5117,5421,5725,6029,6333,6637,6941,7245,7549,7853,8157,8461,8765,9069,9373,9677,9981,10285,10589,10893,11197,11501,11805,12109,12413,12717,13021,13325,13629,13933,14237,14541,14845,15149,15453,15757,16061,16365,16669,16973,17277,17581,17885,18189,18493,18797,19101,19405,19709,20013,20317,20621,20925,21229,21533,21837,22141,22445,22749,23053,23357,23661,23965,24269,24573,24877,25181,25485,25789,26093,26397,26701,27005,27309,27613,27917,28221,28525,28829,29133,29437,29741,30045,30349,30653,30957,31261,31565,31869,32173,32477,32781,33085,33389,33693,33997,34301,34605,34909,35213,35517,35821,36125,36429,36733,37037,37341,37645,37949,38253,38557,38861,39165,39469,39773,40077,40381,40685,40989,41293,41597,41901,42205,42509,42813,43117,43421,43725,44029,44333,44637,44941,45245,45549,45853,46157,46461,46765,47069,47373,47677,47981,48285,48589,48893,49197,49501,49805,50109,50413,50717,51021,51325,51629,51933,52237,52541,52845,53149,53453,53757,54061,54365,54669,54973,55277,55581,55885,56189,56493,56797,57101,57405,57709,58013,58317,58621,58925,59229,59533,59837,60141,60445,60749,61053,61357,61661,61965,62269,62573,62877,63181,63485,63789,64093,64397,64701,65005,65309,65613,65917,66221,66525,66829,67133,67437,67741,68045,68349,68653,68957,69261,69565,69869,70173,70477,70781,71085,71389,71693,71997,72301,72605,72909,73213,73517,73821,74125,74429,74733,75037,75341,75645,75949,76253,76557,76861,77165,77469,77773'/>
+  </group>
+  <group name='253'>
+    <ids val='254,558,862,1166,1470,1774,2078,2382,2686,2990,3294,3598,3902,4206,4510,4814,5118,5422,5726,6030,6334,6638,6942,7246,7550,7854,8158,8462,8766,9070,9374,9678,9982,10286,10590,10894,11198,11502,11806,12110,12414,12718,13022,13326,13630,13934,14238,14542,14846,15150,15454,15758,16062,16366,16670,16974,17278,17582,17886,18190,18494,18798,19102,19406,19710,20014,20318,20622,20926,21230,21534,21838,22142,22446,22750,23054,23358,23662,23966,24270,24574,24878,25182,25486,25790,26094,26398,26702,27006,27310,27614,27918,28222,28526,28830,29134,29438,29742,30046,30350,30654,30958,31262,31566,31870,32174,32478,32782,33086,33390,33694,33998,34302,34606,34910,35214,35518,35822,36126,36430,36734,37038,37342,37646,37950,38254,38558,38862,39166,39470,39774,40078,40382,40686,40990,41294,41598,41902,42206,42510,42814,43118,43422,43726,44030,44334,44638,44942,45246,45550,45854,46158,46462,46766,47070,47374,47678,47982,48286,48590,48894,49198,49502,49806,50110,50414,50718,51022,51326,51630,51934,52238,52542,52846,53150,53454,53758,54062,54366,54670,54974,55278,55582,55886,56190,56494,56798,57102,57406,57710,58014,58318,58622,58926,59230,59534,59838,60142,60446,60750,61054,61358,61662,61966,62270,62574,62878,63182,63486,63790,64094,64398,64702,65006,65310,65614,65918,66222,66526,66830,67134,67438,67742,68046,68350,68654,68958,69262,69566,69870,70174,70478,70782,71086,71390,71694,71998,72302,72606,72910,73214,73518,73822,74126,74430,74734,75038,75342,75646,75950,76254,76558,76862,77166,77470,77774'/>
+  </group>
+  <group name='254'>
+    <ids val='255,559,863,1167,1471,1775,2079,2383,2687,2991,3295,3599,3903,4207,4511,4815,5119,5423,5727,6031,6335,6639,6943,7247,7551,7855,8159,8463,8767,9071,9375,9679,9983,10287,10591,10895,11199,11503,11807,12111,12415,12719,13023,13327,13631,13935,14239,14543,14847,15151,15455,15759,16063,16367,16671,16975,17279,17583,17887,18191,18495,18799,19103,19407,19711,20015,20319,20623,20927,21231,21535,21839,22143,22447,22751,23055,23359,23663,23967,24271,24575,24879,25183,25487,25791,26095,26399,26703,27007,27311,27615,27919,28223,28527,28831,29135,29439,29743,30047,30351,30655,30959,31263,31567,31871,32175,32479,32783,33087,33391,33695,33999,34303,34607,34911,35215,35519,35823,36127,36431,36735,37039,37343,37647,37951,38255,38559,38863,39167,39471,39775,40079,40383,40687,40991,41295,41599,41903,42207,42511,42815,43119,43423,43727,44031,44335,44639,44943,45247,45551,45855,46159,46463,46767,47071,47375,47679,47983,48287,48591,48895,49199,49503,49807,50111,50415,50719,51023,51327,51631,51935,52239,52543,52847,53151,53455,53759,54063,54367,54671,54975,55279,55583,55887,56191,56495,56799,57103,57407,57711,58015,58319,58623,58927,59231,59535,59839,60143,60447,60751,61055,61359,61663,61967,62271,62575,62879,63183,63487,63791,64095,64399,64703,65007,65311,65615,65919,66223,66527,66831,67135,67439,67743,68047,68351,68655,68959,69263,69567,69871,70175,70479,70783,71087,71391,71695,71999,72303,72607,72911,73215,73519,73823,74127,74431,74735,75039,75343,75647,75951,76255,76559,76863,77167,77471,77775'/>
+  </group>
+  <group name='255'>
+    <ids val='256,560,864,1168,1472,1776,2080,2384,2688,2992,3296,3600,3904,4208,4512,4816,5120,5424,5728,6032,6336,6640,6944,7248,7552,7856,8160,8464,8768,9072,9376,9680,9984,10288,10592,10896,11200,11504,11808,12112,12416,12720,13024,13328,13632,13936,14240,14544,14848,15152,15456,15760,16064,16368,16672,16976,17280,17584,17888,18192,18496,18800,19104,19408,19712,20016,20320,20624,20928,21232,21536,21840,22144,22448,22752,23056,23360,23664,23968,24272,24576,24880,25184,25488,25792,26096,26400,26704,27008,27312,27616,27920,28224,28528,28832,29136,29440,29744,30048,30352,30656,30960,31264,31568,31872,32176,32480,32784,33088,33392,33696,34000,34304,34608,34912,35216,35520,35824,36128,36432,36736,37040,37344,37648,37952,38256,38560,38864,39168,39472,39776,40080,40384,40688,40992,41296,41600,41904,42208,42512,42816,43120,43424,43728,44032,44336,44640,44944,45248,45552,45856,46160,46464,46768,47072,47376,47680,47984,48288,48592,48896,49200,49504,49808,50112,50416,50720,51024,51328,51632,51936,52240,52544,52848,53152,53456,53760,54064,54368,54672,54976,55280,55584,55888,56192,56496,56800,57104,57408,57712,58016,58320,58624,58928,59232,59536,59840,60144,60448,60752,61056,61360,61664,61968,62272,62576,62880,63184,63488,63792,64096,64400,64704,65008,65312,65616,65920,66224,66528,66832,67136,67440,67744,68048,68352,68656,68960,69264,69568,69872,70176,70480,70784,71088,71392,71696,72000,72304,72608,72912,73216,73520,73824,74128,74432,74736,75040,75344,75648,75952,76256,76560,76864,77168,77472,77776'/>
+  </group>
+  <group name='256'>
+    <ids val='257,561,865,1169,1473,1777,2081,2385,2689,2993,3297,3601,3905,4209,4513,4817,5121,5425,5729,6033,6337,6641,6945,7249,7553,7857,8161,8465,8769,9073,9377,9681,9985,10289,10593,10897,11201,11505,11809,12113,12417,12721,13025,13329,13633,13937,14241,14545,14849,15153,15457,15761,16065,16369,16673,16977,17281,17585,17889,18193,18497,18801,19105,19409,19713,20017,20321,20625,20929,21233,21537,21841,22145,22449,22753,23057,23361,23665,23969,24273,24577,24881,25185,25489,25793,26097,26401,26705,27009,27313,27617,27921,28225,28529,28833,29137,29441,29745,30049,30353,30657,30961,31265,31569,31873,32177,32481,32785,33089,33393,33697,34001,34305,34609,34913,35217,35521,35825,36129,36433,36737,37041,37345,37649,37953,38257,38561,38865,39169,39473,39777,40081,40385,40689,40993,41297,41601,41905,42209,42513,42817,43121,43425,43729,44033,44337,44641,44945,45249,45553,45857,46161,46465,46769,47073,47377,47681,47985,48289,48593,48897,49201,49505,49809,50113,50417,50721,51025,51329,51633,51937,52241,52545,52849,53153,53457,53761,54065,54369,54673,54977,55281,55585,55889,56193,56497,56801,57105,57409,57713,58017,58321,58625,58929,59233,59537,59841,60145,60449,60753,61057,61361,61665,61969,62273,62577,62881,63185,63489,63793,64097,64401,64705,65009,65313,65617,65921,66225,66529,66833,67137,67441,67745,68049,68353,68657,68961,69265,69569,69873,70177,70481,70785,71089,71393,71697,72001,72305,72609,72913,73217,73521,73825,74129,74433,74737,75041,75345,75649,75953,76257,76561,76865,77169,77473,77777'/>
+  </group>
+  <group name='257'>
+    <ids val='258,562,866,1170,1474,1778,2082,2386,2690,2994,3298,3602,3906,4210,4514,4818,5122,5426,5730,6034,6338,6642,6946,7250,7554,7858,8162,8466,8770,9074,9378,9682,9986,10290,10594,10898,11202,11506,11810,12114,12418,12722,13026,13330,13634,13938,14242,14546,14850,15154,15458,15762,16066,16370,16674,16978,17282,17586,17890,18194,18498,18802,19106,19410,19714,20018,20322,20626,20930,21234,21538,21842,22146,22450,22754,23058,23362,23666,23970,24274,24578,24882,25186,25490,25794,26098,26402,26706,27010,27314,27618,27922,28226,28530,28834,29138,29442,29746,30050,30354,30658,30962,31266,31570,31874,32178,32482,32786,33090,33394,33698,34002,34306,34610,34914,35218,35522,35826,36130,36434,36738,37042,37346,37650,37954,38258,38562,38866,39170,39474,39778,40082,40386,40690,40994,41298,41602,41906,42210,42514,42818,43122,43426,43730,44034,44338,44642,44946,45250,45554,45858,46162,46466,46770,47074,47378,47682,47986,48290,48594,48898,49202,49506,49810,50114,50418,50722,51026,51330,51634,51938,52242,52546,52850,53154,53458,53762,54066,54370,54674,54978,55282,55586,55890,56194,56498,56802,57106,57410,57714,58018,58322,58626,58930,59234,59538,59842,60146,60450,60754,61058,61362,61666,61970,62274,62578,62882,63186,63490,63794,64098,64402,64706,65010,65314,65618,65922,66226,66530,66834,67138,67442,67746,68050,68354,68658,68962,69266,69570,69874,70178,70482,70786,71090,71394,71698,72002,72306,72610,72914,73218,73522,73826,74130,74434,74738,75042,75346,75650,75954,76258,76562,76866,77170,77474,77778'/>
+  </group>
+  <group name='258'>
+    <ids val='259,563,867,1171,1475,1779,2083,2387,2691,2995,3299,3603,3907,4211,4515,4819,5123,5427,5731,6035,6339,6643,6947,7251,7555,7859,8163,8467,8771,9075,9379,9683,9987,10291,10595,10899,11203,11507,11811,12115,12419,12723,13027,13331,13635,13939,14243,14547,14851,15155,15459,15763,16067,16371,16675,16979,17283,17587,17891,18195,18499,18803,19107,19411,19715,20019,20323,20627,20931,21235,21539,21843,22147,22451,22755,23059,23363,23667,23971,24275,24579,24883,25187,25491,25795,26099,26403,26707,27011,27315,27619,27923,28227,28531,28835,29139,29443,29747,30051,30355,30659,30963,31267,31571,31875,32179,32483,32787,33091,33395,33699,34003,34307,34611,34915,35219,35523,35827,36131,36435,36739,37043,37347,37651,37955,38259,38563,38867,39171,39475,39779,40083,40387,40691,40995,41299,41603,41907,42211,42515,42819,43123,43427,43731,44035,44339,44643,44947,45251,45555,45859,46163,46467,46771,47075,47379,47683,47987,48291,48595,48899,49203,49507,49811,50115,50419,50723,51027,51331,51635,51939,52243,52547,52851,53155,53459,53763,54067,54371,54675,54979,55283,55587,55891,56195,56499,56803,57107,57411,57715,58019,58323,58627,58931,59235,59539,59843,60147,60451,60755,61059,61363,61667,61971,62275,62579,62883,63187,63491,63795,64099,64403,64707,65011,65315,65619,65923,66227,66531,66835,67139,67443,67747,68051,68355,68659,68963,69267,69571,69875,70179,70483,70787,71091,71395,71699,72003,72307,72611,72915,73219,73523,73827,74131,74435,74739,75043,75347,75651,75955,76259,76563,76867,77171,77475,77779'/>
+  </group>
+  <group name='259'>
+    <ids val='260,564,868,1172,1476,1780,2084,2388,2692,2996,3300,3604,3908,4212,4516,4820,5124,5428,5732,6036,6340,6644,6948,7252,7556,7860,8164,8468,8772,9076,9380,9684,9988,10292,10596,10900,11204,11508,11812,12116,12420,12724,13028,13332,13636,13940,14244,14548,14852,15156,15460,15764,16068,16372,16676,16980,17284,17588,17892,18196,18500,18804,19108,19412,19716,20020,20324,20628,20932,21236,21540,21844,22148,22452,22756,23060,23364,23668,23972,24276,24580,24884,25188,25492,25796,26100,26404,26708,27012,27316,27620,27924,28228,28532,28836,29140,29444,29748,30052,30356,30660,30964,31268,31572,31876,32180,32484,32788,33092,33396,33700,34004,34308,34612,34916,35220,35524,35828,36132,36436,36740,37044,37348,37652,37956,38260,38564,38868,39172,39476,39780,40084,40388,40692,40996,41300,41604,41908,42212,42516,42820,43124,43428,43732,44036,44340,44644,44948,45252,45556,45860,46164,46468,46772,47076,47380,47684,47988,48292,48596,48900,49204,49508,49812,50116,50420,50724,51028,51332,51636,51940,52244,52548,52852,53156,53460,53764,54068,54372,54676,54980,55284,55588,55892,56196,56500,56804,57108,57412,57716,58020,58324,58628,58932,59236,59540,59844,60148,60452,60756,61060,61364,61668,61972,62276,62580,62884,63188,63492,63796,64100,64404,64708,65012,65316,65620,65924,66228,66532,66836,67140,67444,67748,68052,68356,68660,68964,69268,69572,69876,70180,70484,70788,71092,71396,71700,72004,72308,72612,72916,73220,73524,73828,74132,74436,74740,75044,75348,75652,75956,76260,76564,76868,77172,77476,77780'/>
+  </group>
+  <group name='260'>
+    <ids val='261,565,869,1173,1477,1781,2085,2389,2693,2997,3301,3605,3909,4213,4517,4821,5125,5429,5733,6037,6341,6645,6949,7253,7557,7861,8165,8469,8773,9077,9381,9685,9989,10293,10597,10901,11205,11509,11813,12117,12421,12725,13029,13333,13637,13941,14245,14549,14853,15157,15461,15765,16069,16373,16677,16981,17285,17589,17893,18197,18501,18805,19109,19413,19717,20021,20325,20629,20933,21237,21541,21845,22149,22453,22757,23061,23365,23669,23973,24277,24581,24885,25189,25493,25797,26101,26405,26709,27013,27317,27621,27925,28229,28533,28837,29141,29445,29749,30053,30357,30661,30965,31269,31573,31877,32181,32485,32789,33093,33397,33701,34005,34309,34613,34917,35221,35525,35829,36133,36437,36741,37045,37349,37653,37957,38261,38565,38869,39173,39477,39781,40085,40389,40693,40997,41301,41605,41909,42213,42517,42821,43125,43429,43733,44037,44341,44645,44949,45253,45557,45861,46165,46469,46773,47077,47381,47685,47989,48293,48597,48901,49205,49509,49813,50117,50421,50725,51029,51333,51637,51941,52245,52549,52853,53157,53461,53765,54069,54373,54677,54981,55285,55589,55893,56197,56501,56805,57109,57413,57717,58021,58325,58629,58933,59237,59541,59845,60149,60453,60757,61061,61365,61669,61973,62277,62581,62885,63189,63493,63797,64101,64405,64709,65013,65317,65621,65925,66229,66533,66837,67141,67445,67749,68053,68357,68661,68965,69269,69573,69877,70181,70485,70789,71093,71397,71701,72005,72309,72613,72917,73221,73525,73829,74133,74437,74741,75045,75349,75653,75957,76261,76565,76869,77173,77477,77781'/>
+  </group>
+  <group name='261'>
+    <ids val='262,566,870,1174,1478,1782,2086,2390,2694,2998,3302,3606,3910,4214,4518,4822,5126,5430,5734,6038,6342,6646,6950,7254,7558,7862,8166,8470,8774,9078,9382,9686,9990,10294,10598,10902,11206,11510,11814,12118,12422,12726,13030,13334,13638,13942,14246,14550,14854,15158,15462,15766,16070,16374,16678,16982,17286,17590,17894,18198,18502,18806,19110,19414,19718,20022,20326,20630,20934,21238,21542,21846,22150,22454,22758,23062,23366,23670,23974,24278,24582,24886,25190,25494,25798,26102,26406,26710,27014,27318,27622,27926,28230,28534,28838,29142,29446,29750,30054,30358,30662,30966,31270,31574,31878,32182,32486,32790,33094,33398,33702,34006,34310,34614,34918,35222,35526,35830,36134,36438,36742,37046,37350,37654,37958,38262,38566,38870,39174,39478,39782,40086,40390,40694,40998,41302,41606,41910,42214,42518,42822,43126,43430,43734,44038,44342,44646,44950,45254,45558,45862,46166,46470,46774,47078,47382,47686,47990,48294,48598,48902,49206,49510,49814,50118,50422,50726,51030,51334,51638,51942,52246,52550,52854,53158,53462,53766,54070,54374,54678,54982,55286,55590,55894,56198,56502,56806,57110,57414,57718,58022,58326,58630,58934,59238,59542,59846,60150,60454,60758,61062,61366,61670,61974,62278,62582,62886,63190,63494,63798,64102,64406,64710,65014,65318,65622,65926,66230,66534,66838,67142,67446,67750,68054,68358,68662,68966,69270,69574,69878,70182,70486,70790,71094,71398,71702,72006,72310,72614,72918,73222,73526,73830,74134,74438,74742,75046,75350,75654,75958,76262,76566,76870,77174,77478,77782'/>
+  </group>
+  <group name='262'>
+    <ids val='263,567,871,1175,1479,1783,2087,2391,2695,2999,3303,3607,3911,4215,4519,4823,5127,5431,5735,6039,6343,6647,6951,7255,7559,7863,8167,8471,8775,9079,9383,9687,9991,10295,10599,10903,11207,11511,11815,12119,12423,12727,13031,13335,13639,13943,14247,14551,14855,15159,15463,15767,16071,16375,16679,16983,17287,17591,17895,18199,18503,18807,19111,19415,19719,20023,20327,20631,20935,21239,21543,21847,22151,22455,22759,23063,23367,23671,23975,24279,24583,24887,25191,25495,25799,26103,26407,26711,27015,27319,27623,27927,28231,28535,28839,29143,29447,29751,30055,30359,30663,30967,31271,31575,31879,32183,32487,32791,33095,33399,33703,34007,34311,34615,34919,35223,35527,35831,36135,36439,36743,37047,37351,37655,37959,38263,38567,38871,39175,39479,39783,40087,40391,40695,40999,41303,41607,41911,42215,42519,42823,43127,43431,43735,44039,44343,44647,44951,45255,45559,45863,46167,46471,46775,47079,47383,47687,47991,48295,48599,48903,49207,49511,49815,50119,50423,50727,51031,51335,51639,51943,52247,52551,52855,53159,53463,53767,54071,54375,54679,54983,55287,55591,55895,56199,56503,56807,57111,57415,57719,58023,58327,58631,58935,59239,59543,59847,60151,60455,60759,61063,61367,61671,61975,62279,62583,62887,63191,63495,63799,64103,64407,64711,65015,65319,65623,65927,66231,66535,66839,67143,67447,67751,68055,68359,68663,68967,69271,69575,69879,70183,70487,70791,71095,71399,71703,72007,72311,72615,72919,73223,73527,73831,74135,74439,74743,75047,75351,75655,75959,76263,76567,76871,77175,77479,77783'/>
+  </group>
+  <group name='263'>
+    <ids val='264,568,872,1176,1480,1784,2088,2392,2696,3000,3304,3608,3912,4216,4520,4824,5128,5432,5736,6040,6344,6648,6952,7256,7560,7864,8168,8472,8776,9080,9384,9688,9992,10296,10600,10904,11208,11512,11816,12120,12424,12728,13032,13336,13640,13944,14248,14552,14856,15160,15464,15768,16072,16376,16680,16984,17288,17592,17896,18200,18504,18808,19112,19416,19720,20024,20328,20632,20936,21240,21544,21848,22152,22456,22760,23064,23368,23672,23976,24280,24584,24888,25192,25496,25800,26104,26408,26712,27016,27320,27624,27928,28232,28536,28840,29144,29448,29752,30056,30360,30664,30968,31272,31576,31880,32184,32488,32792,33096,33400,33704,34008,34312,34616,34920,35224,35528,35832,36136,36440,36744,37048,37352,37656,37960,38264,38568,38872,39176,39480,39784,40088,40392,40696,41000,41304,41608,41912,42216,42520,42824,43128,43432,43736,44040,44344,44648,44952,45256,45560,45864,46168,46472,46776,47080,47384,47688,47992,48296,48600,48904,49208,49512,49816,50120,50424,50728,51032,51336,51640,51944,52248,52552,52856,53160,53464,53768,54072,54376,54680,54984,55288,55592,55896,56200,56504,56808,57112,57416,57720,58024,58328,58632,58936,59240,59544,59848,60152,60456,60760,61064,61368,61672,61976,62280,62584,62888,63192,63496,63800,64104,64408,64712,65016,65320,65624,65928,66232,66536,66840,67144,67448,67752,68056,68360,68664,68968,69272,69576,69880,70184,70488,70792,71096,71400,71704,72008,72312,72616,72920,73224,73528,73832,74136,74440,74744,75048,75352,75656,75960,76264,76568,76872,77176,77480,77784'/>
+  </group>
+  <group name='264'>
+    <ids val='265,569,873,1177,1481,1785,2089,2393,2697,3001,3305,3609,3913,4217,4521,4825,5129,5433,5737,6041,6345,6649,6953,7257,7561,7865,8169,8473,8777,9081,9385,9689,9993,10297,10601,10905,11209,11513,11817,12121,12425,12729,13033,13337,13641,13945,14249,14553,14857,15161,15465,15769,16073,16377,16681,16985,17289,17593,17897,18201,18505,18809,19113,19417,19721,20025,20329,20633,20937,21241,21545,21849,22153,22457,22761,23065,23369,23673,23977,24281,24585,24889,25193,25497,25801,26105,26409,26713,27017,27321,27625,27929,28233,28537,28841,29145,29449,29753,30057,30361,30665,30969,31273,31577,31881,32185,32489,32793,33097,33401,33705,34009,34313,34617,34921,35225,35529,35833,36137,36441,36745,37049,37353,37657,37961,38265,38569,38873,39177,39481,39785,40089,40393,40697,41001,41305,41609,41913,42217,42521,42825,43129,43433,43737,44041,44345,44649,44953,45257,45561,45865,46169,46473,46777,47081,47385,47689,47993,48297,48601,48905,49209,49513,49817,50121,50425,50729,51033,51337,51641,51945,52249,52553,52857,53161,53465,53769,54073,54377,54681,54985,55289,55593,55897,56201,56505,56809,57113,57417,57721,58025,58329,58633,58937,59241,59545,59849,60153,60457,60761,61065,61369,61673,61977,62281,62585,62889,63193,63497,63801,64105,64409,64713,65017,65321,65625,65929,66233,66537,66841,67145,67449,67753,68057,68361,68665,68969,69273,69577,69881,70185,70489,70793,71097,71401,71705,72009,72313,72617,72921,73225,73529,73833,74137,74441,74745,75049,75353,75657,75961,76265,76569,76873,77177,77481,77785'/>
+  </group>
+  <group name='265'>
+    <ids val='266,570,874,1178,1482,1786,2090,2394,2698,3002,3306,3610,3914,4218,4522,4826,5130,5434,5738,6042,6346,6650,6954,7258,7562,7866,8170,8474,8778,9082,9386,9690,9994,10298,10602,10906,11210,11514,11818,12122,12426,12730,13034,13338,13642,13946,14250,14554,14858,15162,15466,15770,16074,16378,16682,16986,17290,17594,17898,18202,18506,18810,19114,19418,19722,20026,20330,20634,20938,21242,21546,21850,22154,22458,22762,23066,23370,23674,23978,24282,24586,24890,25194,25498,25802,26106,26410,26714,27018,27322,27626,27930,28234,28538,28842,29146,29450,29754,30058,30362,30666,30970,31274,31578,31882,32186,32490,32794,33098,33402,33706,34010,34314,34618,34922,35226,35530,35834,36138,36442,36746,37050,37354,37658,37962,38266,38570,38874,39178,39482,39786,40090,40394,40698,41002,41306,41610,41914,42218,42522,42826,43130,43434,43738,44042,44346,44650,44954,45258,45562,45866,46170,46474,46778,47082,47386,47690,47994,48298,48602,48906,49210,49514,49818,50122,50426,50730,51034,51338,51642,51946,52250,52554,52858,53162,53466,53770,54074,54378,54682,54986,55290,55594,55898,56202,56506,56810,57114,57418,57722,58026,58330,58634,58938,59242,59546,59850,60154,60458,60762,61066,61370,61674,61978,62282,62586,62890,63194,63498,63802,64106,64410,64714,65018,65322,65626,65930,66234,66538,66842,67146,67450,67754,68058,68362,68666,68970,69274,69578,69882,70186,70490,70794,71098,71402,71706,72010,72314,72618,72922,73226,73530,73834,74138,74442,74746,75050,75354,75658,75962,76266,76570,76874,77178,77482,77786'/>
+  </group>
+  <group name='266'>
+    <ids val='267,571,875,1179,1483,1787,2091,2395,2699,3003,3307,3611,3915,4219,4523,4827,5131,5435,5739,6043,6347,6651,6955,7259,7563,7867,8171,8475,8779,9083,9387,9691,9995,10299,10603,10907,11211,11515,11819,12123,12427,12731,13035,13339,13643,13947,14251,14555,14859,15163,15467,15771,16075,16379,16683,16987,17291,17595,17899,18203,18507,18811,19115,19419,19723,20027,20331,20635,20939,21243,21547,21851,22155,22459,22763,23067,23371,23675,23979,24283,24587,24891,25195,25499,25803,26107,26411,26715,27019,27323,27627,27931,28235,28539,28843,29147,29451,29755,30059,30363,30667,30971,31275,31579,31883,32187,32491,32795,33099,33403,33707,34011,34315,34619,34923,35227,35531,35835,36139,36443,36747,37051,37355,37659,37963,38267,38571,38875,39179,39483,39787,40091,40395,40699,41003,41307,41611,41915,42219,42523,42827,43131,43435,43739,44043,44347,44651,44955,45259,45563,45867,46171,46475,46779,47083,47387,47691,47995,48299,48603,48907,49211,49515,49819,50123,50427,50731,51035,51339,51643,51947,52251,52555,52859,53163,53467,53771,54075,54379,54683,54987,55291,55595,55899,56203,56507,56811,57115,57419,57723,58027,58331,58635,58939,59243,59547,59851,60155,60459,60763,61067,61371,61675,61979,62283,62587,62891,63195,63499,63803,64107,64411,64715,65019,65323,65627,65931,66235,66539,66843,67147,67451,67755,68059,68363,68667,68971,69275,69579,69883,70187,70491,70795,71099,71403,71707,72011,72315,72619,72923,73227,73531,73835,74139,74443,74747,75051,75355,75659,75963,76267,76571,76875,77179,77483,77787'/>
+  </group>
+  <group name='267'>
+    <ids val='268,572,876,1180,1484,1788,2092,2396,2700,3004,3308,3612,3916,4220,4524,4828,5132,5436,5740,6044,6348,6652,6956,7260,7564,7868,8172,8476,8780,9084,9388,9692,9996,10300,10604,10908,11212,11516,11820,12124,12428,12732,13036,13340,13644,13948,14252,14556,14860,15164,15468,15772,16076,16380,16684,16988,17292,17596,17900,18204,18508,18812,19116,19420,19724,20028,20332,20636,20940,21244,21548,21852,22156,22460,22764,23068,23372,23676,23980,24284,24588,24892,25196,25500,25804,26108,26412,26716,27020,27324,27628,27932,28236,28540,28844,29148,29452,29756,30060,30364,30668,30972,31276,31580,31884,32188,32492,32796,33100,33404,33708,34012,34316,34620,34924,35228,35532,35836,36140,36444,36748,37052,37356,37660,37964,38268,38572,38876,39180,39484,39788,40092,40396,40700,41004,41308,41612,41916,42220,42524,42828,43132,43436,43740,44044,44348,44652,44956,45260,45564,45868,46172,46476,46780,47084,47388,47692,47996,48300,48604,48908,49212,49516,49820,50124,50428,50732,51036,51340,51644,51948,52252,52556,52860,53164,53468,53772,54076,54380,54684,54988,55292,55596,55900,56204,56508,56812,57116,57420,57724,58028,58332,58636,58940,59244,59548,59852,60156,60460,60764,61068,61372,61676,61980,62284,62588,62892,63196,63500,63804,64108,64412,64716,65020,65324,65628,65932,66236,66540,66844,67148,67452,67756,68060,68364,68668,68972,69276,69580,69884,70188,70492,70796,71100,71404,71708,72012,72316,72620,72924,73228,73532,73836,74140,74444,74748,75052,75356,75660,75964,76268,76572,76876,77180,77484,77788'/>
+  </group>
+  <group name='268'>
+    <ids val='269,573,877,1181,1485,1789,2093,2397,2701,3005,3309,3613,3917,4221,4525,4829,5133,5437,5741,6045,6349,6653,6957,7261,7565,7869,8173,8477,8781,9085,9389,9693,9997,10301,10605,10909,11213,11517,11821,12125,12429,12733,13037,13341,13645,13949,14253,14557,14861,15165,15469,15773,16077,16381,16685,16989,17293,17597,17901,18205,18509,18813,19117,19421,19725,20029,20333,20637,20941,21245,21549,21853,22157,22461,22765,23069,23373,23677,23981,24285,24589,24893,25197,25501,25805,26109,26413,26717,27021,27325,27629,27933,28237,28541,28845,29149,29453,29757,30061,30365,30669,30973,31277,31581,31885,32189,32493,32797,33101,33405,33709,34013,34317,34621,34925,35229,35533,35837,36141,36445,36749,37053,37357,37661,37965,38269,38573,38877,39181,39485,39789,40093,40397,40701,41005,41309,41613,41917,42221,42525,42829,43133,43437,43741,44045,44349,44653,44957,45261,45565,45869,46173,46477,46781,47085,47389,47693,47997,48301,48605,48909,49213,49517,49821,50125,50429,50733,51037,51341,51645,51949,52253,52557,52861,53165,53469,53773,54077,54381,54685,54989,55293,55597,55901,56205,56509,56813,57117,57421,57725,58029,58333,58637,58941,59245,59549,59853,60157,60461,60765,61069,61373,61677,61981,62285,62589,62893,63197,63501,63805,64109,64413,64717,65021,65325,65629,65933,66237,66541,66845,67149,67453,67757,68061,68365,68669,68973,69277,69581,69885,70189,70493,70797,71101,71405,71709,72013,72317,72621,72925,73229,73533,73837,74141,74445,74749,75053,75357,75661,75965,76269,76573,76877,77181,77485,77789'/>
+  </group>
+  <group name='269'>
+    <ids val='270,574,878,1182,1486,1790,2094,2398,2702,3006,3310,3614,3918,4222,4526,4830,5134,5438,5742,6046,6350,6654,6958,7262,7566,7870,8174,8478,8782,9086,9390,9694,9998,10302,10606,10910,11214,11518,11822,12126,12430,12734,13038,13342,13646,13950,14254,14558,14862,15166,15470,15774,16078,16382,16686,16990,17294,17598,17902,18206,18510,18814,19118,19422,19726,20030,20334,20638,20942,21246,21550,21854,22158,22462,22766,23070,23374,23678,23982,24286,24590,24894,25198,25502,25806,26110,26414,26718,27022,27326,27630,27934,28238,28542,28846,29150,29454,29758,30062,30366,30670,30974,31278,31582,31886,32190,32494,32798,33102,33406,33710,34014,34318,34622,34926,35230,35534,35838,36142,36446,36750,37054,37358,37662,37966,38270,38574,38878,39182,39486,39790,40094,40398,40702,41006,41310,41614,41918,42222,42526,42830,43134,43438,43742,44046,44350,44654,44958,45262,45566,45870,46174,46478,46782,47086,47390,47694,47998,48302,48606,48910,49214,49518,49822,50126,50430,50734,51038,51342,51646,51950,52254,52558,52862,53166,53470,53774,54078,54382,54686,54990,55294,55598,55902,56206,56510,56814,57118,57422,57726,58030,58334,58638,58942,59246,59550,59854,60158,60462,60766,61070,61374,61678,61982,62286,62590,62894,63198,63502,63806,64110,64414,64718,65022,65326,65630,65934,66238,66542,66846,67150,67454,67758,68062,68366,68670,68974,69278,69582,69886,70190,70494,70798,71102,71406,71710,72014,72318,72622,72926,73230,73534,73838,74142,74446,74750,75054,75358,75662,75966,76270,76574,76878,77182,77486,77790'/>
+  </group>
+  <group name='270'>
+    <ids val='271,575,879,1183,1487,1791,2095,2399,2703,3007,3311,3615,3919,4223,4527,4831,5135,5439,5743,6047,6351,6655,6959,7263,7567,7871,8175,8479,8783,9087,9391,9695,9999,10303,10607,10911,11215,11519,11823,12127,12431,12735,13039,13343,13647,13951,14255,14559,14863,15167,15471,15775,16079,16383,16687,16991,17295,17599,17903,18207,18511,18815,19119,19423,19727,20031,20335,20639,20943,21247,21551,21855,22159,22463,22767,23071,23375,23679,23983,24287,24591,24895,25199,25503,25807,26111,26415,26719,27023,27327,27631,27935,28239,28543,28847,29151,29455,29759,30063,30367,30671,30975,31279,31583,31887,32191,32495,32799,33103,33407,33711,34015,34319,34623,34927,35231,35535,35839,36143,36447,36751,37055,37359,37663,37967,38271,38575,38879,39183,39487,39791,40095,40399,40703,41007,41311,41615,41919,42223,42527,42831,43135,43439,43743,44047,44351,44655,44959,45263,45567,45871,46175,46479,46783,47087,47391,47695,47999,48303,48607,48911,49215,49519,49823,50127,50431,50735,51039,51343,51647,51951,52255,52559,52863,53167,53471,53775,54079,54383,54687,54991,55295,55599,55903,56207,56511,56815,57119,57423,57727,58031,58335,58639,58943,59247,59551,59855,60159,60463,60767,61071,61375,61679,61983,62287,62591,62895,63199,63503,63807,64111,64415,64719,65023,65327,65631,65935,66239,66543,66847,67151,67455,67759,68063,68367,68671,68975,69279,69583,69887,70191,70495,70799,71103,71407,71711,72015,72319,72623,72927,73231,73535,73839,74143,74447,74751,75055,75359,75663,75967,76271,76575,76879,77183,77487,77791'/>
+  </group>
+  <group name='271'>
+    <ids val='272,576,880,1184,1488,1792,2096,2400,2704,3008,3312,3616,3920,4224,4528,4832,5136,5440,5744,6048,6352,6656,6960,7264,7568,7872,8176,8480,8784,9088,9392,9696,10000,10304,10608,10912,11216,11520,11824,12128,12432,12736,13040,13344,13648,13952,14256,14560,14864,15168,15472,15776,16080,16384,16688,16992,17296,17600,17904,18208,18512,18816,19120,19424,19728,20032,20336,20640,20944,21248,21552,21856,22160,22464,22768,23072,23376,23680,23984,24288,24592,24896,25200,25504,25808,26112,26416,26720,27024,27328,27632,27936,28240,28544,28848,29152,29456,29760,30064,30368,30672,30976,31280,31584,31888,32192,32496,32800,33104,33408,33712,34016,34320,34624,34928,35232,35536,35840,36144,36448,36752,37056,37360,37664,37968,38272,38576,38880,39184,39488,39792,40096,40400,40704,41008,41312,41616,41920,42224,42528,42832,43136,43440,43744,44048,44352,44656,44960,45264,45568,45872,46176,46480,46784,47088,47392,47696,48000,48304,48608,48912,49216,49520,49824,50128,50432,50736,51040,51344,51648,51952,52256,52560,52864,53168,53472,53776,54080,54384,54688,54992,55296,55600,55904,56208,56512,56816,57120,57424,57728,58032,58336,58640,58944,59248,59552,59856,60160,60464,60768,61072,61376,61680,61984,62288,62592,62896,63200,63504,63808,64112,64416,64720,65024,65328,65632,65936,66240,66544,66848,67152,67456,67760,68064,68368,68672,68976,69280,69584,69888,70192,70496,70800,71104,71408,71712,72016,72320,72624,72928,73232,73536,73840,74144,74448,74752,75056,75360,75664,75968,76272,76576,76880,77184,77488,77792'/>
+  </group>
+  <group name='272'>
+    <ids val='273,577,881,1185,1489,1793,2097,2401,2705,3009,3313,3617,3921,4225,4529,4833,5137,5441,5745,6049,6353,6657,6961,7265,7569,7873,8177,8481,8785,9089,9393,9697,10001,10305,10609,10913,11217,11521,11825,12129,12433,12737,13041,13345,13649,13953,14257,14561,14865,15169,15473,15777,16081,16385,16689,16993,17297,17601,17905,18209,18513,18817,19121,19425,19729,20033,20337,20641,20945,21249,21553,21857,22161,22465,22769,23073,23377,23681,23985,24289,24593,24897,25201,25505,25809,26113,26417,26721,27025,27329,27633,27937,28241,28545,28849,29153,29457,29761,30065,30369,30673,30977,31281,31585,31889,32193,32497,32801,33105,33409,33713,34017,34321,34625,34929,35233,35537,35841,36145,36449,36753,37057,37361,37665,37969,38273,38577,38881,39185,39489,39793,40097,40401,40705,41009,41313,41617,41921,42225,42529,42833,43137,43441,43745,44049,44353,44657,44961,45265,45569,45873,46177,46481,46785,47089,47393,47697,48001,48305,48609,48913,49217,49521,49825,50129,50433,50737,51041,51345,51649,51953,52257,52561,52865,53169,53473,53777,54081,54385,54689,54993,55297,55601,55905,56209,56513,56817,57121,57425,57729,58033,58337,58641,58945,59249,59553,59857,60161,60465,60769,61073,61377,61681,61985,62289,62593,62897,63201,63505,63809,64113,64417,64721,65025,65329,65633,65937,66241,66545,66849,67153,67457,67761,68065,68369,68673,68977,69281,69585,69889,70193,70497,70801,71105,71409,71713,72017,72321,72625,72929,73233,73537,73841,74145,74449,74753,75057,75361,75665,75969,76273,76577,76881,77185,77489,77793'/>
+  </group>
+  <group name='273'>
+    <ids val='274,578,882,1186,1490,1794,2098,2402,2706,3010,3314,3618,3922,4226,4530,4834,5138,5442,5746,6050,6354,6658,6962,7266,7570,7874,8178,8482,8786,9090,9394,9698,10002,10306,10610,10914,11218,11522,11826,12130,12434,12738,13042,13346,13650,13954,14258,14562,14866,15170,15474,15778,16082,16386,16690,16994,17298,17602,17906,18210,18514,18818,19122,19426,19730,20034,20338,20642,20946,21250,21554,21858,22162,22466,22770,23074,23378,23682,23986,24290,24594,24898,25202,25506,25810,26114,26418,26722,27026,27330,27634,27938,28242,28546,28850,29154,29458,29762,30066,30370,30674,30978,31282,31586,31890,32194,32498,32802,33106,33410,33714,34018,34322,34626,34930,35234,35538,35842,36146,36450,36754,37058,37362,37666,37970,38274,38578,38882,39186,39490,39794,40098,40402,40706,41010,41314,41618,41922,42226,42530,42834,43138,43442,43746,44050,44354,44658,44962,45266,45570,45874,46178,46482,46786,47090,47394,47698,48002,48306,48610,48914,49218,49522,49826,50130,50434,50738,51042,51346,51650,51954,52258,52562,52866,53170,53474,53778,54082,54386,54690,54994,55298,55602,55906,56210,56514,56818,57122,57426,57730,58034,58338,58642,58946,59250,59554,59858,60162,60466,60770,61074,61378,61682,61986,62290,62594,62898,63202,63506,63810,64114,64418,64722,65026,65330,65634,65938,66242,66546,66850,67154,67458,67762,68066,68370,68674,68978,69282,69586,69890,70194,70498,70802,71106,71410,71714,72018,72322,72626,72930,73234,73538,73842,74146,74450,74754,75058,75362,75666,75970,76274,76578,76882,77186,77490,77794'/>
+  </group>
+  <group name='274'>
+    <ids val='275,579,883,1187,1491,1795,2099,2403,2707,3011,3315,3619,3923,4227,4531,4835,5139,5443,5747,6051,6355,6659,6963,7267,7571,7875,8179,8483,8787,9091,9395,9699,10003,10307,10611,10915,11219,11523,11827,12131,12435,12739,13043,13347,13651,13955,14259,14563,14867,15171,15475,15779,16083,16387,16691,16995,17299,17603,17907,18211,18515,18819,19123,19427,19731,20035,20339,20643,20947,21251,21555,21859,22163,22467,22771,23075,23379,23683,23987,24291,24595,24899,25203,25507,25811,26115,26419,26723,27027,27331,27635,27939,28243,28547,28851,29155,29459,29763,30067,30371,30675,30979,31283,31587,31891,32195,32499,32803,33107,33411,33715,34019,34323,34627,34931,35235,35539,35843,36147,36451,36755,37059,37363,37667,37971,38275,38579,38883,39187,39491,39795,40099,40403,40707,41011,41315,41619,41923,42227,42531,42835,43139,43443,43747,44051,44355,44659,44963,45267,45571,45875,46179,46483,46787,47091,47395,47699,48003,48307,48611,48915,49219,49523,49827,50131,50435,50739,51043,51347,51651,51955,52259,52563,52867,53171,53475,53779,54083,54387,54691,54995,55299,55603,55907,56211,56515,56819,57123,57427,57731,58035,58339,58643,58947,59251,59555,59859,60163,60467,60771,61075,61379,61683,61987,62291,62595,62899,63203,63507,63811,64115,64419,64723,65027,65331,65635,65939,66243,66547,66851,67155,67459,67763,68067,68371,68675,68979,69283,69587,69891,70195,70499,70803,71107,71411,71715,72019,72323,72627,72931,73235,73539,73843,74147,74451,74755,75059,75363,75667,75971,76275,76579,76883,77187,77491,77795'/>
+  </group>
+  <group name='275'>
+    <ids val='276,580,884,1188,1492,1796,2100,2404,2708,3012,3316,3620,3924,4228,4532,4836,5140,5444,5748,6052,6356,6660,6964,7268,7572,7876,8180,8484,8788,9092,9396,9700,10004,10308,10612,10916,11220,11524,11828,12132,12436,12740,13044,13348,13652,13956,14260,14564,14868,15172,15476,15780,16084,16388,16692,16996,17300,17604,17908,18212,18516,18820,19124,19428,19732,20036,20340,20644,20948,21252,21556,21860,22164,22468,22772,23076,23380,23684,23988,24292,24596,24900,25204,25508,25812,26116,26420,26724,27028,27332,27636,27940,28244,28548,28852,29156,29460,29764,30068,30372,30676,30980,31284,31588,31892,32196,32500,32804,33108,33412,33716,34020,34324,34628,34932,35236,35540,35844,36148,36452,36756,37060,37364,37668,37972,38276,38580,38884,39188,39492,39796,40100,40404,40708,41012,41316,41620,41924,42228,42532,42836,43140,43444,43748,44052,44356,44660,44964,45268,45572,45876,46180,46484,46788,47092,47396,47700,48004,48308,48612,48916,49220,49524,49828,50132,50436,50740,51044,51348,51652,51956,52260,52564,52868,53172,53476,53780,54084,54388,54692,54996,55300,55604,55908,56212,56516,56820,57124,57428,57732,58036,58340,58644,58948,59252,59556,59860,60164,60468,60772,61076,61380,61684,61988,62292,62596,62900,63204,63508,63812,64116,64420,64724,65028,65332,65636,65940,66244,66548,66852,67156,67460,67764,68068,68372,68676,68980,69284,69588,69892,70196,70500,70804,71108,71412,71716,72020,72324,72628,72932,73236,73540,73844,74148,74452,74756,75060,75364,75668,75972,76276,76580,76884,77188,77492,77796'/>
+  </group>
+  <group name='276'>
+    <ids val='277,581,885,1189,1493,1797,2101,2405,2709,3013,3317,3621,3925,4229,4533,4837,5141,5445,5749,6053,6357,6661,6965,7269,7573,7877,8181,8485,8789,9093,9397,9701,10005,10309,10613,10917,11221,11525,11829,12133,12437,12741,13045,13349,13653,13957,14261,14565,14869,15173,15477,15781,16085,16389,16693,16997,17301,17605,17909,18213,18517,18821,19125,19429,19733,20037,20341,20645,20949,21253,21557,21861,22165,22469,22773,23077,23381,23685,23989,24293,24597,24901,25205,25509,25813,26117,26421,26725,27029,27333,27637,27941,28245,28549,28853,29157,29461,29765,30069,30373,30677,30981,31285,31589,31893,32197,32501,32805,33109,33413,33717,34021,34325,34629,34933,35237,35541,35845,36149,36453,36757,37061,37365,37669,37973,38277,38581,38885,39189,39493,39797,40101,40405,40709,41013,41317,41621,41925,42229,42533,42837,43141,43445,43749,44053,44357,44661,44965,45269,45573,45877,46181,46485,46789,47093,47397,47701,48005,48309,48613,48917,49221,49525,49829,50133,50437,50741,51045,51349,51653,51957,52261,52565,52869,53173,53477,53781,54085,54389,54693,54997,55301,55605,55909,56213,56517,56821,57125,57429,57733,58037,58341,58645,58949,59253,59557,59861,60165,60469,60773,61077,61381,61685,61989,62293,62597,62901,63205,63509,63813,64117,64421,64725,65029,65333,65637,65941,66245,66549,66853,67157,67461,67765,68069,68373,68677,68981,69285,69589,69893,70197,70501,70805,71109,71413,71717,72021,72325,72629,72933,73237,73541,73845,74149,74453,74757,75061,75365,75669,75973,76277,76581,76885,77189,77493,77797'/>
+  </group>
+  <group name='277'>
+    <ids val='278,582,886,1190,1494,1798,2102,2406,2710,3014,3318,3622,3926,4230,4534,4838,5142,5446,5750,6054,6358,6662,6966,7270,7574,7878,8182,8486,8790,9094,9398,9702,10006,10310,10614,10918,11222,11526,11830,12134,12438,12742,13046,13350,13654,13958,14262,14566,14870,15174,15478,15782,16086,16390,16694,16998,17302,17606,17910,18214,18518,18822,19126,19430,19734,20038,20342,20646,20950,21254,21558,21862,22166,22470,22774,23078,23382,23686,23990,24294,24598,24902,25206,25510,25814,26118,26422,26726,27030,27334,27638,27942,28246,28550,28854,29158,29462,29766,30070,30374,30678,30982,31286,31590,31894,32198,32502,32806,33110,33414,33718,34022,34326,34630,34934,35238,35542,35846,36150,36454,36758,37062,37366,37670,37974,38278,38582,38886,39190,39494,39798,40102,40406,40710,41014,41318,41622,41926,42230,42534,42838,43142,43446,43750,44054,44358,44662,44966,45270,45574,45878,46182,46486,46790,47094,47398,47702,48006,48310,48614,48918,49222,49526,49830,50134,50438,50742,51046,51350,51654,51958,52262,52566,52870,53174,53478,53782,54086,54390,54694,54998,55302,55606,55910,56214,56518,56822,57126,57430,57734,58038,58342,58646,58950,59254,59558,59862,60166,60470,60774,61078,61382,61686,61990,62294,62598,62902,63206,63510,63814,64118,64422,64726,65030,65334,65638,65942,66246,66550,66854,67158,67462,67766,68070,68374,68678,68982,69286,69590,69894,70198,70502,70806,71110,71414,71718,72022,72326,72630,72934,73238,73542,73846,74150,74454,74758,75062,75366,75670,75974,76278,76582,76886,77190,77494,77798'/>
+  </group>
+  <group name='278'>
+    <ids val='279,583,887,1191,1495,1799,2103,2407,2711,3015,3319,3623,3927,4231,4535,4839,5143,5447,5751,6055,6359,6663,6967,7271,7575,7879,8183,8487,8791,9095,9399,9703,10007,10311,10615,10919,11223,11527,11831,12135,12439,12743,13047,13351,13655,13959,14263,14567,14871,15175,15479,15783,16087,16391,16695,16999,17303,17607,17911,18215,18519,18823,19127,19431,19735,20039,20343,20647,20951,21255,21559,21863,22167,22471,22775,23079,23383,23687,23991,24295,24599,24903,25207,25511,25815,26119,26423,26727,27031,27335,27639,27943,28247,28551,28855,29159,29463,29767,30071,30375,30679,30983,31287,31591,31895,32199,32503,32807,33111,33415,33719,34023,34327,34631,34935,35239,35543,35847,36151,36455,36759,37063,37367,37671,37975,38279,38583,38887,39191,39495,39799,40103,40407,40711,41015,41319,41623,41927,42231,42535,42839,43143,43447,43751,44055,44359,44663,44967,45271,45575,45879,46183,46487,46791,47095,47399,47703,48007,48311,48615,48919,49223,49527,49831,50135,50439,50743,51047,51351,51655,51959,52263,52567,52871,53175,53479,53783,54087,54391,54695,54999,55303,55607,55911,56215,56519,56823,57127,57431,57735,58039,58343,58647,58951,59255,59559,59863,60167,60471,60775,61079,61383,61687,61991,62295,62599,62903,63207,63511,63815,64119,64423,64727,65031,65335,65639,65943,66247,66551,66855,67159,67463,67767,68071,68375,68679,68983,69287,69591,69895,70199,70503,70807,71111,71415,71719,72023,72327,72631,72935,73239,73543,73847,74151,74455,74759,75063,75367,75671,75975,76279,76583,76887,77191,77495,77799'/>
+  </group>
+  <group name='279'>
+    <ids val='280,584,888,1192,1496,1800,2104,2408,2712,3016,3320,3624,3928,4232,4536,4840,5144,5448,5752,6056,6360,6664,6968,7272,7576,7880,8184,8488,8792,9096,9400,9704,10008,10312,10616,10920,11224,11528,11832,12136,12440,12744,13048,13352,13656,13960,14264,14568,14872,15176,15480,15784,16088,16392,16696,17000,17304,17608,17912,18216,18520,18824,19128,19432,19736,20040,20344,20648,20952,21256,21560,21864,22168,22472,22776,23080,23384,23688,23992,24296,24600,24904,25208,25512,25816,26120,26424,26728,27032,27336,27640,27944,28248,28552,28856,29160,29464,29768,30072,30376,30680,30984,31288,31592,31896,32200,32504,32808,33112,33416,33720,34024,34328,34632,34936,35240,35544,35848,36152,36456,36760,37064,37368,37672,37976,38280,38584,38888,39192,39496,39800,40104,40408,40712,41016,41320,41624,41928,42232,42536,42840,43144,43448,43752,44056,44360,44664,44968,45272,45576,45880,46184,46488,46792,47096,47400,47704,48008,48312,48616,48920,49224,49528,49832,50136,50440,50744,51048,51352,51656,51960,52264,52568,52872,53176,53480,53784,54088,54392,54696,55000,55304,55608,55912,56216,56520,56824,57128,57432,57736,58040,58344,58648,58952,59256,59560,59864,60168,60472,60776,61080,61384,61688,61992,62296,62600,62904,63208,63512,63816,64120,64424,64728,65032,65336,65640,65944,66248,66552,66856,67160,67464,67768,68072,68376,68680,68984,69288,69592,69896,70200,70504,70808,71112,71416,71720,72024,72328,72632,72936,73240,73544,73848,74152,74456,74760,75064,75368,75672,75976,76280,76584,76888,77192,77496,77800'/>
+  </group>
+  <group name='280'>
+    <ids val='281,585,889,1193,1497,1801,2105,2409,2713,3017,3321,3625,3929,4233,4537,4841,5145,5449,5753,6057,6361,6665,6969,7273,7577,7881,8185,8489,8793,9097,9401,9705,10009,10313,10617,10921,11225,11529,11833,12137,12441,12745,13049,13353,13657,13961,14265,14569,14873,15177,15481,15785,16089,16393,16697,17001,17305,17609,17913,18217,18521,18825,19129,19433,19737,20041,20345,20649,20953,21257,21561,21865,22169,22473,22777,23081,23385,23689,23993,24297,24601,24905,25209,25513,25817,26121,26425,26729,27033,27337,27641,27945,28249,28553,28857,29161,29465,29769,30073,30377,30681,30985,31289,31593,31897,32201,32505,32809,33113,33417,33721,34025,34329,34633,34937,35241,35545,35849,36153,36457,36761,37065,37369,37673,37977,38281,38585,38889,39193,39497,39801,40105,40409,40713,41017,41321,41625,41929,42233,42537,42841,43145,43449,43753,44057,44361,44665,44969,45273,45577,45881,46185,46489,46793,47097,47401,47705,48009,48313,48617,48921,49225,49529,49833,50137,50441,50745,51049,51353,51657,51961,52265,52569,52873,53177,53481,53785,54089,54393,54697,55001,55305,55609,55913,56217,56521,56825,57129,57433,57737,58041,58345,58649,58953,59257,59561,59865,60169,60473,60777,61081,61385,61689,61993,62297,62601,62905,63209,63513,63817,64121,64425,64729,65033,65337,65641,65945,66249,66553,66857,67161,67465,67769,68073,68377,68681,68985,69289,69593,69897,70201,70505,70809,71113,71417,71721,72025,72329,72633,72937,73241,73545,73849,74153,74457,74761,75065,75369,75673,75977,76281,76585,76889,77193,77497,77801'/>
+  </group>
+  <group name='281'>
+    <ids val='282,586,890,1194,1498,1802,2106,2410,2714,3018,3322,3626,3930,4234,4538,4842,5146,5450,5754,6058,6362,6666,6970,7274,7578,7882,8186,8490,8794,9098,9402,9706,10010,10314,10618,10922,11226,11530,11834,12138,12442,12746,13050,13354,13658,13962,14266,14570,14874,15178,15482,15786,16090,16394,16698,17002,17306,17610,17914,18218,18522,18826,19130,19434,19738,20042,20346,20650,20954,21258,21562,21866,22170,22474,22778,23082,23386,23690,23994,24298,24602,24906,25210,25514,25818,26122,26426,26730,27034,27338,27642,27946,28250,28554,28858,29162,29466,29770,30074,30378,30682,30986,31290,31594,31898,32202,32506,32810,33114,33418,33722,34026,34330,34634,34938,35242,35546,35850,36154,36458,36762,37066,37370,37674,37978,38282,38586,38890,39194,39498,39802,40106,40410,40714,41018,41322,41626,41930,42234,42538,42842,43146,43450,43754,44058,44362,44666,44970,45274,45578,45882,46186,46490,46794,47098,47402,47706,48010,48314,48618,48922,49226,49530,49834,50138,50442,50746,51050,51354,51658,51962,52266,52570,52874,53178,53482,53786,54090,54394,54698,55002,55306,55610,55914,56218,56522,56826,57130,57434,57738,58042,58346,58650,58954,59258,59562,59866,60170,60474,60778,61082,61386,61690,61994,62298,62602,62906,63210,63514,63818,64122,64426,64730,65034,65338,65642,65946,66250,66554,66858,67162,67466,67770,68074,68378,68682,68986,69290,69594,69898,70202,70506,70810,71114,71418,71722,72026,72330,72634,72938,73242,73546,73850,74154,74458,74762,75066,75370,75674,75978,76282,76586,76890,77194,77498,77802'/>
+  </group>
+  <group name='282'>
+    <ids val='283,587,891,1195,1499,1803,2107,2411,2715,3019,3323,3627,3931,4235,4539,4843,5147,5451,5755,6059,6363,6667,6971,7275,7579,7883,8187,8491,8795,9099,9403,9707,10011,10315,10619,10923,11227,11531,11835,12139,12443,12747,13051,13355,13659,13963,14267,14571,14875,15179,15483,15787,16091,16395,16699,17003,17307,17611,17915,18219,18523,18827,19131,19435,19739,20043,20347,20651,20955,21259,21563,21867,22171,22475,22779,23083,23387,23691,23995,24299,24603,24907,25211,25515,25819,26123,26427,26731,27035,27339,27643,27947,28251,28555,28859,29163,29467,29771,30075,30379,30683,30987,31291,31595,31899,32203,32507,32811,33115,33419,33723,34027,34331,34635,34939,35243,35547,35851,36155,36459,36763,37067,37371,37675,37979,38283,38587,38891,39195,39499,39803,40107,40411,40715,41019,41323,41627,41931,42235,42539,42843,43147,43451,43755,44059,44363,44667,44971,45275,45579,45883,46187,46491,46795,47099,47403,47707,48011,48315,48619,48923,49227,49531,49835,50139,50443,50747,51051,51355,51659,51963,52267,52571,52875,53179,53483,53787,54091,54395,54699,55003,55307,55611,55915,56219,56523,56827,57131,57435,57739,58043,58347,58651,58955,59259,59563,59867,60171,60475,60779,61083,61387,61691,61995,62299,62603,62907,63211,63515,63819,64123,64427,64731,65035,65339,65643,65947,66251,66555,66859,67163,67467,67771,68075,68379,68683,68987,69291,69595,69899,70203,70507,70811,71115,71419,71723,72027,72331,72635,72939,73243,73547,73851,74155,74459,74763,75067,75371,75675,75979,76283,76587,76891,77195,77499,77803'/>
+  </group>
+  <group name='283'>
+    <ids val='284,588,892,1196,1500,1804,2108,2412,2716,3020,3324,3628,3932,4236,4540,4844,5148,5452,5756,6060,6364,6668,6972,7276,7580,7884,8188,8492,8796,9100,9404,9708,10012,10316,10620,10924,11228,11532,11836,12140,12444,12748,13052,13356,13660,13964,14268,14572,14876,15180,15484,15788,16092,16396,16700,17004,17308,17612,17916,18220,18524,18828,19132,19436,19740,20044,20348,20652,20956,21260,21564,21868,22172,22476,22780,23084,23388,23692,23996,24300,24604,24908,25212,25516,25820,26124,26428,26732,27036,27340,27644,27948,28252,28556,28860,29164,29468,29772,30076,30380,30684,30988,31292,31596,31900,32204,32508,32812,33116,33420,33724,34028,34332,34636,34940,35244,35548,35852,36156,36460,36764,37068,37372,37676,37980,38284,38588,38892,39196,39500,39804,40108,40412,40716,41020,41324,41628,41932,42236,42540,42844,43148,43452,43756,44060,44364,44668,44972,45276,45580,45884,46188,46492,46796,47100,47404,47708,48012,48316,48620,48924,49228,49532,49836,50140,50444,50748,51052,51356,51660,51964,52268,52572,52876,53180,53484,53788,54092,54396,54700,55004,55308,55612,55916,56220,56524,56828,57132,57436,57740,58044,58348,58652,58956,59260,59564,59868,60172,60476,60780,61084,61388,61692,61996,62300,62604,62908,63212,63516,63820,64124,64428,64732,65036,65340,65644,65948,66252,66556,66860,67164,67468,67772,68076,68380,68684,68988,69292,69596,69900,70204,70508,70812,71116,71420,71724,72028,72332,72636,72940,73244,73548,73852,74156,74460,74764,75068,75372,75676,75980,76284,76588,76892,77196,77500,77804'/>
+  </group>
+  <group name='284'>
+    <ids val='285,589,893,1197,1501,1805,2109,2413,2717,3021,3325,3629,3933,4237,4541,4845,5149,5453,5757,6061,6365,6669,6973,7277,7581,7885,8189,8493,8797,9101,9405,9709,10013,10317,10621,10925,11229,11533,11837,12141,12445,12749,13053,13357,13661,13965,14269,14573,14877,15181,15485,15789,16093,16397,16701,17005,17309,17613,17917,18221,18525,18829,19133,19437,19741,20045,20349,20653,20957,21261,21565,21869,22173,22477,22781,23085,23389,23693,23997,24301,24605,24909,25213,25517,25821,26125,26429,26733,27037,27341,27645,27949,28253,28557,28861,29165,29469,29773,30077,30381,30685,30989,31293,31597,31901,32205,32509,32813,33117,33421,33725,34029,34333,34637,34941,35245,35549,35853,36157,36461,36765,37069,37373,37677,37981,38285,38589,38893,39197,39501,39805,40109,40413,40717,41021,41325,41629,41933,42237,42541,42845,43149,43453,43757,44061,44365,44669,44973,45277,45581,45885,46189,46493,46797,47101,47405,47709,48013,48317,48621,48925,49229,49533,49837,50141,50445,50749,51053,51357,51661,51965,52269,52573,52877,53181,53485,53789,54093,54397,54701,55005,55309,55613,55917,56221,56525,56829,57133,57437,57741,58045,58349,58653,58957,59261,59565,59869,60173,60477,60781,61085,61389,61693,61997,62301,62605,62909,63213,63517,63821,64125,64429,64733,65037,65341,65645,65949,66253,66557,66861,67165,67469,67773,68077,68381,68685,68989,69293,69597,69901,70205,70509,70813,71117,71421,71725,72029,72333,72637,72941,73245,73549,73853,74157,74461,74765,75069,75373,75677,75981,76285,76589,76893,77197,77501,77805'/>
+  </group>
+  <group name='285'>
+    <ids val='286,590,894,1198,1502,1806,2110,2414,2718,3022,3326,3630,3934,4238,4542,4846,5150,5454,5758,6062,6366,6670,6974,7278,7582,7886,8190,8494,8798,9102,9406,9710,10014,10318,10622,10926,11230,11534,11838,12142,12446,12750,13054,13358,13662,13966,14270,14574,14878,15182,15486,15790,16094,16398,16702,17006,17310,17614,17918,18222,18526,18830,19134,19438,19742,20046,20350,20654,20958,21262,21566,21870,22174,22478,22782,23086,23390,23694,23998,24302,24606,24910,25214,25518,25822,26126,26430,26734,27038,27342,27646,27950,28254,28558,28862,29166,29470,29774,30078,30382,30686,30990,31294,31598,31902,32206,32510,32814,33118,33422,33726,34030,34334,34638,34942,35246,35550,35854,36158,36462,36766,37070,37374,37678,37982,38286,38590,38894,39198,39502,39806,40110,40414,40718,41022,41326,41630,41934,42238,42542,42846,43150,43454,43758,44062,44366,44670,44974,45278,45582,45886,46190,46494,46798,47102,47406,47710,48014,48318,48622,48926,49230,49534,49838,50142,50446,50750,51054,51358,51662,51966,52270,52574,52878,53182,53486,53790,54094,54398,54702,55006,55310,55614,55918,56222,56526,56830,57134,57438,57742,58046,58350,58654,58958,59262,59566,59870,60174,60478,60782,61086,61390,61694,61998,62302,62606,62910,63214,63518,63822,64126,64430,64734,65038,65342,65646,65950,66254,66558,66862,67166,67470,67774,68078,68382,68686,68990,69294,69598,69902,70206,70510,70814,71118,71422,71726,72030,72334,72638,72942,73246,73550,73854,74158,74462,74766,75070,75374,75678,75982,76286,76590,76894,77198,77502,77806'/>
+  </group>
+  <group name='286'>
+    <ids val='287,591,895,1199,1503,1807,2111,2415,2719,3023,3327,3631,3935,4239,4543,4847,5151,5455,5759,6063,6367,6671,6975,7279,7583,7887,8191,8495,8799,9103,9407,9711,10015,10319,10623,10927,11231,11535,11839,12143,12447,12751,13055,13359,13663,13967,14271,14575,14879,15183,15487,15791,16095,16399,16703,17007,17311,17615,17919,18223,18527,18831,19135,19439,19743,20047,20351,20655,20959,21263,21567,21871,22175,22479,22783,23087,23391,23695,23999,24303,24607,24911,25215,25519,25823,26127,26431,26735,27039,27343,27647,27951,28255,28559,28863,29167,29471,29775,30079,30383,30687,30991,31295,31599,31903,32207,32511,32815,33119,33423,33727,34031,34335,34639,34943,35247,35551,35855,36159,36463,36767,37071,37375,37679,37983,38287,38591,38895,39199,39503,39807,40111,40415,40719,41023,41327,41631,41935,42239,42543,42847,43151,43455,43759,44063,44367,44671,44975,45279,45583,45887,46191,46495,46799,47103,47407,47711,48015,48319,48623,48927,49231,49535,49839,50143,50447,50751,51055,51359,51663,51967,52271,52575,52879,53183,53487,53791,54095,54399,54703,55007,55311,55615,55919,56223,56527,56831,57135,57439,57743,58047,58351,58655,58959,59263,59567,59871,60175,60479,60783,61087,61391,61695,61999,62303,62607,62911,63215,63519,63823,64127,64431,64735,65039,65343,65647,65951,66255,66559,66863,67167,67471,67775,68079,68383,68687,68991,69295,69599,69903,70207,70511,70815,71119,71423,71727,72031,72335,72639,72943,73247,73551,73855,74159,74463,74767,75071,75375,75679,75983,76287,76591,76895,77199,77503,77807'/>
+  </group>
+  <group name='287'>
+    <ids val='288,592,896,1200,1504,1808,2112,2416,2720,3024,3328,3632,3936,4240,4544,4848,5152,5456,5760,6064,6368,6672,6976,7280,7584,7888,8192,8496,8800,9104,9408,9712,10016,10320,10624,10928,11232,11536,11840,12144,12448,12752,13056,13360,13664,13968,14272,14576,14880,15184,15488,15792,16096,16400,16704,17008,17312,17616,17920,18224,18528,18832,19136,19440,19744,20048,20352,20656,20960,21264,21568,21872,22176,22480,22784,23088,23392,23696,24000,24304,24608,24912,25216,25520,25824,26128,26432,26736,27040,27344,27648,27952,28256,28560,28864,29168,29472,29776,30080,30384,30688,30992,31296,31600,31904,32208,32512,32816,33120,33424,33728,34032,34336,34640,34944,35248,35552,35856,36160,36464,36768,37072,37376,37680,37984,38288,38592,38896,39200,39504,39808,40112,40416,40720,41024,41328,41632,41936,42240,42544,42848,43152,43456,43760,44064,44368,44672,44976,45280,45584,45888,46192,46496,46800,47104,47408,47712,48016,48320,48624,48928,49232,49536,49840,50144,50448,50752,51056,51360,51664,51968,52272,52576,52880,53184,53488,53792,54096,54400,54704,55008,55312,55616,55920,56224,56528,56832,57136,57440,57744,58048,58352,58656,58960,59264,59568,59872,60176,60480,60784,61088,61392,61696,62000,62304,62608,62912,63216,63520,63824,64128,64432,64736,65040,65344,65648,65952,66256,66560,66864,67168,67472,67776,68080,68384,68688,68992,69296,69600,69904,70208,70512,70816,71120,71424,71728,72032,72336,72640,72944,73248,73552,73856,74160,74464,74768,75072,75376,75680,75984,76288,76592,76896,77200,77504,77808'/>
+  </group>
+  <group name='288'>
+    <ids val='289,593,897,1201,1505,1809,2113,2417,2721,3025,3329,3633,3937,4241,4545,4849,5153,5457,5761,6065,6369,6673,6977,7281,7585,7889,8193,8497,8801,9105,9409,9713,10017,10321,10625,10929,11233,11537,11841,12145,12449,12753,13057,13361,13665,13969,14273,14577,14881,15185,15489,15793,16097,16401,16705,17009,17313,17617,17921,18225,18529,18833,19137,19441,19745,20049,20353,20657,20961,21265,21569,21873,22177,22481,22785,23089,23393,23697,24001,24305,24609,24913,25217,25521,25825,26129,26433,26737,27041,27345,27649,27953,28257,28561,28865,29169,29473,29777,30081,30385,30689,30993,31297,31601,31905,32209,32513,32817,33121,33425,33729,34033,34337,34641,34945,35249,35553,35857,36161,36465,36769,37073,37377,37681,37985,38289,38593,38897,39201,39505,39809,40113,40417,40721,41025,41329,41633,41937,42241,42545,42849,43153,43457,43761,44065,44369,44673,44977,45281,45585,45889,46193,46497,46801,47105,47409,47713,48017,48321,48625,48929,49233,49537,49841,50145,50449,50753,51057,51361,51665,51969,52273,52577,52881,53185,53489,53793,54097,54401,54705,55009,55313,55617,55921,56225,56529,56833,57137,57441,57745,58049,58353,58657,58961,59265,59569,59873,60177,60481,60785,61089,61393,61697,62001,62305,62609,62913,63217,63521,63825,64129,64433,64737,65041,65345,65649,65953,66257,66561,66865,67169,67473,67777,68081,68385,68689,68993,69297,69601,69905,70209,70513,70817,71121,71425,71729,72033,72337,72641,72945,73249,73553,73857,74161,74465,74769,75073,75377,75681,75985,76289,76593,76897,77201,77505,77809'/>
+  </group>
+  <group name='289'>
+    <ids val='290,594,898,1202,1506,1810,2114,2418,2722,3026,3330,3634,3938,4242,4546,4850,5154,5458,5762,6066,6370,6674,6978,7282,7586,7890,8194,8498,8802,9106,9410,9714,10018,10322,10626,10930,11234,11538,11842,12146,12450,12754,13058,13362,13666,13970,14274,14578,14882,15186,15490,15794,16098,16402,16706,17010,17314,17618,17922,18226,18530,18834,19138,19442,19746,20050,20354,20658,20962,21266,21570,21874,22178,22482,22786,23090,23394,23698,24002,24306,24610,24914,25218,25522,25826,26130,26434,26738,27042,27346,27650,27954,28258,28562,28866,29170,29474,29778,30082,30386,30690,30994,31298,31602,31906,32210,32514,32818,33122,33426,33730,34034,34338,34642,34946,35250,35554,35858,36162,36466,36770,37074,37378,37682,37986,38290,38594,38898,39202,39506,39810,40114,40418,40722,41026,41330,41634,41938,42242,42546,42850,43154,43458,43762,44066,44370,44674,44978,45282,45586,45890,46194,46498,46802,47106,47410,47714,48018,48322,48626,48930,49234,49538,49842,50146,50450,50754,51058,51362,51666,51970,52274,52578,52882,53186,53490,53794,54098,54402,54706,55010,55314,55618,55922,56226,56530,56834,57138,57442,57746,58050,58354,58658,58962,59266,59570,59874,60178,60482,60786,61090,61394,61698,62002,62306,62610,62914,63218,63522,63826,64130,64434,64738,65042,65346,65650,65954,66258,66562,66866,67170,67474,67778,68082,68386,68690,68994,69298,69602,69906,70210,70514,70818,71122,71426,71730,72034,72338,72642,72946,73250,73554,73858,74162,74466,74770,75074,75378,75682,75986,76290,76594,76898,77202,77506,77810'/>
+  </group>
+  <group name='290'>
+    <ids val='291,595,899,1203,1507,1811,2115,2419,2723,3027,3331,3635,3939,4243,4547,4851,5155,5459,5763,6067,6371,6675,6979,7283,7587,7891,8195,8499,8803,9107,9411,9715,10019,10323,10627,10931,11235,11539,11843,12147,12451,12755,13059,13363,13667,13971,14275,14579,14883,15187,15491,15795,16099,16403,16707,17011,17315,17619,17923,18227,18531,18835,19139,19443,19747,20051,20355,20659,20963,21267,21571,21875,22179,22483,22787,23091,23395,23699,24003,24307,24611,24915,25219,25523,25827,26131,26435,26739,27043,27347,27651,27955,28259,28563,28867,29171,29475,29779,30083,30387,30691,30995,31299,31603,31907,32211,32515,32819,33123,33427,33731,34035,34339,34643,34947,35251,35555,35859,36163,36467,36771,37075,37379,37683,37987,38291,38595,38899,39203,39507,39811,40115,40419,40723,41027,41331,41635,41939,42243,42547,42851,43155,43459,43763,44067,44371,44675,44979,45283,45587,45891,46195,46499,46803,47107,47411,47715,48019,48323,48627,48931,49235,49539,49843,50147,50451,50755,51059,51363,51667,51971,52275,52579,52883,53187,53491,53795,54099,54403,54707,55011,55315,55619,55923,56227,56531,56835,57139,57443,57747,58051,58355,58659,58963,59267,59571,59875,60179,60483,60787,61091,61395,61699,62003,62307,62611,62915,63219,63523,63827,64131,64435,64739,65043,65347,65651,65955,66259,66563,66867,67171,67475,67779,68083,68387,68691,68995,69299,69603,69907,70211,70515,70819,71123,71427,71731,72035,72339,72643,72947,73251,73555,73859,74163,74467,74771,75075,75379,75683,75987,76291,76595,76899,77203,77507,77811'/>
+  </group>
+  <group name='291'>
+    <ids val='292,596,900,1204,1508,1812,2116,2420,2724,3028,3332,3636,3940,4244,4548,4852,5156,5460,5764,6068,6372,6676,6980,7284,7588,7892,8196,8500,8804,9108,9412,9716,10020,10324,10628,10932,11236,11540,11844,12148,12452,12756,13060,13364,13668,13972,14276,14580,14884,15188,15492,15796,16100,16404,16708,17012,17316,17620,17924,18228,18532,18836,19140,19444,19748,20052,20356,20660,20964,21268,21572,21876,22180,22484,22788,23092,23396,23700,24004,24308,24612,24916,25220,25524,25828,26132,26436,26740,27044,27348,27652,27956,28260,28564,28868,29172,29476,29780,30084,30388,30692,30996,31300,31604,31908,32212,32516,32820,33124,33428,33732,34036,34340,34644,34948,35252,35556,35860,36164,36468,36772,37076,37380,37684,37988,38292,38596,38900,39204,39508,39812,40116,40420,40724,41028,41332,41636,41940,42244,42548,42852,43156,43460,43764,44068,44372,44676,44980,45284,45588,45892,46196,46500,46804,47108,47412,47716,48020,48324,48628,48932,49236,49540,49844,50148,50452,50756,51060,51364,51668,51972,52276,52580,52884,53188,53492,53796,54100,54404,54708,55012,55316,55620,55924,56228,56532,56836,57140,57444,57748,58052,58356,58660,58964,59268,59572,59876,60180,60484,60788,61092,61396,61700,62004,62308,62612,62916,63220,63524,63828,64132,64436,64740,65044,65348,65652,65956,66260,66564,66868,67172,67476,67780,68084,68388,68692,68996,69300,69604,69908,70212,70516,70820,71124,71428,71732,72036,72340,72644,72948,73252,73556,73860,74164,74468,74772,75076,75380,75684,75988,76292,76596,76900,77204,77508,77812'/>
+  </group>
+  <group name='292'>
+    <ids val='293,597,901,1205,1509,1813,2117,2421,2725,3029,3333,3637,3941,4245,4549,4853,5157,5461,5765,6069,6373,6677,6981,7285,7589,7893,8197,8501,8805,9109,9413,9717,10021,10325,10629,10933,11237,11541,11845,12149,12453,12757,13061,13365,13669,13973,14277,14581,14885,15189,15493,15797,16101,16405,16709,17013,17317,17621,17925,18229,18533,18837,19141,19445,19749,20053,20357,20661,20965,21269,21573,21877,22181,22485,22789,23093,23397,23701,24005,24309,24613,24917,25221,25525,25829,26133,26437,26741,27045,27349,27653,27957,28261,28565,28869,29173,29477,29781,30085,30389,30693,30997,31301,31605,31909,32213,32517,32821,33125,33429,33733,34037,34341,34645,34949,35253,35557,35861,36165,36469,36773,37077,37381,37685,37989,38293,38597,38901,39205,39509,39813,40117,40421,40725,41029,41333,41637,41941,42245,42549,42853,43157,43461,43765,44069,44373,44677,44981,45285,45589,45893,46197,46501,46805,47109,47413,47717,48021,48325,48629,48933,49237,49541,49845,50149,50453,50757,51061,51365,51669,51973,52277,52581,52885,53189,53493,53797,54101,54405,54709,55013,55317,55621,55925,56229,56533,56837,57141,57445,57749,58053,58357,58661,58965,59269,59573,59877,60181,60485,60789,61093,61397,61701,62005,62309,62613,62917,63221,63525,63829,64133,64437,64741,65045,65349,65653,65957,66261,66565,66869,67173,67477,67781,68085,68389,68693,68997,69301,69605,69909,70213,70517,70821,71125,71429,71733,72037,72341,72645,72949,73253,73557,73861,74165,74469,74773,75077,75381,75685,75989,76293,76597,76901,77205,77509,77813'/>
+  </group>
+  <group name='293'>
+    <ids val='294,598,902,1206,1510,1814,2118,2422,2726,3030,3334,3638,3942,4246,4550,4854,5158,5462,5766,6070,6374,6678,6982,7286,7590,7894,8198,8502,8806,9110,9414,9718,10022,10326,10630,10934,11238,11542,11846,12150,12454,12758,13062,13366,13670,13974,14278,14582,14886,15190,15494,15798,16102,16406,16710,17014,17318,17622,17926,18230,18534,18838,19142,19446,19750,20054,20358,20662,20966,21270,21574,21878,22182,22486,22790,23094,23398,23702,24006,24310,24614,24918,25222,25526,25830,26134,26438,26742,27046,27350,27654,27958,28262,28566,28870,29174,29478,29782,30086,30390,30694,30998,31302,31606,31910,32214,32518,32822,33126,33430,33734,34038,34342,34646,34950,35254,35558,35862,36166,36470,36774,37078,37382,37686,37990,38294,38598,38902,39206,39510,39814,40118,40422,40726,41030,41334,41638,41942,42246,42550,42854,43158,43462,43766,44070,44374,44678,44982,45286,45590,45894,46198,46502,46806,47110,47414,47718,48022,48326,48630,48934,49238,49542,49846,50150,50454,50758,51062,51366,51670,51974,52278,52582,52886,53190,53494,53798,54102,54406,54710,55014,55318,55622,55926,56230,56534,56838,57142,57446,57750,58054,58358,58662,58966,59270,59574,59878,60182,60486,60790,61094,61398,61702,62006,62310,62614,62918,63222,63526,63830,64134,64438,64742,65046,65350,65654,65958,66262,66566,66870,67174,67478,67782,68086,68390,68694,68998,69302,69606,69910,70214,70518,70822,71126,71430,71734,72038,72342,72646,72950,73254,73558,73862,74166,74470,74774,75078,75382,75686,75990,76294,76598,76902,77206,77510,77814'/>
+  </group>
+  <group name='294'>
+    <ids val='295,599,903,1207,1511,1815,2119,2423,2727,3031,3335,3639,3943,4247,4551,4855,5159,5463,5767,6071,6375,6679,6983,7287,7591,7895,8199,8503,8807,9111,9415,9719,10023,10327,10631,10935,11239,11543,11847,12151,12455,12759,13063,13367,13671,13975,14279,14583,14887,15191,15495,15799,16103,16407,16711,17015,17319,17623,17927,18231,18535,18839,19143,19447,19751,20055,20359,20663,20967,21271,21575,21879,22183,22487,22791,23095,23399,23703,24007,24311,24615,24919,25223,25527,25831,26135,26439,26743,27047,27351,27655,27959,28263,28567,28871,29175,29479,29783,30087,30391,30695,30999,31303,31607,31911,32215,32519,32823,33127,33431,33735,34039,34343,34647,34951,35255,35559,35863,36167,36471,36775,37079,37383,37687,37991,38295,38599,38903,39207,39511,39815,40119,40423,40727,41031,41335,41639,41943,42247,42551,42855,43159,43463,43767,44071,44375,44679,44983,45287,45591,45895,46199,46503,46807,47111,47415,47719,48023,48327,48631,48935,49239,49543,49847,50151,50455,50759,51063,51367,51671,51975,52279,52583,52887,53191,53495,53799,54103,54407,54711,55015,55319,55623,55927,56231,56535,56839,57143,57447,57751,58055,58359,58663,58967,59271,59575,59879,60183,60487,60791,61095,61399,61703,62007,62311,62615,62919,63223,63527,63831,64135,64439,64743,65047,65351,65655,65959,66263,66567,66871,67175,67479,67783,68087,68391,68695,68999,69303,69607,69911,70215,70519,70823,71127,71431,71735,72039,72343,72647,72951,73255,73559,73863,74167,74471,74775,75079,75383,75687,75991,76295,76599,76903,77207,77511,77815'/>
+  </group>
+  <group name='295'>
+    <ids val='296,600,904,1208,1512,1816,2120,2424,2728,3032,3336,3640,3944,4248,4552,4856,5160,5464,5768,6072,6376,6680,6984,7288,7592,7896,8200,8504,8808,9112,9416,9720,10024,10328,10632,10936,11240,11544,11848,12152,12456,12760,13064,13368,13672,13976,14280,14584,14888,15192,15496,15800,16104,16408,16712,17016,17320,17624,17928,18232,18536,18840,19144,19448,19752,20056,20360,20664,20968,21272,21576,21880,22184,22488,22792,23096,23400,23704,24008,24312,24616,24920,25224,25528,25832,26136,26440,26744,27048,27352,27656,27960,28264,28568,28872,29176,29480,29784,30088,30392,30696,31000,31304,31608,31912,32216,32520,32824,33128,33432,33736,34040,34344,34648,34952,35256,35560,35864,36168,36472,36776,37080,37384,37688,37992,38296,38600,38904,39208,39512,39816,40120,40424,40728,41032,41336,41640,41944,42248,42552,42856,43160,43464,43768,44072,44376,44680,44984,45288,45592,45896,46200,46504,46808,47112,47416,47720,48024,48328,48632,48936,49240,49544,49848,50152,50456,50760,51064,51368,51672,51976,52280,52584,52888,53192,53496,53800,54104,54408,54712,55016,55320,55624,55928,56232,56536,56840,57144,57448,57752,58056,58360,58664,58968,59272,59576,59880,60184,60488,60792,61096,61400,61704,62008,62312,62616,62920,63224,63528,63832,64136,64440,64744,65048,65352,65656,65960,66264,66568,66872,67176,67480,67784,68088,68392,68696,69000,69304,69608,69912,70216,70520,70824,71128,71432,71736,72040,72344,72648,72952,73256,73560,73864,74168,74472,74776,75080,75384,75688,75992,76296,76600,76904,77208,77512,77816'/>
+  </group>
+  <group name='296'>
+    <ids val='297,601,905,1209,1513,1817,2121,2425,2729,3033,3337,3641,3945,4249,4553,4857,5161,5465,5769,6073,6377,6681,6985,7289,7593,7897,8201,8505,8809,9113,9417,9721,10025,10329,10633,10937,11241,11545,11849,12153,12457,12761,13065,13369,13673,13977,14281,14585,14889,15193,15497,15801,16105,16409,16713,17017,17321,17625,17929,18233,18537,18841,19145,19449,19753,20057,20361,20665,20969,21273,21577,21881,22185,22489,22793,23097,23401,23705,24009,24313,24617,24921,25225,25529,25833,26137,26441,26745,27049,27353,27657,27961,28265,28569,28873,29177,29481,29785,30089,30393,30697,31001,31305,31609,31913,32217,32521,32825,33129,33433,33737,34041,34345,34649,34953,35257,35561,35865,36169,36473,36777,37081,37385,37689,37993,38297,38601,38905,39209,39513,39817,40121,40425,40729,41033,41337,41641,41945,42249,42553,42857,43161,43465,43769,44073,44377,44681,44985,45289,45593,45897,46201,46505,46809,47113,47417,47721,48025,48329,48633,48937,49241,49545,49849,50153,50457,50761,51065,51369,51673,51977,52281,52585,52889,53193,53497,53801,54105,54409,54713,55017,55321,55625,55929,56233,56537,56841,57145,57449,57753,58057,58361,58665,58969,59273,59577,59881,60185,60489,60793,61097,61401,61705,62009,62313,62617,62921,63225,63529,63833,64137,64441,64745,65049,65353,65657,65961,66265,66569,66873,67177,67481,67785,68089,68393,68697,69001,69305,69609,69913,70217,70521,70825,71129,71433,71737,72041,72345,72649,72953,73257,73561,73865,74169,74473,74777,75081,75385,75689,75993,76297,76601,76905,77209,77513,77817'/>
+  </group>
+  <group name='297'>
+    <ids val='298,602,906,1210,1514,1818,2122,2426,2730,3034,3338,3642,3946,4250,4554,4858,5162,5466,5770,6074,6378,6682,6986,7290,7594,7898,8202,8506,8810,9114,9418,9722,10026,10330,10634,10938,11242,11546,11850,12154,12458,12762,13066,13370,13674,13978,14282,14586,14890,15194,15498,15802,16106,16410,16714,17018,17322,17626,17930,18234,18538,18842,19146,19450,19754,20058,20362,20666,20970,21274,21578,21882,22186,22490,22794,23098,23402,23706,24010,24314,24618,24922,25226,25530,25834,26138,26442,26746,27050,27354,27658,27962,28266,28570,28874,29178,29482,29786,30090,30394,30698,31002,31306,31610,31914,32218,32522,32826,33130,33434,33738,34042,34346,34650,34954,35258,35562,35866,36170,36474,36778,37082,37386,37690,37994,38298,38602,38906,39210,39514,39818,40122,40426,40730,41034,41338,41642,41946,42250,42554,42858,43162,43466,43770,44074,44378,44682,44986,45290,45594,45898,46202,46506,46810,47114,47418,47722,48026,48330,48634,48938,49242,49546,49850,50154,50458,50762,51066,51370,51674,51978,52282,52586,52890,53194,53498,53802,54106,54410,54714,55018,55322,55626,55930,56234,56538,56842,57146,57450,57754,58058,58362,58666,58970,59274,59578,59882,60186,60490,60794,61098,61402,61706,62010,62314,62618,62922,63226,63530,63834,64138,64442,64746,65050,65354,65658,65962,66266,66570,66874,67178,67482,67786,68090,68394,68698,69002,69306,69610,69914,70218,70522,70826,71130,71434,71738,72042,72346,72650,72954,73258,73562,73866,74170,74474,74778,75082,75386,75690,75994,76298,76602,76906,77210,77514,77818'/>
+  </group>
+  <group name='298'>
+    <ids val='299,603,907,1211,1515,1819,2123,2427,2731,3035,3339,3643,3947,4251,4555,4859,5163,5467,5771,6075,6379,6683,6987,7291,7595,7899,8203,8507,8811,9115,9419,9723,10027,10331,10635,10939,11243,11547,11851,12155,12459,12763,13067,13371,13675,13979,14283,14587,14891,15195,15499,15803,16107,16411,16715,17019,17323,17627,17931,18235,18539,18843,19147,19451,19755,20059,20363,20667,20971,21275,21579,21883,22187,22491,22795,23099,23403,23707,24011,24315,24619,24923,25227,25531,25835,26139,26443,26747,27051,27355,27659,27963,28267,28571,28875,29179,29483,29787,30091,30395,30699,31003,31307,31611,31915,32219,32523,32827,33131,33435,33739,34043,34347,34651,34955,35259,35563,35867,36171,36475,36779,37083,37387,37691,37995,38299,38603,38907,39211,39515,39819,40123,40427,40731,41035,41339,41643,41947,42251,42555,42859,43163,43467,43771,44075,44379,44683,44987,45291,45595,45899,46203,46507,46811,47115,47419,47723,48027,48331,48635,48939,49243,49547,49851,50155,50459,50763,51067,51371,51675,51979,52283,52587,52891,53195,53499,53803,54107,54411,54715,55019,55323,55627,55931,56235,56539,56843,57147,57451,57755,58059,58363,58667,58971,59275,59579,59883,60187,60491,60795,61099,61403,61707,62011,62315,62619,62923,63227,63531,63835,64139,64443,64747,65051,65355,65659,65963,66267,66571,66875,67179,67483,67787,68091,68395,68699,69003,69307,69611,69915,70219,70523,70827,71131,71435,71739,72043,72347,72651,72955,73259,73563,73867,74171,74475,74779,75083,75387,75691,75995,76299,76603,76907,77211,77515,77819'/>
+  </group>
+  <group name='299'>
+    <ids val='300,604,908,1212,1516,1820,2124,2428,2732,3036,3340,3644,3948,4252,4556,4860,5164,5468,5772,6076,6380,6684,6988,7292,7596,7900,8204,8508,8812,9116,9420,9724,10028,10332,10636,10940,11244,11548,11852,12156,12460,12764,13068,13372,13676,13980,14284,14588,14892,15196,15500,15804,16108,16412,16716,17020,17324,17628,17932,18236,18540,18844,19148,19452,19756,20060,20364,20668,20972,21276,21580,21884,22188,22492,22796,23100,23404,23708,24012,24316,24620,24924,25228,25532,25836,26140,26444,26748,27052,27356,27660,27964,28268,28572,28876,29180,29484,29788,30092,30396,30700,31004,31308,31612,31916,32220,32524,32828,33132,33436,33740,34044,34348,34652,34956,35260,35564,35868,36172,36476,36780,37084,37388,37692,37996,38300,38604,38908,39212,39516,39820,40124,40428,40732,41036,41340,41644,41948,42252,42556,42860,43164,43468,43772,44076,44380,44684,44988,45292,45596,45900,46204,46508,46812,47116,47420,47724,48028,48332,48636,48940,49244,49548,49852,50156,50460,50764,51068,51372,51676,51980,52284,52588,52892,53196,53500,53804,54108,54412,54716,55020,55324,55628,55932,56236,56540,56844,57148,57452,57756,58060,58364,58668,58972,59276,59580,59884,60188,60492,60796,61100,61404,61708,62012,62316,62620,62924,63228,63532,63836,64140,64444,64748,65052,65356,65660,65964,66268,66572,66876,67180,67484,67788,68092,68396,68700,69004,69308,69612,69916,70220,70524,70828,71132,71436,71740,72044,72348,72652,72956,73260,73564,73868,74172,74476,74780,75084,75388,75692,75996,76300,76604,76908,77212,77516,77820'/>
+  </group>
+  <group name='300'>
+    <ids val='301,605,909,1213,1517,1821,2125,2429,2733,3037,3341,3645,3949,4253,4557,4861,5165,5469,5773,6077,6381,6685,6989,7293,7597,7901,8205,8509,8813,9117,9421,9725,10029,10333,10637,10941,11245,11549,11853,12157,12461,12765,13069,13373,13677,13981,14285,14589,14893,15197,15501,15805,16109,16413,16717,17021,17325,17629,17933,18237,18541,18845,19149,19453,19757,20061,20365,20669,20973,21277,21581,21885,22189,22493,22797,23101,23405,23709,24013,24317,24621,24925,25229,25533,25837,26141,26445,26749,27053,27357,27661,27965,28269,28573,28877,29181,29485,29789,30093,30397,30701,31005,31309,31613,31917,32221,32525,32829,33133,33437,33741,34045,34349,34653,34957,35261,35565,35869,36173,36477,36781,37085,37389,37693,37997,38301,38605,38909,39213,39517,39821,40125,40429,40733,41037,41341,41645,41949,42253,42557,42861,43165,43469,43773,44077,44381,44685,44989,45293,45597,45901,46205,46509,46813,47117,47421,47725,48029,48333,48637,48941,49245,49549,49853,50157,50461,50765,51069,51373,51677,51981,52285,52589,52893,53197,53501,53805,54109,54413,54717,55021,55325,55629,55933,56237,56541,56845,57149,57453,57757,58061,58365,58669,58973,59277,59581,59885,60189,60493,60797,61101,61405,61709,62013,62317,62621,62925,63229,63533,63837,64141,64445,64749,65053,65357,65661,65965,66269,66573,66877,67181,67485,67789,68093,68397,68701,69005,69309,69613,69917,70221,70525,70829,71133,71437,71741,72045,72349,72653,72957,73261,73565,73869,74173,74477,74781,75085,75389,75693,75997,76301,76605,76909,77213,77517,77821'/>
+  </group>
+  <group name='301'>
+    <ids val='302,606,910,1214,1518,1822,2126,2430,2734,3038,3342,3646,3950,4254,4558,4862,5166,5470,5774,6078,6382,6686,6990,7294,7598,7902,8206,8510,8814,9118,9422,9726,10030,10334,10638,10942,11246,11550,11854,12158,12462,12766,13070,13374,13678,13982,14286,14590,14894,15198,15502,15806,16110,16414,16718,17022,17326,17630,17934,18238,18542,18846,19150,19454,19758,20062,20366,20670,20974,21278,21582,21886,22190,22494,22798,23102,23406,23710,24014,24318,24622,24926,25230,25534,25838,26142,26446,26750,27054,27358,27662,27966,28270,28574,28878,29182,29486,29790,30094,30398,30702,31006,31310,31614,31918,32222,32526,32830,33134,33438,33742,34046,34350,34654,34958,35262,35566,35870,36174,36478,36782,37086,37390,37694,37998,38302,38606,38910,39214,39518,39822,40126,40430,40734,41038,41342,41646,41950,42254,42558,42862,43166,43470,43774,44078,44382,44686,44990,45294,45598,45902,46206,46510,46814,47118,47422,47726,48030,48334,48638,48942,49246,49550,49854,50158,50462,50766,51070,51374,51678,51982,52286,52590,52894,53198,53502,53806,54110,54414,54718,55022,55326,55630,55934,56238,56542,56846,57150,57454,57758,58062,58366,58670,58974,59278,59582,59886,60190,60494,60798,61102,61406,61710,62014,62318,62622,62926,63230,63534,63838,64142,64446,64750,65054,65358,65662,65966,66270,66574,66878,67182,67486,67790,68094,68398,68702,69006,69310,69614,69918,70222,70526,70830,71134,71438,71742,72046,72350,72654,72958,73262,73566,73870,74174,74478,74782,75086,75390,75694,75998,76302,76606,76910,77214,77518,77822'/>
+  </group>
+  <group name='302'>
+    <ids val='303,607,911,1215,1519,1823,2127,2431,2735,3039,3343,3647,3951,4255,4559,4863,5167,5471,5775,6079,6383,6687,6991,7295,7599,7903,8207,8511,8815,9119,9423,9727,10031,10335,10639,10943,11247,11551,11855,12159,12463,12767,13071,13375,13679,13983,14287,14591,14895,15199,15503,15807,16111,16415,16719,17023,17327,17631,17935,18239,18543,18847,19151,19455,19759,20063,20367,20671,20975,21279,21583,21887,22191,22495,22799,23103,23407,23711,24015,24319,24623,24927,25231,25535,25839,26143,26447,26751,27055,27359,27663,27967,28271,28575,28879,29183,29487,29791,30095,30399,30703,31007,31311,31615,31919,32223,32527,32831,33135,33439,33743,34047,34351,34655,34959,35263,35567,35871,36175,36479,36783,37087,37391,37695,37999,38303,38607,38911,39215,39519,39823,40127,40431,40735,41039,41343,41647,41951,42255,42559,42863,43167,43471,43775,44079,44383,44687,44991,45295,45599,45903,46207,46511,46815,47119,47423,47727,48031,48335,48639,48943,49247,49551,49855,50159,50463,50767,51071,51375,51679,51983,52287,52591,52895,53199,53503,53807,54111,54415,54719,55023,55327,55631,55935,56239,56543,56847,57151,57455,57759,58063,58367,58671,58975,59279,59583,59887,60191,60495,60799,61103,61407,61711,62015,62319,62623,62927,63231,63535,63839,64143,64447,64751,65055,65359,65663,65967,66271,66575,66879,67183,67487,67791,68095,68399,68703,69007,69311,69615,69919,70223,70527,70831,71135,71439,71743,72047,72351,72655,72959,73263,73567,73871,74175,74479,74783,75087,75391,75695,75999,76303,76607,76911,77215,77519,77823'/>
+  </group>
+  <group name='303'>
+    <ids val='304,608,912,1216,1520,1824,2128,2432,2736,3040,3344,3648,3952,4256,4560,4864,5168,5472,5776,6080,6384,6688,6992,7296,7600,7904,8208,8512,8816,9120,9424,9728,10032,10336,10640,10944,11248,11552,11856,12160,12464,12768,13072,13376,13680,13984,14288,14592,14896,15200,15504,15808,16112,16416,16720,17024,17328,17632,17936,18240,18544,18848,19152,19456,19760,20064,20368,20672,20976,21280,21584,21888,22192,22496,22800,23104,23408,23712,24016,24320,24624,24928,25232,25536,25840,26144,26448,26752,27056,27360,27664,27968,28272,28576,28880,29184,29488,29792,30096,30400,30704,31008,31312,31616,31920,32224,32528,32832,33136,33440,33744,34048,34352,34656,34960,35264,35568,35872,36176,36480,36784,37088,37392,37696,38000,38304,38608,38912,39216,39520,39824,40128,40432,40736,41040,41344,41648,41952,42256,42560,42864,43168,43472,43776,44080,44384,44688,44992,45296,45600,45904,46208,46512,46816,47120,47424,47728,48032,48336,48640,48944,49248,49552,49856,50160,50464,50768,51072,51376,51680,51984,52288,52592,52896,53200,53504,53808,54112,54416,54720,55024,55328,55632,55936,56240,56544,56848,57152,57456,57760,58064,58368,58672,58976,59280,59584,59888,60192,60496,60800,61104,61408,61712,62016,62320,62624,62928,63232,63536,63840,64144,64448,64752,65056,65360,65664,65968,66272,66576,66880,67184,67488,67792,68096,68400,68704,69008,69312,69616,69920,70224,70528,70832,71136,71440,71744,72048,72352,72656,72960,73264,73568,73872,74176,74480,74784,75088,75392,75696,76000,76304,76608,76912,77216,77520,77824'/>
+  </group>
+</detector-grouping>
diff --git a/Code/Mantid/instrument/Grouping/REFL_Detector_Grouping_Sum_Y_rot.xml b/Code/Mantid/instrument/Grouping/REFL_Detector_Grouping_Sum_Y_rot.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d159bb2edfd9b12294fa0de25a41c6398aede213
--- /dev/null
+++ b/Code/Mantid/instrument/Grouping/REFL_Detector_Grouping_Sum_Y_rot.xml
@@ -0,0 +1,770 @@
+<detector-grouping description="Integrated over Y">
+  <group name='303'>
+    <ids val='1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304'/>
+  </group>
+  <group name='303'>
+    <ids val='305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608'/>
+  </group>
+  <group name='303'>
+    <ids val='609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912'/>
+  </group>
+  <group name='303'>
+    <ids val='913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216'/>
+  </group>
+  <group name='303'>
+    <ids val='1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520'/>
+  </group>
+  <group name='303'>
+    <ids val='1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824'/>
+  </group>
+  <group name='303'>
+    <ids val='1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128'/>
+  </group>
+  <group name='303'>
+    <ids val='2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432'/>
+  </group>
+  <group name='303'>
+    <ids val='2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736'/>
+  </group>
+  <group name='303'>
+    <ids val='2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,2785,2786,2787,2788,2789,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,3038,3039,3040'/>
+  </group>
+  <group name='303'>
+    <ids val='3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,3051,3052,3053,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3116,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140,3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,3188,3189,3190,3191,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,3234,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,3278,3279,3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295,3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311,3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327,3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343,3344'/>
+  </group>
+  <group name='303'>
+    <ids val='3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,3360,3361,3362,3363,3364,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374,3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,3388,3389,3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405,3406,3407,3408,3409,3410,3411,3412,3413,3414,3415,3416,3417,3418,3419,3420,3421,3422,3423,3424,3425,3426,3427,3428,3429,3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3440,3441,3442,3443,3444,3445,3446,3447,3448,3449,3450,3451,3452,3453,3454,3455,3456,3457,3458,3459,3460,3461,3462,3463,3464,3465,3466,3467,3468,3469,3470,3471,3472,3473,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,3496,3497,3498,3499,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,3512,3513,3514,3515,3516,3517,3518,3519,3520,3521,3522,3523,3524,3525,3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3575,3576,3577,3578,3579,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,3648'/>
+  </group>
+  <group name='303'>
+    <ids val='3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952'/>
+  </group>
+  <group name='303'>
+    <ids val='3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238,4239,4240,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256'/>
+  </group>
+  <group name='303'>
+    <ids val='4257,4258,4259,4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310,4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4330,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476,4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,4490,4491,4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,4519,4520,4521,4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,4536,4537,4538,4539,4540,4541,4542,4543,4544,4545,4546,4547,4548,4549,4550,4551,4552,4553,4554,4555,4556,4557,4558,4559,4560'/>
+  </group>
+  <group name='303'>
+    <ids val='4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4574,4575,4576,4577,4578,4579,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611,4612,4613,4614,4615,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642,4643,4644,4645,4646,4647,4648,4649,4650,4651,4652,4653,4654,4655,4656,4657,4658,4659,4660,4661,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672,4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,4683,4684,4685,4686,4687,4688,4689,4690,4691,4692,4693,4694,4695,4696,4697,4698,4699,4700,4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,4712,4713,4714,4715,4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864'/>
+  </group>
+  <group name='303'>
+    <ids val='4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999,5000,5001,5002,5003,5004,5005,5006,5007,5008,5009,5010,5011,5012,5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,5040,5041,5042,5043,5044,5045,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,5056,5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072,5073,5074,5075,5076,5077,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,5113,5114,5115,5116,5117,5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164,5165,5166,5167,5168'/>
+  </group>
+  <group name='303'>
+    <ids val='5169,5170,5171,5172,5173,5174,5175,5176,5177,5178,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5195,5196,5197,5198,5199,5200,5201,5202,5203,5204,5205,5206,5207,5208,5209,5210,5211,5212,5213,5214,5215,5216,5217,5218,5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,5248,5249,5250,5251,5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299,5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385,5386,5387,5388,5389,5390,5391,5392,5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440,5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472'/>
+  </group>
+  <group name='303'>
+    <ids val='5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632,5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648,5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712,5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728,5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744,5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760,5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776'/>
+  </group>
+  <group name='303'>
+    <ids val='5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080'/>
+  </group>
+  <group name='303'>
+    <ids val='6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132,6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180,6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384'/>
+  </group>
+  <group name='303'>
+    <ids val='6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443,6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456,6457,6458,6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474,6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581,6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629,6630,6631,6632,6633,6634,6635,6636,6637,6638,6639,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659,6660,6661,6662,6663,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688'/>
+  </group>
+  <group name='303'>
+    <ids val='6689,6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761,6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,6905,6906,6907,6908,6909,6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934,6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950,6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984,6985,6986,6987,6988,6989,6990,6991,6992'/>
+  </group>
+  <group name='303'>
+    <ids val='6993,6994,6995,6996,6997,6998,6999,7000,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138,7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154,7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167,7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296'/>
+  </group>
+  <group name='303'>
+    <ids val='7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600'/>
+  </group>
+  <group name='303'>
+    <ids val='7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807,7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904'/>
+  </group>
+  <group name='303'>
+    <ids val='7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208'/>
+  </group>
+  <group name='303'>
+    <ids val='8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512'/>
+  </group>
+  <group name='303'>
+    <ids val='8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,8764,8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780,8781,8782,8783,8784,8785,8786,8787,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816'/>
+  </group>
+  <group name='303'>
+    <ids val='8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901,8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8928,8929,8930,8931,8932,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,8944,8945,8946,8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977,8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008,9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023,9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068,9069,9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117,9118,9119,9120'/>
+  </group>
+  <group name='303'>
+    <ids val='9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133,9134,9135,9136,9137,9138,9139,9140,9141,9142,9143,9144,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163,9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,9176,9177,9178,9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194,9195,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405,9406,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423,9424'/>
+  </group>
+  <group name='303'>
+    <ids val='9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9450,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9678,9679,9680,9681,9682,9683,9684,9685,9686,9687,9688,9689,9690,9691,9692,9693,9694,9695,9696,9697,9698,9699,9700,9701,9702,9703,9704,9705,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728'/>
+  </group>
+  <group name='303'>
+    <ids val='9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838,9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9858,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,9869,9870,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926,9927,9928,9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003,10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019,10020,10021,10022,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032'/>
+  </group>
+  <group name='303'>
+    <ids val='10033,10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,10049,10050,10051,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064,10065,10066,10067,10068,10069,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080,10081,10082,10083,10084,10085,10086,10087,10088,10089,10090,10091,10092,10093,10094,10095,10096,10097,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110,10111,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121,10122,10123,10124,10125,10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,10141,10142,10143,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161,10162,10163,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10184,10185,10186,10187,10188,10189,10190,10191,10192,10193,10194,10195,10196,10197,10198,10199,10200,10201,10202,10203,10204,10205,10206,10207,10208,10209,10210,10211,10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10233,10234,10235,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10259,10260,10261,10262,10263,10264,10265,10266,10267,10268,10269,10270,10271,10272,10273,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287,10288,10289,10290,10291,10292,10293,10294,10295,10296,10297,10298,10299,10300,10301,10302,10303,10304,10305,10306,10307,10308,10309,10310,10311,10312,10313,10314,10315,10316,10317,10318,10319,10320,10321,10322,10323,10324,10325,10326,10327,10328,10329,10330,10331,10332,10333,10334,10335,10336'/>
+  </group>
+  <group name='303'>
+    <ids val='10337,10338,10339,10340,10341,10342,10343,10344,10345,10346,10347,10348,10349,10350,10351,10352,10353,10354,10355,10356,10357,10358,10359,10360,10361,10362,10363,10364,10365,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,10393,10394,10395,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407,10408,10409,10410,10411,10412,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422,10423,10424,10425,10426,10427,10428,10429,10430,10431,10432,10433,10434,10435,10436,10437,10438,10439,10440,10441,10442,10443,10444,10445,10446,10447,10448,10449,10450,10451,10452,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10463,10464,10465,10466,10467,10468,10469,10470,10471,10472,10473,10474,10475,10476,10477,10478,10479,10480,10481,10482,10483,10484,10485,10486,10487,10488,10489,10490,10491,10492,10493,10494,10495,10496,10497,10498,10499,10500,10501,10502,10503,10504,10505,10506,10507,10508,10509,10510,10511,10512,10513,10514,10515,10516,10517,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10539,10540,10541,10542,10543,10544,10545,10546,10547,10548,10549,10550,10551,10552,10553,10554,10555,10556,10557,10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,10568,10569,10570,10571,10572,10573,10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618,10619,10620,10621,10622,10623,10624,10625,10626,10627,10628,10629,10630,10631,10632,10633,10634,10635,10636,10637,10638,10639,10640'/>
+  </group>
+  <group name='303'>
+    <ids val='10641,10642,10643,10644,10645,10646,10647,10648,10649,10650,10651,10652,10653,10654,10655,10656,10657,10658,10659,10660,10661,10662,10663,10664,10665,10666,10667,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10687,10688,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10701,10702,10703,10704,10705,10706,10707,10708,10709,10710,10711,10712,10713,10714,10715,10716,10717,10718,10719,10720,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737,10738,10739,10740,10741,10742,10743,10744,10745,10746,10747,10748,10749,10750,10751,10752,10753,10754,10755,10756,10757,10758,10759,10760,10761,10762,10763,10764,10765,10766,10767,10768,10769,10770,10771,10772,10773,10774,10775,10776,10777,10778,10779,10780,10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10791,10792,10793,10794,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812,10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828,10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10843,10844,10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10872,10873,10874,10875,10876,10877,10878,10879,10880,10881,10882,10883,10884,10885,10886,10887,10888,10889,10890,10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906,10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,10920,10921,10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,10933,10934,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944'/>
+  </group>
+  <group name='303'>
+    <ids val='10945,10946,10947,10948,10949,10950,10951,10952,10953,10954,10955,10956,10957,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998,10999,11000,11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044,11045,11046,11047,11048,11049,11050,11051,11052,11053,11054,11055,11056,11057,11058,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184,11185,11186,11187,11188,11189,11190,11191,11192,11193,11194,11195,11196,11197,11198,11199,11200,11201,11202,11203,11204,11205,11206,11207,11208,11209,11210,11211,11212,11213,11214,11215,11216,11217,11218,11219,11220,11221,11222,11223,11224,11225,11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238,11239,11240,11241,11242,11243,11244,11245,11246,11247,11248'/>
+  </group>
+  <group name='303'>
+    <ids val='11249,11250,11251,11252,11253,11254,11255,11256,11257,11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,11270,11271,11272,11273,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288,11289,11290,11291,11292,11293,11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304,11305,11306,11307,11308,11309,11310,11311,11312,11313,11314,11315,11316,11317,11318,11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348,11349,11350,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365,11366,11367,11368,11369,11370,11371,11372,11373,11374,11375,11376,11377,11378,11379,11380,11381,11382,11383,11384,11385,11386,11387,11388,11389,11390,11391,11392,11393,11394,11395,11396,11397,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410,11411,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425,11426,11427,11428,11429,11430,11431,11432,11433,11434,11435,11436,11437,11438,11439,11440,11441,11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457,11458,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,11470,11471,11472,11473,11474,11475,11476,11477,11478,11479,11480,11481,11482,11483,11484,11485,11486,11487,11488,11489,11490,11491,11492,11493,11494,11495,11496,11497,11498,11499,11500,11501,11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517,11518,11519,11520,11521,11522,11523,11524,11525,11526,11527,11528,11529,11530,11531,11532,11533,11534,11535,11536,11537,11538,11539,11540,11541,11542,11543,11544,11545,11546,11547,11548,11549,11550,11551,11552'/>
+  </group>
+  <group name='303'>
+    <ids val='11553,11554,11555,11556,11557,11558,11559,11560,11561,11562,11563,11564,11565,11566,11567,11568,11569,11570,11571,11572,11573,11574,11575,11576,11577,11578,11579,11580,11581,11582,11583,11584,11585,11586,11587,11588,11589,11590,11591,11592,11593,11594,11595,11596,11597,11598,11599,11600,11601,11602,11603,11604,11605,11606,11607,11608,11609,11610,11611,11612,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622,11623,11624,11625,11626,11627,11628,11629,11630,11631,11632,11633,11634,11635,11636,11637,11638,11639,11640,11641,11642,11643,11644,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654,11655,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11669,11670,11671,11672,11673,11674,11675,11676,11677,11678,11679,11680,11681,11682,11683,11684,11685,11686,11687,11688,11689,11690,11691,11692,11693,11694,11695,11696,11697,11698,11699,11700,11701,11702,11703,11704,11705,11706,11707,11708,11709,11710,11711,11712,11713,11714,11715,11716,11717,11718,11719,11720,11721,11722,11723,11724,11725,11726,11727,11728,11729,11730,11731,11732,11733,11734,11735,11736,11737,11738,11739,11740,11741,11742,11743,11744,11745,11746,11747,11748,11749,11750,11751,11752,11753,11754,11755,11756,11757,11758,11759,11760,11761,11762,11763,11764,11765,11766,11767,11768,11769,11770,11771,11772,11773,11774,11775,11776,11777,11778,11779,11780,11781,11782,11783,11784,11785,11786,11787,11788,11789,11790,11791,11792,11793,11794,11795,11796,11797,11798,11799,11800,11801,11802,11803,11804,11805,11806,11807,11808,11809,11810,11811,11812,11813,11814,11815,11816,11817,11818,11819,11820,11821,11822,11823,11824,11825,11826,11827,11828,11829,11830,11831,11832,11833,11834,11835,11836,11837,11838,11839,11840,11841,11842,11843,11844,11845,11846,11847,11848,11849,11850,11851,11852,11853,11854,11855,11856'/>
+  </group>
+  <group name='303'>
+    <ids val='11857,11858,11859,11860,11861,11862,11863,11864,11865,11866,11867,11868,11869,11870,11871,11872,11873,11874,11875,11876,11877,11878,11879,11880,11881,11882,11883,11884,11885,11886,11887,11888,11889,11890,11891,11892,11893,11894,11895,11896,11897,11898,11899,11900,11901,11902,11903,11904,11905,11906,11907,11908,11909,11910,11911,11912,11913,11914,11915,11916,11917,11918,11919,11920,11921,11922,11923,11924,11925,11926,11927,11928,11929,11930,11931,11932,11933,11934,11935,11936,11937,11938,11939,11940,11941,11942,11943,11944,11945,11946,11947,11948,11949,11950,11951,11952,11953,11954,11955,11956,11957,11958,11959,11960,11961,11962,11963,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975,11976,11977,11978,11979,11980,11981,11982,11983,11984,11985,11986,11987,11988,11989,11990,11991,11992,11993,11994,11995,11996,11997,11998,11999,12000,12001,12002,12003,12004,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,12036,12037,12038,12039,12040,12041,12042,12043,12044,12045,12046,12047,12048,12049,12050,12051,12052,12053,12054,12055,12056,12057,12058,12059,12060,12061,12062,12063,12064,12065,12066,12067,12068,12069,12070,12071,12072,12073,12074,12075,12076,12077,12078,12079,12080,12081,12082,12083,12084,12085,12086,12087,12088,12089,12090,12091,12092,12093,12094,12095,12096,12097,12098,12099,12100,12101,12102,12103,12104,12105,12106,12107,12108,12109,12110,12111,12112,12113,12114,12115,12116,12117,12118,12119,12120,12121,12122,12123,12124,12125,12126,12127,12128,12129,12130,12131,12132,12133,12134,12135,12136,12137,12138,12139,12140,12141,12142,12143,12144,12145,12146,12147,12148,12149,12150,12151,12152,12153,12154,12155,12156,12157,12158,12159,12160'/>
+  </group>
+  <group name='303'>
+    <ids val='12161,12162,12163,12164,12165,12166,12167,12168,12169,12170,12171,12172,12173,12174,12175,12176,12177,12178,12179,12180,12181,12182,12183,12184,12185,12186,12187,12188,12189,12190,12191,12192,12193,12194,12195,12196,12197,12198,12199,12200,12201,12202,12203,12204,12205,12206,12207,12208,12209,12210,12211,12212,12213,12214,12215,12216,12217,12218,12219,12220,12221,12222,12223,12224,12225,12226,12227,12228,12229,12230,12231,12232,12233,12234,12235,12236,12237,12238,12239,12240,12241,12242,12243,12244,12245,12246,12247,12248,12249,12250,12251,12252,12253,12254,12255,12256,12257,12258,12259,12260,12261,12262,12263,12264,12265,12266,12267,12268,12269,12270,12271,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12284,12285,12286,12287,12288,12289,12290,12291,12292,12293,12294,12295,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,12306,12307,12308,12309,12310,12311,12312,12313,12314,12315,12316,12317,12318,12319,12320,12321,12322,12323,12324,12325,12326,12327,12328,12329,12330,12331,12332,12333,12334,12335,12336,12337,12338,12339,12340,12341,12342,12343,12344,12345,12346,12347,12348,12349,12350,12351,12352,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12436,12437,12438,12439,12440,12441,12442,12443,12444,12445,12446,12447,12448,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464'/>
+  </group>
+  <group name='303'>
+    <ids val='12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,12535,12536,12537,12538,12539,12540,12541,12542,12543,12544,12545,12546,12547,12548,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,12586,12587,12588,12589,12590,12591,12592,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,12687,12688,12689,12690,12691,12692,12693,12694,12695,12696,12697,12698,12699,12700,12701,12702,12703,12704,12705,12706,12707,12708,12709,12710,12711,12712,12713,12714,12715,12716,12717,12718,12719,12720,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12731,12732,12733,12734,12735,12736,12737,12738,12739,12740,12741,12742,12743,12744,12745,12746,12747,12748,12749,12750,12751,12752,12753,12754,12755,12756,12757,12758,12759,12760,12761,12762,12763,12764,12765,12766,12767,12768'/>
+  </group>
+  <group name='303'>
+    <ids val='12769,12770,12771,12772,12773,12774,12775,12776,12777,12778,12779,12780,12781,12782,12783,12784,12785,12786,12787,12788,12789,12790,12791,12792,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,12828,12829,12830,12831,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,12842,12843,12844,12845,12846,12847,12848,12849,12850,12851,12852,12853,12854,12855,12856,12857,12858,12859,12860,12861,12862,12863,12864,12865,12866,12867,12868,12869,12870,12871,12872,12873,12874,12875,12876,12877,12878,12879,12880,12881,12882,12883,12884,12885,12886,12887,12888,12889,12890,12891,12892,12893,12894,12895,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,12924,12925,12926,12927,12928,12929,12930,12931,12932,12933,12934,12935,12936,12937,12938,12939,12940,12941,12942,12943,12944,12945,12946,12947,12948,12949,12950,12951,12952,12953,12954,12955,12956,12957,12958,12959,12960,12961,12962,12963,12964,12965,12966,12967,12968,12969,12970,12971,12972,12973,12974,12975,12976,12977,12978,12979,12980,12981,12982,12983,12984,12985,12986,12987,12988,12989,12990,12991,12992,12993,12994,12995,12996,12997,12998,12999,13000,13001,13002,13003,13004,13005,13006,13007,13008,13009,13010,13011,13012,13013,13014,13015,13016,13017,13018,13019,13020,13021,13022,13023,13024,13025,13026,13027,13028,13029,13030,13031,13032,13033,13034,13035,13036,13037,13038,13039,13040,13041,13042,13043,13044,13045,13046,13047,13048,13049,13050,13051,13052,13053,13054,13055,13056,13057,13058,13059,13060,13061,13062,13063,13064,13065,13066,13067,13068,13069,13070,13071,13072'/>
+  </group>
+  <group name='303'>
+    <ids val='13073,13074,13075,13076,13077,13078,13079,13080,13081,13082,13083,13084,13085,13086,13087,13088,13089,13090,13091,13092,13093,13094,13095,13096,13097,13098,13099,13100,13101,13102,13103,13104,13105,13106,13107,13108,13109,13110,13111,13112,13113,13114,13115,13116,13117,13118,13119,13120,13121,13122,13123,13124,13125,13126,13127,13128,13129,13130,13131,13132,13133,13134,13135,13136,13137,13138,13139,13140,13141,13142,13143,13144,13145,13146,13147,13148,13149,13150,13151,13152,13153,13154,13155,13156,13157,13158,13159,13160,13161,13162,13163,13164,13165,13166,13167,13168,13169,13170,13171,13172,13173,13174,13175,13176,13177,13178,13179,13180,13181,13182,13183,13184,13185,13186,13187,13188,13189,13190,13191,13192,13193,13194,13195,13196,13197,13198,13199,13200,13201,13202,13203,13204,13205,13206,13207,13208,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13219,13220,13221,13222,13223,13224,13225,13226,13227,13228,13229,13230,13231,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13242,13243,13244,13245,13246,13247,13248,13249,13250,13251,13252,13253,13254,13255,13256,13257,13258,13259,13260,13261,13262,13263,13264,13265,13266,13267,13268,13269,13270,13271,13272,13273,13274,13275,13276,13277,13278,13279,13280,13281,13282,13283,13284,13285,13286,13287,13288,13289,13290,13291,13292,13293,13294,13295,13296,13297,13298,13299,13300,13301,13302,13303,13304,13305,13306,13307,13308,13309,13310,13311,13312,13313,13314,13315,13316,13317,13318,13319,13320,13321,13322,13323,13324,13325,13326,13327,13328,13329,13330,13331,13332,13333,13334,13335,13336,13337,13338,13339,13340,13341,13342,13343,13344,13345,13346,13347,13348,13349,13350,13351,13352,13353,13354,13355,13356,13357,13358,13359,13360,13361,13362,13363,13364,13365,13366,13367,13368,13369,13370,13371,13372,13373,13374,13375,13376'/>
+  </group>
+  <group name='303'>
+    <ids val='13377,13378,13379,13380,13381,13382,13383,13384,13385,13386,13387,13388,13389,13390,13391,13392,13393,13394,13395,13396,13397,13398,13399,13400,13401,13402,13403,13404,13405,13406,13407,13408,13409,13410,13411,13412,13413,13414,13415,13416,13417,13418,13419,13420,13421,13422,13423,13424,13425,13426,13427,13428,13429,13430,13431,13432,13433,13434,13435,13436,13437,13438,13439,13440,13441,13442,13443,13444,13445,13446,13447,13448,13449,13450,13451,13452,13453,13454,13455,13456,13457,13458,13459,13460,13461,13462,13463,13464,13465,13466,13467,13468,13469,13470,13471,13472,13473,13474,13475,13476,13477,13478,13479,13480,13481,13482,13483,13484,13485,13486,13487,13488,13489,13490,13491,13492,13493,13494,13495,13496,13497,13498,13499,13500,13501,13502,13503,13504,13505,13506,13507,13508,13509,13510,13511,13512,13513,13514,13515,13516,13517,13518,13519,13520,13521,13522,13523,13524,13525,13526,13527,13528,13529,13530,13531,13532,13533,13534,13535,13536,13537,13538,13539,13540,13541,13542,13543,13544,13545,13546,13547,13548,13549,13550,13551,13552,13553,13554,13555,13556,13557,13558,13559,13560,13561,13562,13563,13564,13565,13566,13567,13568,13569,13570,13571,13572,13573,13574,13575,13576,13577,13578,13579,13580,13581,13582,13583,13584,13585,13586,13587,13588,13589,13590,13591,13592,13593,13594,13595,13596,13597,13598,13599,13600,13601,13602,13603,13604,13605,13606,13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618,13619,13620,13621,13622,13623,13624,13625,13626,13627,13628,13629,13630,13631,13632,13633,13634,13635,13636,13637,13638,13639,13640,13641,13642,13643,13644,13645,13646,13647,13648,13649,13650,13651,13652,13653,13654,13655,13656,13657,13658,13659,13660,13661,13662,13663,13664,13665,13666,13667,13668,13669,13670,13671,13672,13673,13674,13675,13676,13677,13678,13679,13680'/>
+  </group>
+  <group name='303'>
+    <ids val='13681,13682,13683,13684,13685,13686,13687,13688,13689,13690,13691,13692,13693,13694,13695,13696,13697,13698,13699,13700,13701,13702,13703,13704,13705,13706,13707,13708,13709,13710,13711,13712,13713,13714,13715,13716,13717,13718,13719,13720,13721,13722,13723,13724,13725,13726,13727,13728,13729,13730,13731,13732,13733,13734,13735,13736,13737,13738,13739,13740,13741,13742,13743,13744,13745,13746,13747,13748,13749,13750,13751,13752,13753,13754,13755,13756,13757,13758,13759,13760,13761,13762,13763,13764,13765,13766,13767,13768,13769,13770,13771,13772,13773,13774,13775,13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,13787,13788,13789,13790,13791,13792,13793,13794,13795,13796,13797,13798,13799,13800,13801,13802,13803,13804,13805,13806,13807,13808,13809,13810,13811,13812,13813,13814,13815,13816,13817,13818,13819,13820,13821,13822,13823,13824,13825,13826,13827,13828,13829,13830,13831,13832,13833,13834,13835,13836,13837,13838,13839,13840,13841,13842,13843,13844,13845,13846,13847,13848,13849,13850,13851,13852,13853,13854,13855,13856,13857,13858,13859,13860,13861,13862,13863,13864,13865,13866,13867,13868,13869,13870,13871,13872,13873,13874,13875,13876,13877,13878,13879,13880,13881,13882,13883,13884,13885,13886,13887,13888,13889,13890,13891,13892,13893,13894,13895,13896,13897,13898,13899,13900,13901,13902,13903,13904,13905,13906,13907,13908,13909,13910,13911,13912,13913,13914,13915,13916,13917,13918,13919,13920,13921,13922,13923,13924,13925,13926,13927,13928,13929,13930,13931,13932,13933,13934,13935,13936,13937,13938,13939,13940,13941,13942,13943,13944,13945,13946,13947,13948,13949,13950,13951,13952,13953,13954,13955,13956,13957,13958,13959,13960,13961,13962,13963,13964,13965,13966,13967,13968,13969,13970,13971,13972,13973,13974,13975,13976,13977,13978,13979,13980,13981,13982,13983,13984'/>
+  </group>
+  <group name='303'>
+    <ids val='13985,13986,13987,13988,13989,13990,13991,13992,13993,13994,13995,13996,13997,13998,13999,14000,14001,14002,14003,14004,14005,14006,14007,14008,14009,14010,14011,14012,14013,14014,14015,14016,14017,14018,14019,14020,14021,14022,14023,14024,14025,14026,14027,14028,14029,14030,14031,14032,14033,14034,14035,14036,14037,14038,14039,14040,14041,14042,14043,14044,14045,14046,14047,14048,14049,14050,14051,14052,14053,14054,14055,14056,14057,14058,14059,14060,14061,14062,14063,14064,14065,14066,14067,14068,14069,14070,14071,14072,14073,14074,14075,14076,14077,14078,14079,14080,14081,14082,14083,14084,14085,14086,14087,14088,14089,14090,14091,14092,14093,14094,14095,14096,14097,14098,14099,14100,14101,14102,14103,14104,14105,14106,14107,14108,14109,14110,14111,14112,14113,14114,14115,14116,14117,14118,14119,14120,14121,14122,14123,14124,14125,14126,14127,14128,14129,14130,14131,14132,14133,14134,14135,14136,14137,14138,14139,14140,14141,14142,14143,14144,14145,14146,14147,14148,14149,14150,14151,14152,14153,14154,14155,14156,14157,14158,14159,14160,14161,14162,14163,14164,14165,14166,14167,14168,14169,14170,14171,14172,14173,14174,14175,14176,14177,14178,14179,14180,14181,14182,14183,14184,14185,14186,14187,14188,14189,14190,14191,14192,14193,14194,14195,14196,14197,14198,14199,14200,14201,14202,14203,14204,14205,14206,14207,14208,14209,14210,14211,14212,14213,14214,14215,14216,14217,14218,14219,14220,14221,14222,14223,14224,14225,14226,14227,14228,14229,14230,14231,14232,14233,14234,14235,14236,14237,14238,14239,14240,14241,14242,14243,14244,14245,14246,14247,14248,14249,14250,14251,14252,14253,14254,14255,14256,14257,14258,14259,14260,14261,14262,14263,14264,14265,14266,14267,14268,14269,14270,14271,14272,14273,14274,14275,14276,14277,14278,14279,14280,14281,14282,14283,14284,14285,14286,14287,14288'/>
+  </group>
+  <group name='303'>
+    <ids val='14289,14290,14291,14292,14293,14294,14295,14296,14297,14298,14299,14300,14301,14302,14303,14304,14305,14306,14307,14308,14309,14310,14311,14312,14313,14314,14315,14316,14317,14318,14319,14320,14321,14322,14323,14324,14325,14326,14327,14328,14329,14330,14331,14332,14333,14334,14335,14336,14337,14338,14339,14340,14341,14342,14343,14344,14345,14346,14347,14348,14349,14350,14351,14352,14353,14354,14355,14356,14357,14358,14359,14360,14361,14362,14363,14364,14365,14366,14367,14368,14369,14370,14371,14372,14373,14374,14375,14376,14377,14378,14379,14380,14381,14382,14383,14384,14385,14386,14387,14388,14389,14390,14391,14392,14393,14394,14395,14396,14397,14398,14399,14400,14401,14402,14403,14404,14405,14406,14407,14408,14409,14410,14411,14412,14413,14414,14415,14416,14417,14418,14419,14420,14421,14422,14423,14424,14425,14426,14427,14428,14429,14430,14431,14432,14433,14434,14435,14436,14437,14438,14439,14440,14441,14442,14443,14444,14445,14446,14447,14448,14449,14450,14451,14452,14453,14454,14455,14456,14457,14458,14459,14460,14461,14462,14463,14464,14465,14466,14467,14468,14469,14470,14471,14472,14473,14474,14475,14476,14477,14478,14479,14480,14481,14482,14483,14484,14485,14486,14487,14488,14489,14490,14491,14492,14493,14494,14495,14496,14497,14498,14499,14500,14501,14502,14503,14504,14505,14506,14507,14508,14509,14510,14511,14512,14513,14514,14515,14516,14517,14518,14519,14520,14521,14522,14523,14524,14525,14526,14527,14528,14529,14530,14531,14532,14533,14534,14535,14536,14537,14538,14539,14540,14541,14542,14543,14544,14545,14546,14547,14548,14549,14550,14551,14552,14553,14554,14555,14556,14557,14558,14559,14560,14561,14562,14563,14564,14565,14566,14567,14568,14569,14570,14571,14572,14573,14574,14575,14576,14577,14578,14579,14580,14581,14582,14583,14584,14585,14586,14587,14588,14589,14590,14591,14592'/>
+  </group>
+  <group name='303'>
+    <ids val='14593,14594,14595,14596,14597,14598,14599,14600,14601,14602,14603,14604,14605,14606,14607,14608,14609,14610,14611,14612,14613,14614,14615,14616,14617,14618,14619,14620,14621,14622,14623,14624,14625,14626,14627,14628,14629,14630,14631,14632,14633,14634,14635,14636,14637,14638,14639,14640,14641,14642,14643,14644,14645,14646,14647,14648,14649,14650,14651,14652,14653,14654,14655,14656,14657,14658,14659,14660,14661,14662,14663,14664,14665,14666,14667,14668,14669,14670,14671,14672,14673,14674,14675,14676,14677,14678,14679,14680,14681,14682,14683,14684,14685,14686,14687,14688,14689,14690,14691,14692,14693,14694,14695,14696,14697,14698,14699,14700,14701,14702,14703,14704,14705,14706,14707,14708,14709,14710,14711,14712,14713,14714,14715,14716,14717,14718,14719,14720,14721,14722,14723,14724,14725,14726,14727,14728,14729,14730,14731,14732,14733,14734,14735,14736,14737,14738,14739,14740,14741,14742,14743,14744,14745,14746,14747,14748,14749,14750,14751,14752,14753,14754,14755,14756,14757,14758,14759,14760,14761,14762,14763,14764,14765,14766,14767,14768,14769,14770,14771,14772,14773,14774,14775,14776,14777,14778,14779,14780,14781,14782,14783,14784,14785,14786,14787,14788,14789,14790,14791,14792,14793,14794,14795,14796,14797,14798,14799,14800,14801,14802,14803,14804,14805,14806,14807,14808,14809,14810,14811,14812,14813,14814,14815,14816,14817,14818,14819,14820,14821,14822,14823,14824,14825,14826,14827,14828,14829,14830,14831,14832,14833,14834,14835,14836,14837,14838,14839,14840,14841,14842,14843,14844,14845,14846,14847,14848,14849,14850,14851,14852,14853,14854,14855,14856,14857,14858,14859,14860,14861,14862,14863,14864,14865,14866,14867,14868,14869,14870,14871,14872,14873,14874,14875,14876,14877,14878,14879,14880,14881,14882,14883,14884,14885,14886,14887,14888,14889,14890,14891,14892,14893,14894,14895,14896'/>
+  </group>
+  <group name='303'>
+    <ids val='14897,14898,14899,14900,14901,14902,14903,14904,14905,14906,14907,14908,14909,14910,14911,14912,14913,14914,14915,14916,14917,14918,14919,14920,14921,14922,14923,14924,14925,14926,14927,14928,14929,14930,14931,14932,14933,14934,14935,14936,14937,14938,14939,14940,14941,14942,14943,14944,14945,14946,14947,14948,14949,14950,14951,14952,14953,14954,14955,14956,14957,14958,14959,14960,14961,14962,14963,14964,14965,14966,14967,14968,14969,14970,14971,14972,14973,14974,14975,14976,14977,14978,14979,14980,14981,14982,14983,14984,14985,14986,14987,14988,14989,14990,14991,14992,14993,14994,14995,14996,14997,14998,14999,15000,15001,15002,15003,15004,15005,15006,15007,15008,15009,15010,15011,15012,15013,15014,15015,15016,15017,15018,15019,15020,15021,15022,15023,15024,15025,15026,15027,15028,15029,15030,15031,15032,15033,15034,15035,15036,15037,15038,15039,15040,15041,15042,15043,15044,15045,15046,15047,15048,15049,15050,15051,15052,15053,15054,15055,15056,15057,15058,15059,15060,15061,15062,15063,15064,15065,15066,15067,15068,15069,15070,15071,15072,15073,15074,15075,15076,15077,15078,15079,15080,15081,15082,15083,15084,15085,15086,15087,15088,15089,15090,15091,15092,15093,15094,15095,15096,15097,15098,15099,15100,15101,15102,15103,15104,15105,15106,15107,15108,15109,15110,15111,15112,15113,15114,15115,15116,15117,15118,15119,15120,15121,15122,15123,15124,15125,15126,15127,15128,15129,15130,15131,15132,15133,15134,15135,15136,15137,15138,15139,15140,15141,15142,15143,15144,15145,15146,15147,15148,15149,15150,15151,15152,15153,15154,15155,15156,15157,15158,15159,15160,15161,15162,15163,15164,15165,15166,15167,15168,15169,15170,15171,15172,15173,15174,15175,15176,15177,15178,15179,15180,15181,15182,15183,15184,15185,15186,15187,15188,15189,15190,15191,15192,15193,15194,15195,15196,15197,15198,15199,15200'/>
+  </group>
+  <group name='303'>
+    <ids val='15201,15202,15203,15204,15205,15206,15207,15208,15209,15210,15211,15212,15213,15214,15215,15216,15217,15218,15219,15220,15221,15222,15223,15224,15225,15226,15227,15228,15229,15230,15231,15232,15233,15234,15235,15236,15237,15238,15239,15240,15241,15242,15243,15244,15245,15246,15247,15248,15249,15250,15251,15252,15253,15254,15255,15256,15257,15258,15259,15260,15261,15262,15263,15264,15265,15266,15267,15268,15269,15270,15271,15272,15273,15274,15275,15276,15277,15278,15279,15280,15281,15282,15283,15284,15285,15286,15287,15288,15289,15290,15291,15292,15293,15294,15295,15296,15297,15298,15299,15300,15301,15302,15303,15304,15305,15306,15307,15308,15309,15310,15311,15312,15313,15314,15315,15316,15317,15318,15319,15320,15321,15322,15323,15324,15325,15326,15327,15328,15329,15330,15331,15332,15333,15334,15335,15336,15337,15338,15339,15340,15341,15342,15343,15344,15345,15346,15347,15348,15349,15350,15351,15352,15353,15354,15355,15356,15357,15358,15359,15360,15361,15362,15363,15364,15365,15366,15367,15368,15369,15370,15371,15372,15373,15374,15375,15376,15377,15378,15379,15380,15381,15382,15383,15384,15385,15386,15387,15388,15389,15390,15391,15392,15393,15394,15395,15396,15397,15398,15399,15400,15401,15402,15403,15404,15405,15406,15407,15408,15409,15410,15411,15412,15413,15414,15415,15416,15417,15418,15419,15420,15421,15422,15423,15424,15425,15426,15427,15428,15429,15430,15431,15432,15433,15434,15435,15436,15437,15438,15439,15440,15441,15442,15443,15444,15445,15446,15447,15448,15449,15450,15451,15452,15453,15454,15455,15456,15457,15458,15459,15460,15461,15462,15463,15464,15465,15466,15467,15468,15469,15470,15471,15472,15473,15474,15475,15476,15477,15478,15479,15480,15481,15482,15483,15484,15485,15486,15487,15488,15489,15490,15491,15492,15493,15494,15495,15496,15497,15498,15499,15500,15501,15502,15503,15504'/>
+  </group>
+  <group name='303'>
+    <ids val='15505,15506,15507,15508,15509,15510,15511,15512,15513,15514,15515,15516,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15528,15529,15530,15531,15532,15533,15534,15535,15536,15537,15538,15539,15540,15541,15542,15543,15544,15545,15546,15547,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,15559,15560,15561,15562,15563,15564,15565,15566,15567,15568,15569,15570,15571,15572,15573,15574,15575,15576,15577,15578,15579,15580,15581,15582,15583,15584,15585,15586,15587,15588,15589,15590,15591,15592,15593,15594,15595,15596,15597,15598,15599,15600,15601,15602,15603,15604,15605,15606,15607,15608,15609,15610,15611,15612,15613,15614,15615,15616,15617,15618,15619,15620,15621,15622,15623,15624,15625,15626,15627,15628,15629,15630,15631,15632,15633,15634,15635,15636,15637,15638,15639,15640,15641,15642,15643,15644,15645,15646,15647,15648,15649,15650,15651,15652,15653,15654,15655,15656,15657,15658,15659,15660,15661,15662,15663,15664,15665,15666,15667,15668,15669,15670,15671,15672,15673,15674,15675,15676,15677,15678,15679,15680,15681,15682,15683,15684,15685,15686,15687,15688,15689,15690,15691,15692,15693,15694,15695,15696,15697,15698,15699,15700,15701,15702,15703,15704,15705,15706,15707,15708,15709,15710,15711,15712,15713,15714,15715,15716,15717,15718,15719,15720,15721,15722,15723,15724,15725,15726,15727,15728,15729,15730,15731,15732,15733,15734,15735,15736,15737,15738,15739,15740,15741,15742,15743,15744,15745,15746,15747,15748,15749,15750,15751,15752,15753,15754,15755,15756,15757,15758,15759,15760,15761,15762,15763,15764,15765,15766,15767,15768,15769,15770,15771,15772,15773,15774,15775,15776,15777,15778,15779,15780,15781,15782,15783,15784,15785,15786,15787,15788,15789,15790,15791,15792,15793,15794,15795,15796,15797,15798,15799,15800,15801,15802,15803,15804,15805,15806,15807,15808'/>
+  </group>
+  <group name='303'>
+    <ids val='15809,15810,15811,15812,15813,15814,15815,15816,15817,15818,15819,15820,15821,15822,15823,15824,15825,15826,15827,15828,15829,15830,15831,15832,15833,15834,15835,15836,15837,15838,15839,15840,15841,15842,15843,15844,15845,15846,15847,15848,15849,15850,15851,15852,15853,15854,15855,15856,15857,15858,15859,15860,15861,15862,15863,15864,15865,15866,15867,15868,15869,15870,15871,15872,15873,15874,15875,15876,15877,15878,15879,15880,15881,15882,15883,15884,15885,15886,15887,15888,15889,15890,15891,15892,15893,15894,15895,15896,15897,15898,15899,15900,15901,15902,15903,15904,15905,15906,15907,15908,15909,15910,15911,15912,15913,15914,15915,15916,15917,15918,15919,15920,15921,15922,15923,15924,15925,15926,15927,15928,15929,15930,15931,15932,15933,15934,15935,15936,15937,15938,15939,15940,15941,15942,15943,15944,15945,15946,15947,15948,15949,15950,15951,15952,15953,15954,15955,15956,15957,15958,15959,15960,15961,15962,15963,15964,15965,15966,15967,15968,15969,15970,15971,15972,15973,15974,15975,15976,15977,15978,15979,15980,15981,15982,15983,15984,15985,15986,15987,15988,15989,15990,15991,15992,15993,15994,15995,15996,15997,15998,15999,16000,16001,16002,16003,16004,16005,16006,16007,16008,16009,16010,16011,16012,16013,16014,16015,16016,16017,16018,16019,16020,16021,16022,16023,16024,16025,16026,16027,16028,16029,16030,16031,16032,16033,16034,16035,16036,16037,16038,16039,16040,16041,16042,16043,16044,16045,16046,16047,16048,16049,16050,16051,16052,16053,16054,16055,16056,16057,16058,16059,16060,16061,16062,16063,16064,16065,16066,16067,16068,16069,16070,16071,16072,16073,16074,16075,16076,16077,16078,16079,16080,16081,16082,16083,16084,16085,16086,16087,16088,16089,16090,16091,16092,16093,16094,16095,16096,16097,16098,16099,16100,16101,16102,16103,16104,16105,16106,16107,16108,16109,16110,16111,16112'/>
+  </group>
+  <group name='303'>
+    <ids val='16113,16114,16115,16116,16117,16118,16119,16120,16121,16122,16123,16124,16125,16126,16127,16128,16129,16130,16131,16132,16133,16134,16135,16136,16137,16138,16139,16140,16141,16142,16143,16144,16145,16146,16147,16148,16149,16150,16151,16152,16153,16154,16155,16156,16157,16158,16159,16160,16161,16162,16163,16164,16165,16166,16167,16168,16169,16170,16171,16172,16173,16174,16175,16176,16177,16178,16179,16180,16181,16182,16183,16184,16185,16186,16187,16188,16189,16190,16191,16192,16193,16194,16195,16196,16197,16198,16199,16200,16201,16202,16203,16204,16205,16206,16207,16208,16209,16210,16211,16212,16213,16214,16215,16216,16217,16218,16219,16220,16221,16222,16223,16224,16225,16226,16227,16228,16229,16230,16231,16232,16233,16234,16235,16236,16237,16238,16239,16240,16241,16242,16243,16244,16245,16246,16247,16248,16249,16250,16251,16252,16253,16254,16255,16256,16257,16258,16259,16260,16261,16262,16263,16264,16265,16266,16267,16268,16269,16270,16271,16272,16273,16274,16275,16276,16277,16278,16279,16280,16281,16282,16283,16284,16285,16286,16287,16288,16289,16290,16291,16292,16293,16294,16295,16296,16297,16298,16299,16300,16301,16302,16303,16304,16305,16306,16307,16308,16309,16310,16311,16312,16313,16314,16315,16316,16317,16318,16319,16320,16321,16322,16323,16324,16325,16326,16327,16328,16329,16330,16331,16332,16333,16334,16335,16336,16337,16338,16339,16340,16341,16342,16343,16344,16345,16346,16347,16348,16349,16350,16351,16352,16353,16354,16355,16356,16357,16358,16359,16360,16361,16362,16363,16364,16365,16366,16367,16368,16369,16370,16371,16372,16373,16374,16375,16376,16377,16378,16379,16380,16381,16382,16383,16384,16385,16386,16387,16388,16389,16390,16391,16392,16393,16394,16395,16396,16397,16398,16399,16400,16401,16402,16403,16404,16405,16406,16407,16408,16409,16410,16411,16412,16413,16414,16415,16416'/>
+  </group>
+  <group name='303'>
+    <ids val='16417,16418,16419,16420,16421,16422,16423,16424,16425,16426,16427,16428,16429,16430,16431,16432,16433,16434,16435,16436,16437,16438,16439,16440,16441,16442,16443,16444,16445,16446,16447,16448,16449,16450,16451,16452,16453,16454,16455,16456,16457,16458,16459,16460,16461,16462,16463,16464,16465,16466,16467,16468,16469,16470,16471,16472,16473,16474,16475,16476,16477,16478,16479,16480,16481,16482,16483,16484,16485,16486,16487,16488,16489,16490,16491,16492,16493,16494,16495,16496,16497,16498,16499,16500,16501,16502,16503,16504,16505,16506,16507,16508,16509,16510,16511,16512,16513,16514,16515,16516,16517,16518,16519,16520,16521,16522,16523,16524,16525,16526,16527,16528,16529,16530,16531,16532,16533,16534,16535,16536,16537,16538,16539,16540,16541,16542,16543,16544,16545,16546,16547,16548,16549,16550,16551,16552,16553,16554,16555,16556,16557,16558,16559,16560,16561,16562,16563,16564,16565,16566,16567,16568,16569,16570,16571,16572,16573,16574,16575,16576,16577,16578,16579,16580,16581,16582,16583,16584,16585,16586,16587,16588,16589,16590,16591,16592,16593,16594,16595,16596,16597,16598,16599,16600,16601,16602,16603,16604,16605,16606,16607,16608,16609,16610,16611,16612,16613,16614,16615,16616,16617,16618,16619,16620,16621,16622,16623,16624,16625,16626,16627,16628,16629,16630,16631,16632,16633,16634,16635,16636,16637,16638,16639,16640,16641,16642,16643,16644,16645,16646,16647,16648,16649,16650,16651,16652,16653,16654,16655,16656,16657,16658,16659,16660,16661,16662,16663,16664,16665,16666,16667,16668,16669,16670,16671,16672,16673,16674,16675,16676,16677,16678,16679,16680,16681,16682,16683,16684,16685,16686,16687,16688,16689,16690,16691,16692,16693,16694,16695,16696,16697,16698,16699,16700,16701,16702,16703,16704,16705,16706,16707,16708,16709,16710,16711,16712,16713,16714,16715,16716,16717,16718,16719,16720'/>
+  </group>
+  <group name='303'>
+    <ids val='16721,16722,16723,16724,16725,16726,16727,16728,16729,16730,16731,16732,16733,16734,16735,16736,16737,16738,16739,16740,16741,16742,16743,16744,16745,16746,16747,16748,16749,16750,16751,16752,16753,16754,16755,16756,16757,16758,16759,16760,16761,16762,16763,16764,16765,16766,16767,16768,16769,16770,16771,16772,16773,16774,16775,16776,16777,16778,16779,16780,16781,16782,16783,16784,16785,16786,16787,16788,16789,16790,16791,16792,16793,16794,16795,16796,16797,16798,16799,16800,16801,16802,16803,16804,16805,16806,16807,16808,16809,16810,16811,16812,16813,16814,16815,16816,16817,16818,16819,16820,16821,16822,16823,16824,16825,16826,16827,16828,16829,16830,16831,16832,16833,16834,16835,16836,16837,16838,16839,16840,16841,16842,16843,16844,16845,16846,16847,16848,16849,16850,16851,16852,16853,16854,16855,16856,16857,16858,16859,16860,16861,16862,16863,16864,16865,16866,16867,16868,16869,16870,16871,16872,16873,16874,16875,16876,16877,16878,16879,16880,16881,16882,16883,16884,16885,16886,16887,16888,16889,16890,16891,16892,16893,16894,16895,16896,16897,16898,16899,16900,16901,16902,16903,16904,16905,16906,16907,16908,16909,16910,16911,16912,16913,16914,16915,16916,16917,16918,16919,16920,16921,16922,16923,16924,16925,16926,16927,16928,16929,16930,16931,16932,16933,16934,16935,16936,16937,16938,16939,16940,16941,16942,16943,16944,16945,16946,16947,16948,16949,16950,16951,16952,16953,16954,16955,16956,16957,16958,16959,16960,16961,16962,16963,16964,16965,16966,16967,16968,16969,16970,16971,16972,16973,16974,16975,16976,16977,16978,16979,16980,16981,16982,16983,16984,16985,16986,16987,16988,16989,16990,16991,16992,16993,16994,16995,16996,16997,16998,16999,17000,17001,17002,17003,17004,17005,17006,17007,17008,17009,17010,17011,17012,17013,17014,17015,17016,17017,17018,17019,17020,17021,17022,17023,17024'/>
+  </group>
+  <group name='303'>
+    <ids val='17025,17026,17027,17028,17029,17030,17031,17032,17033,17034,17035,17036,17037,17038,17039,17040,17041,17042,17043,17044,17045,17046,17047,17048,17049,17050,17051,17052,17053,17054,17055,17056,17057,17058,17059,17060,17061,17062,17063,17064,17065,17066,17067,17068,17069,17070,17071,17072,17073,17074,17075,17076,17077,17078,17079,17080,17081,17082,17083,17084,17085,17086,17087,17088,17089,17090,17091,17092,17093,17094,17095,17096,17097,17098,17099,17100,17101,17102,17103,17104,17105,17106,17107,17108,17109,17110,17111,17112,17113,17114,17115,17116,17117,17118,17119,17120,17121,17122,17123,17124,17125,17126,17127,17128,17129,17130,17131,17132,17133,17134,17135,17136,17137,17138,17139,17140,17141,17142,17143,17144,17145,17146,17147,17148,17149,17150,17151,17152,17153,17154,17155,17156,17157,17158,17159,17160,17161,17162,17163,17164,17165,17166,17167,17168,17169,17170,17171,17172,17173,17174,17175,17176,17177,17178,17179,17180,17181,17182,17183,17184,17185,17186,17187,17188,17189,17190,17191,17192,17193,17194,17195,17196,17197,17198,17199,17200,17201,17202,17203,17204,17205,17206,17207,17208,17209,17210,17211,17212,17213,17214,17215,17216,17217,17218,17219,17220,17221,17222,17223,17224,17225,17226,17227,17228,17229,17230,17231,17232,17233,17234,17235,17236,17237,17238,17239,17240,17241,17242,17243,17244,17245,17246,17247,17248,17249,17250,17251,17252,17253,17254,17255,17256,17257,17258,17259,17260,17261,17262,17263,17264,17265,17266,17267,17268,17269,17270,17271,17272,17273,17274,17275,17276,17277,17278,17279,17280,17281,17282,17283,17284,17285,17286,17287,17288,17289,17290,17291,17292,17293,17294,17295,17296,17297,17298,17299,17300,17301,17302,17303,17304,17305,17306,17307,17308,17309,17310,17311,17312,17313,17314,17315,17316,17317,17318,17319,17320,17321,17322,17323,17324,17325,17326,17327,17328'/>
+  </group>
+  <group name='303'>
+    <ids val='17329,17330,17331,17332,17333,17334,17335,17336,17337,17338,17339,17340,17341,17342,17343,17344,17345,17346,17347,17348,17349,17350,17351,17352,17353,17354,17355,17356,17357,17358,17359,17360,17361,17362,17363,17364,17365,17366,17367,17368,17369,17370,17371,17372,17373,17374,17375,17376,17377,17378,17379,17380,17381,17382,17383,17384,17385,17386,17387,17388,17389,17390,17391,17392,17393,17394,17395,17396,17397,17398,17399,17400,17401,17402,17403,17404,17405,17406,17407,17408,17409,17410,17411,17412,17413,17414,17415,17416,17417,17418,17419,17420,17421,17422,17423,17424,17425,17426,17427,17428,17429,17430,17431,17432,17433,17434,17435,17436,17437,17438,17439,17440,17441,17442,17443,17444,17445,17446,17447,17448,17449,17450,17451,17452,17453,17454,17455,17456,17457,17458,17459,17460,17461,17462,17463,17464,17465,17466,17467,17468,17469,17470,17471,17472,17473,17474,17475,17476,17477,17478,17479,17480,17481,17482,17483,17484,17485,17486,17487,17488,17489,17490,17491,17492,17493,17494,17495,17496,17497,17498,17499,17500,17501,17502,17503,17504,17505,17506,17507,17508,17509,17510,17511,17512,17513,17514,17515,17516,17517,17518,17519,17520,17521,17522,17523,17524,17525,17526,17527,17528,17529,17530,17531,17532,17533,17534,17535,17536,17537,17538,17539,17540,17541,17542,17543,17544,17545,17546,17547,17548,17549,17550,17551,17552,17553,17554,17555,17556,17557,17558,17559,17560,17561,17562,17563,17564,17565,17566,17567,17568,17569,17570,17571,17572,17573,17574,17575,17576,17577,17578,17579,17580,17581,17582,17583,17584,17585,17586,17587,17588,17589,17590,17591,17592,17593,17594,17595,17596,17597,17598,17599,17600,17601,17602,17603,17604,17605,17606,17607,17608,17609,17610,17611,17612,17613,17614,17615,17616,17617,17618,17619,17620,17621,17622,17623,17624,17625,17626,17627,17628,17629,17630,17631,17632'/>
+  </group>
+  <group name='303'>
+    <ids val='17633,17634,17635,17636,17637,17638,17639,17640,17641,17642,17643,17644,17645,17646,17647,17648,17649,17650,17651,17652,17653,17654,17655,17656,17657,17658,17659,17660,17661,17662,17663,17664,17665,17666,17667,17668,17669,17670,17671,17672,17673,17674,17675,17676,17677,17678,17679,17680,17681,17682,17683,17684,17685,17686,17687,17688,17689,17690,17691,17692,17693,17694,17695,17696,17697,17698,17699,17700,17701,17702,17703,17704,17705,17706,17707,17708,17709,17710,17711,17712,17713,17714,17715,17716,17717,17718,17719,17720,17721,17722,17723,17724,17725,17726,17727,17728,17729,17730,17731,17732,17733,17734,17735,17736,17737,17738,17739,17740,17741,17742,17743,17744,17745,17746,17747,17748,17749,17750,17751,17752,17753,17754,17755,17756,17757,17758,17759,17760,17761,17762,17763,17764,17765,17766,17767,17768,17769,17770,17771,17772,17773,17774,17775,17776,17777,17778,17779,17780,17781,17782,17783,17784,17785,17786,17787,17788,17789,17790,17791,17792,17793,17794,17795,17796,17797,17798,17799,17800,17801,17802,17803,17804,17805,17806,17807,17808,17809,17810,17811,17812,17813,17814,17815,17816,17817,17818,17819,17820,17821,17822,17823,17824,17825,17826,17827,17828,17829,17830,17831,17832,17833,17834,17835,17836,17837,17838,17839,17840,17841,17842,17843,17844,17845,17846,17847,17848,17849,17850,17851,17852,17853,17854,17855,17856,17857,17858,17859,17860,17861,17862,17863,17864,17865,17866,17867,17868,17869,17870,17871,17872,17873,17874,17875,17876,17877,17878,17879,17880,17881,17882,17883,17884,17885,17886,17887,17888,17889,17890,17891,17892,17893,17894,17895,17896,17897,17898,17899,17900,17901,17902,17903,17904,17905,17906,17907,17908,17909,17910,17911,17912,17913,17914,17915,17916,17917,17918,17919,17920,17921,17922,17923,17924,17925,17926,17927,17928,17929,17930,17931,17932,17933,17934,17935,17936'/>
+  </group>
+  <group name='303'>
+    <ids val='17937,17938,17939,17940,17941,17942,17943,17944,17945,17946,17947,17948,17949,17950,17951,17952,17953,17954,17955,17956,17957,17958,17959,17960,17961,17962,17963,17964,17965,17966,17967,17968,17969,17970,17971,17972,17973,17974,17975,17976,17977,17978,17979,17980,17981,17982,17983,17984,17985,17986,17987,17988,17989,17990,17991,17992,17993,17994,17995,17996,17997,17998,17999,18000,18001,18002,18003,18004,18005,18006,18007,18008,18009,18010,18011,18012,18013,18014,18015,18016,18017,18018,18019,18020,18021,18022,18023,18024,18025,18026,18027,18028,18029,18030,18031,18032,18033,18034,18035,18036,18037,18038,18039,18040,18041,18042,18043,18044,18045,18046,18047,18048,18049,18050,18051,18052,18053,18054,18055,18056,18057,18058,18059,18060,18061,18062,18063,18064,18065,18066,18067,18068,18069,18070,18071,18072,18073,18074,18075,18076,18077,18078,18079,18080,18081,18082,18083,18084,18085,18086,18087,18088,18089,18090,18091,18092,18093,18094,18095,18096,18097,18098,18099,18100,18101,18102,18103,18104,18105,18106,18107,18108,18109,18110,18111,18112,18113,18114,18115,18116,18117,18118,18119,18120,18121,18122,18123,18124,18125,18126,18127,18128,18129,18130,18131,18132,18133,18134,18135,18136,18137,18138,18139,18140,18141,18142,18143,18144,18145,18146,18147,18148,18149,18150,18151,18152,18153,18154,18155,18156,18157,18158,18159,18160,18161,18162,18163,18164,18165,18166,18167,18168,18169,18170,18171,18172,18173,18174,18175,18176,18177,18178,18179,18180,18181,18182,18183,18184,18185,18186,18187,18188,18189,18190,18191,18192,18193,18194,18195,18196,18197,18198,18199,18200,18201,18202,18203,18204,18205,18206,18207,18208,18209,18210,18211,18212,18213,18214,18215,18216,18217,18218,18219,18220,18221,18222,18223,18224,18225,18226,18227,18228,18229,18230,18231,18232,18233,18234,18235,18236,18237,18238,18239,18240'/>
+  </group>
+  <group name='303'>
+    <ids val='18241,18242,18243,18244,18245,18246,18247,18248,18249,18250,18251,18252,18253,18254,18255,18256,18257,18258,18259,18260,18261,18262,18263,18264,18265,18266,18267,18268,18269,18270,18271,18272,18273,18274,18275,18276,18277,18278,18279,18280,18281,18282,18283,18284,18285,18286,18287,18288,18289,18290,18291,18292,18293,18294,18295,18296,18297,18298,18299,18300,18301,18302,18303,18304,18305,18306,18307,18308,18309,18310,18311,18312,18313,18314,18315,18316,18317,18318,18319,18320,18321,18322,18323,18324,18325,18326,18327,18328,18329,18330,18331,18332,18333,18334,18335,18336,18337,18338,18339,18340,18341,18342,18343,18344,18345,18346,18347,18348,18349,18350,18351,18352,18353,18354,18355,18356,18357,18358,18359,18360,18361,18362,18363,18364,18365,18366,18367,18368,18369,18370,18371,18372,18373,18374,18375,18376,18377,18378,18379,18380,18381,18382,18383,18384,18385,18386,18387,18388,18389,18390,18391,18392,18393,18394,18395,18396,18397,18398,18399,18400,18401,18402,18403,18404,18405,18406,18407,18408,18409,18410,18411,18412,18413,18414,18415,18416,18417,18418,18419,18420,18421,18422,18423,18424,18425,18426,18427,18428,18429,18430,18431,18432,18433,18434,18435,18436,18437,18438,18439,18440,18441,18442,18443,18444,18445,18446,18447,18448,18449,18450,18451,18452,18453,18454,18455,18456,18457,18458,18459,18460,18461,18462,18463,18464,18465,18466,18467,18468,18469,18470,18471,18472,18473,18474,18475,18476,18477,18478,18479,18480,18481,18482,18483,18484,18485,18486,18487,18488,18489,18490,18491,18492,18493,18494,18495,18496,18497,18498,18499,18500,18501,18502,18503,18504,18505,18506,18507,18508,18509,18510,18511,18512,18513,18514,18515,18516,18517,18518,18519,18520,18521,18522,18523,18524,18525,18526,18527,18528,18529,18530,18531,18532,18533,18534,18535,18536,18537,18538,18539,18540,18541,18542,18543,18544'/>
+  </group>
+  <group name='303'>
+    <ids val='18545,18546,18547,18548,18549,18550,18551,18552,18553,18554,18555,18556,18557,18558,18559,18560,18561,18562,18563,18564,18565,18566,18567,18568,18569,18570,18571,18572,18573,18574,18575,18576,18577,18578,18579,18580,18581,18582,18583,18584,18585,18586,18587,18588,18589,18590,18591,18592,18593,18594,18595,18596,18597,18598,18599,18600,18601,18602,18603,18604,18605,18606,18607,18608,18609,18610,18611,18612,18613,18614,18615,18616,18617,18618,18619,18620,18621,18622,18623,18624,18625,18626,18627,18628,18629,18630,18631,18632,18633,18634,18635,18636,18637,18638,18639,18640,18641,18642,18643,18644,18645,18646,18647,18648,18649,18650,18651,18652,18653,18654,18655,18656,18657,18658,18659,18660,18661,18662,18663,18664,18665,18666,18667,18668,18669,18670,18671,18672,18673,18674,18675,18676,18677,18678,18679,18680,18681,18682,18683,18684,18685,18686,18687,18688,18689,18690,18691,18692,18693,18694,18695,18696,18697,18698,18699,18700,18701,18702,18703,18704,18705,18706,18707,18708,18709,18710,18711,18712,18713,18714,18715,18716,18717,18718,18719,18720,18721,18722,18723,18724,18725,18726,18727,18728,18729,18730,18731,18732,18733,18734,18735,18736,18737,18738,18739,18740,18741,18742,18743,18744,18745,18746,18747,18748,18749,18750,18751,18752,18753,18754,18755,18756,18757,18758,18759,18760,18761,18762,18763,18764,18765,18766,18767,18768,18769,18770,18771,18772,18773,18774,18775,18776,18777,18778,18779,18780,18781,18782,18783,18784,18785,18786,18787,18788,18789,18790,18791,18792,18793,18794,18795,18796,18797,18798,18799,18800,18801,18802,18803,18804,18805,18806,18807,18808,18809,18810,18811,18812,18813,18814,18815,18816,18817,18818,18819,18820,18821,18822,18823,18824,18825,18826,18827,18828,18829,18830,18831,18832,18833,18834,18835,18836,18837,18838,18839,18840,18841,18842,18843,18844,18845,18846,18847,18848'/>
+  </group>
+  <group name='303'>
+    <ids val='18849,18850,18851,18852,18853,18854,18855,18856,18857,18858,18859,18860,18861,18862,18863,18864,18865,18866,18867,18868,18869,18870,18871,18872,18873,18874,18875,18876,18877,18878,18879,18880,18881,18882,18883,18884,18885,18886,18887,18888,18889,18890,18891,18892,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,18904,18905,18906,18907,18908,18909,18910,18911,18912,18913,18914,18915,18916,18917,18918,18919,18920,18921,18922,18923,18924,18925,18926,18927,18928,18929,18930,18931,18932,18933,18934,18935,18936,18937,18938,18939,18940,18941,18942,18943,18944,18945,18946,18947,18948,18949,18950,18951,18952,18953,18954,18955,18956,18957,18958,18959,18960,18961,18962,18963,18964,18965,18966,18967,18968,18969,18970,18971,18972,18973,18974,18975,18976,18977,18978,18979,18980,18981,18982,18983,18984,18985,18986,18987,18988,18989,18990,18991,18992,18993,18994,18995,18996,18997,18998,18999,19000,19001,19002,19003,19004,19005,19006,19007,19008,19009,19010,19011,19012,19013,19014,19015,19016,19017,19018,19019,19020,19021,19022,19023,19024,19025,19026,19027,19028,19029,19030,19031,19032,19033,19034,19035,19036,19037,19038,19039,19040,19041,19042,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19053,19054,19055,19056,19057,19058,19059,19060,19061,19062,19063,19064,19065,19066,19067,19068,19069,19070,19071,19072,19073,19074,19075,19076,19077,19078,19079,19080,19081,19082,19083,19084,19085,19086,19087,19088,19089,19090,19091,19092,19093,19094,19095,19096,19097,19098,19099,19100,19101,19102,19103,19104,19105,19106,19107,19108,19109,19110,19111,19112,19113,19114,19115,19116,19117,19118,19119,19120,19121,19122,19123,19124,19125,19126,19127,19128,19129,19130,19131,19132,19133,19134,19135,19136,19137,19138,19139,19140,19141,19142,19143,19144,19145,19146,19147,19148,19149,19150,19151,19152'/>
+  </group>
+  <group name='303'>
+    <ids val='19153,19154,19155,19156,19157,19158,19159,19160,19161,19162,19163,19164,19165,19166,19167,19168,19169,19170,19171,19172,19173,19174,19175,19176,19177,19178,19179,19180,19181,19182,19183,19184,19185,19186,19187,19188,19189,19190,19191,19192,19193,19194,19195,19196,19197,19198,19199,19200,19201,19202,19203,19204,19205,19206,19207,19208,19209,19210,19211,19212,19213,19214,19215,19216,19217,19218,19219,19220,19221,19222,19223,19224,19225,19226,19227,19228,19229,19230,19231,19232,19233,19234,19235,19236,19237,19238,19239,19240,19241,19242,19243,19244,19245,19246,19247,19248,19249,19250,19251,19252,19253,19254,19255,19256,19257,19258,19259,19260,19261,19262,19263,19264,19265,19266,19267,19268,19269,19270,19271,19272,19273,19274,19275,19276,19277,19278,19279,19280,19281,19282,19283,19284,19285,19286,19287,19288,19289,19290,19291,19292,19293,19294,19295,19296,19297,19298,19299,19300,19301,19302,19303,19304,19305,19306,19307,19308,19309,19310,19311,19312,19313,19314,19315,19316,19317,19318,19319,19320,19321,19322,19323,19324,19325,19326,19327,19328,19329,19330,19331,19332,19333,19334,19335,19336,19337,19338,19339,19340,19341,19342,19343,19344,19345,19346,19347,19348,19349,19350,19351,19352,19353,19354,19355,19356,19357,19358,19359,19360,19361,19362,19363,19364,19365,19366,19367,19368,19369,19370,19371,19372,19373,19374,19375,19376,19377,19378,19379,19380,19381,19382,19383,19384,19385,19386,19387,19388,19389,19390,19391,19392,19393,19394,19395,19396,19397,19398,19399,19400,19401,19402,19403,19404,19405,19406,19407,19408,19409,19410,19411,19412,19413,19414,19415,19416,19417,19418,19419,19420,19421,19422,19423,19424,19425,19426,19427,19428,19429,19430,19431,19432,19433,19434,19435,19436,19437,19438,19439,19440,19441,19442,19443,19444,19445,19446,19447,19448,19449,19450,19451,19452,19453,19454,19455,19456'/>
+  </group>
+  <group name='303'>
+    <ids val='19457,19458,19459,19460,19461,19462,19463,19464,19465,19466,19467,19468,19469,19470,19471,19472,19473,19474,19475,19476,19477,19478,19479,19480,19481,19482,19483,19484,19485,19486,19487,19488,19489,19490,19491,19492,19493,19494,19495,19496,19497,19498,19499,19500,19501,19502,19503,19504,19505,19506,19507,19508,19509,19510,19511,19512,19513,19514,19515,19516,19517,19518,19519,19520,19521,19522,19523,19524,19525,19526,19527,19528,19529,19530,19531,19532,19533,19534,19535,19536,19537,19538,19539,19540,19541,19542,19543,19544,19545,19546,19547,19548,19549,19550,19551,19552,19553,19554,19555,19556,19557,19558,19559,19560,19561,19562,19563,19564,19565,19566,19567,19568,19569,19570,19571,19572,19573,19574,19575,19576,19577,19578,19579,19580,19581,19582,19583,19584,19585,19586,19587,19588,19589,19590,19591,19592,19593,19594,19595,19596,19597,19598,19599,19600,19601,19602,19603,19604,19605,19606,19607,19608,19609,19610,19611,19612,19613,19614,19615,19616,19617,19618,19619,19620,19621,19622,19623,19624,19625,19626,19627,19628,19629,19630,19631,19632,19633,19634,19635,19636,19637,19638,19639,19640,19641,19642,19643,19644,19645,19646,19647,19648,19649,19650,19651,19652,19653,19654,19655,19656,19657,19658,19659,19660,19661,19662,19663,19664,19665,19666,19667,19668,19669,19670,19671,19672,19673,19674,19675,19676,19677,19678,19679,19680,19681,19682,19683,19684,19685,19686,19687,19688,19689,19690,19691,19692,19693,19694,19695,19696,19697,19698,19699,19700,19701,19702,19703,19704,19705,19706,19707,19708,19709,19710,19711,19712,19713,19714,19715,19716,19717,19718,19719,19720,19721,19722,19723,19724,19725,19726,19727,19728,19729,19730,19731,19732,19733,19734,19735,19736,19737,19738,19739,19740,19741,19742,19743,19744,19745,19746,19747,19748,19749,19750,19751,19752,19753,19754,19755,19756,19757,19758,19759,19760'/>
+  </group>
+  <group name='303'>
+    <ids val='19761,19762,19763,19764,19765,19766,19767,19768,19769,19770,19771,19772,19773,19774,19775,19776,19777,19778,19779,19780,19781,19782,19783,19784,19785,19786,19787,19788,19789,19790,19791,19792,19793,19794,19795,19796,19797,19798,19799,19800,19801,19802,19803,19804,19805,19806,19807,19808,19809,19810,19811,19812,19813,19814,19815,19816,19817,19818,19819,19820,19821,19822,19823,19824,19825,19826,19827,19828,19829,19830,19831,19832,19833,19834,19835,19836,19837,19838,19839,19840,19841,19842,19843,19844,19845,19846,19847,19848,19849,19850,19851,19852,19853,19854,19855,19856,19857,19858,19859,19860,19861,19862,19863,19864,19865,19866,19867,19868,19869,19870,19871,19872,19873,19874,19875,19876,19877,19878,19879,19880,19881,19882,19883,19884,19885,19886,19887,19888,19889,19890,19891,19892,19893,19894,19895,19896,19897,19898,19899,19900,19901,19902,19903,19904,19905,19906,19907,19908,19909,19910,19911,19912,19913,19914,19915,19916,19917,19918,19919,19920,19921,19922,19923,19924,19925,19926,19927,19928,19929,19930,19931,19932,19933,19934,19935,19936,19937,19938,19939,19940,19941,19942,19943,19944,19945,19946,19947,19948,19949,19950,19951,19952,19953,19954,19955,19956,19957,19958,19959,19960,19961,19962,19963,19964,19965,19966,19967,19968,19969,19970,19971,19972,19973,19974,19975,19976,19977,19978,19979,19980,19981,19982,19983,19984,19985,19986,19987,19988,19989,19990,19991,19992,19993,19994,19995,19996,19997,19998,19999,20000,20001,20002,20003,20004,20005,20006,20007,20008,20009,20010,20011,20012,20013,20014,20015,20016,20017,20018,20019,20020,20021,20022,20023,20024,20025,20026,20027,20028,20029,20030,20031,20032,20033,20034,20035,20036,20037,20038,20039,20040,20041,20042,20043,20044,20045,20046,20047,20048,20049,20050,20051,20052,20053,20054,20055,20056,20057,20058,20059,20060,20061,20062,20063,20064'/>
+  </group>
+  <group name='303'>
+    <ids val='20065,20066,20067,20068,20069,20070,20071,20072,20073,20074,20075,20076,20077,20078,20079,20080,20081,20082,20083,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20094,20095,20096,20097,20098,20099,20100,20101,20102,20103,20104,20105,20106,20107,20108,20109,20110,20111,20112,20113,20114,20115,20116,20117,20118,20119,20120,20121,20122,20123,20124,20125,20126,20127,20128,20129,20130,20131,20132,20133,20134,20135,20136,20137,20138,20139,20140,20141,20142,20143,20144,20145,20146,20147,20148,20149,20150,20151,20152,20153,20154,20155,20156,20157,20158,20159,20160,20161,20162,20163,20164,20165,20166,20167,20168,20169,20170,20171,20172,20173,20174,20175,20176,20177,20178,20179,20180,20181,20182,20183,20184,20185,20186,20187,20188,20189,20190,20191,20192,20193,20194,20195,20196,20197,20198,20199,20200,20201,20202,20203,20204,20205,20206,20207,20208,20209,20210,20211,20212,20213,20214,20215,20216,20217,20218,20219,20220,20221,20222,20223,20224,20225,20226,20227,20228,20229,20230,20231,20232,20233,20234,20235,20236,20237,20238,20239,20240,20241,20242,20243,20244,20245,20246,20247,20248,20249,20250,20251,20252,20253,20254,20255,20256,20257,20258,20259,20260,20261,20262,20263,20264,20265,20266,20267,20268,20269,20270,20271,20272,20273,20274,20275,20276,20277,20278,20279,20280,20281,20282,20283,20284,20285,20286,20287,20288,20289,20290,20291,20292,20293,20294,20295,20296,20297,20298,20299,20300,20301,20302,20303,20304,20305,20306,20307,20308,20309,20310,20311,20312,20313,20314,20315,20316,20317,20318,20319,20320,20321,20322,20323,20324,20325,20326,20327,20328,20329,20330,20331,20332,20333,20334,20335,20336,20337,20338,20339,20340,20341,20342,20343,20344,20345,20346,20347,20348,20349,20350,20351,20352,20353,20354,20355,20356,20357,20358,20359,20360,20361,20362,20363,20364,20365,20366,20367,20368'/>
+  </group>
+  <group name='303'>
+    <ids val='20369,20370,20371,20372,20373,20374,20375,20376,20377,20378,20379,20380,20381,20382,20383,20384,20385,20386,20387,20388,20389,20390,20391,20392,20393,20394,20395,20396,20397,20398,20399,20400,20401,20402,20403,20404,20405,20406,20407,20408,20409,20410,20411,20412,20413,20414,20415,20416,20417,20418,20419,20420,20421,20422,20423,20424,20425,20426,20427,20428,20429,20430,20431,20432,20433,20434,20435,20436,20437,20438,20439,20440,20441,20442,20443,20444,20445,20446,20447,20448,20449,20450,20451,20452,20453,20454,20455,20456,20457,20458,20459,20460,20461,20462,20463,20464,20465,20466,20467,20468,20469,20470,20471,20472,20473,20474,20475,20476,20477,20478,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20492,20493,20494,20495,20496,20497,20498,20499,20500,20501,20502,20503,20504,20505,20506,20507,20508,20509,20510,20511,20512,20513,20514,20515,20516,20517,20518,20519,20520,20521,20522,20523,20524,20525,20526,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20538,20539,20540,20541,20542,20543,20544,20545,20546,20547,20548,20549,20550,20551,20552,20553,20554,20555,20556,20557,20558,20559,20560,20561,20562,20563,20564,20565,20566,20567,20568,20569,20570,20571,20572,20573,20574,20575,20576,20577,20578,20579,20580,20581,20582,20583,20584,20585,20586,20587,20588,20589,20590,20591,20592,20593,20594,20595,20596,20597,20598,20599,20600,20601,20602,20603,20604,20605,20606,20607,20608,20609,20610,20611,20612,20613,20614,20615,20616,20617,20618,20619,20620,20621,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20643,20644,20645,20646,20647,20648,20649,20650,20651,20652,20653,20654,20655,20656,20657,20658,20659,20660,20661,20662,20663,20664,20665,20666,20667,20668,20669,20670,20671,20672'/>
+  </group>
+  <group name='303'>
+    <ids val='20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20687,20688,20689,20690,20691,20692,20693,20694,20695,20696,20697,20698,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20710,20711,20712,20713,20714,20715,20716,20717,20718,20719,20720,20721,20722,20723,20724,20725,20726,20727,20728,20729,20730,20731,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20742,20743,20744,20745,20746,20747,20748,20749,20750,20751,20752,20753,20754,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20769,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20799,20800,20801,20802,20803,20804,20805,20806,20807,20808,20809,20810,20811,20812,20813,20814,20815,20816,20817,20818,20819,20820,20821,20822,20823,20824,20825,20826,20827,20828,20829,20830,20831,20832,20833,20834,20835,20836,20837,20838,20839,20840,20841,20842,20843,20844,20845,20846,20847,20848,20849,20850,20851,20852,20853,20854,20855,20856,20857,20858,20859,20860,20861,20862,20863,20864,20865,20866,20867,20868,20869,20870,20871,20872,20873,20874,20875,20876,20877,20878,20879,20880,20881,20882,20883,20884,20885,20886,20887,20888,20889,20890,20891,20892,20893,20894,20895,20896,20897,20898,20899,20900,20901,20902,20903,20904,20905,20906,20907,20908,20909,20910,20911,20912,20913,20914,20915,20916,20917,20918,20919,20920,20921,20922,20923,20924,20925,20926,20927,20928,20929,20930,20931,20932,20933,20934,20935,20936,20937,20938,20939,20940,20941,20942,20943,20944,20945,20946,20947,20948,20949,20950,20951,20952,20953,20954,20955,20956,20957,20958,20959,20960,20961,20962,20963,20964,20965,20966,20967,20968,20969,20970,20971,20972,20973,20974,20975,20976'/>
+  </group>
+  <group name='303'>
+    <ids val='20977,20978,20979,20980,20981,20982,20983,20984,20985,20986,20987,20988,20989,20990,20991,20992,20993,20994,20995,20996,20997,20998,20999,21000,21001,21002,21003,21004,21005,21006,21007,21008,21009,21010,21011,21012,21013,21014,21015,21016,21017,21018,21019,21020,21021,21022,21023,21024,21025,21026,21027,21028,21029,21030,21031,21032,21033,21034,21035,21036,21037,21038,21039,21040,21041,21042,21043,21044,21045,21046,21047,21048,21049,21050,21051,21052,21053,21054,21055,21056,21057,21058,21059,21060,21061,21062,21063,21064,21065,21066,21067,21068,21069,21070,21071,21072,21073,21074,21075,21076,21077,21078,21079,21080,21081,21082,21083,21084,21085,21086,21087,21088,21089,21090,21091,21092,21093,21094,21095,21096,21097,21098,21099,21100,21101,21102,21103,21104,21105,21106,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21117,21118,21119,21120,21121,21122,21123,21124,21125,21126,21127,21128,21129,21130,21131,21132,21133,21134,21135,21136,21137,21138,21139,21140,21141,21142,21143,21144,21145,21146,21147,21148,21149,21150,21151,21152,21153,21154,21155,21156,21157,21158,21159,21160,21161,21162,21163,21164,21165,21166,21167,21168,21169,21170,21171,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21182,21183,21184,21185,21186,21187,21188,21189,21190,21191,21192,21193,21194,21195,21196,21197,21198,21199,21200,21201,21202,21203,21204,21205,21206,21207,21208,21209,21210,21211,21212,21213,21214,21215,21216,21217,21218,21219,21220,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21232,21233,21234,21235,21236,21237,21238,21239,21240,21241,21242,21243,21244,21245,21246,21247,21248,21249,21250,21251,21252,21253,21254,21255,21256,21257,21258,21259,21260,21261,21262,21263,21264,21265,21266,21267,21268,21269,21270,21271,21272,21273,21274,21275,21276,21277,21278,21279,21280'/>
+  </group>
+  <group name='303'>
+    <ids val='21281,21282,21283,21284,21285,21286,21287,21288,21289,21290,21291,21292,21293,21294,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21305,21306,21307,21308,21309,21310,21311,21312,21313,21314,21315,21316,21317,21318,21319,21320,21321,21322,21323,21324,21325,21326,21327,21328,21329,21330,21331,21332,21333,21334,21335,21336,21337,21338,21339,21340,21341,21342,21343,21344,21345,21346,21347,21348,21349,21350,21351,21352,21353,21354,21355,21356,21357,21358,21359,21360,21361,21362,21363,21364,21365,21366,21367,21368,21369,21370,21371,21372,21373,21374,21375,21376,21377,21378,21379,21380,21381,21382,21383,21384,21385,21386,21387,21388,21389,21390,21391,21392,21393,21394,21395,21396,21397,21398,21399,21400,21401,21402,21403,21404,21405,21406,21407,21408,21409,21410,21411,21412,21413,21414,21415,21416,21417,21418,21419,21420,21421,21422,21423,21424,21425,21426,21427,21428,21429,21430,21431,21432,21433,21434,21435,21436,21437,21438,21439,21440,21441,21442,21443,21444,21445,21446,21447,21448,21449,21450,21451,21452,21453,21454,21455,21456,21457,21458,21459,21460,21461,21462,21463,21464,21465,21466,21467,21468,21469,21470,21471,21472,21473,21474,21475,21476,21477,21478,21479,21480,21481,21482,21483,21484,21485,21486,21487,21488,21489,21490,21491,21492,21493,21494,21495,21496,21497,21498,21499,21500,21501,21502,21503,21504,21505,21506,21507,21508,21509,21510,21511,21512,21513,21514,21515,21516,21517,21518,21519,21520,21521,21522,21523,21524,21525,21526,21527,21528,21529,21530,21531,21532,21533,21534,21535,21536,21537,21538,21539,21540,21541,21542,21543,21544,21545,21546,21547,21548,21549,21550,21551,21552,21553,21554,21555,21556,21557,21558,21559,21560,21561,21562,21563,21564,21565,21566,21567,21568,21569,21570,21571,21572,21573,21574,21575,21576,21577,21578,21579,21580,21581,21582,21583,21584'/>
+  </group>
+  <group name='303'>
+    <ids val='21585,21586,21587,21588,21589,21590,21591,21592,21593,21594,21595,21596,21597,21598,21599,21600,21601,21602,21603,21604,21605,21606,21607,21608,21609,21610,21611,21612,21613,21614,21615,21616,21617,21618,21619,21620,21621,21622,21623,21624,21625,21626,21627,21628,21629,21630,21631,21632,21633,21634,21635,21636,21637,21638,21639,21640,21641,21642,21643,21644,21645,21646,21647,21648,21649,21650,21651,21652,21653,21654,21655,21656,21657,21658,21659,21660,21661,21662,21663,21664,21665,21666,21667,21668,21669,21670,21671,21672,21673,21674,21675,21676,21677,21678,21679,21680,21681,21682,21683,21684,21685,21686,21687,21688,21689,21690,21691,21692,21693,21694,21695,21696,21697,21698,21699,21700,21701,21702,21703,21704,21705,21706,21707,21708,21709,21710,21711,21712,21713,21714,21715,21716,21717,21718,21719,21720,21721,21722,21723,21724,21725,21726,21727,21728,21729,21730,21731,21732,21733,21734,21735,21736,21737,21738,21739,21740,21741,21742,21743,21744,21745,21746,21747,21748,21749,21750,21751,21752,21753,21754,21755,21756,21757,21758,21759,21760,21761,21762,21763,21764,21765,21766,21767,21768,21769,21770,21771,21772,21773,21774,21775,21776,21777,21778,21779,21780,21781,21782,21783,21784,21785,21786,21787,21788,21789,21790,21791,21792,21793,21794,21795,21796,21797,21798,21799,21800,21801,21802,21803,21804,21805,21806,21807,21808,21809,21810,21811,21812,21813,21814,21815,21816,21817,21818,21819,21820,21821,21822,21823,21824,21825,21826,21827,21828,21829,21830,21831,21832,21833,21834,21835,21836,21837,21838,21839,21840,21841,21842,21843,21844,21845,21846,21847,21848,21849,21850,21851,21852,21853,21854,21855,21856,21857,21858,21859,21860,21861,21862,21863,21864,21865,21866,21867,21868,21869,21870,21871,21872,21873,21874,21875,21876,21877,21878,21879,21880,21881,21882,21883,21884,21885,21886,21887,21888'/>
+  </group>
+  <group name='303'>
+    <ids val='21889,21890,21891,21892,21893,21894,21895,21896,21897,21898,21899,21900,21901,21902,21903,21904,21905,21906,21907,21908,21909,21910,21911,21912,21913,21914,21915,21916,21917,21918,21919,21920,21921,21922,21923,21924,21925,21926,21927,21928,21929,21930,21931,21932,21933,21934,21935,21936,21937,21938,21939,21940,21941,21942,21943,21944,21945,21946,21947,21948,21949,21950,21951,21952,21953,21954,21955,21956,21957,21958,21959,21960,21961,21962,21963,21964,21965,21966,21967,21968,21969,21970,21971,21972,21973,21974,21975,21976,21977,21978,21979,21980,21981,21982,21983,21984,21985,21986,21987,21988,21989,21990,21991,21992,21993,21994,21995,21996,21997,21998,21999,22000,22001,22002,22003,22004,22005,22006,22007,22008,22009,22010,22011,22012,22013,22014,22015,22016,22017,22018,22019,22020,22021,22022,22023,22024,22025,22026,22027,22028,22029,22030,22031,22032,22033,22034,22035,22036,22037,22038,22039,22040,22041,22042,22043,22044,22045,22046,22047,22048,22049,22050,22051,22052,22053,22054,22055,22056,22057,22058,22059,22060,22061,22062,22063,22064,22065,22066,22067,22068,22069,22070,22071,22072,22073,22074,22075,22076,22077,22078,22079,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22092,22093,22094,22095,22096,22097,22098,22099,22100,22101,22102,22103,22104,22105,22106,22107,22108,22109,22110,22111,22112,22113,22114,22115,22116,22117,22118,22119,22120,22121,22122,22123,22124,22125,22126,22127,22128,22129,22130,22131,22132,22133,22134,22135,22136,22137,22138,22139,22140,22141,22142,22143,22144,22145,22146,22147,22148,22149,22150,22151,22152,22153,22154,22155,22156,22157,22158,22159,22160,22161,22162,22163,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22179,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22191,22192'/>
+  </group>
+  <group name='303'>
+    <ids val='22193,22194,22195,22196,22197,22198,22199,22200,22201,22202,22203,22204,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22218,22219,22220,22221,22222,22223,22224,22225,22226,22227,22228,22229,22230,22231,22232,22233,22234,22235,22236,22237,22238,22239,22240,22241,22242,22243,22244,22245,22246,22247,22248,22249,22250,22251,22252,22253,22254,22255,22256,22257,22258,22259,22260,22261,22262,22263,22264,22265,22266,22267,22268,22269,22270,22271,22272,22273,22274,22275,22276,22277,22278,22279,22280,22281,22282,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22300,22301,22302,22303,22304,22305,22306,22307,22308,22309,22310,22311,22312,22313,22314,22315,22316,22317,22318,22319,22320,22321,22322,22323,22324,22325,22326,22327,22328,22329,22330,22331,22332,22333,22334,22335,22336,22337,22338,22339,22340,22341,22342,22343,22344,22345,22346,22347,22348,22349,22350,22351,22352,22353,22354,22355,22356,22357,22358,22359,22360,22361,22362,22363,22364,22365,22366,22367,22368,22369,22370,22371,22372,22373,22374,22375,22376,22377,22378,22379,22380,22381,22382,22383,22384,22385,22386,22387,22388,22389,22390,22391,22392,22393,22394,22395,22396,22397,22398,22399,22400,22401,22402,22403,22404,22405,22406,22407,22408,22409,22410,22411,22412,22413,22414,22415,22416,22417,22418,22419,22420,22421,22422,22423,22424,22425,22426,22427,22428,22429,22430,22431,22432,22433,22434,22435,22436,22437,22438,22439,22440,22441,22442,22443,22444,22445,22446,22447,22448,22449,22450,22451,22452,22453,22454,22455,22456,22457,22458,22459,22460,22461,22462,22463,22464,22465,22466,22467,22468,22469,22470,22471,22472,22473,22474,22475,22476,22477,22478,22479,22480,22481,22482,22483,22484,22485,22486,22487,22488,22489,22490,22491,22492,22493,22494,22495,22496'/>
+  </group>
+  <group name='303'>
+    <ids val='22497,22498,22499,22500,22501,22502,22503,22504,22505,22506,22507,22508,22509,22510,22511,22512,22513,22514,22515,22516,22517,22518,22519,22520,22521,22522,22523,22524,22525,22526,22527,22528,22529,22530,22531,22532,22533,22534,22535,22536,22537,22538,22539,22540,22541,22542,22543,22544,22545,22546,22547,22548,22549,22550,22551,22552,22553,22554,22555,22556,22557,22558,22559,22560,22561,22562,22563,22564,22565,22566,22567,22568,22569,22570,22571,22572,22573,22574,22575,22576,22577,22578,22579,22580,22581,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22596,22597,22598,22599,22600,22601,22602,22603,22604,22605,22606,22607,22608,22609,22610,22611,22612,22613,22614,22615,22616,22617,22618,22619,22620,22621,22622,22623,22624,22625,22626,22627,22628,22629,22630,22631,22632,22633,22634,22635,22636,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22654,22655,22656,22657,22658,22659,22660,22661,22662,22663,22664,22665,22666,22667,22668,22669,22670,22671,22672,22673,22674,22675,22676,22677,22678,22679,22680,22681,22682,22683,22684,22685,22686,22687,22688,22689,22690,22691,22692,22693,22694,22695,22696,22697,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22716,22717,22718,22719,22720,22721,22722,22723,22724,22725,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22737,22738,22739,22740,22741,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22756,22757,22758,22759,22760,22761,22762,22763,22764,22765,22766,22767,22768,22769,22770,22771,22772,22773,22774,22775,22776,22777,22778,22779,22780,22781,22782,22783,22784,22785,22786,22787,22788,22789,22790,22791,22792,22793,22794,22795,22796,22797,22798,22799,22800'/>
+  </group>
+  <group name='303'>
+    <ids val='22801,22802,22803,22804,22805,22806,22807,22808,22809,22810,22811,22812,22813,22814,22815,22816,22817,22818,22819,22820,22821,22822,22823,22824,22825,22826,22827,22828,22829,22830,22831,22832,22833,22834,22835,22836,22837,22838,22839,22840,22841,22842,22843,22844,22845,22846,22847,22848,22849,22850,22851,22852,22853,22854,22855,22856,22857,22858,22859,22860,22861,22862,22863,22864,22865,22866,22867,22868,22869,22870,22871,22872,22873,22874,22875,22876,22877,22878,22879,22880,22881,22882,22883,22884,22885,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22899,22900,22901,22902,22903,22904,22905,22906,22907,22908,22909,22910,22911,22912,22913,22914,22915,22916,22917,22918,22919,22920,22921,22922,22923,22924,22925,22926,22927,22928,22929,22930,22931,22932,22933,22934,22935,22936,22937,22938,22939,22940,22941,22942,22943,22944,22945,22946,22947,22948,22949,22950,22951,22952,22953,22954,22955,22956,22957,22958,22959,22960,22961,22962,22963,22964,22965,22966,22967,22968,22969,22970,22971,22972,22973,22974,22975,22976,22977,22978,22979,22980,22981,22982,22983,22984,22985,22986,22987,22988,22989,22990,22991,22992,22993,22994,22995,22996,22997,22998,22999,23000,23001,23002,23003,23004,23005,23006,23007,23008,23009,23010,23011,23012,23013,23014,23015,23016,23017,23018,23019,23020,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23033,23034,23035,23036,23037,23038,23039,23040,23041,23042,23043,23044,23045,23046,23047,23048,23049,23050,23051,23052,23053,23054,23055,23056,23057,23058,23059,23060,23061,23062,23063,23064,23065,23066,23067,23068,23069,23070,23071,23072,23073,23074,23075,23076,23077,23078,23079,23080,23081,23082,23083,23084,23085,23086,23087,23088,23089,23090,23091,23092,23093,23094,23095,23096,23097,23098,23099,23100,23101,23102,23103,23104'/>
+  </group>
+  <group name='303'>
+    <ids val='23105,23106,23107,23108,23109,23110,23111,23112,23113,23114,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23125,23126,23127,23128,23129,23130,23131,23132,23133,23134,23135,23136,23137,23138,23139,23140,23141,23142,23143,23144,23145,23146,23147,23148,23149,23150,23151,23152,23153,23154,23155,23156,23157,23158,23159,23160,23161,23162,23163,23164,23165,23166,23167,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23186,23187,23188,23189,23190,23191,23192,23193,23194,23195,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23210,23211,23212,23213,23214,23215,23216,23217,23218,23219,23220,23221,23222,23223,23224,23225,23226,23227,23228,23229,23230,23231,23232,23233,23234,23235,23236,23237,23238,23239,23240,23241,23242,23243,23244,23245,23246,23247,23248,23249,23250,23251,23252,23253,23254,23255,23256,23257,23258,23259,23260,23261,23262,23263,23264,23265,23266,23267,23268,23269,23270,23271,23272,23273,23274,23275,23276,23277,23278,23279,23280,23281,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23305,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23318,23319,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23346,23347,23348,23349,23350,23351,23352,23353,23354,23355,23356,23357,23358,23359,23360,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23376,23377,23378,23379,23380,23381,23382,23383,23384,23385,23386,23387,23388,23389,23390,23391,23392,23393,23394,23395,23396,23397,23398,23399,23400,23401,23402,23403,23404,23405,23406,23407,23408'/>
+  </group>
+  <group name='303'>
+    <ids val='23409,23410,23411,23412,23413,23414,23415,23416,23417,23418,23419,23420,23421,23422,23423,23424,23425,23426,23427,23428,23429,23430,23431,23432,23433,23434,23435,23436,23437,23438,23439,23440,23441,23442,23443,23444,23445,23446,23447,23448,23449,23450,23451,23452,23453,23454,23455,23456,23457,23458,23459,23460,23461,23462,23463,23464,23465,23466,23467,23468,23469,23470,23471,23472,23473,23474,23475,23476,23477,23478,23479,23480,23481,23482,23483,23484,23485,23486,23487,23488,23489,23490,23491,23492,23493,23494,23495,23496,23497,23498,23499,23500,23501,23502,23503,23504,23505,23506,23507,23508,23509,23510,23511,23512,23513,23514,23515,23516,23517,23518,23519,23520,23521,23522,23523,23524,23525,23526,23527,23528,23529,23530,23531,23532,23533,23534,23535,23536,23537,23538,23539,23540,23541,23542,23543,23544,23545,23546,23547,23548,23549,23550,23551,23552,23553,23554,23555,23556,23557,23558,23559,23560,23561,23562,23563,23564,23565,23566,23567,23568,23569,23570,23571,23572,23573,23574,23575,23576,23577,23578,23579,23580,23581,23582,23583,23584,23585,23586,23587,23588,23589,23590,23591,23592,23593,23594,23595,23596,23597,23598,23599,23600,23601,23602,23603,23604,23605,23606,23607,23608,23609,23610,23611,23612,23613,23614,23615,23616,23617,23618,23619,23620,23621,23622,23623,23624,23625,23626,23627,23628,23629,23630,23631,23632,23633,23634,23635,23636,23637,23638,23639,23640,23641,23642,23643,23644,23645,23646,23647,23648,23649,23650,23651,23652,23653,23654,23655,23656,23657,23658,23659,23660,23661,23662,23663,23664,23665,23666,23667,23668,23669,23670,23671,23672,23673,23674,23675,23676,23677,23678,23679,23680,23681,23682,23683,23684,23685,23686,23687,23688,23689,23690,23691,23692,23693,23694,23695,23696,23697,23698,23699,23700,23701,23702,23703,23704,23705,23706,23707,23708,23709,23710,23711,23712'/>
+  </group>
+  <group name='303'>
+    <ids val='23713,23714,23715,23716,23717,23718,23719,23720,23721,23722,23723,23724,23725,23726,23727,23728,23729,23730,23731,23732,23733,23734,23735,23736,23737,23738,23739,23740,23741,23742,23743,23744,23745,23746,23747,23748,23749,23750,23751,23752,23753,23754,23755,23756,23757,23758,23759,23760,23761,23762,23763,23764,23765,23766,23767,23768,23769,23770,23771,23772,23773,23774,23775,23776,23777,23778,23779,23780,23781,23782,23783,23784,23785,23786,23787,23788,23789,23790,23791,23792,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23803,23804,23805,23806,23807,23808,23809,23810,23811,23812,23813,23814,23815,23816,23817,23818,23819,23820,23821,23822,23823,23824,23825,23826,23827,23828,23829,23830,23831,23832,23833,23834,23835,23836,23837,23838,23839,23840,23841,23842,23843,23844,23845,23846,23847,23848,23849,23850,23851,23852,23853,23854,23855,23856,23857,23858,23859,23860,23861,23862,23863,23864,23865,23866,23867,23868,23869,23870,23871,23872,23873,23874,23875,23876,23877,23878,23879,23880,23881,23882,23883,23884,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23896,23897,23898,23899,23900,23901,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23913,23914,23915,23916,23917,23918,23919,23920,23921,23922,23923,23924,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23938,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23961,23962,23963,23964,23965,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23991,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24005,24006,24007,24008,24009,24010,24011,24012,24013,24014,24015,24016'/>
+  </group>
+  <group name='303'>
+    <ids val='24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24027,24028,24029,24030,24031,24032,24033,24034,24035,24036,24037,24038,24039,24040,24041,24042,24043,24044,24045,24046,24047,24048,24049,24050,24051,24052,24053,24054,24055,24056,24057,24058,24059,24060,24061,24062,24063,24064,24065,24066,24067,24068,24069,24070,24071,24072,24073,24074,24075,24076,24077,24078,24079,24080,24081,24082,24083,24084,24085,24086,24087,24088,24089,24090,24091,24092,24093,24094,24095,24096,24097,24098,24099,24100,24101,24102,24103,24104,24105,24106,24107,24108,24109,24110,24111,24112,24113,24114,24115,24116,24117,24118,24119,24120,24121,24122,24123,24124,24125,24126,24127,24128,24129,24130,24131,24132,24133,24134,24135,24136,24137,24138,24139,24140,24141,24142,24143,24144,24145,24146,24147,24148,24149,24150,24151,24152,24153,24154,24155,24156,24157,24158,24159,24160,24161,24162,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24178,24179,24180,24181,24182,24183,24184,24185,24186,24187,24188,24189,24190,24191,24192,24193,24194,24195,24196,24197,24198,24199,24200,24201,24202,24203,24204,24205,24206,24207,24208,24209,24210,24211,24212,24213,24214,24215,24216,24217,24218,24219,24220,24221,24222,24223,24224,24225,24226,24227,24228,24229,24230,24231,24232,24233,24234,24235,24236,24237,24238,24239,24240,24241,24242,24243,24244,24245,24246,24247,24248,24249,24250,24251,24252,24253,24254,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24265,24266,24267,24268,24269,24270,24271,24272,24273,24274,24275,24276,24277,24278,24279,24280,24281,24282,24283,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24296,24297,24298,24299,24300,24301,24302,24303,24304,24305,24306,24307,24308,24309,24310,24311,24312,24313,24314,24315,24316,24317,24318,24319,24320'/>
+  </group>
+  <group name='303'>
+    <ids val='24321,24322,24323,24324,24325,24326,24327,24328,24329,24330,24331,24332,24333,24334,24335,24336,24337,24338,24339,24340,24341,24342,24343,24344,24345,24346,24347,24348,24349,24350,24351,24352,24353,24354,24355,24356,24357,24358,24359,24360,24361,24362,24363,24364,24365,24366,24367,24368,24369,24370,24371,24372,24373,24374,24375,24376,24377,24378,24379,24380,24381,24382,24383,24384,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24400,24401,24402,24403,24404,24405,24406,24407,24408,24409,24410,24411,24412,24413,24414,24415,24416,24417,24418,24419,24420,24421,24422,24423,24424,24425,24426,24427,24428,24429,24430,24431,24432,24433,24434,24435,24436,24437,24438,24439,24440,24441,24442,24443,24444,24445,24446,24447,24448,24449,24450,24451,24452,24453,24454,24455,24456,24457,24458,24459,24460,24461,24462,24463,24464,24465,24466,24467,24468,24469,24470,24471,24472,24473,24474,24475,24476,24477,24478,24479,24480,24481,24482,24483,24484,24485,24486,24487,24488,24489,24490,24491,24492,24493,24494,24495,24496,24497,24498,24499,24500,24501,24502,24503,24504,24505,24506,24507,24508,24509,24510,24511,24512,24513,24514,24515,24516,24517,24518,24519,24520,24521,24522,24523,24524,24525,24526,24527,24528,24529,24530,24531,24532,24533,24534,24535,24536,24537,24538,24539,24540,24541,24542,24543,24544,24545,24546,24547,24548,24549,24550,24551,24552,24553,24554,24555,24556,24557,24558,24559,24560,24561,24562,24563,24564,24565,24566,24567,24568,24569,24570,24571,24572,24573,24574,24575,24576,24577,24578,24579,24580,24581,24582,24583,24584,24585,24586,24587,24588,24589,24590,24591,24592,24593,24594,24595,24596,24597,24598,24599,24600,24601,24602,24603,24604,24605,24606,24607,24608,24609,24610,24611,24612,24613,24614,24615,24616,24617,24618,24619,24620,24621,24622,24623,24624'/>
+  </group>
+  <group name='303'>
+    <ids val='24625,24626,24627,24628,24629,24630,24631,24632,24633,24634,24635,24636,24637,24638,24639,24640,24641,24642,24643,24644,24645,24646,24647,24648,24649,24650,24651,24652,24653,24654,24655,24656,24657,24658,24659,24660,24661,24662,24663,24664,24665,24666,24667,24668,24669,24670,24671,24672,24673,24674,24675,24676,24677,24678,24679,24680,24681,24682,24683,24684,24685,24686,24687,24688,24689,24690,24691,24692,24693,24694,24695,24696,24697,24698,24699,24700,24701,24702,24703,24704,24705,24706,24707,24708,24709,24710,24711,24712,24713,24714,24715,24716,24717,24718,24719,24720,24721,24722,24723,24724,24725,24726,24727,24728,24729,24730,24731,24732,24733,24734,24735,24736,24737,24738,24739,24740,24741,24742,24743,24744,24745,24746,24747,24748,24749,24750,24751,24752,24753,24754,24755,24756,24757,24758,24759,24760,24761,24762,24763,24764,24765,24766,24767,24768,24769,24770,24771,24772,24773,24774,24775,24776,24777,24778,24779,24780,24781,24782,24783,24784,24785,24786,24787,24788,24789,24790,24791,24792,24793,24794,24795,24796,24797,24798,24799,24800,24801,24802,24803,24804,24805,24806,24807,24808,24809,24810,24811,24812,24813,24814,24815,24816,24817,24818,24819,24820,24821,24822,24823,24824,24825,24826,24827,24828,24829,24830,24831,24832,24833,24834,24835,24836,24837,24838,24839,24840,24841,24842,24843,24844,24845,24846,24847,24848,24849,24850,24851,24852,24853,24854,24855,24856,24857,24858,24859,24860,24861,24862,24863,24864,24865,24866,24867,24868,24869,24870,24871,24872,24873,24874,24875,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24895,24896,24897,24898,24899,24900,24901,24902,24903,24904,24905,24906,24907,24908,24909,24910,24911,24912,24913,24914,24915,24916,24917,24918,24919,24920,24921,24922,24923,24924,24925,24926,24927,24928'/>
+  </group>
+  <group name='303'>
+    <ids val='24929,24930,24931,24932,24933,24934,24935,24936,24937,24938,24939,24940,24941,24942,24943,24944,24945,24946,24947,24948,24949,24950,24951,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24971,24972,24973,24974,24975,24976,24977,24978,24979,24980,24981,24982,24983,24984,24985,24986,24987,24988,24989,24990,24991,24992,24993,24994,24995,24996,24997,24998,24999,25000,25001,25002,25003,25004,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25015,25016,25017,25018,25019,25020,25021,25022,25023,25024,25025,25026,25027,25028,25029,25030,25031,25032,25033,25034,25035,25036,25037,25038,25039,25040,25041,25042,25043,25044,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25062,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25077,25078,25079,25080,25081,25082,25083,25084,25085,25086,25087,25088,25089,25090,25091,25092,25093,25094,25095,25096,25097,25098,25099,25100,25101,25102,25103,25104,25105,25106,25107,25108,25109,25110,25111,25112,25113,25114,25115,25116,25117,25118,25119,25120,25121,25122,25123,25124,25125,25126,25127,25128,25129,25130,25131,25132,25133,25134,25135,25136,25137,25138,25139,25140,25141,25142,25143,25144,25145,25146,25147,25148,25149,25150,25151,25152,25153,25154,25155,25156,25157,25158,25159,25160,25161,25162,25163,25164,25165,25166,25167,25168,25169,25170,25171,25172,25173,25174,25175,25176,25177,25178,25179,25180,25181,25182,25183,25184,25185,25186,25187,25188,25189,25190,25191,25192,25193,25194,25195,25196,25197,25198,25199,25200,25201,25202,25203,25204,25205,25206,25207,25208,25209,25210,25211,25212,25213,25214,25215,25216,25217,25218,25219,25220,25221,25222,25223,25224,25225,25226,25227,25228,25229,25230,25231,25232'/>
+  </group>
+  <group name='303'>
+    <ids val='25233,25234,25235,25236,25237,25238,25239,25240,25241,25242,25243,25244,25245,25246,25247,25248,25249,25250,25251,25252,25253,25254,25255,25256,25257,25258,25259,25260,25261,25262,25263,25264,25265,25266,25267,25268,25269,25270,25271,25272,25273,25274,25275,25276,25277,25278,25279,25280,25281,25282,25283,25284,25285,25286,25287,25288,25289,25290,25291,25292,25293,25294,25295,25296,25297,25298,25299,25300,25301,25302,25303,25304,25305,25306,25307,25308,25309,25310,25311,25312,25313,25314,25315,25316,25317,25318,25319,25320,25321,25322,25323,25324,25325,25326,25327,25328,25329,25330,25331,25332,25333,25334,25335,25336,25337,25338,25339,25340,25341,25342,25343,25344,25345,25346,25347,25348,25349,25350,25351,25352,25353,25354,25355,25356,25357,25358,25359,25360,25361,25362,25363,25364,25365,25366,25367,25368,25369,25370,25371,25372,25373,25374,25375,25376,25377,25378,25379,25380,25381,25382,25383,25384,25385,25386,25387,25388,25389,25390,25391,25392,25393,25394,25395,25396,25397,25398,25399,25400,25401,25402,25403,25404,25405,25406,25407,25408,25409,25410,25411,25412,25413,25414,25415,25416,25417,25418,25419,25420,25421,25422,25423,25424,25425,25426,25427,25428,25429,25430,25431,25432,25433,25434,25435,25436,25437,25438,25439,25440,25441,25442,25443,25444,25445,25446,25447,25448,25449,25450,25451,25452,25453,25454,25455,25456,25457,25458,25459,25460,25461,25462,25463,25464,25465,25466,25467,25468,25469,25470,25471,25472,25473,25474,25475,25476,25477,25478,25479,25480,25481,25482,25483,25484,25485,25486,25487,25488,25489,25490,25491,25492,25493,25494,25495,25496,25497,25498,25499,25500,25501,25502,25503,25504,25505,25506,25507,25508,25509,25510,25511,25512,25513,25514,25515,25516,25517,25518,25519,25520,25521,25522,25523,25524,25525,25526,25527,25528,25529,25530,25531,25532,25533,25534,25535,25536'/>
+  </group>
+  <group name='303'>
+    <ids val='25537,25538,25539,25540,25541,25542,25543,25544,25545,25546,25547,25548,25549,25550,25551,25552,25553,25554,25555,25556,25557,25558,25559,25560,25561,25562,25563,25564,25565,25566,25567,25568,25569,25570,25571,25572,25573,25574,25575,25576,25577,25578,25579,25580,25581,25582,25583,25584,25585,25586,25587,25588,25589,25590,25591,25592,25593,25594,25595,25596,25597,25598,25599,25600,25601,25602,25603,25604,25605,25606,25607,25608,25609,25610,25611,25612,25613,25614,25615,25616,25617,25618,25619,25620,25621,25622,25623,25624,25625,25626,25627,25628,25629,25630,25631,25632,25633,25634,25635,25636,25637,25638,25639,25640,25641,25642,25643,25644,25645,25646,25647,25648,25649,25650,25651,25652,25653,25654,25655,25656,25657,25658,25659,25660,25661,25662,25663,25664,25665,25666,25667,25668,25669,25670,25671,25672,25673,25674,25675,25676,25677,25678,25679,25680,25681,25682,25683,25684,25685,25686,25687,25688,25689,25690,25691,25692,25693,25694,25695,25696,25697,25698,25699,25700,25701,25702,25703,25704,25705,25706,25707,25708,25709,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25720,25721,25722,25723,25724,25725,25726,25727,25728,25729,25730,25731,25732,25733,25734,25735,25736,25737,25738,25739,25740,25741,25742,25743,25744,25745,25746,25747,25748,25749,25750,25751,25752,25753,25754,25755,25756,25757,25758,25759,25760,25761,25762,25763,25764,25765,25766,25767,25768,25769,25770,25771,25772,25773,25774,25775,25776,25777,25778,25779,25780,25781,25782,25783,25784,25785,25786,25787,25788,25789,25790,25791,25792,25793,25794,25795,25796,25797,25798,25799,25800,25801,25802,25803,25804,25805,25806,25807,25808,25809,25810,25811,25812,25813,25814,25815,25816,25817,25818,25819,25820,25821,25822,25823,25824,25825,25826,25827,25828,25829,25830,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840'/>
+  </group>
+  <group name='303'>
+    <ids val='25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25856,25857,25858,25859,25860,25861,25862,25863,25864,25865,25866,25867,25868,25869,25870,25871,25872,25873,25874,25875,25876,25877,25878,25879,25880,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25893,25894,25895,25896,25897,25898,25899,25900,25901,25902,25903,25904,25905,25906,25907,25908,25909,25910,25911,25912,25913,25914,25915,25916,25917,25918,25919,25920,25921,25922,25923,25924,25925,25926,25927,25928,25929,25930,25931,25932,25933,25934,25935,25936,25937,25938,25939,25940,25941,25942,25943,25944,25945,25946,25947,25948,25949,25950,25951,25952,25953,25954,25955,25956,25957,25958,25959,25960,25961,25962,25963,25964,25965,25966,25967,25968,25969,25970,25971,25972,25973,25974,25975,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25991,25992,25993,25994,25995,25996,25997,25998,25999,26000,26001,26002,26003,26004,26005,26006,26007,26008,26009,26010,26011,26012,26013,26014,26015,26016,26017,26018,26019,26020,26021,26022,26023,26024,26025,26026,26027,26028,26029,26030,26031,26032,26033,26034,26035,26036,26037,26038,26039,26040,26041,26042,26043,26044,26045,26046,26047,26048,26049,26050,26051,26052,26053,26054,26055,26056,26057,26058,26059,26060,26061,26062,26063,26064,26065,26066,26067,26068,26069,26070,26071,26072,26073,26074,26075,26076,26077,26078,26079,26080,26081,26082,26083,26084,26085,26086,26087,26088,26089,26090,26091,26092,26093,26094,26095,26096,26097,26098,26099,26100,26101,26102,26103,26104,26105,26106,26107,26108,26109,26110,26111,26112,26113,26114,26115,26116,26117,26118,26119,26120,26121,26122,26123,26124,26125,26126,26127,26128,26129,26130,26131,26132,26133,26134,26135,26136,26137,26138,26139,26140,26141,26142,26143,26144'/>
+  </group>
+  <group name='303'>
+    <ids val='26145,26146,26147,26148,26149,26150,26151,26152,26153,26154,26155,26156,26157,26158,26159,26160,26161,26162,26163,26164,26165,26166,26167,26168,26169,26170,26171,26172,26173,26174,26175,26176,26177,26178,26179,26180,26181,26182,26183,26184,26185,26186,26187,26188,26189,26190,26191,26192,26193,26194,26195,26196,26197,26198,26199,26200,26201,26202,26203,26204,26205,26206,26207,26208,26209,26210,26211,26212,26213,26214,26215,26216,26217,26218,26219,26220,26221,26222,26223,26224,26225,26226,26227,26228,26229,26230,26231,26232,26233,26234,26235,26236,26237,26238,26239,26240,26241,26242,26243,26244,26245,26246,26247,26248,26249,26250,26251,26252,26253,26254,26255,26256,26257,26258,26259,26260,26261,26262,26263,26264,26265,26266,26267,26268,26269,26270,26271,26272,26273,26274,26275,26276,26277,26278,26279,26280,26281,26282,26283,26284,26285,26286,26287,26288,26289,26290,26291,26292,26293,26294,26295,26296,26297,26298,26299,26300,26301,26302,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26329,26330,26331,26332,26333,26334,26335,26336,26337,26338,26339,26340,26341,26342,26343,26344,26345,26346,26347,26348,26349,26350,26351,26352,26353,26354,26355,26356,26357,26358,26359,26360,26361,26362,26363,26364,26365,26366,26367,26368,26369,26370,26371,26372,26373,26374,26375,26376,26377,26378,26379,26380,26381,26382,26383,26384,26385,26386,26387,26388,26389,26390,26391,26392,26393,26394,26395,26396,26397,26398,26399,26400,26401,26402,26403,26404,26405,26406,26407,26408,26409,26410,26411,26412,26413,26414,26415,26416,26417,26418,26419,26420,26421,26422,26423,26424,26425,26426,26427,26428,26429,26430,26431,26432,26433,26434,26435,26436,26437,26438,26439,26440,26441,26442,26443,26444,26445,26446,26447,26448'/>
+  </group>
+  <group name='303'>
+    <ids val='26449,26450,26451,26452,26453,26454,26455,26456,26457,26458,26459,26460,26461,26462,26463,26464,26465,26466,26467,26468,26469,26470,26471,26472,26473,26474,26475,26476,26477,26478,26479,26480,26481,26482,26483,26484,26485,26486,26487,26488,26489,26490,26491,26492,26493,26494,26495,26496,26497,26498,26499,26500,26501,26502,26503,26504,26505,26506,26507,26508,26509,26510,26511,26512,26513,26514,26515,26516,26517,26518,26519,26520,26521,26522,26523,26524,26525,26526,26527,26528,26529,26530,26531,26532,26533,26534,26535,26536,26537,26538,26539,26540,26541,26542,26543,26544,26545,26546,26547,26548,26549,26550,26551,26552,26553,26554,26555,26556,26557,26558,26559,26560,26561,26562,26563,26564,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26575,26576,26577,26578,26579,26580,26581,26582,26583,26584,26585,26586,26587,26588,26589,26590,26591,26592,26593,26594,26595,26596,26597,26598,26599,26600,26601,26602,26603,26604,26605,26606,26607,26608,26609,26610,26611,26612,26613,26614,26615,26616,26617,26618,26619,26620,26621,26622,26623,26624,26625,26626,26627,26628,26629,26630,26631,26632,26633,26634,26635,26636,26637,26638,26639,26640,26641,26642,26643,26644,26645,26646,26647,26648,26649,26650,26651,26652,26653,26654,26655,26656,26657,26658,26659,26660,26661,26662,26663,26664,26665,26666,26667,26668,26669,26670,26671,26672,26673,26674,26675,26676,26677,26678,26679,26680,26681,26682,26683,26684,26685,26686,26687,26688,26689,26690,26691,26692,26693,26694,26695,26696,26697,26698,26699,26700,26701,26702,26703,26704,26705,26706,26707,26708,26709,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26720,26721,26722,26723,26724,26725,26726,26727,26728,26729,26730,26731,26732,26733,26734,26735,26736,26737,26738,26739,26740,26741,26742,26743,26744,26745,26746,26747,26748,26749,26750,26751,26752'/>
+  </group>
+  <group name='303'>
+    <ids val='26753,26754,26755,26756,26757,26758,26759,26760,26761,26762,26763,26764,26765,26766,26767,26768,26769,26770,26771,26772,26773,26774,26775,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26786,26787,26788,26789,26790,26791,26792,26793,26794,26795,26796,26797,26798,26799,26800,26801,26802,26803,26804,26805,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26816,26817,26818,26819,26820,26821,26822,26823,26824,26825,26826,26827,26828,26829,26830,26831,26832,26833,26834,26835,26836,26837,26838,26839,26840,26841,26842,26843,26844,26845,26846,26847,26848,26849,26850,26851,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26862,26863,26864,26865,26866,26867,26868,26869,26870,26871,26872,26873,26874,26875,26876,26877,26878,26879,26880,26881,26882,26883,26884,26885,26886,26887,26888,26889,26890,26891,26892,26893,26894,26895,26896,26897,26898,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26911,26912,26913,26914,26915,26916,26917,26918,26919,26920,26921,26922,26923,26924,26925,26926,26927,26928,26929,26930,26931,26932,26933,26934,26935,26936,26937,26938,26939,26940,26941,26942,26943,26944,26945,26946,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26964,26965,26966,26967,26968,26969,26970,26971,26972,26973,26974,26975,26976,26977,26978,26979,26980,26981,26982,26983,26984,26985,26986,26987,26988,26989,26990,26991,26992,26993,26994,26995,26996,26997,26998,26999,27000,27001,27002,27003,27004,27005,27006,27007,27008,27009,27010,27011,27012,27013,27014,27015,27016,27017,27018,27019,27020,27021,27022,27023,27024,27025,27026,27027,27028,27029,27030,27031,27032,27033,27034,27035,27036,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27047,27048,27049,27050,27051,27052,27053,27054,27055,27056'/>
+  </group>
+  <group name='303'>
+    <ids val='27057,27058,27059,27060,27061,27062,27063,27064,27065,27066,27067,27068,27069,27070,27071,27072,27073,27074,27075,27076,27077,27078,27079,27080,27081,27082,27083,27084,27085,27086,27087,27088,27089,27090,27091,27092,27093,27094,27095,27096,27097,27098,27099,27100,27101,27102,27103,27104,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27117,27118,27119,27120,27121,27122,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27133,27134,27135,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27146,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27159,27160,27161,27162,27163,27164,27165,27166,27167,27168,27169,27170,27171,27172,27173,27174,27175,27176,27177,27178,27179,27180,27181,27182,27183,27184,27185,27186,27187,27188,27189,27190,27191,27192,27193,27194,27195,27196,27197,27198,27199,27200,27201,27202,27203,27204,27205,27206,27207,27208,27209,27210,27211,27212,27213,27214,27215,27216,27217,27218,27219,27220,27221,27222,27223,27224,27225,27226,27227,27228,27229,27230,27231,27232,27233,27234,27235,27236,27237,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27249,27250,27251,27252,27253,27254,27255,27256,27257,27258,27259,27260,27261,27262,27263,27264,27265,27266,27267,27268,27269,27270,27271,27272,27273,27274,27275,27276,27277,27278,27279,27280,27281,27282,27283,27284,27285,27286,27287,27288,27289,27290,27291,27292,27293,27294,27295,27296,27297,27298,27299,27300,27301,27302,27303,27304,27305,27306,27307,27308,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360'/>
+  </group>
+  <group name='303'>
+    <ids val='27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27424,27425,27426,27427,27428,27429,27430,27431,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27442,27443,27444,27445,27446,27447,27448,27449,27450,27451,27452,27453,27454,27455,27456,27457,27458,27459,27460,27461,27462,27463,27464,27465,27466,27467,27468,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27481,27482,27483,27484,27485,27486,27487,27488,27489,27490,27491,27492,27493,27494,27495,27496,27497,27498,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27513,27514,27515,27516,27517,27518,27519,27520,27521,27522,27523,27524,27525,27526,27527,27528,27529,27530,27531,27532,27533,27534,27535,27536,27537,27538,27539,27540,27541,27542,27543,27544,27545,27546,27547,27548,27549,27550,27551,27552,27553,27554,27555,27556,27557,27558,27559,27560,27561,27562,27563,27564,27565,27566,27567,27568,27569,27570,27571,27572,27573,27574,27575,27576,27577,27578,27579,27580,27581,27582,27583,27584,27585,27586,27587,27588,27589,27590,27591,27592,27593,27594,27595,27596,27597,27598,27599,27600,27601,27602,27603,27604,27605,27606,27607,27608,27609,27610,27611,27612,27613,27614,27615,27616,27617,27618,27619,27620,27621,27622,27623,27624,27625,27626,27627,27628,27629,27630,27631,27632,27633,27634,27635,27636,27637,27638,27639,27640,27641,27642,27643,27644,27645,27646,27647,27648,27649,27650,27651,27652,27653,27654,27655,27656,27657,27658,27659,27660,27661,27662,27663,27664'/>
+  </group>
+  <group name='303'>
+    <ids val='27665,27666,27667,27668,27669,27670,27671,27672,27673,27674,27675,27676,27677,27678,27679,27680,27681,27682,27683,27684,27685,27686,27687,27688,27689,27690,27691,27692,27693,27694,27695,27696,27697,27698,27699,27700,27701,27702,27703,27704,27705,27706,27707,27708,27709,27710,27711,27712,27713,27714,27715,27716,27717,27718,27719,27720,27721,27722,27723,27724,27725,27726,27727,27728,27729,27730,27731,27732,27733,27734,27735,27736,27737,27738,27739,27740,27741,27742,27743,27744,27745,27746,27747,27748,27749,27750,27751,27752,27753,27754,27755,27756,27757,27758,27759,27760,27761,27762,27763,27764,27765,27766,27767,27768,27769,27770,27771,27772,27773,27774,27775,27776,27777,27778,27779,27780,27781,27782,27783,27784,27785,27786,27787,27788,27789,27790,27791,27792,27793,27794,27795,27796,27797,27798,27799,27800,27801,27802,27803,27804,27805,27806,27807,27808,27809,27810,27811,27812,27813,27814,27815,27816,27817,27818,27819,27820,27821,27822,27823,27824,27825,27826,27827,27828,27829,27830,27831,27832,27833,27834,27835,27836,27837,27838,27839,27840,27841,27842,27843,27844,27845,27846,27847,27848,27849,27850,27851,27852,27853,27854,27855,27856,27857,27858,27859,27860,27861,27862,27863,27864,27865,27866,27867,27868,27869,27870,27871,27872,27873,27874,27875,27876,27877,27878,27879,27880,27881,27882,27883,27884,27885,27886,27887,27888,27889,27890,27891,27892,27893,27894,27895,27896,27897,27898,27899,27900,27901,27902,27903,27904,27905,27906,27907,27908,27909,27910,27911,27912,27913,27914,27915,27916,27917,27918,27919,27920,27921,27922,27923,27924,27925,27926,27927,27928,27929,27930,27931,27932,27933,27934,27935,27936,27937,27938,27939,27940,27941,27942,27943,27944,27945,27946,27947,27948,27949,27950,27951,27952,27953,27954,27955,27956,27957,27958,27959,27960,27961,27962,27963,27964,27965,27966,27967,27968'/>
+  </group>
+  <group name='303'>
+    <ids val='27969,27970,27971,27972,27973,27974,27975,27976,27977,27978,27979,27980,27981,27982,27983,27984,27985,27986,27987,27988,27989,27990,27991,27992,27993,27994,27995,27996,27997,27998,27999,28000,28001,28002,28003,28004,28005,28006,28007,28008,28009,28010,28011,28012,28013,28014,28015,28016,28017,28018,28019,28020,28021,28022,28023,28024,28025,28026,28027,28028,28029,28030,28031,28032,28033,28034,28035,28036,28037,28038,28039,28040,28041,28042,28043,28044,28045,28046,28047,28048,28049,28050,28051,28052,28053,28054,28055,28056,28057,28058,28059,28060,28061,28062,28063,28064,28065,28066,28067,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090,28091,28092,28093,28094,28095,28096,28097,28098,28099,28100,28101,28102,28103,28104,28105,28106,28107,28108,28109,28110,28111,28112,28113,28114,28115,28116,28117,28118,28119,28120,28121,28122,28123,28124,28125,28126,28127,28128,28129,28130,28131,28132,28133,28134,28135,28136,28137,28138,28139,28140,28141,28142,28143,28144,28145,28146,28147,28148,28149,28150,28151,28152,28153,28154,28155,28156,28157,28158,28159,28160,28161,28162,28163,28164,28165,28166,28167,28168,28169,28170,28171,28172,28173,28174,28175,28176,28177,28178,28179,28180,28181,28182,28183,28184,28185,28186,28187,28188,28189,28190,28191,28192,28193,28194,28195,28196,28197,28198,28199,28200,28201,28202,28203,28204,28205,28206,28207,28208,28209,28210,28211,28212,28213,28214,28215,28216,28217,28218,28219,28220,28221,28222,28223,28224,28225,28226,28227,28228,28229,28230,28231,28232,28233,28234,28235,28236,28237,28238,28239,28240,28241,28242,28243,28244,28245,28246,28247,28248,28249,28250,28251,28252,28253,28254,28255,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28267,28268,28269,28270,28271,28272'/>
+  </group>
+  <group name='303'>
+    <ids val='28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28286,28287,28288,28289,28290,28291,28292,28293,28294,28295,28296,28297,28298,28299,28300,28301,28302,28303,28304,28305,28306,28307,28308,28309,28310,28311,28312,28313,28314,28315,28316,28317,28318,28319,28320,28321,28322,28323,28324,28325,28326,28327,28328,28329,28330,28331,28332,28333,28334,28335,28336,28337,28338,28339,28340,28341,28342,28343,28344,28345,28346,28347,28348,28349,28350,28351,28352,28353,28354,28355,28356,28357,28358,28359,28360,28361,28362,28363,28364,28365,28366,28367,28368,28369,28370,28371,28372,28373,28374,28375,28376,28377,28378,28379,28380,28381,28382,28383,28384,28385,28386,28387,28388,28389,28390,28391,28392,28393,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28404,28405,28406,28407,28408,28409,28410,28411,28412,28413,28414,28415,28416,28417,28418,28419,28420,28421,28422,28423,28424,28425,28426,28427,28428,28429,28430,28431,28432,28433,28434,28435,28436,28437,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28448,28449,28450,28451,28452,28453,28454,28455,28456,28457,28458,28459,28460,28461,28462,28463,28464,28465,28466,28467,28468,28469,28470,28471,28472,28473,28474,28475,28476,28477,28478,28479,28480,28481,28482,28483,28484,28485,28486,28487,28488,28489,28490,28491,28492,28493,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28504,28505,28506,28507,28508,28509,28510,28511,28512,28513,28514,28515,28516,28517,28518,28519,28520,28521,28522,28523,28524,28525,28526,28527,28528,28529,28530,28531,28532,28533,28534,28535,28536,28537,28538,28539,28540,28541,28542,28543,28544,28545,28546,28547,28548,28549,28550,28551,28552,28553,28554,28555,28556,28557,28558,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28572,28573,28574,28575,28576'/>
+  </group>
+  <group name='303'>
+    <ids val='28577,28578,28579,28580,28581,28582,28583,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28595,28596,28597,28598,28599,28600,28601,28602,28603,28604,28605,28606,28607,28608,28609,28610,28611,28612,28613,28614,28615,28616,28617,28618,28619,28620,28621,28622,28623,28624,28625,28626,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28638,28639,28640,28641,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28654,28655,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28689,28690,28691,28692,28693,28694,28695,28696,28697,28698,28699,28700,28701,28702,28703,28704,28705,28706,28707,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28725,28726,28727,28728,28729,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28748,28749,28750,28751,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28766,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28779,28780,28781,28782,28783,28784,28785,28786,28787,28788,28789,28790,28791,28792,28793,28794,28795,28796,28797,28798,28799,28800,28801,28802,28803,28804,28805,28806,28807,28808,28809,28810,28811,28812,28813,28814,28815,28816,28817,28818,28819,28820,28821,28822,28823,28824,28825,28826,28827,28828,28829,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,28871,28872,28873,28874,28875,28876,28877,28878,28879,28880'/>
+  </group>
+  <group name='303'>
+    <ids val='28881,28882,28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,28894,28895,28896,28897,28898,28899,28900,28901,28902,28903,28904,28905,28906,28907,28908,28909,28910,28911,28912,28913,28914,28915,28916,28917,28918,28919,28920,28921,28922,28923,28924,28925,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28937,28938,28939,28940,28941,28942,28943,28944,28945,28946,28947,28948,28949,28950,28951,28952,28953,28954,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28966,28967,28968,28969,28970,28971,28972,28973,28974,28975,28976,28977,28978,28979,28980,28981,28982,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28997,28998,28999,29000,29001,29002,29003,29004,29005,29006,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29020,29021,29022,29023,29024,29025,29026,29027,29028,29029,29030,29031,29032,29033,29034,29035,29036,29037,29038,29039,29040,29041,29042,29043,29044,29045,29046,29047,29048,29049,29050,29051,29052,29053,29054,29055,29056,29057,29058,29059,29060,29061,29062,29063,29064,29065,29066,29067,29068,29069,29070,29071,29072,29073,29074,29075,29076,29077,29078,29079,29080,29081,29082,29083,29084,29085,29086,29087,29088,29089,29090,29091,29092,29093,29094,29095,29096,29097,29098,29099,29100,29101,29102,29103,29104,29105,29106,29107,29108,29109,29110,29111,29112,29113,29114,29115,29116,29117,29118,29119,29120,29121,29122,29123,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29134,29135,29136,29137,29138,29139,29140,29141,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29152,29153,29154,29155,29156,29157,29158,29159,29160,29161,29162,29163,29164,29165,29166,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29177,29178,29179,29180,29181,29182,29183,29184'/>
+  </group>
+  <group name='303'>
+    <ids val='29185,29186,29187,29188,29189,29190,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29213,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29224,29225,29226,29227,29228,29229,29230,29231,29232,29233,29234,29235,29236,29237,29238,29239,29240,29241,29242,29243,29244,29245,29246,29247,29248,29249,29250,29251,29252,29253,29254,29255,29256,29257,29258,29259,29260,29261,29262,29263,29264,29265,29266,29267,29268,29269,29270,29271,29272,29273,29274,29275,29276,29277,29278,29279,29280,29281,29282,29283,29284,29285,29286,29287,29288,29289,29290,29291,29292,29293,29294,29295,29296,29297,29298,29299,29300,29301,29302,29303,29304,29305,29306,29307,29308,29309,29310,29311,29312,29313,29314,29315,29316,29317,29318,29319,29320,29321,29322,29323,29324,29325,29326,29327,29328,29329,29330,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29343,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29356,29357,29358,29359,29360,29361,29362,29363,29364,29365,29366,29367,29368,29369,29370,29371,29372,29373,29374,29375,29376,29377,29378,29379,29380,29381,29382,29383,29384,29385,29386,29387,29388,29389,29390,29391,29392,29393,29394,29395,29396,29397,29398,29399,29400,29401,29402,29403,29404,29405,29406,29407,29408,29409,29410,29411,29412,29413,29414,29415,29416,29417,29418,29419,29420,29421,29422,29423,29424,29425,29426,29427,29428,29429,29430,29431,29432,29433,29434,29435,29436,29437,29438,29439,29440,29441,29442,29443,29444,29445,29446,29447,29448,29449,29450,29451,29452,29453,29454,29455,29456,29457,29458,29459,29460,29461,29462,29463,29464,29465,29466,29467,29468,29469,29470,29471,29472,29473,29474,29475,29476,29477,29478,29479,29480,29481,29482,29483,29484,29485,29486,29487,29488'/>
+  </group>
+  <group name='303'>
+    <ids val='29489,29490,29491,29492,29493,29494,29495,29496,29497,29498,29499,29500,29501,29502,29503,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29517,29518,29519,29520,29521,29522,29523,29524,29525,29526,29527,29528,29529,29530,29531,29532,29533,29534,29535,29536,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29548,29549,29550,29551,29552,29553,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29566,29567,29568,29569,29570,29571,29572,29573,29574,29575,29576,29577,29578,29579,29580,29581,29582,29583,29584,29585,29586,29587,29588,29589,29590,29591,29592,29593,29594,29595,29596,29597,29598,29599,29600,29601,29602,29603,29604,29605,29606,29607,29608,29609,29610,29611,29612,29613,29614,29615,29616,29617,29618,29619,29620,29621,29622,29623,29624,29625,29626,29627,29628,29629,29630,29631,29632,29633,29634,29635,29636,29637,29638,29639,29640,29641,29642,29643,29644,29645,29646,29647,29648,29649,29650,29651,29652,29653,29654,29655,29656,29657,29658,29659,29660,29661,29662,29663,29664,29665,29666,29667,29668,29669,29670,29671,29672,29673,29674,29675,29676,29677,29678,29679,29680,29681,29682,29683,29684,29685,29686,29687,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29699,29700,29701,29702,29703,29704,29705,29706,29707,29708,29709,29710,29711,29712,29713,29714,29715,29716,29717,29718,29719,29720,29721,29722,29723,29724,29725,29726,29727,29728,29729,29730,29731,29732,29733,29734,29735,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29746,29747,29748,29749,29750,29751,29752,29753,29754,29755,29756,29757,29758,29759,29760,29761,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29781,29782,29783,29784,29785,29786,29787,29788,29789,29790,29791,29792'/>
+  </group>
+  <group name='303'>
+    <ids val='29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29805,29806,29807,29808,29809,29810,29811,29812,29813,29814,29815,29816,29817,29818,29819,29820,29821,29822,29823,29824,29825,29826,29827,29828,29829,29830,29831,29832,29833,29834,29835,29836,29837,29838,29839,29840,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29852,29853,29854,29855,29856,29857,29858,29859,29860,29861,29862,29863,29864,29865,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29882,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29906,29907,29908,29909,29910,29911,29912,29913,29914,29915,29916,29917,29918,29919,29920,29921,29922,29923,29924,29925,29926,29927,29928,29929,29930,29931,29932,29933,29934,29935,29936,29937,29938,29939,29940,29941,29942,29943,29944,29945,29946,29947,29948,29949,29950,29951,29952,29953,29954,29955,29956,29957,29958,29959,29960,29961,29962,29963,29964,29965,29966,29967,29968,29969,29970,29971,29972,29973,29974,29975,29976,29977,29978,29979,29980,29981,29982,29983,29984,29985,29986,29987,29988,29989,29990,29991,29992,29993,29994,29995,29996,29997,29998,29999,30000,30001,30002,30003,30004,30005,30006,30007,30008,30009,30010,30011,30012,30013,30014,30015,30016,30017,30018,30019,30020,30021,30022,30023,30024,30025,30026,30027,30028,30029,30030,30031,30032,30033,30034,30035,30036,30037,30038,30039,30040,30041,30042,30043,30044,30045,30046,30047,30048,30049,30050,30051,30052,30053,30054,30055,30056,30057,30058,30059,30060,30061,30062,30063,30064,30065,30066,30067,30068,30069,30070,30071,30072,30073,30074,30075,30076,30077,30078,30079,30080,30081,30082,30083,30084,30085,30086,30087,30088,30089,30090,30091,30092,30093,30094,30095,30096'/>
+  </group>
+  <group name='303'>
+    <ids val='30097,30098,30099,30100,30101,30102,30103,30104,30105,30106,30107,30108,30109,30110,30111,30112,30113,30114,30115,30116,30117,30118,30119,30120,30121,30122,30123,30124,30125,30126,30127,30128,30129,30130,30131,30132,30133,30134,30135,30136,30137,30138,30139,30140,30141,30142,30143,30144,30145,30146,30147,30148,30149,30150,30151,30152,30153,30154,30155,30156,30157,30158,30159,30160,30161,30162,30163,30164,30165,30166,30167,30168,30169,30170,30171,30172,30173,30174,30175,30176,30177,30178,30179,30180,30181,30182,30183,30184,30185,30186,30187,30188,30189,30190,30191,30192,30193,30194,30195,30196,30197,30198,30199,30200,30201,30202,30203,30204,30205,30206,30207,30208,30209,30210,30211,30212,30213,30214,30215,30216,30217,30218,30219,30220,30221,30222,30223,30224,30225,30226,30227,30228,30229,30230,30231,30232,30233,30234,30235,30236,30237,30238,30239,30240,30241,30242,30243,30244,30245,30246,30247,30248,30249,30250,30251,30252,30253,30254,30255,30256,30257,30258,30259,30260,30261,30262,30263,30264,30265,30266,30267,30268,30269,30270,30271,30272,30273,30274,30275,30276,30277,30278,30279,30280,30281,30282,30283,30284,30285,30286,30287,30288,30289,30290,30291,30292,30293,30294,30295,30296,30297,30298,30299,30300,30301,30302,30303,30304,30305,30306,30307,30308,30309,30310,30311,30312,30313,30314,30315,30316,30317,30318,30319,30320,30321,30322,30323,30324,30325,30326,30327,30328,30329,30330,30331,30332,30333,30334,30335,30336,30337,30338,30339,30340,30341,30342,30343,30344,30345,30346,30347,30348,30349,30350,30351,30352,30353,30354,30355,30356,30357,30358,30359,30360,30361,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30372,30373,30374,30375,30376,30377,30378,30379,30380,30381,30382,30383,30384,30385,30386,30387,30388,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30399,30400'/>
+  </group>
+  <group name='303'>
+    <ids val='30401,30402,30403,30404,30405,30406,30407,30408,30409,30410,30411,30412,30413,30414,30415,30416,30417,30418,30419,30420,30421,30422,30423,30424,30425,30426,30427,30428,30429,30430,30431,30432,30433,30434,30435,30436,30437,30438,30439,30440,30441,30442,30443,30444,30445,30446,30447,30448,30449,30450,30451,30452,30453,30454,30455,30456,30457,30458,30459,30460,30461,30462,30463,30464,30465,30466,30467,30468,30469,30470,30471,30472,30473,30474,30475,30476,30477,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30489,30490,30491,30492,30493,30494,30495,30496,30497,30498,30499,30500,30501,30502,30503,30504,30505,30506,30507,30508,30509,30510,30511,30512,30513,30514,30515,30516,30517,30518,30519,30520,30521,30522,30523,30524,30525,30526,30527,30528,30529,30530,30531,30532,30533,30534,30535,30536,30537,30538,30539,30540,30541,30542,30543,30544,30545,30546,30547,30548,30549,30550,30551,30552,30553,30554,30555,30556,30557,30558,30559,30560,30561,30562,30563,30564,30565,30566,30567,30568,30569,30570,30571,30572,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30585,30586,30587,30588,30589,30590,30591,30592,30593,30594,30595,30596,30597,30598,30599,30600,30601,30602,30603,30604,30605,30606,30607,30608,30609,30610,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30623,30624,30625,30626,30627,30628,30629,30630,30631,30632,30633,30634,30635,30636,30637,30638,30639,30640,30641,30642,30643,30644,30645,30646,30647,30648,30649,30650,30651,30652,30653,30654,30655,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30669,30670,30671,30672,30673,30674,30675,30676,30677,30678,30679,30680,30681,30682,30683,30684,30685,30686,30687,30688,30689,30690,30691,30692,30693,30694,30695,30696,30697,30698,30699,30700,30701,30702,30703,30704'/>
+  </group>
+  <group name='303'>
+    <ids val='30705,30706,30707,30708,30709,30710,30711,30712,30713,30714,30715,30716,30717,30718,30719,30720,30721,30722,30723,30724,30725,30726,30727,30728,30729,30730,30731,30732,30733,30734,30735,30736,30737,30738,30739,30740,30741,30742,30743,30744,30745,30746,30747,30748,30749,30750,30751,30752,30753,30754,30755,30756,30757,30758,30759,30760,30761,30762,30763,30764,30765,30766,30767,30768,30769,30770,30771,30772,30773,30774,30775,30776,30777,30778,30779,30780,30781,30782,30783,30784,30785,30786,30787,30788,30789,30790,30791,30792,30793,30794,30795,30796,30797,30798,30799,30800,30801,30802,30803,30804,30805,30806,30807,30808,30809,30810,30811,30812,30813,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30826,30827,30828,30829,30830,30831,30832,30833,30834,30835,30836,30837,30838,30839,30840,30841,30842,30843,30844,30845,30846,30847,30848,30849,30850,30851,30852,30853,30854,30855,30856,30857,30858,30859,30860,30861,30862,30863,30864,30865,30866,30867,30868,30869,30870,30871,30872,30873,30874,30875,30876,30877,30878,30879,30880,30881,30882,30883,30884,30885,30886,30887,30888,30889,30890,30891,30892,30893,30894,30895,30896,30897,30898,30899,30900,30901,30902,30903,30904,30905,30906,30907,30908,30909,30910,30911,30912,30913,30914,30915,30916,30917,30918,30919,30920,30921,30922,30923,30924,30925,30926,30927,30928,30929,30930,30931,30932,30933,30934,30935,30936,30937,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30952,30953,30954,30955,30956,30957,30958,30959,30960,30961,30962,30963,30964,30965,30966,30967,30968,30969,30970,30971,30972,30973,30974,30975,30976,30977,30978,30979,30980,30981,30982,30983,30984,30985,30986,30987,30988,30989,30990,30991,30992,30993,30994,30995,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31006,31007,31008'/>
+  </group>
+  <group name='303'>
+    <ids val='31009,31010,31011,31012,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31028,31029,31030,31031,31032,31033,31034,31035,31036,31037,31038,31039,31040,31041,31042,31043,31044,31045,31046,31047,31048,31049,31050,31051,31052,31053,31054,31055,31056,31057,31058,31059,31060,31061,31062,31063,31064,31065,31066,31067,31068,31069,31070,31071,31072,31073,31074,31075,31076,31077,31078,31079,31080,31081,31082,31083,31084,31085,31086,31087,31088,31089,31090,31091,31092,31093,31094,31095,31096,31097,31098,31099,31100,31101,31102,31103,31104,31105,31106,31107,31108,31109,31110,31111,31112,31113,31114,31115,31116,31117,31118,31119,31120,31121,31122,31123,31124,31125,31126,31127,31128,31129,31130,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31143,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31155,31156,31157,31158,31159,31160,31161,31162,31163,31164,31165,31166,31167,31168,31169,31170,31171,31172,31173,31174,31175,31176,31177,31178,31179,31180,31181,31182,31183,31184,31185,31186,31187,31188,31189,31190,31191,31192,31193,31194,31195,31196,31197,31198,31199,31200,31201,31202,31203,31204,31205,31206,31207,31208,31209,31210,31211,31212,31213,31214,31215,31216,31217,31218,31219,31220,31221,31222,31223,31224,31225,31226,31227,31228,31229,31230,31231,31232,31233,31234,31235,31236,31237,31238,31239,31240,31241,31242,31243,31244,31245,31246,31247,31248,31249,31250,31251,31252,31253,31254,31255,31256,31257,31258,31259,31260,31261,31262,31263,31264,31265,31266,31267,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31283,31284,31285,31286,31287,31288,31289,31290,31291,31292,31293,31294,31295,31296,31297,31298,31299,31300,31301,31302,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312'/>
+  </group>
+  <group name='303'>
+    <ids val='31313,31314,31315,31316,31317,31318,31319,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31344,31345,31346,31347,31348,31349,31350,31351,31352,31353,31354,31355,31356,31357,31358,31359,31360,31361,31362,31363,31364,31365,31366,31367,31368,31369,31370,31371,31372,31373,31374,31375,31376,31377,31378,31379,31380,31381,31382,31383,31384,31385,31386,31387,31388,31389,31390,31391,31392,31393,31394,31395,31396,31397,31398,31399,31400,31401,31402,31403,31404,31405,31406,31407,31408,31409,31410,31411,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31423,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31435,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31446,31447,31448,31449,31450,31451,31452,31453,31454,31455,31456,31457,31458,31459,31460,31461,31462,31463,31464,31465,31466,31467,31468,31469,31470,31471,31472,31473,31474,31475,31476,31477,31478,31479,31480,31481,31482,31483,31484,31485,31486,31487,31488,31489,31490,31491,31492,31493,31494,31495,31496,31497,31498,31499,31500,31501,31502,31503,31504,31505,31506,31507,31508,31509,31510,31511,31512,31513,31514,31515,31516,31517,31518,31519,31520,31521,31522,31523,31524,31525,31526,31527,31528,31529,31530,31531,31532,31533,31534,31535,31536,31537,31538,31539,31540,31541,31542,31543,31544,31545,31546,31547,31548,31549,31550,31551,31552,31553,31554,31555,31556,31557,31558,31559,31560,31561,31562,31563,31564,31565,31566,31567,31568,31569,31570,31571,31572,31573,31574,31575,31576,31577,31578,31579,31580,31581,31582,31583,31584,31585,31586,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31598,31599,31600,31601,31602,31603,31604,31605,31606,31607,31608,31609,31610,31611,31612,31613,31614,31615,31616'/>
+  </group>
+  <group name='303'>
+    <ids val='31617,31618,31619,31620,31621,31622,31623,31624,31625,31626,31627,31628,31629,31630,31631,31632,31633,31634,31635,31636,31637,31638,31639,31640,31641,31642,31643,31644,31645,31646,31647,31648,31649,31650,31651,31652,31653,31654,31655,31656,31657,31658,31659,31660,31661,31662,31663,31664,31665,31666,31667,31668,31669,31670,31671,31672,31673,31674,31675,31676,31677,31678,31679,31680,31681,31682,31683,31684,31685,31686,31687,31688,31689,31690,31691,31692,31693,31694,31695,31696,31697,31698,31699,31700,31701,31702,31703,31704,31705,31706,31707,31708,31709,31710,31711,31712,31713,31714,31715,31716,31717,31718,31719,31720,31721,31722,31723,31724,31725,31726,31727,31728,31729,31730,31731,31732,31733,31734,31735,31736,31737,31738,31739,31740,31741,31742,31743,31744,31745,31746,31747,31748,31749,31750,31751,31752,31753,31754,31755,31756,31757,31758,31759,31760,31761,31762,31763,31764,31765,31766,31767,31768,31769,31770,31771,31772,31773,31774,31775,31776,31777,31778,31779,31780,31781,31782,31783,31784,31785,31786,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31800,31801,31802,31803,31804,31805,31806,31807,31808,31809,31810,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31821,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31859,31860,31861,31862,31863,31864,31865,31866,31867,31868,31869,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31881,31882,31883,31884,31885,31886,31887,31888,31889,31890,31891,31892,31893,31894,31895,31896,31897,31898,31899,31900,31901,31902,31903,31904,31905,31906,31907,31908,31909,31910,31911,31912,31913,31914,31915,31916,31917,31918,31919,31920'/>
+  </group>
+  <group name='303'>
+    <ids val='31921,31922,31923,31924,31925,31926,31927,31928,31929,31930,31931,31932,31933,31934,31935,31936,31937,31938,31939,31940,31941,31942,31943,31944,31945,31946,31947,31948,31949,31950,31951,31952,31953,31954,31955,31956,31957,31958,31959,31960,31961,31962,31963,31964,31965,31966,31967,31968,31969,31970,31971,31972,31973,31974,31975,31976,31977,31978,31979,31980,31981,31982,31983,31984,31985,31986,31987,31988,31989,31990,31991,31992,31993,31994,31995,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32010,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32032,32033,32034,32035,32036,32037,32038,32039,32040,32041,32042,32043,32044,32045,32046,32047,32048,32049,32050,32051,32052,32053,32054,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32110,32111,32112,32113,32114,32115,32116,32117,32118,32119,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32166,32167,32168,32169,32170,32171,32172,32173,32174,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224'/>
+  </group>
+  <group name='303'>
+    <ids val='32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32315,32316,32317,32318,32319,32320,32321,32322,32323,32324,32325,32326,32327,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32386,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32411,32412,32413,32414,32415,32416,32417,32418,32419,32420,32421,32422,32423,32424,32425,32426,32427,32428,32429,32430,32431,32432,32433,32434,32435,32436,32437,32438,32439,32440,32441,32442,32443,32444,32445,32446,32447,32448,32449,32450,32451,32452,32453,32454,32455,32456,32457,32458,32459,32460,32461,32462,32463,32464,32465,32466,32467,32468,32469,32470,32471,32472,32473,32474,32475,32476,32477,32478,32479,32480,32481,32482,32483,32484,32485,32486,32487,32488,32489,32490,32491,32492,32493,32494,32495,32496,32497,32498,32499,32500,32501,32502,32503,32504,32505,32506,32507,32508,32509,32510,32511,32512,32513,32514,32515,32516,32517,32518,32519,32520,32521,32522,32523,32524,32525,32526,32527,32528'/>
+  </group>
+  <group name='303'>
+    <ids val='32529,32530,32531,32532,32533,32534,32535,32536,32537,32538,32539,32540,32541,32542,32543,32544,32545,32546,32547,32548,32549,32550,32551,32552,32553,32554,32555,32556,32557,32558,32559,32560,32561,32562,32563,32564,32565,32566,32567,32568,32569,32570,32571,32572,32573,32574,32575,32576,32577,32578,32579,32580,32581,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32592,32593,32594,32595,32596,32597,32598,32599,32600,32601,32602,32603,32604,32605,32606,32607,32608,32609,32610,32611,32612,32613,32614,32615,32616,32617,32618,32619,32620,32621,32622,32623,32624,32625,32626,32627,32628,32629,32630,32631,32632,32633,32634,32635,32636,32637,32638,32639,32640,32641,32642,32643,32644,32645,32646,32647,32648,32649,32650,32651,32652,32653,32654,32655,32656,32657,32658,32659,32660,32661,32662,32663,32664,32665,32666,32667,32668,32669,32670,32671,32672,32673,32674,32675,32676,32677,32678,32679,32680,32681,32682,32683,32684,32685,32686,32687,32688,32689,32690,32691,32692,32693,32694,32695,32696,32697,32698,32699,32700,32701,32702,32703,32704,32705,32706,32707,32708,32709,32710,32711,32712,32713,32714,32715,32716,32717,32718,32719,32720,32721,32722,32723,32724,32725,32726,32727,32728,32729,32730,32731,32732,32733,32734,32735,32736,32737,32738,32739,32740,32741,32742,32743,32744,32745,32746,32747,32748,32749,32750,32751,32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767,32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783,32784,32785,32786,32787,32788,32789,32790,32791,32792,32793,32794,32795,32796,32797,32798,32799,32800,32801,32802,32803,32804,32805,32806,32807,32808,32809,32810,32811,32812,32813,32814,32815,32816,32817,32818,32819,32820,32821,32822,32823,32824,32825,32826,32827,32828,32829,32830,32831,32832'/>
+  </group>
+  <group name='303'>
+    <ids val='32833,32834,32835,32836,32837,32838,32839,32840,32841,32842,32843,32844,32845,32846,32847,32848,32849,32850,32851,32852,32853,32854,32855,32856,32857,32858,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32873,32874,32875,32876,32877,32878,32879,32880,32881,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,32894,32895,32896,32897,32898,32899,32900,32901,32902,32903,32904,32905,32906,32907,32908,32909,32910,32911,32912,32913,32914,32915,32916,32917,32918,32919,32920,32921,32922,32923,32924,32925,32926,32927,32928,32929,32930,32931,32932,32933,32934,32935,32936,32937,32938,32939,32940,32941,32942,32943,32944,32945,32946,32947,32948,32949,32950,32951,32952,32953,32954,32955,32956,32957,32958,32959,32960,32961,32962,32963,32964,32965,32966,32967,32968,32969,32970,32971,32972,32973,32974,32975,32976,32977,32978,32979,32980,32981,32982,32983,32984,32985,32986,32987,32988,32989,32990,32991,32992,32993,32994,32995,32996,32997,32998,32999,33000,33001,33002,33003,33004,33005,33006,33007,33008,33009,33010,33011,33012,33013,33014,33015,33016,33017,33018,33019,33020,33021,33022,33023,33024,33025,33026,33027,33028,33029,33030,33031,33032,33033,33034,33035,33036,33037,33038,33039,33040,33041,33042,33043,33044,33045,33046,33047,33048,33049,33050,33051,33052,33053,33054,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33068,33069,33070,33071,33072,33073,33074,33075,33076,33077,33078,33079,33080,33081,33082,33083,33084,33085,33086,33087,33088,33089,33090,33091,33092,33093,33094,33095,33096,33097,33098,33099,33100,33101,33102,33103,33104,33105,33106,33107,33108,33109,33110,33111,33112,33113,33114,33115,33116,33117,33118,33119,33120,33121,33122,33123,33124,33125,33126,33127,33128,33129,33130,33131,33132,33133,33134,33135,33136'/>
+  </group>
+  <group name='303'>
+    <ids val='33137,33138,33139,33140,33141,33142,33143,33144,33145,33146,33147,33148,33149,33150,33151,33152,33153,33154,33155,33156,33157,33158,33159,33160,33161,33162,33163,33164,33165,33166,33167,33168,33169,33170,33171,33172,33173,33174,33175,33176,33177,33178,33179,33180,33181,33182,33183,33184,33185,33186,33187,33188,33189,33190,33191,33192,33193,33194,33195,33196,33197,33198,33199,33200,33201,33202,33203,33204,33205,33206,33207,33208,33209,33210,33211,33212,33213,33214,33215,33216,33217,33218,33219,33220,33221,33222,33223,33224,33225,33226,33227,33228,33229,33230,33231,33232,33233,33234,33235,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33251,33252,33253,33254,33255,33256,33257,33258,33259,33260,33261,33262,33263,33264,33265,33266,33267,33268,33269,33270,33271,33272,33273,33274,33275,33276,33277,33278,33279,33280,33281,33282,33283,33284,33285,33286,33287,33288,33289,33290,33291,33292,33293,33294,33295,33296,33297,33298,33299,33300,33301,33302,33303,33304,33305,33306,33307,33308,33309,33310,33311,33312,33313,33314,33315,33316,33317,33318,33319,33320,33321,33322,33323,33324,33325,33326,33327,33328,33329,33330,33331,33332,33333,33334,33335,33336,33337,33338,33339,33340,33341,33342,33343,33344,33345,33346,33347,33348,33349,33350,33351,33352,33353,33354,33355,33356,33357,33358,33359,33360,33361,33362,33363,33364,33365,33366,33367,33368,33369,33370,33371,33372,33373,33374,33375,33376,33377,33378,33379,33380,33381,33382,33383,33384,33385,33386,33387,33388,33389,33390,33391,33392,33393,33394,33395,33396,33397,33398,33399,33400,33401,33402,33403,33404,33405,33406,33407,33408,33409,33410,33411,33412,33413,33414,33415,33416,33417,33418,33419,33420,33421,33422,33423,33424,33425,33426,33427,33428,33429,33430,33431,33432,33433,33434,33435,33436,33437,33438,33439,33440'/>
+  </group>
+  <group name='303'>
+    <ids val='33441,33442,33443,33444,33445,33446,33447,33448,33449,33450,33451,33452,33453,33454,33455,33456,33457,33458,33459,33460,33461,33462,33463,33464,33465,33466,33467,33468,33469,33470,33471,33472,33473,33474,33475,33476,33477,33478,33479,33480,33481,33482,33483,33484,33485,33486,33487,33488,33489,33490,33491,33492,33493,33494,33495,33496,33497,33498,33499,33500,33501,33502,33503,33504,33505,33506,33507,33508,33509,33510,33511,33512,33513,33514,33515,33516,33517,33518,33519,33520,33521,33522,33523,33524,33525,33526,33527,33528,33529,33530,33531,33532,33533,33534,33535,33536,33537,33538,33539,33540,33541,33542,33543,33544,33545,33546,33547,33548,33549,33550,33551,33552,33553,33554,33555,33556,33557,33558,33559,33560,33561,33562,33563,33564,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33575,33576,33577,33578,33579,33580,33581,33582,33583,33584,33585,33586,33587,33588,33589,33590,33591,33592,33593,33594,33595,33596,33597,33598,33599,33600,33601,33602,33603,33604,33605,33606,33607,33608,33609,33610,33611,33612,33613,33614,33615,33616,33617,33618,33619,33620,33621,33622,33623,33624,33625,33626,33627,33628,33629,33630,33631,33632,33633,33634,33635,33636,33637,33638,33639,33640,33641,33642,33643,33644,33645,33646,33647,33648,33649,33650,33651,33652,33653,33654,33655,33656,33657,33658,33659,33660,33661,33662,33663,33664,33665,33666,33667,33668,33669,33670,33671,33672,33673,33674,33675,33676,33677,33678,33679,33680,33681,33682,33683,33684,33685,33686,33687,33688,33689,33690,33691,33692,33693,33694,33695,33696,33697,33698,33699,33700,33701,33702,33703,33704,33705,33706,33707,33708,33709,33710,33711,33712,33713,33714,33715,33716,33717,33718,33719,33720,33721,33722,33723,33724,33725,33726,33727,33728,33729,33730,33731,33732,33733,33734,33735,33736,33737,33738,33739,33740,33741,33742,33743,33744'/>
+  </group>
+  <group name='303'>
+    <ids val='33745,33746,33747,33748,33749,33750,33751,33752,33753,33754,33755,33756,33757,33758,33759,33760,33761,33762,33763,33764,33765,33766,33767,33768,33769,33770,33771,33772,33773,33774,33775,33776,33777,33778,33779,33780,33781,33782,33783,33784,33785,33786,33787,33788,33789,33790,33791,33792,33793,33794,33795,33796,33797,33798,33799,33800,33801,33802,33803,33804,33805,33806,33807,33808,33809,33810,33811,33812,33813,33814,33815,33816,33817,33818,33819,33820,33821,33822,33823,33824,33825,33826,33827,33828,33829,33830,33831,33832,33833,33834,33835,33836,33837,33838,33839,33840,33841,33842,33843,33844,33845,33846,33847,33848,33849,33850,33851,33852,33853,33854,33855,33856,33857,33858,33859,33860,33861,33862,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33873,33874,33875,33876,33877,33878,33879,33880,33881,33882,33883,33884,33885,33886,33887,33888,33889,33890,33891,33892,33893,33894,33895,33896,33897,33898,33899,33900,33901,33902,33903,33904,33905,33906,33907,33908,33909,33910,33911,33912,33913,33914,33915,33916,33917,33918,33919,33920,33921,33922,33923,33924,33925,33926,33927,33928,33929,33930,33931,33932,33933,33934,33935,33936,33937,33938,33939,33940,33941,33942,33943,33944,33945,33946,33947,33948,33949,33950,33951,33952,33953,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33967,33968,33969,33970,33971,33972,33973,33974,33975,33976,33977,33978,33979,33980,33981,33982,33983,33984,33985,33986,33987,33988,33989,33990,33991,33992,33993,33994,33995,33996,33997,33998,33999,34000,34001,34002,34003,34004,34005,34006,34007,34008,34009,34010,34011,34012,34013,34014,34015,34016,34017,34018,34019,34020,34021,34022,34023,34024,34025,34026,34027,34028,34029,34030,34031,34032,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34044,34045,34046,34047,34048'/>
+  </group>
+  <group name='303'>
+    <ids val='34049,34050,34051,34052,34053,34054,34055,34056,34057,34058,34059,34060,34061,34062,34063,34064,34065,34066,34067,34068,34069,34070,34071,34072,34073,34074,34075,34076,34077,34078,34079,34080,34081,34082,34083,34084,34085,34086,34087,34088,34089,34090,34091,34092,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34103,34104,34105,34106,34107,34108,34109,34110,34111,34112,34113,34114,34115,34116,34117,34118,34119,34120,34121,34122,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34134,34135,34136,34137,34138,34139,34140,34141,34142,34143,34144,34145,34146,34147,34148,34149,34150,34151,34152,34153,34154,34155,34156,34157,34158,34159,34160,34161,34162,34163,34164,34165,34166,34167,34168,34169,34170,34171,34172,34173,34174,34175,34176,34177,34178,34179,34180,34181,34182,34183,34184,34185,34186,34187,34188,34189,34190,34191,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34203,34204,34205,34206,34207,34208,34209,34210,34211,34212,34213,34214,34215,34216,34217,34218,34219,34220,34221,34222,34223,34224,34225,34226,34227,34228,34229,34230,34231,34232,34233,34234,34235,34236,34237,34238,34239,34240,34241,34242,34243,34244,34245,34246,34247,34248,34249,34250,34251,34252,34253,34254,34255,34256,34257,34258,34259,34260,34261,34262,34263,34264,34265,34266,34267,34268,34269,34270,34271,34272,34273,34274,34275,34276,34277,34278,34279,34280,34281,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,34297,34298,34299,34300,34301,34302,34303,34304,34305,34306,34307,34308,34309,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34321,34322,34323,34324,34325,34326,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34343,34344,34345,34346,34347,34348,34349,34350,34351,34352'/>
+  </group>
+  <group name='303'>
+    <ids val='34353,34354,34355,34356,34357,34358,34359,34360,34361,34362,34363,34364,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34381,34382,34383,34384,34385,34386,34387,34388,34389,34390,34391,34392,34393,34394,34395,34396,34397,34398,34399,34400,34401,34402,34403,34404,34405,34406,34407,34408,34409,34410,34411,34412,34413,34414,34415,34416,34417,34418,34419,34420,34421,34422,34423,34424,34425,34426,34427,34428,34429,34430,34431,34432,34433,34434,34435,34436,34437,34438,34439,34440,34441,34442,34443,34444,34445,34446,34447,34448,34449,34450,34451,34452,34453,34454,34455,34456,34457,34458,34459,34460,34461,34462,34463,34464,34465,34466,34467,34468,34469,34470,34471,34472,34473,34474,34475,34476,34477,34478,34479,34480,34481,34482,34483,34484,34485,34486,34487,34488,34489,34490,34491,34492,34493,34494,34495,34496,34497,34498,34499,34500,34501,34502,34503,34504,34505,34506,34507,34508,34509,34510,34511,34512,34513,34514,34515,34516,34517,34518,34519,34520,34521,34522,34523,34524,34525,34526,34527,34528,34529,34530,34531,34532,34533,34534,34535,34536,34537,34538,34539,34540,34541,34542,34543,34544,34545,34546,34547,34548,34549,34550,34551,34552,34553,34554,34555,34556,34557,34558,34559,34560,34561,34562,34563,34564,34565,34566,34567,34568,34569,34570,34571,34572,34573,34574,34575,34576,34577,34578,34579,34580,34581,34582,34583,34584,34585,34586,34587,34588,34589,34590,34591,34592,34593,34594,34595,34596,34597,34598,34599,34600,34601,34602,34603,34604,34605,34606,34607,34608,34609,34610,34611,34612,34613,34614,34615,34616,34617,34618,34619,34620,34621,34622,34623,34624,34625,34626,34627,34628,34629,34630,34631,34632,34633,34634,34635,34636,34637,34638,34639,34640,34641,34642,34643,34644,34645,34646,34647,34648,34649,34650,34651,34652,34653,34654,34655,34656'/>
+  </group>
+  <group name='303'>
+    <ids val='34657,34658,34659,34660,34661,34662,34663,34664,34665,34666,34667,34668,34669,34670,34671,34672,34673,34674,34675,34676,34677,34678,34679,34680,34681,34682,34683,34684,34685,34686,34687,34688,34689,34690,34691,34692,34693,34694,34695,34696,34697,34698,34699,34700,34701,34702,34703,34704,34705,34706,34707,34708,34709,34710,34711,34712,34713,34714,34715,34716,34717,34718,34719,34720,34721,34722,34723,34724,34725,34726,34727,34728,34729,34730,34731,34732,34733,34734,34735,34736,34737,34738,34739,34740,34741,34742,34743,34744,34745,34746,34747,34748,34749,34750,34751,34752,34753,34754,34755,34756,34757,34758,34759,34760,34761,34762,34763,34764,34765,34766,34767,34768,34769,34770,34771,34772,34773,34774,34775,34776,34777,34778,34779,34780,34781,34782,34783,34784,34785,34786,34787,34788,34789,34790,34791,34792,34793,34794,34795,34796,34797,34798,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34809,34810,34811,34812,34813,34814,34815,34816,34817,34818,34819,34820,34821,34822,34823,34824,34825,34826,34827,34828,34829,34830,34831,34832,34833,34834,34835,34836,34837,34838,34839,34840,34841,34842,34843,34844,34845,34846,34847,34848,34849,34850,34851,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34866,34867,34868,34869,34870,34871,34872,34873,34874,34875,34876,34877,34878,34879,34880,34881,34882,34883,34884,34885,34886,34887,34888,34889,34890,34891,34892,34893,34894,34895,34896,34897,34898,34899,34900,34901,34902,34903,34904,34905,34906,34907,34908,34909,34910,34911,34912,34913,34914,34915,34916,34917,34918,34919,34920,34921,34922,34923,34924,34925,34926,34927,34928,34929,34930,34931,34932,34933,34934,34935,34936,34937,34938,34939,34940,34941,34942,34943,34944,34945,34946,34947,34948,34949,34950,34951,34952,34953,34954,34955,34956,34957,34958,34959,34960'/>
+  </group>
+  <group name='303'>
+    <ids val='34961,34962,34963,34964,34965,34966,34967,34968,34969,34970,34971,34972,34973,34974,34975,34976,34977,34978,34979,34980,34981,34982,34983,34984,34985,34986,34987,34988,34989,34990,34991,34992,34993,34994,34995,34996,34997,34998,34999,35000,35001,35002,35003,35004,35005,35006,35007,35008,35009,35010,35011,35012,35013,35014,35015,35016,35017,35018,35019,35020,35021,35022,35023,35024,35025,35026,35027,35028,35029,35030,35031,35032,35033,35034,35035,35036,35037,35038,35039,35040,35041,35042,35043,35044,35045,35046,35047,35048,35049,35050,35051,35052,35053,35054,35055,35056,35057,35058,35059,35060,35061,35062,35063,35064,35065,35066,35067,35068,35069,35070,35071,35072,35073,35074,35075,35076,35077,35078,35079,35080,35081,35082,35083,35084,35085,35086,35087,35088,35089,35090,35091,35092,35093,35094,35095,35096,35097,35098,35099,35100,35101,35102,35103,35104,35105,35106,35107,35108,35109,35110,35111,35112,35113,35114,35115,35116,35117,35118,35119,35120,35121,35122,35123,35124,35125,35126,35127,35128,35129,35130,35131,35132,35133,35134,35135,35136,35137,35138,35139,35140,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35166,35167,35168,35169,35170,35171,35172,35173,35174,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35195,35196,35197,35198,35199,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264'/>
+  </group>
+  <group name='303'>
+    <ids val='35265,35266,35267,35268,35269,35270,35271,35272,35273,35274,35275,35276,35277,35278,35279,35280,35281,35282,35283,35284,35285,35286,35287,35288,35289,35290,35291,35292,35293,35294,35295,35296,35297,35298,35299,35300,35301,35302,35303,35304,35305,35306,35307,35308,35309,35310,35311,35312,35313,35314,35315,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35328,35329,35330,35331,35332,35333,35334,35335,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35390,35391,35392,35393,35394,35395,35396,35397,35398,35399,35400,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35449,35450,35451,35452,35453,35454,35455,35456,35457,35458,35459,35460,35461,35462,35463,35464,35465,35466,35467,35468,35469,35470,35471,35472,35473,35474,35475,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568'/>
+  </group>
+  <group name='303'>
+    <ids val='35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35591,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35622,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35686,35687,35688,35689,35690,35691,35692,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35744,35745,35746,35747,35748,35749,35750,35751,35752,35753,35754,35755,35756,35757,35758,35759,35760,35761,35762,35763,35764,35765,35766,35767,35768,35769,35770,35771,35772,35773,35774,35775,35776,35777,35778,35779,35780,35781,35782,35783,35784,35785,35786,35787,35788,35789,35790,35791,35792,35793,35794,35795,35796,35797,35798,35799,35800,35801,35802,35803,35804,35805,35806,35807,35808,35809,35810,35811,35812,35813,35814,35815,35816,35817,35818,35819,35820,35821,35822,35823,35824,35825,35826,35827,35828,35829,35830,35831,35832,35833,35834,35835,35836,35837,35838,35839,35840,35841,35842,35843,35844,35845,35846,35847,35848,35849,35850,35851,35852,35853,35854,35855,35856,35857,35858,35859,35860,35861,35862,35863,35864,35865,35866,35867,35868,35869,35870,35871,35872'/>
+  </group>
+  <group name='303'>
+    <ids val='35873,35874,35875,35876,35877,35878,35879,35880,35881,35882,35883,35884,35885,35886,35887,35888,35889,35890,35891,35892,35893,35894,35895,35896,35897,35898,35899,35900,35901,35902,35903,35904,35905,35906,35907,35908,35909,35910,35911,35912,35913,35914,35915,35916,35917,35918,35919,35920,35921,35922,35923,35924,35925,35926,35927,35928,35929,35930,35931,35932,35933,35934,35935,35936,35937,35938,35939,35940,35941,35942,35943,35944,35945,35946,35947,35948,35949,35950,35951,35952,35953,35954,35955,35956,35957,35958,35959,35960,35961,35962,35963,35964,35965,35966,35967,35968,35969,35970,35971,35972,35973,35974,35975,35976,35977,35978,35979,35980,35981,35982,35983,35984,35985,35986,35987,35988,35989,35990,35991,35992,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36125,36126,36127,36128,36129,36130,36131,36132,36133,36134,36135,36136,36137,36138,36139,36140,36141,36142,36143,36144,36145,36146,36147,36148,36149,36150,36151,36152,36153,36154,36155,36156,36157,36158,36159,36160,36161,36162,36163,36164,36165,36166,36167,36168,36169,36170,36171,36172,36173,36174,36175,36176'/>
+  </group>
+  <group name='303'>
+    <ids val='36177,36178,36179,36180,36181,36182,36183,36184,36185,36186,36187,36188,36189,36190,36191,36192,36193,36194,36195,36196,36197,36198,36199,36200,36201,36202,36203,36204,36205,36206,36207,36208,36209,36210,36211,36212,36213,36214,36215,36216,36217,36218,36219,36220,36221,36222,36223,36224,36225,36226,36227,36228,36229,36230,36231,36232,36233,36234,36235,36236,36237,36238,36239,36240,36241,36242,36243,36244,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36255,36256,36257,36258,36259,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36273,36274,36275,36276,36277,36278,36279,36280,36281,36282,36283,36284,36285,36286,36287,36288,36289,36290,36291,36292,36293,36294,36295,36296,36297,36298,36299,36300,36301,36302,36303,36304,36305,36306,36307,36308,36309,36310,36311,36312,36313,36314,36315,36316,36317,36318,36319,36320,36321,36322,36323,36324,36325,36326,36327,36328,36329,36330,36331,36332,36333,36334,36335,36336,36337,36338,36339,36340,36341,36342,36343,36344,36345,36346,36347,36348,36349,36350,36351,36352,36353,36354,36355,36356,36357,36358,36359,36360,36361,36362,36363,36364,36365,36366,36367,36368,36369,36370,36371,36372,36373,36374,36375,36376,36377,36378,36379,36380,36381,36382,36383,36384,36385,36386,36387,36388,36389,36390,36391,36392,36393,36394,36395,36396,36397,36398,36399,36400,36401,36402,36403,36404,36405,36406,36407,36408,36409,36410,36411,36412,36413,36414,36415,36416,36417,36418,36419,36420,36421,36422,36423,36424,36425,36426,36427,36428,36429,36430,36431,36432,36433,36434,36435,36436,36437,36438,36439,36440,36441,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36454,36455,36456,36457,36458,36459,36460,36461,36462,36463,36464,36465,36466,36467,36468,36469,36470,36471,36472,36473,36474,36475,36476,36477,36478,36479,36480'/>
+  </group>
+  <group name='303'>
+    <ids val='36481,36482,36483,36484,36485,36486,36487,36488,36489,36490,36491,36492,36493,36494,36495,36496,36497,36498,36499,36500,36501,36502,36503,36504,36505,36506,36507,36508,36509,36510,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36523,36524,36525,36526,36527,36528,36529,36530,36531,36532,36533,36534,36535,36536,36537,36538,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36558,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36710,36711,36712,36713,36714,36715,36716,36717,36718,36719,36720,36721,36722,36723,36724,36725,36726,36727,36728,36729,36730,36731,36732,36733,36734,36735,36736,36737,36738,36739,36740,36741,36742,36743,36744,36745,36746,36747,36748,36749,36750,36751,36752,36753,36754,36755,36756,36757,36758,36759,36760,36761,36762,36763,36764,36765,36766,36767,36768,36769,36770,36771,36772,36773,36774,36775,36776,36777,36778,36779,36780,36781,36782,36783,36784'/>
+  </group>
+  <group name='303'>
+    <ids val='36785,36786,36787,36788,36789,36790,36791,36792,36793,36794,36795,36796,36797,36798,36799,36800,36801,36802,36803,36804,36805,36806,36807,36808,36809,36810,36811,36812,36813,36814,36815,36816,36817,36818,36819,36820,36821,36822,36823,36824,36825,36826,36827,36828,36829,36830,36831,36832,36833,36834,36835,36836,36837,36838,36839,36840,36841,36842,36843,36844,36845,36846,36847,36848,36849,36850,36851,36852,36853,36854,36855,36856,36857,36858,36859,36860,36861,36862,36863,36864,36865,36866,36867,36868,36869,36870,36871,36872,36873,36874,36875,36876,36877,36878,36879,36880,36881,36882,36883,36884,36885,36886,36887,36888,36889,36890,36891,36892,36893,36894,36895,36896,36897,36898,36899,36900,36901,36902,36903,36904,36905,36906,36907,36908,36909,36910,36911,36912,36913,36914,36915,36916,36917,36918,36919,36920,36921,36922,36923,36924,36925,36926,36927,36928,36929,36930,36931,36932,36933,36934,36935,36936,36937,36938,36939,36940,36941,36942,36943,36944,36945,36946,36947,36948,36949,36950,36951,36952,36953,36954,36955,36956,36957,36958,36959,36960,36961,36962,36963,36964,36965,36966,36967,36968,36969,36970,36971,36972,36973,36974,36975,36976,36977,36978,36979,36980,36981,36982,36983,36984,36985,36986,36987,36988,36989,36990,36991,36992,36993,36994,36995,36996,36997,36998,36999,37000,37001,37002,37003,37004,37005,37006,37007,37008,37009,37010,37011,37012,37013,37014,37015,37016,37017,37018,37019,37020,37021,37022,37023,37024,37025,37026,37027,37028,37029,37030,37031,37032,37033,37034,37035,37036,37037,37038,37039,37040,37041,37042,37043,37044,37045,37046,37047,37048,37049,37050,37051,37052,37053,37054,37055,37056,37057,37058,37059,37060,37061,37062,37063,37064,37065,37066,37067,37068,37069,37070,37071,37072,37073,37074,37075,37076,37077,37078,37079,37080,37081,37082,37083,37084,37085,37086,37087,37088'/>
+  </group>
+  <group name='303'>
+    <ids val='37089,37090,37091,37092,37093,37094,37095,37096,37097,37098,37099,37100,37101,37102,37103,37104,37105,37106,37107,37108,37109,37110,37111,37112,37113,37114,37115,37116,37117,37118,37119,37120,37121,37122,37123,37124,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37145,37146,37147,37148,37149,37150,37151,37152,37153,37154,37155,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37167,37168,37169,37170,37171,37172,37173,37174,37175,37176,37177,37178,37179,37180,37181,37182,37183,37184,37185,37186,37187,37188,37189,37190,37191,37192,37193,37194,37195,37196,37197,37198,37199,37200,37201,37202,37203,37204,37205,37206,37207,37208,37209,37210,37211,37212,37213,37214,37215,37216,37217,37218,37219,37220,37221,37222,37223,37224,37225,37226,37227,37228,37229,37230,37231,37232,37233,37234,37235,37236,37237,37238,37239,37240,37241,37242,37243,37244,37245,37246,37247,37248,37249,37250,37251,37252,37253,37254,37255,37256,37257,37258,37259,37260,37261,37262,37263,37264,37265,37266,37267,37268,37269,37270,37271,37272,37273,37274,37275,37276,37277,37278,37279,37280,37281,37282,37283,37284,37285,37286,37287,37288,37289,37290,37291,37292,37293,37294,37295,37296,37297,37298,37299,37300,37301,37302,37303,37304,37305,37306,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37319,37320,37321,37322,37323,37324,37325,37326,37327,37328,37329,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37340,37341,37342,37343,37344,37345,37346,37347,37348,37349,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392'/>
+  </group>
+  <group name='303'>
+    <ids val='37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37492,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37518,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,37544,37545,37546,37547,37548,37549,37550,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37576,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37694,37695,37696'/>
+  </group>
+  <group name='303'>
+    <ids val='37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37738,37739,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37775,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37834,37835,37836,37837,37838,37839,37840,37841,37842,37843,37844,37845,37846,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37950,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37995,37996,37997,37998,37999,38000'/>
+  </group>
+  <group name='303'>
+    <ids val='38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38021,38022,38023,38024,38025,38026,38027,38028,38029,38030,38031,38032,38033,38034,38035,38036,38037,38038,38039,38040,38041,38042,38043,38044,38045,38046,38047,38048,38049,38050,38051,38052,38053,38054,38055,38056,38057,38058,38059,38060,38061,38062,38063,38064,38065,38066,38067,38068,38069,38070,38071,38072,38073,38074,38075,38076,38077,38078,38079,38080,38081,38082,38083,38084,38085,38086,38087,38088,38089,38090,38091,38092,38093,38094,38095,38096,38097,38098,38099,38100,38101,38102,38103,38104,38105,38106,38107,38108,38109,38110,38111,38112,38113,38114,38115,38116,38117,38118,38119,38120,38121,38122,38123,38124,38125,38126,38127,38128,38129,38130,38131,38132,38133,38134,38135,38136,38137,38138,38139,38140,38141,38142,38143,38144,38145,38146,38147,38148,38149,38150,38151,38152,38153,38154,38155,38156,38157,38158,38159,38160,38161,38162,38163,38164,38165,38166,38167,38168,38169,38170,38171,38172,38173,38174,38175,38176,38177,38178,38179,38180,38181,38182,38183,38184,38185,38186,38187,38188,38189,38190,38191,38192,38193,38194,38195,38196,38197,38198,38199,38200,38201,38202,38203,38204,38205,38206,38207,38208,38209,38210,38211,38212,38213,38214,38215,38216,38217,38218,38219,38220,38221,38222,38223,38224,38225,38226,38227,38228,38229,38230,38231,38232,38233,38234,38235,38236,38237,38238,38239,38240,38241,38242,38243,38244,38245,38246,38247,38248,38249,38250,38251,38252,38253,38254,38255,38256,38257,38258,38259,38260,38261,38262,38263,38264,38265,38266,38267,38268,38269,38270,38271,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304'/>
+  </group>
+  <group name='303'>
+    <ids val='38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38376,38377,38378,38379,38380,38381,38382,38383,38384,38385,38386,38387,38388,38389,38390,38391,38392,38393,38394,38395,38396,38397,38398,38399,38400,38401,38402,38403,38404,38405,38406,38407,38408,38409,38410,38411,38412,38413,38414,38415,38416,38417,38418,38419,38420,38421,38422,38423,38424,38425,38426,38427,38428,38429,38430,38431,38432,38433,38434,38435,38436,38437,38438,38439,38440,38441,38442,38443,38444,38445,38446,38447,38448,38449,38450,38451,38452,38453,38454,38455,38456,38457,38458,38459,38460,38461,38462,38463,38464,38465,38466,38467,38468,38469,38470,38471,38472,38473,38474,38475,38476,38477,38478,38479,38480,38481,38482,38483,38484,38485,38486,38487,38488,38489,38490,38491,38492,38493,38494,38495,38496,38497,38498,38499,38500,38501,38502,38503,38504,38505,38506,38507,38508,38509,38510,38511,38512,38513,38514,38515,38516,38517,38518,38519,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38533,38534,38535,38536,38537,38538,38539,38540,38541,38542,38543,38544,38545,38546,38547,38548,38549,38550,38551,38552,38553,38554,38555,38556,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38567,38568,38569,38570,38571,38572,38573,38574,38575,38576,38577,38578,38579,38580,38581,38582,38583,38584,38585,38586,38587,38588,38589,38590,38591,38592,38593,38594,38595,38596,38597,38598,38599,38600,38601,38602,38603,38604,38605,38606,38607,38608'/>
+  </group>
+  <group name='303'>
+    <ids val='38609,38610,38611,38612,38613,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38624,38625,38626,38627,38628,38629,38630,38631,38632,38633,38634,38635,38636,38637,38638,38639,38640,38641,38642,38643,38644,38645,38646,38647,38648,38649,38650,38651,38652,38653,38654,38655,38656,38657,38658,38659,38660,38661,38662,38663,38664,38665,38666,38667,38668,38669,38670,38671,38672,38673,38674,38675,38676,38677,38678,38679,38680,38681,38682,38683,38684,38685,38686,38687,38688,38689,38690,38691,38692,38693,38694,38695,38696,38697,38698,38699,38700,38701,38702,38703,38704,38705,38706,38707,38708,38709,38710,38711,38712,38713,38714,38715,38716,38717,38718,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38738,38739,38740,38741,38742,38743,38744,38745,38746,38747,38748,38749,38750,38751,38752,38753,38754,38755,38756,38757,38758,38759,38760,38761,38762,38763,38764,38765,38766,38767,38768,38769,38770,38771,38772,38773,38774,38775,38776,38777,38778,38779,38780,38781,38782,38783,38784,38785,38786,38787,38788,38789,38790,38791,38792,38793,38794,38795,38796,38797,38798,38799,38800,38801,38802,38803,38804,38805,38806,38807,38808,38809,38810,38811,38812,38813,38814,38815,38816,38817,38818,38819,38820,38821,38822,38823,38824,38825,38826,38827,38828,38829,38830,38831,38832,38833,38834,38835,38836,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38886,38887,38888,38889,38890,38891,38892,38893,38894,38895,38896,38897,38898,38899,38900,38901,38902,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912'/>
+  </group>
+  <group name='303'>
+    <ids val='38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,39023,39024,39025,39026,39027,39028,39029,39030,39031,39032,39033,39034,39035,39036,39037,39038,39039,39040,39041,39042,39043,39044,39045,39046,39047,39048,39049,39050,39051,39052,39053,39054,39055,39056,39057,39058,39059,39060,39061,39062,39063,39064,39065,39066,39067,39068,39069,39070,39071,39072,39073,39074,39075,39076,39077,39078,39079,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39118,39119,39120,39121,39122,39123,39124,39125,39126,39127,39128,39129,39130,39131,39132,39133,39134,39135,39136,39137,39138,39139,39140,39141,39142,39143,39144,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,39176,39177,39178,39179,39180,39181,39182,39183,39184,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39214,39215,39216'/>
+  </group>
+  <group name='303'>
+    <ids val='39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39252,39253,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39267,39268,39269,39270,39271,39272,39273,39274,39275,39276,39277,39278,39279,39280,39281,39282,39283,39284,39285,39286,39287,39288,39289,39290,39291,39292,39293,39294,39295,39296,39297,39298,39299,39300,39301,39302,39303,39304,39305,39306,39307,39308,39309,39310,39311,39312,39313,39314,39315,39316,39317,39318,39319,39320,39321,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39333,39334,39335,39336,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39514,39515,39516,39517,39518,39519,39520'/>
+  </group>
+  <group name='303'>
+    <ids val='39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39532,39533,39534,39535,39536,39537,39538,39539,39540,39541,39542,39543,39544,39545,39546,39547,39548,39549,39550,39551,39552,39553,39554,39555,39556,39557,39558,39559,39560,39561,39562,39563,39564,39565,39566,39567,39568,39569,39570,39571,39572,39573,39574,39575,39576,39577,39578,39579,39580,39581,39582,39583,39584,39585,39586,39587,39588,39589,39590,39591,39592,39593,39594,39595,39596,39597,39598,39599,39600,39601,39602,39603,39604,39605,39606,39607,39608,39609,39610,39611,39612,39613,39614,39615,39616,39617,39618,39619,39620,39621,39622,39623,39624,39625,39626,39627,39628,39629,39630,39631,39632,39633,39634,39635,39636,39637,39638,39639,39640,39641,39642,39643,39644,39645,39646,39647,39648,39649,39650,39651,39652,39653,39654,39655,39656,39657,39658,39659,39660,39661,39662,39663,39664,39665,39666,39667,39668,39669,39670,39671,39672,39673,39674,39675,39676,39677,39678,39679,39680,39681,39682,39683,39684,39685,39686,39687,39688,39689,39690,39691,39692,39693,39694,39695,39696,39697,39698,39699,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39711,39712,39713,39714,39715,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39727,39728,39729,39730,39731,39732,39733,39734,39735,39736,39737,39738,39739,39740,39741,39742,39743,39744,39745,39746,39747,39748,39749,39750,39751,39752,39753,39754,39755,39756,39757,39758,39759,39760,39761,39762,39763,39764,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824'/>
+  </group>
+  <group name='303'>
+    <ids val='39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40060,40061,40062,40063,40064,40065,40066,40067,40068,40069,40070,40071,40072,40073,40074,40075,40076,40077,40078,40079,40080,40081,40082,40083,40084,40085,40086,40087,40088,40089,40090,40091,40092,40093,40094,40095,40096,40097,40098,40099,40100,40101,40102,40103,40104,40105,40106,40107,40108,40109,40110,40111,40112,40113,40114,40115,40116,40117,40118,40119,40120,40121,40122,40123,40124,40125,40126,40127,40128'/>
+  </group>
+  <group name='303'>
+    <ids val='40129,40130,40131,40132,40133,40134,40135,40136,40137,40138,40139,40140,40141,40142,40143,40144,40145,40146,40147,40148,40149,40150,40151,40152,40153,40154,40155,40156,40157,40158,40159,40160,40161,40162,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432'/>
+  </group>
+  <group name='303'>
+    <ids val='40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40479,40480,40481,40482,40483,40484,40485,40486,40487,40488,40489,40490,40491,40492,40493,40494,40495,40496,40497,40498,40499,40500,40501,40502,40503,40504,40505,40506,40507,40508,40509,40510,40511,40512,40513,40514,40515,40516,40517,40518,40519,40520,40521,40522,40523,40524,40525,40526,40527,40528,40529,40530,40531,40532,40533,40534,40535,40536,40537,40538,40539,40540,40541,40542,40543,40544,40545,40546,40547,40548,40549,40550,40551,40552,40553,40554,40555,40556,40557,40558,40559,40560,40561,40562,40563,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40574,40575,40576,40577,40578,40579,40580,40581,40582,40583,40584,40585,40586,40587,40588,40589,40590,40591,40592,40593,40594,40595,40596,40597,40598,40599,40600,40601,40602,40603,40604,40605,40606,40607,40608,40609,40610,40611,40612,40613,40614,40615,40616,40617,40618,40619,40620,40621,40622,40623,40624,40625,40626,40627,40628,40629,40630,40631,40632,40633,40634,40635,40636,40637,40638,40639,40640,40641,40642,40643,40644,40645,40646,40647,40648,40649,40650,40651,40652,40653,40654,40655,40656,40657,40658,40659,40660,40661,40662,40663,40664,40665,40666,40667,40668,40669,40670,40671,40672,40673,40674,40675,40676,40677,40678,40679,40680,40681,40682,40683,40684,40685,40686,40687,40688,40689,40690,40691,40692,40693,40694,40695,40696,40697,40698,40699,40700,40701,40702,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40715,40716,40717,40718,40719,40720,40721,40722,40723,40724,40725,40726,40727,40728,40729,40730,40731,40732,40733,40734,40735,40736'/>
+  </group>
+  <group name='303'>
+    <ids val='40737,40738,40739,40740,40741,40742,40743,40744,40745,40746,40747,40748,40749,40750,40751,40752,40753,40754,40755,40756,40757,40758,40759,40760,40761,40762,40763,40764,40765,40766,40767,40768,40769,40770,40771,40772,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40784,40785,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40831,40832,40833,40834,40835,40836,40837,40838,40839,40840,40841,40842,40843,40844,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40857,40858,40859,40860,40861,40862,40863,40864,40865,40866,40867,40868,40869,40870,40871,40872,40873,40874,40875,40876,40877,40878,40879,40880,40881,40882,40883,40884,40885,40886,40887,40888,40889,40890,40891,40892,40893,40894,40895,40896,40897,40898,40899,40900,40901,40902,40903,40904,40905,40906,40907,40908,40909,40910,40911,40912,40913,40914,40915,40916,40917,40918,40919,40920,40921,40922,40923,40924,40925,40926,40927,40928,40929,40930,40931,40932,40933,40934,40935,40936,40937,40938,40939,40940,40941,40942,40943,40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959,40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975,40976,40977,40978,40979,40980,40981,40982,40983,40984,40985,40986,40987,40988,40989,40990,40991,40992,40993,40994,40995,40996,40997,40998,40999,41000,41001,41002,41003,41004,41005,41006,41007,41008,41009,41010,41011,41012,41013,41014,41015,41016,41017,41018,41019,41020,41021,41022,41023,41024,41025,41026,41027,41028,41029,41030,41031,41032,41033,41034,41035,41036,41037,41038,41039,41040'/>
+  </group>
+  <group name='303'>
+    <ids val='41041,41042,41043,41044,41045,41046,41047,41048,41049,41050,41051,41052,41053,41054,41055,41056,41057,41058,41059,41060,41061,41062,41063,41064,41065,41066,41067,41068,41069,41070,41071,41072,41073,41074,41075,41076,41077,41078,41079,41080,41081,41082,41083,41084,41085,41086,41087,41088,41089,41090,41091,41092,41093,41094,41095,41096,41097,41098,41099,41100,41101,41102,41103,41104,41105,41106,41107,41108,41109,41110,41111,41112,41113,41114,41115,41116,41117,41118,41119,41120,41121,41122,41123,41124,41125,41126,41127,41128,41129,41130,41131,41132,41133,41134,41135,41136,41137,41138,41139,41140,41141,41142,41143,41144,41145,41146,41147,41148,41149,41150,41151,41152,41153,41154,41155,41156,41157,41158,41159,41160,41161,41162,41163,41164,41165,41166,41167,41168,41169,41170,41171,41172,41173,41174,41175,41176,41177,41178,41179,41180,41181,41182,41183,41184,41185,41186,41187,41188,41189,41190,41191,41192,41193,41194,41195,41196,41197,41198,41199,41200,41201,41202,41203,41204,41205,41206,41207,41208,41209,41210,41211,41212,41213,41214,41215,41216,41217,41218,41219,41220,41221,41222,41223,41224,41225,41226,41227,41228,41229,41230,41231,41232,41233,41234,41235,41236,41237,41238,41239,41240,41241,41242,41243,41244,41245,41246,41247,41248,41249,41250,41251,41252,41253,41254,41255,41256,41257,41258,41259,41260,41261,41262,41263,41264,41265,41266,41267,41268,41269,41270,41271,41272,41273,41274,41275,41276,41277,41278,41279,41280,41281,41282,41283,41284,41285,41286,41287,41288,41289,41290,41291,41292,41293,41294,41295,41296,41297,41298,41299,41300,41301,41302,41303,41304,41305,41306,41307,41308,41309,41310,41311,41312,41313,41314,41315,41316,41317,41318,41319,41320,41321,41322,41323,41324,41325,41326,41327,41328,41329,41330,41331,41332,41333,41334,41335,41336,41337,41338,41339,41340,41341,41342,41343,41344'/>
+  </group>
+  <group name='303'>
+    <ids val='41345,41346,41347,41348,41349,41350,41351,41352,41353,41354,41355,41356,41357,41358,41359,41360,41361,41362,41363,41364,41365,41366,41367,41368,41369,41370,41371,41372,41373,41374,41375,41376,41377,41378,41379,41380,41381,41382,41383,41384,41385,41386,41387,41388,41389,41390,41391,41392,41393,41394,41395,41396,41397,41398,41399,41400,41401,41402,41403,41404,41405,41406,41407,41408,41409,41410,41411,41412,41413,41414,41415,41416,41417,41418,41419,41420,41421,41422,41423,41424,41425,41426,41427,41428,41429,41430,41431,41432,41433,41434,41435,41436,41437,41438,41439,41440,41441,41442,41443,41444,41445,41446,41447,41448,41449,41450,41451,41452,41453,41454,41455,41456,41457,41458,41459,41460,41461,41462,41463,41464,41465,41466,41467,41468,41469,41470,41471,41472,41473,41474,41475,41476,41477,41478,41479,41480,41481,41482,41483,41484,41485,41486,41487,41488,41489,41490,41491,41492,41493,41494,41495,41496,41497,41498,41499,41500,41501,41502,41503,41504,41505,41506,41507,41508,41509,41510,41511,41512,41513,41514,41515,41516,41517,41518,41519,41520,41521,41522,41523,41524,41525,41526,41527,41528,41529,41530,41531,41532,41533,41534,41535,41536,41537,41538,41539,41540,41541,41542,41543,41544,41545,41546,41547,41548,41549,41550,41551,41552,41553,41554,41555,41556,41557,41558,41559,41560,41561,41562,41563,41564,41565,41566,41567,41568,41569,41570,41571,41572,41573,41574,41575,41576,41577,41578,41579,41580,41581,41582,41583,41584,41585,41586,41587,41588,41589,41590,41591,41592,41593,41594,41595,41596,41597,41598,41599,41600,41601,41602,41603,41604,41605,41606,41607,41608,41609,41610,41611,41612,41613,41614,41615,41616,41617,41618,41619,41620,41621,41622,41623,41624,41625,41626,41627,41628,41629,41630,41631,41632,41633,41634,41635,41636,41637,41638,41639,41640,41641,41642,41643,41644,41645,41646,41647,41648'/>
+  </group>
+  <group name='303'>
+    <ids val='41649,41650,41651,41652,41653,41654,41655,41656,41657,41658,41659,41660,41661,41662,41663,41664,41665,41666,41667,41668,41669,41670,41671,41672,41673,41674,41675,41676,41677,41678,41679,41680,41681,41682,41683,41684,41685,41686,41687,41688,41689,41690,41691,41692,41693,41694,41695,41696,41697,41698,41699,41700,41701,41702,41703,41704,41705,41706,41707,41708,41709,41710,41711,41712,41713,41714,41715,41716,41717,41718,41719,41720,41721,41722,41723,41724,41725,41726,41727,41728,41729,41730,41731,41732,41733,41734,41735,41736,41737,41738,41739,41740,41741,41742,41743,41744,41745,41746,41747,41748,41749,41750,41751,41752,41753,41754,41755,41756,41757,41758,41759,41760,41761,41762,41763,41764,41765,41766,41767,41768,41769,41770,41771,41772,41773,41774,41775,41776,41777,41778,41779,41780,41781,41782,41783,41784,41785,41786,41787,41788,41789,41790,41791,41792,41793,41794,41795,41796,41797,41798,41799,41800,41801,41802,41803,41804,41805,41806,41807,41808,41809,41810,41811,41812,41813,41814,41815,41816,41817,41818,41819,41820,41821,41822,41823,41824,41825,41826,41827,41828,41829,41830,41831,41832,41833,41834,41835,41836,41837,41838,41839,41840,41841,41842,41843,41844,41845,41846,41847,41848,41849,41850,41851,41852,41853,41854,41855,41856,41857,41858,41859,41860,41861,41862,41863,41864,41865,41866,41867,41868,41869,41870,41871,41872,41873,41874,41875,41876,41877,41878,41879,41880,41881,41882,41883,41884,41885,41886,41887,41888,41889,41890,41891,41892,41893,41894,41895,41896,41897,41898,41899,41900,41901,41902,41903,41904,41905,41906,41907,41908,41909,41910,41911,41912,41913,41914,41915,41916,41917,41918,41919,41920,41921,41922,41923,41924,41925,41926,41927,41928,41929,41930,41931,41932,41933,41934,41935,41936,41937,41938,41939,41940,41941,41942,41943,41944,41945,41946,41947,41948,41949,41950,41951,41952'/>
+  </group>
+  <group name='303'>
+    <ids val='41953,41954,41955,41956,41957,41958,41959,41960,41961,41962,41963,41964,41965,41966,41967,41968,41969,41970,41971,41972,41973,41974,41975,41976,41977,41978,41979,41980,41981,41982,41983,41984,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,41997,41998,41999,42000,42001,42002,42003,42004,42005,42006,42007,42008,42009,42010,42011,42012,42013,42014,42015,42016,42017,42018,42019,42020,42021,42022,42023,42024,42025,42026,42027,42028,42029,42030,42031,42032,42033,42034,42035,42036,42037,42038,42039,42040,42041,42042,42043,42044,42045,42046,42047,42048,42049,42050,42051,42052,42053,42054,42055,42056,42057,42058,42059,42060,42061,42062,42063,42064,42065,42066,42067,42068,42069,42070,42071,42072,42073,42074,42075,42076,42077,42078,42079,42080,42081,42082,42083,42084,42085,42086,42087,42088,42089,42090,42091,42092,42093,42094,42095,42096,42097,42098,42099,42100,42101,42102,42103,42104,42105,42106,42107,42108,42109,42110,42111,42112,42113,42114,42115,42116,42117,42118,42119,42120,42121,42122,42123,42124,42125,42126,42127,42128,42129,42130,42131,42132,42133,42134,42135,42136,42137,42138,42139,42140,42141,42142,42143,42144,42145,42146,42147,42148,42149,42150,42151,42152,42153,42154,42155,42156,42157,42158,42159,42160,42161,42162,42163,42164,42165,42166,42167,42168,42169,42170,42171,42172,42173,42174,42175,42176,42177,42178,42179,42180,42181,42182,42183,42184,42185,42186,42187,42188,42189,42190,42191,42192,42193,42194,42195,42196,42197,42198,42199,42200,42201,42202,42203,42204,42205,42206,42207,42208,42209,42210,42211,42212,42213,42214,42215,42216,42217,42218,42219,42220,42221,42222,42223,42224,42225,42226,42227,42228,42229,42230,42231,42232,42233,42234,42235,42236,42237,42238,42239,42240,42241,42242,42243,42244,42245,42246,42247,42248,42249,42250,42251,42252,42253,42254,42255,42256'/>
+  </group>
+  <group name='303'>
+    <ids val='42257,42258,42259,42260,42261,42262,42263,42264,42265,42266,42267,42268,42269,42270,42271,42272,42273,42274,42275,42276,42277,42278,42279,42280,42281,42282,42283,42284,42285,42286,42287,42288,42289,42290,42291,42292,42293,42294,42295,42296,42297,42298,42299,42300,42301,42302,42303,42304,42305,42306,42307,42308,42309,42310,42311,42312,42313,42314,42315,42316,42317,42318,42319,42320,42321,42322,42323,42324,42325,42326,42327,42328,42329,42330,42331,42332,42333,42334,42335,42336,42337,42338,42339,42340,42341,42342,42343,42344,42345,42346,42347,42348,42349,42350,42351,42352,42353,42354,42355,42356,42357,42358,42359,42360,42361,42362,42363,42364,42365,42366,42367,42368,42369,42370,42371,42372,42373,42374,42375,42376,42377,42378,42379,42380,42381,42382,42383,42384,42385,42386,42387,42388,42389,42390,42391,42392,42393,42394,42395,42396,42397,42398,42399,42400,42401,42402,42403,42404,42405,42406,42407,42408,42409,42410,42411,42412,42413,42414,42415,42416,42417,42418,42419,42420,42421,42422,42423,42424,42425,42426,42427,42428,42429,42430,42431,42432,42433,42434,42435,42436,42437,42438,42439,42440,42441,42442,42443,42444,42445,42446,42447,42448,42449,42450,42451,42452,42453,42454,42455,42456,42457,42458,42459,42460,42461,42462,42463,42464,42465,42466,42467,42468,42469,42470,42471,42472,42473,42474,42475,42476,42477,42478,42479,42480,42481,42482,42483,42484,42485,42486,42487,42488,42489,42490,42491,42492,42493,42494,42495,42496,42497,42498,42499,42500,42501,42502,42503,42504,42505,42506,42507,42508,42509,42510,42511,42512,42513,42514,42515,42516,42517,42518,42519,42520,42521,42522,42523,42524,42525,42526,42527,42528,42529,42530,42531,42532,42533,42534,42535,42536,42537,42538,42539,42540,42541,42542,42543,42544,42545,42546,42547,42548,42549,42550,42551,42552,42553,42554,42555,42556,42557,42558,42559,42560'/>
+  </group>
+  <group name='303'>
+    <ids val='42561,42562,42563,42564,42565,42566,42567,42568,42569,42570,42571,42572,42573,42574,42575,42576,42577,42578,42579,42580,42581,42582,42583,42584,42585,42586,42587,42588,42589,42590,42591,42592,42593,42594,42595,42596,42597,42598,42599,42600,42601,42602,42603,42604,42605,42606,42607,42608,42609,42610,42611,42612,42613,42614,42615,42616,42617,42618,42619,42620,42621,42622,42623,42624,42625,42626,42627,42628,42629,42630,42631,42632,42633,42634,42635,42636,42637,42638,42639,42640,42641,42642,42643,42644,42645,42646,42647,42648,42649,42650,42651,42652,42653,42654,42655,42656,42657,42658,42659,42660,42661,42662,42663,42664,42665,42666,42667,42668,42669,42670,42671,42672,42673,42674,42675,42676,42677,42678,42679,42680,42681,42682,42683,42684,42685,42686,42687,42688,42689,42690,42691,42692,42693,42694,42695,42696,42697,42698,42699,42700,42701,42702,42703,42704,42705,42706,42707,42708,42709,42710,42711,42712,42713,42714,42715,42716,42717,42718,42719,42720,42721,42722,42723,42724,42725,42726,42727,42728,42729,42730,42731,42732,42733,42734,42735,42736,42737,42738,42739,42740,42741,42742,42743,42744,42745,42746,42747,42748,42749,42750,42751,42752,42753,42754,42755,42756,42757,42758,42759,42760,42761,42762,42763,42764,42765,42766,42767,42768,42769,42770,42771,42772,42773,42774,42775,42776,42777,42778,42779,42780,42781,42782,42783,42784,42785,42786,42787,42788,42789,42790,42791,42792,42793,42794,42795,42796,42797,42798,42799,42800,42801,42802,42803,42804,42805,42806,42807,42808,42809,42810,42811,42812,42813,42814,42815,42816,42817,42818,42819,42820,42821,42822,42823,42824,42825,42826,42827,42828,42829,42830,42831,42832,42833,42834,42835,42836,42837,42838,42839,42840,42841,42842,42843,42844,42845,42846,42847,42848,42849,42850,42851,42852,42853,42854,42855,42856,42857,42858,42859,42860,42861,42862,42863,42864'/>
+  </group>
+  <group name='303'>
+    <ids val='42865,42866,42867,42868,42869,42870,42871,42872,42873,42874,42875,42876,42877,42878,42879,42880,42881,42882,42883,42884,42885,42886,42887,42888,42889,42890,42891,42892,42893,42894,42895,42896,42897,42898,42899,42900,42901,42902,42903,42904,42905,42906,42907,42908,42909,42910,42911,42912,42913,42914,42915,42916,42917,42918,42919,42920,42921,42922,42923,42924,42925,42926,42927,42928,42929,42930,42931,42932,42933,42934,42935,42936,42937,42938,42939,42940,42941,42942,42943,42944,42945,42946,42947,42948,42949,42950,42951,42952,42953,42954,42955,42956,42957,42958,42959,42960,42961,42962,42963,42964,42965,42966,42967,42968,42969,42970,42971,42972,42973,42974,42975,42976,42977,42978,42979,42980,42981,42982,42983,42984,42985,42986,42987,42988,42989,42990,42991,42992,42993,42994,42995,42996,42997,42998,42999,43000,43001,43002,43003,43004,43005,43006,43007,43008,43009,43010,43011,43012,43013,43014,43015,43016,43017,43018,43019,43020,43021,43022,43023,43024,43025,43026,43027,43028,43029,43030,43031,43032,43033,43034,43035,43036,43037,43038,43039,43040,43041,43042,43043,43044,43045,43046,43047,43048,43049,43050,43051,43052,43053,43054,43055,43056,43057,43058,43059,43060,43061,43062,43063,43064,43065,43066,43067,43068,43069,43070,43071,43072,43073,43074,43075,43076,43077,43078,43079,43080,43081,43082,43083,43084,43085,43086,43087,43088,43089,43090,43091,43092,43093,43094,43095,43096,43097,43098,43099,43100,43101,43102,43103,43104,43105,43106,43107,43108,43109,43110,43111,43112,43113,43114,43115,43116,43117,43118,43119,43120,43121,43122,43123,43124,43125,43126,43127,43128,43129,43130,43131,43132,43133,43134,43135,43136,43137,43138,43139,43140,43141,43142,43143,43144,43145,43146,43147,43148,43149,43150,43151,43152,43153,43154,43155,43156,43157,43158,43159,43160,43161,43162,43163,43164,43165,43166,43167,43168'/>
+  </group>
+  <group name='303'>
+    <ids val='43169,43170,43171,43172,43173,43174,43175,43176,43177,43178,43179,43180,43181,43182,43183,43184,43185,43186,43187,43188,43189,43190,43191,43192,43193,43194,43195,43196,43197,43198,43199,43200,43201,43202,43203,43204,43205,43206,43207,43208,43209,43210,43211,43212,43213,43214,43215,43216,43217,43218,43219,43220,43221,43222,43223,43224,43225,43226,43227,43228,43229,43230,43231,43232,43233,43234,43235,43236,43237,43238,43239,43240,43241,43242,43243,43244,43245,43246,43247,43248,43249,43250,43251,43252,43253,43254,43255,43256,43257,43258,43259,43260,43261,43262,43263,43264,43265,43266,43267,43268,43269,43270,43271,43272,43273,43274,43275,43276,43277,43278,43279,43280,43281,43282,43283,43284,43285,43286,43287,43288,43289,43290,43291,43292,43293,43294,43295,43296,43297,43298,43299,43300,43301,43302,43303,43304,43305,43306,43307,43308,43309,43310,43311,43312,43313,43314,43315,43316,43317,43318,43319,43320,43321,43322,43323,43324,43325,43326,43327,43328,43329,43330,43331,43332,43333,43334,43335,43336,43337,43338,43339,43340,43341,43342,43343,43344,43345,43346,43347,43348,43349,43350,43351,43352,43353,43354,43355,43356,43357,43358,43359,43360,43361,43362,43363,43364,43365,43366,43367,43368,43369,43370,43371,43372,43373,43374,43375,43376,43377,43378,43379,43380,43381,43382,43383,43384,43385,43386,43387,43388,43389,43390,43391,43392,43393,43394,43395,43396,43397,43398,43399,43400,43401,43402,43403,43404,43405,43406,43407,43408,43409,43410,43411,43412,43413,43414,43415,43416,43417,43418,43419,43420,43421,43422,43423,43424,43425,43426,43427,43428,43429,43430,43431,43432,43433,43434,43435,43436,43437,43438,43439,43440,43441,43442,43443,43444,43445,43446,43447,43448,43449,43450,43451,43452,43453,43454,43455,43456,43457,43458,43459,43460,43461,43462,43463,43464,43465,43466,43467,43468,43469,43470,43471,43472'/>
+  </group>
+  <group name='303'>
+    <ids val='43473,43474,43475,43476,43477,43478,43479,43480,43481,43482,43483,43484,43485,43486,43487,43488,43489,43490,43491,43492,43493,43494,43495,43496,43497,43498,43499,43500,43501,43502,43503,43504,43505,43506,43507,43508,43509,43510,43511,43512,43513,43514,43515,43516,43517,43518,43519,43520,43521,43522,43523,43524,43525,43526,43527,43528,43529,43530,43531,43532,43533,43534,43535,43536,43537,43538,43539,43540,43541,43542,43543,43544,43545,43546,43547,43548,43549,43550,43551,43552,43553,43554,43555,43556,43557,43558,43559,43560,43561,43562,43563,43564,43565,43566,43567,43568,43569,43570,43571,43572,43573,43574,43575,43576,43577,43578,43579,43580,43581,43582,43583,43584,43585,43586,43587,43588,43589,43590,43591,43592,43593,43594,43595,43596,43597,43598,43599,43600,43601,43602,43603,43604,43605,43606,43607,43608,43609,43610,43611,43612,43613,43614,43615,43616,43617,43618,43619,43620,43621,43622,43623,43624,43625,43626,43627,43628,43629,43630,43631,43632,43633,43634,43635,43636,43637,43638,43639,43640,43641,43642,43643,43644,43645,43646,43647,43648,43649,43650,43651,43652,43653,43654,43655,43656,43657,43658,43659,43660,43661,43662,43663,43664,43665,43666,43667,43668,43669,43670,43671,43672,43673,43674,43675,43676,43677,43678,43679,43680,43681,43682,43683,43684,43685,43686,43687,43688,43689,43690,43691,43692,43693,43694,43695,43696,43697,43698,43699,43700,43701,43702,43703,43704,43705,43706,43707,43708,43709,43710,43711,43712,43713,43714,43715,43716,43717,43718,43719,43720,43721,43722,43723,43724,43725,43726,43727,43728,43729,43730,43731,43732,43733,43734,43735,43736,43737,43738,43739,43740,43741,43742,43743,43744,43745,43746,43747,43748,43749,43750,43751,43752,43753,43754,43755,43756,43757,43758,43759,43760,43761,43762,43763,43764,43765,43766,43767,43768,43769,43770,43771,43772,43773,43774,43775,43776'/>
+  </group>
+  <group name='303'>
+    <ids val='43777,43778,43779,43780,43781,43782,43783,43784,43785,43786,43787,43788,43789,43790,43791,43792,43793,43794,43795,43796,43797,43798,43799,43800,43801,43802,43803,43804,43805,43806,43807,43808,43809,43810,43811,43812,43813,43814,43815,43816,43817,43818,43819,43820,43821,43822,43823,43824,43825,43826,43827,43828,43829,43830,43831,43832,43833,43834,43835,43836,43837,43838,43839,43840,43841,43842,43843,43844,43845,43846,43847,43848,43849,43850,43851,43852,43853,43854,43855,43856,43857,43858,43859,43860,43861,43862,43863,43864,43865,43866,43867,43868,43869,43870,43871,43872,43873,43874,43875,43876,43877,43878,43879,43880,43881,43882,43883,43884,43885,43886,43887,43888,43889,43890,43891,43892,43893,43894,43895,43896,43897,43898,43899,43900,43901,43902,43903,43904,43905,43906,43907,43908,43909,43910,43911,43912,43913,43914,43915,43916,43917,43918,43919,43920,43921,43922,43923,43924,43925,43926,43927,43928,43929,43930,43931,43932,43933,43934,43935,43936,43937,43938,43939,43940,43941,43942,43943,43944,43945,43946,43947,43948,43949,43950,43951,43952,43953,43954,43955,43956,43957,43958,43959,43960,43961,43962,43963,43964,43965,43966,43967,43968,43969,43970,43971,43972,43973,43974,43975,43976,43977,43978,43979,43980,43981,43982,43983,43984,43985,43986,43987,43988,43989,43990,43991,43992,43993,43994,43995,43996,43997,43998,43999,44000,44001,44002,44003,44004,44005,44006,44007,44008,44009,44010,44011,44012,44013,44014,44015,44016,44017,44018,44019,44020,44021,44022,44023,44024,44025,44026,44027,44028,44029,44030,44031,44032,44033,44034,44035,44036,44037,44038,44039,44040,44041,44042,44043,44044,44045,44046,44047,44048,44049,44050,44051,44052,44053,44054,44055,44056,44057,44058,44059,44060,44061,44062,44063,44064,44065,44066,44067,44068,44069,44070,44071,44072,44073,44074,44075,44076,44077,44078,44079,44080'/>
+  </group>
+  <group name='303'>
+    <ids val='44081,44082,44083,44084,44085,44086,44087,44088,44089,44090,44091,44092,44093,44094,44095,44096,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44107,44108,44109,44110,44111,44112,44113,44114,44115,44116,44117,44118,44119,44120,44121,44122,44123,44124,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44144,44145,44146,44147,44148,44149,44150,44151,44152,44153,44154,44155,44156,44157,44158,44159,44160,44161,44162,44163,44164,44165,44166,44167,44168,44169,44170,44171,44172,44173,44174,44175,44176,44177,44178,44179,44180,44181,44182,44183,44184,44185,44186,44187,44188,44189,44190,44191,44192,44193,44194,44195,44196,44197,44198,44199,44200,44201,44202,44203,44204,44205,44206,44207,44208,44209,44210,44211,44212,44213,44214,44215,44216,44217,44218,44219,44220,44221,44222,44223,44224,44225,44226,44227,44228,44229,44230,44231,44232,44233,44234,44235,44236,44237,44238,44239,44240,44241,44242,44243,44244,44245,44246,44247,44248,44249,44250,44251,44252,44253,44254,44255,44256,44257,44258,44259,44260,44261,44262,44263,44264,44265,44266,44267,44268,44269,44270,44271,44272,44273,44274,44275,44276,44277,44278,44279,44280,44281,44282,44283,44284,44285,44286,44287,44288,44289,44290,44291,44292,44293,44294,44295,44296,44297,44298,44299,44300,44301,44302,44303,44304,44305,44306,44307,44308,44309,44310,44311,44312,44313,44314,44315,44316,44317,44318,44319,44320,44321,44322,44323,44324,44325,44326,44327,44328,44329,44330,44331,44332,44333,44334,44335,44336,44337,44338,44339,44340,44341,44342,44343,44344,44345,44346,44347,44348,44349,44350,44351,44352,44353,44354,44355,44356,44357,44358,44359,44360,44361,44362,44363,44364,44365,44366,44367,44368,44369,44370,44371,44372,44373,44374,44375,44376,44377,44378,44379,44380,44381,44382,44383,44384'/>
+  </group>
+  <group name='303'>
+    <ids val='44385,44386,44387,44388,44389,44390,44391,44392,44393,44394,44395,44396,44397,44398,44399,44400,44401,44402,44403,44404,44405,44406,44407,44408,44409,44410,44411,44412,44413,44414,44415,44416,44417,44418,44419,44420,44421,44422,44423,44424,44425,44426,44427,44428,44429,44430,44431,44432,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44444,44445,44446,44447,44448,44449,44450,44451,44452,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44471,44472,44473,44474,44475,44476,44477,44478,44479,44480,44481,44482,44483,44484,44485,44486,44487,44488,44489,44490,44491,44492,44493,44494,44495,44496,44497,44498,44499,44500,44501,44502,44503,44504,44505,44506,44507,44508,44509,44510,44511,44512,44513,44514,44515,44516,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44536,44537,44538,44539,44540,44541,44542,44543,44544,44545,44546,44547,44548,44549,44550,44551,44552,44553,44554,44555,44556,44557,44558,44559,44560,44561,44562,44563,44564,44565,44566,44567,44568,44569,44570,44571,44572,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44592,44593,44594,44595,44596,44597,44598,44599,44600,44601,44602,44603,44604,44605,44606,44607,44608,44609,44610,44611,44612,44613,44614,44615,44616,44617,44618,44619,44620,44621,44622,44623,44624,44625,44626,44627,44628,44629,44630,44631,44632,44633,44634,44635,44636,44637,44638,44639,44640,44641,44642,44643,44644,44645,44646,44647,44648,44649,44650,44651,44652,44653,44654,44655,44656,44657,44658,44659,44660,44661,44662,44663,44664,44665,44666,44667,44668,44669,44670,44671,44672,44673,44674,44675,44676,44677,44678,44679,44680,44681,44682,44683,44684,44685,44686,44687,44688'/>
+  </group>
+  <group name='303'>
+    <ids val='44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44732,44733,44734,44735,44736,44737,44738,44739,44740,44741,44742,44743,44744,44745,44746,44747,44748,44749,44750,44751,44752,44753,44754,44755,44756,44757,44758,44759,44760,44761,44762,44763,44764,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44776,44777,44778,44779,44780,44781,44782,44783,44784,44785,44786,44787,44788,44789,44790,44791,44792,44793,44794,44795,44796,44797,44798,44799,44800,44801,44802,44803,44804,44805,44806,44807,44808,44809,44810,44811,44812,44813,44814,44815,44816,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,44836,44837,44838,44839,44840,44841,44842,44843,44844,44845,44846,44847,44848,44849,44850,44851,44852,44853,44854,44855,44856,44857,44858,44859,44860,44861,44862,44863,44864,44865,44866,44867,44868,44869,44870,44871,44872,44873,44874,44875,44876,44877,44878,44879,44880,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44892,44893,44894,44895,44896,44897,44898,44899,44900,44901,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44921,44922,44923,44924,44925,44926,44927,44928,44929,44930,44931,44932,44933,44934,44935,44936,44937,44938,44939,44940,44941,44942,44943,44944,44945,44946,44947,44948,44949,44950,44951,44952,44953,44954,44955,44956,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44984,44985,44986,44987,44988,44989,44990,44991,44992'/>
+  </group>
+  <group name='303'>
+    <ids val='44993,44994,44995,44996,44997,44998,44999,45000,45001,45002,45003,45004,45005,45006,45007,45008,45009,45010,45011,45012,45013,45014,45015,45016,45017,45018,45019,45020,45021,45022,45023,45024,45025,45026,45027,45028,45029,45030,45031,45032,45033,45034,45035,45036,45037,45038,45039,45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055,45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071,45072,45073,45074,45075,45076,45077,45078,45079,45080,45081,45082,45083,45084,45085,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45096,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45124,45125,45126,45127,45128,45129,45130,45131,45132,45133,45134,45135,45136,45137,45138,45139,45140,45141,45142,45143,45144,45145,45146,45147,45148,45149,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45180,45181,45182,45183,45184,45185,45186,45187,45188,45189,45190,45191,45192,45193,45194,45195,45196,45197,45198,45199,45200,45201,45202,45203,45204,45205,45206,45207,45208,45209,45210,45211,45212,45213,45214,45215,45216,45217,45218,45219,45220,45221,45222,45223,45224,45225,45226,45227,45228,45229,45230,45231,45232,45233,45234,45235,45236,45237,45238,45239,45240,45241,45242,45243,45244,45245,45246,45247,45248,45249,45250,45251,45252,45253,45254,45255,45256,45257,45258,45259,45260,45261,45262,45263,45264,45265,45266,45267,45268,45269,45270,45271,45272,45273,45274,45275,45276,45277,45278,45279,45280,45281,45282,45283,45284,45285,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296'/>
+  </group>
+  <group name='303'>
+    <ids val='45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45320,45321,45322,45323,45324,45325,45326,45327,45328,45329,45330,45331,45332,45333,45334,45335,45336,45337,45338,45339,45340,45341,45342,45343,45344,45345,45346,45347,45348,45349,45350,45351,45352,45353,45354,45355,45356,45357,45358,45359,45360,45361,45362,45363,45364,45365,45366,45367,45368,45369,45370,45371,45372,45373,45374,45375,45376,45377,45378,45379,45380,45381,45382,45383,45384,45385,45386,45387,45388,45389,45390,45391,45392,45393,45394,45395,45396,45397,45398,45399,45400,45401,45402,45403,45404,45405,45406,45407,45408,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45432,45433,45434,45435,45436,45437,45438,45439,45440,45441,45442,45443,45444,45445,45446,45447,45448,45449,45450,45451,45452,45453,45454,45455,45456,45457,45458,45459,45460,45461,45462,45463,45464,45465,45466,45467,45468,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45480,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45516,45517,45518,45519,45520,45521,45522,45523,45524,45525,45526,45527,45528,45529,45530,45531,45532,45533,45534,45535,45536,45537,45538,45539,45540,45541,45542,45543,45544,45545,45546,45547,45548,45549,45550,45551,45552,45553,45554,45555,45556,45557,45558,45559,45560,45561,45562,45563,45564,45565,45566,45567,45568,45569,45570,45571,45572,45573,45574,45575,45576,45577,45578,45579,45580,45581,45582,45583,45584,45585,45586,45587,45588,45589,45590,45591,45592,45593,45594,45595,45596,45597,45598,45599,45600'/>
+  </group>
+  <group name='303'>
+    <ids val='45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45620,45621,45622,45623,45624,45625,45626,45627,45628,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45656,45657,45658,45659,45660,45661,45662,45663,45664,45665,45666,45667,45668,45669,45670,45671,45672,45673,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45684,45685,45686,45687,45688,45689,45690,45691,45692,45693,45694,45695,45696,45697,45698,45699,45700,45701,45702,45703,45704,45705,45706,45707,45708,45709,45710,45711,45712,45713,45714,45715,45716,45717,45718,45719,45720,45721,45722,45723,45724,45725,45726,45727,45728,45729,45730,45731,45732,45733,45734,45735,45736,45737,45738,45739,45740,45741,45742,45743,45744,45745,45746,45747,45748,45749,45750,45751,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45768,45769,45770,45771,45772,45773,45774,45775,45776,45777,45778,45779,45780,45781,45782,45783,45784,45785,45786,45787,45788,45789,45790,45791,45792,45793,45794,45795,45796,45797,45798,45799,45800,45801,45802,45803,45804,45805,45806,45807,45808,45809,45810,45811,45812,45813,45814,45815,45816,45817,45818,45819,45820,45821,45822,45823,45824,45825,45826,45827,45828,45829,45830,45831,45832,45833,45834,45835,45836,45837,45838,45839,45840,45841,45842,45843,45844,45845,45846,45847,45848,45849,45850,45851,45852,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904'/>
+  </group>
+  <group name='303'>
+    <ids val='45905,45906,45907,45908,45909,45910,45911,45912,45913,45914,45915,45916,45917,45918,45919,45920,45921,45922,45923,45924,45925,45926,45927,45928,45929,45930,45931,45932,45933,45934,45935,45936,45937,45938,45939,45940,45941,45942,45943,45944,45945,45946,45947,45948,45949,45950,45951,45952,45953,45954,45955,45956,45957,45958,45959,45960,45961,45962,45963,45964,45965,45966,45967,45968,45969,45970,45971,45972,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45984,45985,45986,45987,45988,45989,45990,45991,45992,45993,45994,45995,45996,45997,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46020,46021,46022,46023,46024,46025,46026,46027,46028,46029,46030,46031,46032,46033,46034,46035,46036,46037,46038,46039,46040,46041,46042,46043,46044,46045,46046,46047,46048,46049,46050,46051,46052,46053,46054,46055,46056,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46076,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46096,46097,46098,46099,46100,46101,46102,46103,46104,46105,46106,46107,46108,46109,46110,46111,46112,46113,46114,46115,46116,46117,46118,46119,46120,46121,46122,46123,46124,46125,46126,46127,46128,46129,46130,46131,46132,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46160,46161,46162,46163,46164,46165,46166,46167,46168,46169,46170,46171,46172,46173,46174,46175,46176,46177,46178,46179,46180,46181,46182,46183,46184,46185,46186,46187,46188,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46208'/>
+  </group>
+  <group name='303'>
+    <ids val='46209,46210,46211,46212,46213,46214,46215,46216,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46237,46238,46239,46240,46241,46242,46243,46244,46245,46246,46247,46248,46249,46250,46251,46252,46253,46254,46255,46256,46257,46258,46259,46260,46261,46262,46263,46264,46265,46266,46267,46268,46269,46270,46271,46272,46273,46274,46275,46276,46277,46278,46279,46280,46281,46282,46283,46284,46285,46286,46287,46288,46289,46290,46291,46292,46293,46294,46295,46296,46297,46298,46299,46300,46301,46302,46303,46304,46305,46306,46307,46308,46309,46310,46311,46312,46313,46314,46315,46316,46317,46318,46319,46320,46321,46322,46323,46324,46325,46326,46327,46328,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46356,46357,46358,46359,46360,46361,46362,46363,46364,46365,46366,46367,46368,46369,46370,46371,46372,46373,46374,46375,46376,46377,46378,46379,46380,46381,46382,46383,46384,46385,46386,46387,46388,46389,46390,46391,46392,46393,46394,46395,46396,46397,46398,46399,46400,46401,46402,46403,46404,46405,46406,46407,46408,46409,46410,46411,46412,46413,46414,46415,46416,46417,46418,46419,46420,46421,46422,46423,46424,46425,46426,46427,46428,46429,46430,46431,46432,46433,46434,46435,46436,46437,46438,46439,46440,46441,46442,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46496,46497,46498,46499,46500,46501,46502,46503,46504,46505,46506,46507,46508,46509,46510,46511,46512'/>
+  </group>
+  <group name='303'>
+    <ids val='46513,46514,46515,46516,46517,46518,46519,46520,46521,46522,46523,46524,46525,46526,46527,46528,46529,46530,46531,46532,46533,46534,46535,46536,46537,46538,46539,46540,46541,46542,46543,46544,46545,46546,46547,46548,46549,46550,46551,46552,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46572,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46608,46609,46610,46611,46612,46613,46614,46615,46616,46617,46618,46619,46620,46621,46622,46623,46624,46625,46626,46627,46628,46629,46630,46631,46632,46633,46634,46635,46636,46637,46638,46639,46640,46641,46642,46643,46644,46645,46646,46647,46648,46649,46650,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46664,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46692,46693,46694,46695,46696,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46748,46749,46750,46751,46752,46753,46754,46755,46756,46757,46758,46759,46760,46761,46762,46763,46764,46765,46766,46767,46768,46769,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46804,46805,46806,46807,46808,46809,46810,46811,46812,46813,46814,46815,46816'/>
+  </group>
+  <group name='303'>
+    <ids val='46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46832,46833,46834,46835,46836,46837,46838,46839,46840,46841,46842,46843,46844,46845,46846,46847,46848,46849,46850,46851,46852,46853,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46888,46889,46890,46891,46892,46893,46894,46895,46896,46897,46898,46899,46900,46901,46902,46903,46904,46905,46906,46907,46908,46909,46910,46911,46912,46913,46914,46915,46916,46917,46918,46919,46920,46921,46922,46923,46924,46925,46926,46927,46928,46929,46930,46931,46932,46933,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46944,46945,46946,46947,46948,46949,46950,46951,46952,46953,46954,46955,46956,46957,46958,46959,46960,46961,46962,46963,46964,46965,46966,46967,46968,46969,46970,46971,46972,46973,46974,46975,46976,46977,46978,46979,46980,46981,46982,46983,46984,46985,46986,46987,46988,46989,46990,46991,46992,46993,46994,46995,46996,46997,46998,46999,47000,47001,47002,47003,47004,47005,47006,47007,47008,47009,47010,47011,47012,47013,47014,47015,47016,47017,47018,47019,47020,47021,47022,47023,47024,47025,47026,47027,47028,47029,47030,47031,47032,47033,47034,47035,47036,47037,47038,47039,47040,47041,47042,47043,47044,47045,47046,47047,47048,47049,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47084,47085,47086,47087,47088,47089,47090,47091,47092,47093,47094,47095,47096,47097,47098,47099,47100,47101,47102,47103,47104,47105,47106,47107,47108,47109,47110,47111,47112,47113,47114,47115,47116,47117,47118,47119,47120'/>
+  </group>
+  <group name='303'>
+    <ids val='47121,47122,47123,47124,47125,47126,47127,47128,47129,47130,47131,47132,47133,47134,47135,47136,47137,47138,47139,47140,47141,47142,47143,47144,47145,47146,47147,47148,47149,47150,47151,47152,47153,47154,47155,47156,47157,47158,47159,47160,47161,47162,47163,47164,47165,47166,47167,47168,47169,47170,47171,47172,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47185,47186,47187,47188,47189,47190,47191,47192,47193,47194,47195,47196,47197,47198,47199,47200,47201,47202,47203,47204,47205,47206,47207,47208,47209,47210,47211,47212,47213,47214,47215,47216,47217,47218,47219,47220,47221,47222,47223,47224,47225,47226,47227,47228,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47245,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,47264,47265,47266,47267,47268,47269,47270,47271,47272,47273,47274,47275,47276,47277,47278,47279,47280,47281,47282,47283,47284,47285,47286,47287,47288,47289,47290,47291,47292,47293,47294,47295,47296,47297,47298,47299,47300,47301,47302,47303,47304,47305,47306,47307,47308,47309,47310,47311,47312,47313,47314,47315,47316,47317,47318,47319,47320,47321,47322,47323,47324,47325,47326,47327,47328,47329,47330,47331,47332,47333,47334,47335,47336,47337,47338,47339,47340,47341,47342,47343,47344,47345,47346,47347,47348,47349,47350,47351,47352,47353,47354,47355,47356,47357,47358,47359,47360,47361,47362,47363,47364,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47384,47385,47386,47387,47388,47389,47390,47391,47392,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47420,47421,47422,47423,47424'/>
+  </group>
+  <group name='303'>
+    <ids val='47425,47426,47427,47428,47429,47430,47431,47432,47433,47434,47435,47436,47437,47438,47439,47440,47441,47442,47443,47444,47445,47446,47447,47448,47449,47450,47451,47452,47453,47454,47455,47456,47457,47458,47459,47460,47461,47462,47463,47464,47465,47466,47467,47468,47469,47470,47471,47472,47473,47474,47475,47476,47477,47478,47479,47480,47481,47482,47483,47484,47485,47486,47487,47488,47489,47490,47491,47492,47493,47494,47495,47496,47497,47498,47499,47500,47501,47502,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47532,47533,47534,47535,47536,47537,47538,47539,47540,47541,47542,47543,47544,47545,47546,47547,47548,47549,47550,47551,47552,47553,47554,47555,47556,47557,47558,47559,47560,47561,47562,47563,47564,47565,47566,47567,47568,47569,47570,47571,47572,47573,47574,47575,47576,47577,47578,47579,47580,47581,47582,47583,47584,47585,47586,47587,47588,47589,47590,47591,47592,47593,47594,47595,47596,47597,47598,47599,47600,47601,47602,47603,47604,47605,47606,47607,47608,47609,47610,47611,47612,47613,47614,47615,47616,47617,47618,47619,47620,47621,47622,47623,47624,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47637,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47672,47673,47674,47675,47676,47677,47678,47679,47680,47681,47682,47683,47684,47685,47686,47687,47688,47689,47690,47691,47692,47693,47694,47695,47696,47697,47698,47699,47700,47701,47702,47703,47704,47705,47706,47707,47708,47709,47710,47711,47712,47713,47714,47715,47716,47717,47718,47719,47720,47721,47722,47723,47724,47725,47726,47727,47728'/>
+  </group>
+  <group name='303'>
+    <ids val='47729,47730,47731,47732,47733,47734,47735,47736,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47747,47748,47749,47750,47751,47752,47753,47754,47755,47756,47757,47758,47759,47760,47761,47762,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47784,47785,47786,47787,47788,47789,47790,47791,47792,47793,47794,47795,47796,47797,47798,47799,47800,47801,47802,47803,47804,47805,47806,47807,47808,47809,47810,47811,47812,47813,47814,47815,47816,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47832,47833,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47868,47869,47870,47871,47872,47873,47874,47875,47876,47877,47878,47879,47880,47881,47882,47883,47884,47885,47886,47887,47888,47889,47890,47891,47892,47893,47894,47895,47896,47897,47898,47899,47900,47901,47902,47903,47904,47905,47906,47907,47908,47909,47910,47911,47912,47913,47914,47915,47916,47917,47918,47919,47920,47921,47922,47923,47924,47925,47926,47927,47928,47929,47930,47931,47932,47933,47934,47935,47936,47937,47938,47939,47940,47941,47942,47943,47944,47945,47946,47947,47948,47949,47950,47951,47952,47953,47954,47955,47956,47957,47958,47959,47960,47961,47962,47963,47964,47965,47966,47967,47968,47969,47970,47971,47972,47973,47974,47975,47976,47977,47978,47979,47980,47981,47982,47983,47984,47985,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48008,48009,48010,48011,48012,48013,48014,48015,48016,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032'/>
+  </group>
+  <group name='303'>
+    <ids val='48033,48034,48035,48036,48037,48038,48039,48040,48041,48042,48043,48044,48045,48046,48047,48048,48049,48050,48051,48052,48053,48054,48055,48056,48057,48058,48059,48060,48061,48062,48063,48064,48065,48066,48067,48068,48069,48070,48071,48072,48073,48074,48075,48076,48077,48078,48079,48080,48081,48082,48083,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48120,48121,48122,48123,48124,48125,48126,48127,48128,48129,48130,48131,48132,48133,48134,48135,48136,48137,48138,48139,48140,48141,48142,48143,48144,48145,48146,48147,48148,48149,48150,48151,48152,48153,48154,48155,48156,48157,48158,48159,48160,48161,48162,48163,48164,48165,48166,48167,48168,48169,48170,48171,48172,48173,48174,48175,48176,48177,48178,48179,48180,48181,48182,48183,48184,48185,48186,48187,48188,48189,48190,48191,48192,48193,48194,48195,48196,48197,48198,48199,48200,48201,48202,48203,48204,48205,48206,48207,48208,48209,48210,48211,48212,48213,48214,48215,48216,48217,48218,48219,48220,48221,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48260,48261,48262,48263,48264,48265,48266,48267,48268,48269,48270,48271,48272,48273,48274,48275,48276,48277,48278,48279,48280,48281,48282,48283,48284,48285,48286,48287,48288,48289,48290,48291,48292,48293,48294,48295,48296,48297,48298,48299,48300,48301,48302,48303,48304,48305,48306,48307,48308,48309,48310,48311,48312,48313,48314,48315,48316,48317,48318,48319,48320,48321,48322,48323,48324,48325,48326,48327,48328,48329,48330,48331,48332,48333,48334,48335,48336'/>
+  </group>
+  <group name='303'>
+    <ids val='48337,48338,48339,48340,48341,48342,48343,48344,48345,48346,48347,48348,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48372,48373,48374,48375,48376,48377,48378,48379,48380,48381,48382,48383,48384,48385,48386,48387,48388,48389,48390,48391,48392,48393,48394,48395,48396,48397,48398,48399,48400,48401,48402,48403,48404,48405,48406,48407,48408,48409,48410,48411,48412,48413,48414,48415,48416,48417,48418,48419,48420,48421,48422,48423,48424,48425,48426,48427,48428,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,48442,48443,48444,48445,48446,48447,48448,48449,48450,48451,48452,48453,48454,48455,48456,48457,48458,48459,48460,48461,48462,48463,48464,48465,48466,48467,48468,48469,48470,48471,48472,48473,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48484,48485,48486,48487,48488,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48512,48513,48514,48515,48516,48517,48518,48519,48520,48521,48522,48523,48524,48525,48526,48527,48528,48529,48530,48531,48532,48533,48534,48535,48536,48537,48538,48539,48540,48541,48542,48543,48544,48545,48546,48547,48548,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48560,48561,48562,48563,48564,48565,48566,48567,48568,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48596,48597,48598,48599,48600,48601,48602,48603,48604,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48617,48618,48619,48620,48621,48622,48623,48624,48625,48626,48627,48628,48629,48630,48631,48632,48633,48634,48635,48636,48637,48638,48639,48640'/>
+  </group>
+  <group name='303'>
+    <ids val='48641,48642,48643,48644,48645,48646,48647,48648,48649,48650,48651,48652,48653,48654,48655,48656,48657,48658,48659,48660,48661,48662,48663,48664,48665,48666,48667,48668,48669,48670,48671,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48708,48709,48710,48711,48712,48713,48714,48715,48716,48717,48718,48719,48720,48721,48722,48723,48724,48725,48726,48727,48728,48729,48730,48731,48732,48733,48734,48735,48736,48737,48738,48739,48740,48741,48742,48743,48744,48745,48746,48747,48748,48749,48750,48751,48752,48753,48754,48755,48756,48757,48758,48759,48760,48761,48762,48763,48764,48765,48766,48767,48768,48769,48770,48771,48772,48773,48774,48775,48776,48777,48778,48779,48780,48781,48782,48783,48784,48785,48786,48787,48788,48789,48790,48791,48792,48793,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48808,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48848,48849,48850,48851,48852,48853,48854,48855,48856,48857,48858,48859,48860,48861,48862,48863,48864,48865,48866,48867,48868,48869,48870,48871,48872,48873,48874,48875,48876,48877,48878,48879,48880,48881,48882,48883,48884,48885,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48897,48898,48899,48900,48901,48902,48903,48904,48905,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48920,48921,48922,48923,48924,48925,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944'/>
+  </group>
+  <group name='303'>
+    <ids val='48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48960,48961,48962,48963,48964,48965,48966,48967,48968,48969,48970,48971,48972,48973,48974,48975,48976,48977,48978,48979,48980,48981,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49044,49045,49046,49047,49048,49049,49050,49051,49052,49053,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49072,49073,49074,49075,49076,49077,49078,49079,49080,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49093,49094,49095,49096,49097,49098,49099,49100,49101,49102,49103,49104,49105,49106,49107,49108,49109,49110,49111,49112,49113,49114,49115,49116,49117,49118,49119,49120,49121,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49212,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49233,49234,49235,49236,49237,49238,49239,49240,49241,49242,49243,49244,49245,49246,49247,49248'/>
+  </group>
+  <group name='303'>
+    <ids val='49249,49250,49251,49252,49253,49254,49255,49256,49257,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49296,49297,49298,49299,49300,49301,49302,49303,49304,49305,49306,49307,49308,49309,49310,49311,49312,49313,49314,49315,49316,49317,49318,49319,49320,49321,49322,49323,49324,49325,49326,49327,49328,49329,49330,49331,49332,49333,49334,49335,49336,49337,49338,49339,49340,49341,49342,49343,49344,49345,49346,49347,49348,49349,49350,49351,49352,49353,49354,49355,49356,49357,49358,49359,49360,49361,49362,49363,49364,49365,49366,49367,49368,49369,49370,49371,49372,49373,49374,49375,49376,49377,49378,49379,49380,49381,49382,49383,49384,49385,49386,49387,49388,49389,49390,49391,49392,49393,49394,49395,49396,49397,49398,49399,49400,49401,49402,49403,49404,49405,49406,49407,49408,49409,49410,49411,49412,49413,49414,49415,49416,49417,49418,49419,49420,49421,49422,49423,49424,49425,49426,49427,49428,49429,49430,49431,49432,49433,49434,49435,49436,49437,49438,49439,49440,49441,49442,49443,49444,49445,49446,49447,49448,49449,49450,49451,49452,49453,49454,49455,49456,49457,49458,49459,49460,49461,49462,49463,49464,49465,49466,49467,49468,49469,49470,49471,49472,49473,49474,49475,49476,49477,49478,49479,49480,49481,49482,49483,49484,49485,49486,49487,49488,49489,49490,49491,49492,49493,49494,49495,49496,49497,49498,49499,49500,49501,49502,49503,49504,49505,49506,49507,49508,49509,49510,49511,49512,49513,49514,49515,49516,49517,49518,49519,49520,49521,49522,49523,49524,49525,49526,49527,49528,49529,49530,49531,49532,49533,49534,49535,49536,49537,49538,49539,49540,49541,49542,49543,49544,49545,49546,49547,49548,49549,49550,49551,49552'/>
+  </group>
+  <group name='303'>
+    <ids val='49553,49554,49555,49556,49557,49558,49559,49560,49561,49562,49563,49564,49565,49566,49567,49568,49569,49570,49571,49572,49573,49574,49575,49576,49577,49578,49579,49580,49581,49582,49583,49584,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49597,49598,49599,49600,49601,49602,49603,49604,49605,49606,49607,49608,49609,49610,49611,49612,49613,49614,49615,49616,49617,49618,49619,49620,49621,49622,49623,49624,49625,49626,49627,49628,49629,49630,49631,49632,49633,49634,49635,49636,49637,49638,49639,49640,49641,49642,49643,49644,49645,49646,49647,49648,49649,49650,49651,49652,49653,49654,49655,49656,49657,49658,49659,49660,49661,49662,49663,49664,49665,49666,49667,49668,49669,49670,49671,49672,49673,49674,49675,49676,49677,49678,49679,49680,49681,49682,49683,49684,49685,49686,49687,49688,49689,49690,49691,49692,49693,49694,49695,49696,49697,49698,49699,49700,49701,49702,49703,49704,49705,49706,49707,49708,49709,49710,49711,49712,49713,49714,49715,49716,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,49734,49735,49736,49737,49738,49739,49740,49741,49742,49743,49744,49745,49746,49747,49748,49749,49750,49751,49752,49753,49754,49755,49756,49757,49758,49759,49760,49761,49762,49763,49764,49765,49766,49767,49768,49769,49770,49771,49772,49773,49774,49775,49776,49777,49778,49779,49780,49781,49782,49783,49784,49785,49786,49787,49788,49789,49790,49791,49792,49793,49794,49795,49796,49797,49798,49799,49800,49801,49802,49803,49804,49805,49806,49807,49808,49809,49810,49811,49812,49813,49814,49815,49816,49817,49818,49819,49820,49821,49822,49823,49824,49825,49826,49827,49828,49829,49830,49831,49832,49833,49834,49835,49836,49837,49838,49839,49840,49841,49842,49843,49844,49845,49846,49847,49848,49849,49850,49851,49852,49853,49854,49855,49856'/>
+  </group>
+  <group name='303'>
+    <ids val='49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49884,49885,49886,49887,49888,49889,49890,49891,49892,49893,49894,49895,49896,49897,49898,49899,49900,49901,49902,49903,49904,49905,49906,49907,49908,49909,49910,49911,49912,49913,49914,49915,49916,49917,49918,49919,49920,49921,49922,49923,49924,49925,49926,49927,49928,49929,49930,49931,49932,49933,49934,49935,49936,49937,49938,49939,49940,49941,49942,49943,49944,49945,49946,49947,49948,49949,49950,49951,49952,49953,49954,49955,49956,49957,49958,49959,49960,49961,49962,49963,49964,49965,49966,49967,49968,49969,49970,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49989,49990,49991,49992,49993,49994,49995,49996,49997,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50024,50025,50026,50027,50028,50029,50030,50031,50032,50033,50034,50035,50036,50037,50038,50039,50040,50041,50042,50043,50044,50045,50046,50047,50048,50049,50050,50051,50052,50053,50054,50055,50056,50057,50058,50059,50060,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50112,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50136,50137,50138,50139,50140,50141,50142,50143,50144,50145,50146,50147,50148,50149,50150,50151,50152,50153,50154,50155,50156,50157,50158,50159,50160'/>
+  </group>
+  <group name='303'>
+    <ids val='50161,50162,50163,50164,50165,50166,50167,50168,50169,50170,50171,50172,50173,50174,50175,50176,50177,50178,50179,50180,50181,50182,50183,50184,50185,50186,50187,50188,50189,50190,50191,50192,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,50203,50204,50205,50206,50207,50208,50209,50210,50211,50212,50213,50214,50215,50216,50217,50218,50219,50220,50221,50222,50223,50224,50225,50226,50227,50228,50229,50230,50231,50232,50233,50234,50235,50236,50237,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50248,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50276,50277,50278,50279,50280,50281,50282,50283,50284,50285,50286,50287,50288,50289,50290,50291,50292,50293,50294,50295,50296,50297,50298,50299,50300,50301,50302,50303,50304,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50324,50325,50326,50327,50328,50329,50330,50331,50332,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50360,50361,50362,50363,50364,50365,50366,50367,50368,50369,50370,50371,50372,50373,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,50400,50401,50402,50403,50404,50405,50406,50407,50408,50409,50410,50411,50412,50413,50414,50415,50416,50417,50418,50419,50420,50421,50422,50423,50424,50425,50426,50427,50428,50429,50430,50431,50432,50433,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50444,50445,50446,50447,50448,50449,50450,50451,50452,50453,50454,50455,50456,50457,50458,50459,50460,50461,50462,50463,50464'/>
+  </group>
+  <group name='303'>
+    <ids val='50465,50466,50467,50468,50469,50470,50471,50472,50473,50474,50475,50476,50477,50478,50479,50480,50481,50482,50483,50484,50485,50486,50487,50488,50489,50490,50491,50492,50493,50494,50495,50496,50497,50498,50499,50500,50501,50502,50503,50504,50505,50506,50507,50508,50509,50510,50511,50512,50513,50514,50515,50516,50517,50518,50519,50520,50521,50522,50523,50524,50525,50526,50527,50528,50529,50530,50531,50532,50533,50534,50535,50536,50537,50538,50539,50540,50541,50542,50543,50544,50545,50546,50547,50548,50549,50550,50551,50552,50553,50554,50555,50556,50557,50558,50559,50560,50561,50562,50563,50564,50565,50566,50567,50568,50569,50570,50571,50572,50573,50574,50575,50576,50577,50578,50579,50580,50581,50582,50583,50584,50585,50586,50587,50588,50589,50590,50591,50592,50593,50594,50595,50596,50597,50598,50599,50600,50601,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50612,50613,50614,50615,50616,50617,50618,50619,50620,50621,50622,50623,50624,50625,50626,50627,50628,50629,50630,50631,50632,50633,50634,50635,50636,50637,50638,50639,50640,50641,50642,50643,50644,50645,50646,50647,50648,50649,50650,50651,50652,50653,50654,50655,50656,50657,50658,50659,50660,50661,50662,50663,50664,50665,50666,50667,50668,50669,50670,50671,50672,50673,50674,50675,50676,50677,50678,50679,50680,50681,50682,50683,50684,50685,50686,50687,50688,50689,50690,50691,50692,50693,50694,50695,50696,50697,50698,50699,50700,50701,50702,50703,50704,50705,50706,50707,50708,50709,50710,50711,50712,50713,50714,50715,50716,50717,50718,50719,50720,50721,50722,50723,50724,50725,50726,50727,50728,50729,50730,50731,50732,50733,50734,50735,50736,50737,50738,50739,50740,50741,50742,50743,50744,50745,50746,50747,50748,50749,50750,50751,50752,50753,50754,50755,50756,50757,50758,50759,50760,50761,50762,50763,50764,50765,50766,50767,50768'/>
+  </group>
+  <group name='303'>
+    <ids val='50769,50770,50771,50772,50773,50774,50775,50776,50777,50778,50779,50780,50781,50782,50783,50784,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50796,50797,50798,50799,50800,50801,50802,50803,50804,50805,50806,50807,50808,50809,50810,50811,50812,50813,50814,50815,50816,50817,50818,50819,50820,50821,50822,50823,50824,50825,50826,50827,50828,50829,50830,50831,50832,50833,50834,50835,50836,50837,50838,50839,50840,50841,50842,50843,50844,50845,50846,50847,50848,50849,50850,50851,50852,50853,50854,50855,50856,50857,50858,50859,50860,50861,50862,50863,50864,50865,50866,50867,50868,50869,50870,50871,50872,50873,50874,50875,50876,50877,50878,50879,50880,50881,50882,50883,50884,50885,50886,50887,50888,50889,50890,50891,50892,50893,50894,50895,50896,50897,50898,50899,50900,50901,50902,50903,50904,50905,50906,50907,50908,50909,50910,50911,50912,50913,50914,50915,50916,50917,50918,50919,50920,50921,50922,50923,50924,50925,50926,50927,50928,50929,50930,50931,50932,50933,50934,50935,50936,50937,50938,50939,50940,50941,50942,50943,50944,50945,50946,50947,50948,50949,50950,50951,50952,50953,50954,50955,50956,50957,50958,50959,50960,50961,50962,50963,50964,50965,50966,50967,50968,50969,50970,50971,50972,50973,50974,50975,50976,50977,50978,50979,50980,50981,50982,50983,50984,50985,50986,50987,50988,50989,50990,50991,50992,50993,50994,50995,50996,50997,50998,50999,51000,51001,51002,51003,51004,51005,51006,51007,51008,51009,51010,51011,51012,51013,51014,51015,51016,51017,51018,51019,51020,51021,51022,51023,51024,51025,51026,51027,51028,51029,51030,51031,51032,51033,51034,51035,51036,51037,51038,51039,51040,51041,51042,51043,51044,51045,51046,51047,51048,51049,51050,51051,51052,51053,51054,51055,51056,51057,51058,51059,51060,51061,51062,51063,51064,51065,51066,51067,51068,51069,51070,51071,51072'/>
+  </group>
+  <group name='303'>
+    <ids val='51073,51074,51075,51076,51077,51078,51079,51080,51081,51082,51083,51084,51085,51086,51087,51088,51089,51090,51091,51092,51093,51094,51095,51096,51097,51098,51099,51100,51101,51102,51103,51104,51105,51106,51107,51108,51109,51110,51111,51112,51113,51114,51115,51116,51117,51118,51119,51120,51121,51122,51123,51124,51125,51126,51127,51128,51129,51130,51131,51132,51133,51134,51135,51136,51137,51138,51139,51140,51141,51142,51143,51144,51145,51146,51147,51148,51149,51150,51151,51152,51153,51154,51155,51156,51157,51158,51159,51160,51161,51162,51163,51164,51165,51166,51167,51168,51169,51170,51171,51172,51173,51174,51175,51176,51177,51178,51179,51180,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,51195,51196,51197,51198,51199,51200,51201,51202,51203,51204,51205,51206,51207,51208,51209,51210,51211,51212,51213,51214,51215,51216,51217,51218,51219,51220,51221,51222,51223,51224,51225,51226,51227,51228,51229,51230,51231,51232,51233,51234,51235,51236,51237,51238,51239,51240,51241,51242,51243,51244,51245,51246,51247,51248,51249,51250,51251,51252,51253,51254,51255,51256,51257,51258,51259,51260,51261,51262,51263,51264,51265,51266,51267,51268,51269,51270,51271,51272,51273,51274,51275,51276,51277,51278,51279,51280,51281,51282,51283,51284,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51312,51313,51314,51315,51316,51317,51318,51319,51320,51321,51322,51323,51324,51325,51326,51327,51328,51329,51330,51331,51332,51333,51334,51335,51336,51337,51338,51339,51340,51341,51342,51343,51344,51345,51346,51347,51348,51349,51350,51351,51352,51353,51354,51355,51356,51357,51358,51359,51360,51361,51362,51363,51364,51365,51366,51367,51368,51369,51370,51371,51372,51373,51374,51375,51376'/>
+  </group>
+  <group name='303'>
+    <ids val='51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51388,51389,51390,51391,51392,51393,51394,51395,51396,51397,51398,51399,51400,51401,51402,51403,51404,51405,51406,51407,51408,51409,51410,51411,51412,51413,51414,51415,51416,51417,51418,51419,51420,51421,51422,51423,51424,51425,51426,51427,51428,51429,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51445,51446,51447,51448,51449,51450,51451,51452,51453,51454,51455,51456,51457,51458,51459,51460,51461,51462,51463,51464,51465,51466,51467,51468,51469,51470,51471,51472,51473,51474,51475,51476,51477,51478,51479,51480,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,51500,51501,51502,51503,51504,51505,51506,51507,51508,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,51528,51529,51530,51531,51532,51533,51534,51535,51536,51537,51538,51539,51540,51541,51542,51543,51544,51545,51546,51547,51548,51549,51550,51551,51552,51553,51554,51555,51556,51557,51558,51559,51560,51561,51562,51563,51564,51565,51566,51567,51568,51569,51570,51571,51572,51573,51574,51575,51576,51577,51578,51579,51580,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51592,51593,51594,51595,51596,51597,51598,51599,51600,51601,51602,51603,51604,51605,51606,51607,51608,51609,51610,51611,51612,51613,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51648,51649,51650,51651,51652,51653,51654,51655,51656,51657,51658,51659,51660,51661,51662,51663,51664,51665,51666,51667,51668,51669,51670,51671,51672,51673,51674,51675,51676,51677,51678,51679,51680'/>
+  </group>
+  <group name='303'>
+    <ids val='51681,51682,51683,51684,51685,51686,51687,51688,51689,51690,51691,51692,51693,51694,51695,51696,51697,51698,51699,51700,51701,51702,51703,51704,51705,51706,51707,51708,51709,51710,51711,51712,51713,51714,51715,51716,51717,51718,51719,51720,51721,51722,51723,51724,51725,51726,51727,51728,51729,51730,51731,51732,51733,51734,51735,51736,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,51750,51751,51752,51753,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,51783,51784,51785,51786,51787,51788,51789,51790,51791,51792,51793,51794,51795,51796,51797,51798,51799,51800,51801,51802,51803,51804,51805,51806,51807,51808,51809,51810,51811,51812,51813,51814,51815,51816,51817,51818,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51837,51838,51839,51840,51841,51842,51843,51844,51845,51846,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51864,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51900,51901,51902,51903,51904,51905,51906,51907,51908,51909,51910,51911,51912,51913,51914,51915,51916,51917,51918,51919,51920,51921,51922,51923,51924,51925,51926,51927,51928,51929,51930,51931,51932,51933,51934,51935,51936,51937,51938,51939,51940,51941,51942,51943,51944,51945,51946,51947,51948,51949,51950,51951,51952,51953,51954,51955,51956,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51976,51977,51978,51979,51980,51981,51982,51983,51984'/>
+  </group>
+  <group name='303'>
+    <ids val='51985,51986,51987,51988,51989,51990,51991,51992,51993,51994,51995,51996,51997,51998,51999,52000,52001,52002,52003,52004,52005,52006,52007,52008,52009,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52033,52034,52035,52036,52037,52038,52039,52040,52041,52042,52043,52044,52045,52046,52047,52048,52049,52050,52051,52052,52053,52054,52055,52056,52057,52058,52059,52060,52061,52062,52063,52064,52065,52066,52067,52068,52069,52070,52071,52072,52073,52074,52075,52076,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52088,52089,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52124,52125,52126,52127,52128,52129,52130,52131,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52152,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52180,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,52192,52193,52194,52195,52196,52197,52198,52199,52200,52201,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52236,52237,52238,52239,52240,52241,52242,52243,52244,52245,52246,52247,52248,52249,52250,52251,52252,52253,52254,52255,52256,52257,52258,52259,52260,52261,52262,52263,52264,52265,52266,52267,52268,52269,52270,52271,52272,52273,52274,52275,52276,52277,52278,52279,52280,52281,52282,52283,52284,52285,52286,52287,52288'/>
+  </group>
+  <group name='303'>
+    <ids val='52289,52290,52291,52292,52293,52294,52295,52296,52297,52298,52299,52300,52301,52302,52303,52304,52305,52306,52307,52308,52309,52310,52311,52312,52313,52314,52315,52316,52317,52318,52319,52320,52321,52322,52323,52324,52325,52326,52327,52328,52329,52330,52331,52332,52333,52334,52335,52336,52337,52338,52339,52340,52341,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,52372,52373,52374,52375,52376,52377,52378,52379,52380,52381,52382,52383,52384,52385,52386,52387,52388,52389,52390,52391,52392,52393,52394,52395,52396,52397,52398,52399,52400,52401,52402,52403,52404,52405,52406,52407,52408,52409,52410,52411,52412,52413,52414,52415,52416,52417,52418,52419,52420,52421,52422,52423,52424,52425,52426,52427,52428,52429,52430,52431,52432,52433,52434,52435,52436,52437,52438,52439,52440,52441,52442,52443,52444,52445,52446,52447,52448,52449,52450,52451,52452,52453,52454,52455,52456,52457,52458,52459,52460,52461,52462,52463,52464,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,52478,52479,52480,52481,52482,52483,52484,52485,52486,52487,52488,52489,52490,52491,52492,52493,52494,52495,52496,52497,52498,52499,52500,52501,52502,52503,52504,52505,52506,52507,52508,52509,52510,52511,52512,52513,52514,52515,52516,52517,52518,52519,52520,52521,52522,52523,52524,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52537,52538,52539,52540,52541,52542,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52572,52573,52574,52575,52576,52577,52578,52579,52580,52581,52582,52583,52584,52585,52586,52587,52588,52589,52590,52591,52592'/>
+  </group>
+  <group name='303'>
+    <ids val='52593,52594,52595,52596,52597,52598,52599,52600,52601,52602,52603,52604,52605,52606,52607,52608,52609,52610,52611,52612,52613,52614,52615,52616,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52628,52629,52630,52631,52632,52633,52634,52635,52636,52637,52638,52639,52640,52641,52642,52643,52644,52645,52646,52647,52648,52649,52650,52651,52652,52653,52654,52655,52656,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52676,52677,52678,52679,52680,52681,52682,52683,52684,52685,52686,52687,52688,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,52706,52707,52708,52709,52710,52711,52712,52713,52714,52715,52716,52717,52718,52719,52720,52721,52722,52723,52724,52725,52726,52727,52728,52729,52730,52731,52732,52733,52734,52735,52736,52737,52738,52739,52740,52741,52742,52743,52744,52745,52746,52747,52748,52749,52750,52751,52752,52753,52754,52755,52756,52757,52758,52759,52760,52761,52762,52763,52764,52765,52766,52767,52768,52769,52770,52771,52772,52773,52774,52775,52776,52777,52778,52779,52780,52781,52782,52783,52784,52785,52786,52787,52788,52789,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52824,52825,52826,52827,52828,52829,52830,52831,52832,52833,52834,52835,52836,52837,52838,52839,52840,52841,52842,52843,52844,52845,52846,52847,52848,52849,52850,52851,52852,52853,52854,52855,52856,52857,52858,52859,52860,52861,52862,52863,52864,52865,52866,52867,52868,52869,52870,52871,52872,52873,52874,52875,52876,52877,52878,52879,52880,52881,52882,52883,52884,52885,52886,52887,52888,52889,52890,52891,52892,52893,52894,52895,52896'/>
+  </group>
+  <group name='303'>
+    <ids val='52897,52898,52899,52900,52901,52902,52903,52904,52905,52906,52907,52908,52909,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,52923,52924,52925,52926,52927,52928,52929,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52964,52965,52966,52967,52968,52969,52970,52971,52972,52973,52974,52975,52976,52977,52978,52979,52980,52981,52982,52983,52984,52985,52986,52987,52988,52989,52990,52991,52992,52993,52994,52995,52996,52997,52998,52999,53000,53001,53002,53003,53004,53005,53006,53007,53008,53009,53010,53011,53012,53013,53014,53015,53016,53017,53018,53019,53020,53021,53022,53023,53024,53025,53026,53027,53028,53029,53030,53031,53032,53033,53034,53035,53036,53037,53038,53039,53040,53041,53042,53043,53044,53045,53046,53047,53048,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53076,53077,53078,53079,53080,53081,53082,53083,53084,53085,53086,53087,53088,53089,53090,53091,53092,53093,53094,53095,53096,53097,53098,53099,53100,53101,53102,53103,53104,53105,53106,53107,53108,53109,53110,53111,53112,53113,53114,53115,53116,53117,53118,53119,53120,53121,53122,53123,53124,53125,53126,53127,53128,53129,53130,53131,53132,53133,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53153,53154,53155,53156,53157,53158,53159,53160,53161,53162,53163,53164,53165,53166,53167,53168,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53188,53189,53190,53191,53192,53193,53194,53195,53196,53197,53198,53199,53200'/>
+  </group>
+  <group name='303'>
+    <ids val='53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53216,53217,53218,53219,53220,53221,53222,53223,53224,53225,53226,53227,53228,53229,53230,53231,53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247,53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263,53264,53265,53266,53267,53268,53269,53270,53271,53272,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,53293,53294,53295,53296,53297,53298,53299,53300,53301,53302,53303,53304,53305,53306,53307,53308,53309,53310,53311,53312,53313,53314,53315,53316,53317,53318,53319,53320,53321,53322,53323,53324,53325,53326,53327,53328,53329,53330,53331,53332,53333,53334,53335,53336,53337,53338,53339,53340,53341,53342,53343,53344,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53356,53357,53358,53359,53360,53361,53362,53363,53364,53365,53366,53367,53368,53369,53370,53371,53372,53373,53374,53375,53376,53377,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53412,53413,53414,53415,53416,53417,53418,53419,53420,53421,53422,53423,53424,53425,53426,53427,53428,53429,53430,53431,53432,53433,53434,53435,53436,53437,53438,53439,53440,53441,53442,53443,53444,53445,53446,53447,53448,53449,53450,53451,53452,53453,53454,53455,53456,53457,53458,53459,53460,53461,53462,53463,53464,53465,53466,53467,53468,53469,53470,53471,53472,53473,53474,53475,53476,53477,53478,53479,53480,53481,53482,53483,53484,53485,53486,53487,53488,53489,53490,53491,53492,53493,53494,53495,53496,53497,53498,53499,53500,53501,53502,53503,53504'/>
+  </group>
+  <group name='303'>
+    <ids val='53505,53506,53507,53508,53509,53510,53511,53512,53513,53514,53515,53516,53517,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53552,53553,53554,53555,53556,53557,53558,53559,53560,53561,53562,53563,53564,53565,53566,53567,53568,53569,53570,53571,53572,53573,53574,53575,53576,53577,53578,53579,53580,53581,53582,53583,53584,53585,53586,53587,53588,53589,53590,53591,53592,53593,53594,53595,53596,53597,53598,53599,53600,53601,53602,53603,53604,53605,53606,53607,53608,53609,53610,53611,53612,53613,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53628,53629,53630,53631,53632,53633,53634,53635,53636,53637,53638,53639,53640,53641,53642,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53664,53665,53666,53667,53668,53669,53670,53671,53672,53673,53674,53675,53676,53677,53678,53679,53680,53681,53682,53683,53684,53685,53686,53687,53688,53689,53690,53691,53692,53693,53694,53695,53696,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,53712,53713,53714,53715,53716,53717,53718,53719,53720,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,53739,53740,53741,53742,53743,53744,53745,53746,53747,53748,53749,53750,53751,53752,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,53767,53768,53769,53770,53771,53772,53773,53774,53775,53776,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,53802,53803,53804,53805,53806,53807,53808'/>
+  </group>
+  <group name='303'>
+    <ids val='53809,53810,53811,53812,53813,53814,53815,53816,53817,53818,53819,53820,53821,53822,53823,53824,53825,53826,53827,53828,53829,53830,53831,53832,53833,53834,53835,53836,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53852,53853,53854,53855,53856,53857,53858,53859,53860,53861,53862,53863,53864,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53888,53889,53890,53891,53892,53893,53894,53895,53896,53897,53898,53899,53900,53901,53902,53903,53904,53905,53906,53907,53908,53909,53910,53911,53912,53913,53914,53915,53916,53917,53918,53919,53920,53921,53922,53923,53924,53925,53926,53927,53928,53929,53930,53931,53932,53933,53934,53935,53936,53937,53938,53939,53940,53941,53942,53943,53944,53945,53946,53947,53948,53949,53950,53951,53952,53953,53954,53955,53956,53957,53958,53959,53960,53961,53962,53963,53964,53965,53966,53967,53968,53969,53970,53971,53972,53973,53974,53975,53976,53977,53978,53979,53980,53981,53982,53983,53984,53985,53986,53987,53988,53989,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54000,54001,54002,54003,54004,54005,54006,54007,54008,54009,54010,54011,54012,54013,54014,54015,54016,54017,54018,54019,54020,54021,54022,54023,54024,54025,54026,54027,54028,54029,54030,54031,54032,54033,54034,54035,54036,54037,54038,54039,54040,54041,54042,54043,54044,54045,54046,54047,54048,54049,54050,54051,54052,54053,54054,54055,54056,54057,54058,54059,54060,54061,54062,54063,54064,54065,54066,54067,54068,54069,54070,54071,54072,54073,54074,54075,54076,54077,54078,54079,54080,54081,54082,54083,54084,54085,54086,54087,54088,54089,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112'/>
+  </group>
+  <group name='303'>
+    <ids val='54113,54114,54115,54116,54117,54118,54119,54120,54121,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54140,54141,54142,54143,54144,54145,54146,54147,54148,54149,54150,54151,54152,54153,54154,54155,54156,54157,54158,54159,54160,54161,54162,54163,54164,54165,54166,54167,54168,54169,54170,54171,54172,54173,54174,54175,54176,54177,54178,54179,54180,54181,54182,54183,54184,54185,54186,54187,54188,54189,54190,54191,54192,54193,54194,54195,54196,54197,54198,54199,54200,54201,54202,54203,54204,54205,54206,54207,54208,54209,54210,54211,54212,54213,54214,54215,54216,54217,54218,54219,54220,54221,54222,54223,54224,54225,54226,54227,54228,54229,54230,54231,54232,54233,54234,54235,54236,54237,54238,54239,54240,54241,54242,54243,54244,54245,54246,54247,54248,54249,54250,54251,54252,54253,54254,54255,54256,54257,54258,54259,54260,54261,54262,54263,54264,54265,54266,54267,54268,54269,54270,54271,54272,54273,54274,54275,54276,54277,54278,54279,54280,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,54295,54296,54297,54298,54299,54300,54301,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,54328,54329,54330,54331,54332,54333,54334,54335,54336,54337,54338,54339,54340,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,54356,54357,54358,54359,54360,54361,54362,54363,54364,54365,54366,54367,54368,54369,54370,54371,54372,54373,54374,54375,54376,54377,54378,54379,54380,54381,54382,54383,54384,54385,54386,54387,54388,54389,54390,54391,54392,54393,54394,54395,54396,54397,54398,54399,54400,54401,54402,54403,54404,54405,54406,54407,54408,54409,54410,54411,54412,54413,54414,54415,54416'/>
+  </group>
+  <group name='303'>
+    <ids val='54417,54418,54419,54420,54421,54422,54423,54424,54425,54426,54427,54428,54429,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54441,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54476,54477,54478,54479,54480,54481,54482,54483,54484,54485,54486,54487,54488,54489,54490,54491,54492,54493,54494,54495,54496,54497,54498,54499,54500,54501,54502,54503,54504,54505,54506,54507,54508,54509,54510,54511,54512,54513,54514,54515,54516,54517,54518,54519,54520,54521,54522,54523,54524,54525,54526,54527,54528,54529,54530,54531,54532,54533,54534,54535,54536,54537,54538,54539,54540,54541,54542,54543,54544,54545,54546,54547,54548,54549,54550,54551,54552,54553,54554,54555,54556,54557,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,54584,54585,54586,54587,54588,54589,54590,54591,54592,54593,54594,54595,54596,54597,54598,54599,54600,54601,54602,54603,54604,54605,54606,54607,54608,54609,54610,54611,54612,54613,54614,54615,54616,54617,54618,54619,54620,54621,54622,54623,54624,54625,54626,54627,54628,54629,54630,54631,54632,54633,54634,54635,54636,54637,54638,54639,54640,54641,54642,54643,54644,54645,54646,54647,54648,54649,54650,54651,54652,54653,54654,54655,54656,54657,54658,54659,54660,54661,54662,54663,54664,54665,54666,54667,54668,54669,54670,54671,54672,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54693,54694,54695,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720'/>
+  </group>
+  <group name='303'>
+    <ids val='54721,54722,54723,54724,54725,54726,54727,54728,54729,54730,54731,54732,54733,54734,54735,54736,54737,54738,54739,54740,54741,54742,54743,54744,54745,54746,54747,54748,54749,54750,54751,54752,54753,54754,54755,54756,54757,54758,54759,54760,54761,54762,54763,54764,54765,54766,54767,54768,54769,54770,54771,54772,54773,54774,54775,54776,54777,54778,54779,54780,54781,54782,54783,54784,54785,54786,54787,54788,54789,54790,54791,54792,54793,54794,54795,54796,54797,54798,54799,54800,54801,54802,54803,54804,54805,54806,54807,54808,54809,54810,54811,54812,54813,54814,54815,54816,54817,54818,54819,54820,54821,54822,54823,54824,54825,54826,54827,54828,54829,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54840,54841,54842,54843,54844,54845,54846,54847,54848,54849,54850,54851,54852,54853,54854,54855,54856,54857,54858,54859,54860,54861,54862,54863,54864,54865,54866,54867,54868,54869,54870,54871,54872,54873,54874,54875,54876,54877,54878,54879,54880,54881,54882,54883,54884,54885,54886,54887,54888,54889,54890,54891,54892,54893,54894,54895,54896,54897,54898,54899,54900,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,54913,54914,54915,54916,54917,54918,54919,54920,54921,54922,54923,54924,54925,54926,54927,54928,54929,54930,54931,54932,54933,54934,54935,54936,54937,54938,54939,54940,54941,54942,54943,54944,54945,54946,54947,54948,54949,54950,54951,54952,54953,54954,54955,54956,54957,54958,54959,54960,54961,54962,54963,54964,54965,54966,54967,54968,54969,54970,54971,54972,54973,54974,54975,54976,54977,54978,54979,54980,54981,54982,54983,54984,54985,54986,54987,54988,54989,54990,54991,54992,54993,54994,54995,54996,54997,54998,54999,55000,55001,55002,55003,55004,55005,55006,55007,55008,55009,55010,55011,55012,55013,55014,55015,55016,55017,55018,55019,55020,55021,55022,55023,55024'/>
+  </group>
+  <group name='303'>
+    <ids val='55025,55026,55027,55028,55029,55030,55031,55032,55033,55034,55035,55036,55037,55038,55039,55040,55041,55042,55043,55044,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55057,55058,55059,55060,55061,55062,55063,55064,55065,55066,55067,55068,55069,55070,55071,55072,55073,55074,55075,55076,55077,55078,55079,55080,55081,55082,55083,55084,55085,55086,55087,55088,55089,55090,55091,55092,55093,55094,55095,55096,55097,55098,55099,55100,55101,55102,55103,55104,55105,55106,55107,55108,55109,55110,55111,55112,55113,55114,55115,55116,55117,55118,55119,55120,55121,55122,55123,55124,55125,55126,55127,55128,55129,55130,55131,55132,55133,55134,55135,55136,55137,55138,55139,55140,55141,55142,55143,55144,55145,55146,55147,55148,55149,55150,55151,55152,55153,55154,55155,55156,55157,55158,55159,55160,55161,55162,55163,55164,55165,55166,55167,55168,55169,55170,55171,55172,55173,55174,55175,55176,55177,55178,55179,55180,55181,55182,55183,55184,55185,55186,55187,55188,55189,55190,55191,55192,55193,55194,55195,55196,55197,55198,55199,55200,55201,55202,55203,55204,55205,55206,55207,55208,55209,55210,55211,55212,55213,55214,55215,55216,55217,55218,55219,55220,55221,55222,55223,55224,55225,55226,55227,55228,55229,55230,55231,55232,55233,55234,55235,55236,55237,55238,55239,55240,55241,55242,55243,55244,55245,55246,55247,55248,55249,55250,55251,55252,55253,55254,55255,55256,55257,55258,55259,55260,55261,55262,55263,55264,55265,55266,55267,55268,55269,55270,55271,55272,55273,55274,55275,55276,55277,55278,55279,55280,55281,55282,55283,55284,55285,55286,55287,55288,55289,55290,55291,55292,55293,55294,55295,55296,55297,55298,55299,55300,55301,55302,55303,55304,55305,55306,55307,55308,55309,55310,55311,55312,55313,55314,55315,55316,55317,55318,55319,55320,55321,55322,55323,55324,55325,55326,55327,55328'/>
+  </group>
+  <group name='303'>
+    <ids val='55329,55330,55331,55332,55333,55334,55335,55336,55337,55338,55339,55340,55341,55342,55343,55344,55345,55346,55347,55348,55349,55350,55351,55352,55353,55354,55355,55356,55357,55358,55359,55360,55361,55362,55363,55364,55365,55366,55367,55368,55369,55370,55371,55372,55373,55374,55375,55376,55377,55378,55379,55380,55381,55382,55383,55384,55385,55386,55387,55388,55389,55390,55391,55392,55393,55394,55395,55396,55397,55398,55399,55400,55401,55402,55403,55404,55405,55406,55407,55408,55409,55410,55411,55412,55413,55414,55415,55416,55417,55418,55419,55420,55421,55422,55423,55424,55425,55426,55427,55428,55429,55430,55431,55432,55433,55434,55435,55436,55437,55438,55439,55440,55441,55442,55443,55444,55445,55446,55447,55448,55449,55450,55451,55452,55453,55454,55455,55456,55457,55458,55459,55460,55461,55462,55463,55464,55465,55466,55467,55468,55469,55470,55471,55472,55473,55474,55475,55476,55477,55478,55479,55480,55481,55482,55483,55484,55485,55486,55487,55488,55489,55490,55491,55492,55493,55494,55495,55496,55497,55498,55499,55500,55501,55502,55503,55504,55505,55506,55507,55508,55509,55510,55511,55512,55513,55514,55515,55516,55517,55518,55519,55520,55521,55522,55523,55524,55525,55526,55527,55528,55529,55530,55531,55532,55533,55534,55535,55536,55537,55538,55539,55540,55541,55542,55543,55544,55545,55546,55547,55548,55549,55550,55551,55552,55553,55554,55555,55556,55557,55558,55559,55560,55561,55562,55563,55564,55565,55566,55567,55568,55569,55570,55571,55572,55573,55574,55575,55576,55577,55578,55579,55580,55581,55582,55583,55584,55585,55586,55587,55588,55589,55590,55591,55592,55593,55594,55595,55596,55597,55598,55599,55600,55601,55602,55603,55604,55605,55606,55607,55608,55609,55610,55611,55612,55613,55614,55615,55616,55617,55618,55619,55620,55621,55622,55623,55624,55625,55626,55627,55628,55629,55630,55631,55632'/>
+  </group>
+  <group name='303'>
+    <ids val='55633,55634,55635,55636,55637,55638,55639,55640,55641,55642,55643,55644,55645,55646,55647,55648,55649,55650,55651,55652,55653,55654,55655,55656,55657,55658,55659,55660,55661,55662,55663,55664,55665,55666,55667,55668,55669,55670,55671,55672,55673,55674,55675,55676,55677,55678,55679,55680,55681,55682,55683,55684,55685,55686,55687,55688,55689,55690,55691,55692,55693,55694,55695,55696,55697,55698,55699,55700,55701,55702,55703,55704,55705,55706,55707,55708,55709,55710,55711,55712,55713,55714,55715,55716,55717,55718,55719,55720,55721,55722,55723,55724,55725,55726,55727,55728,55729,55730,55731,55732,55733,55734,55735,55736,55737,55738,55739,55740,55741,55742,55743,55744,55745,55746,55747,55748,55749,55750,55751,55752,55753,55754,55755,55756,55757,55758,55759,55760,55761,55762,55763,55764,55765,55766,55767,55768,55769,55770,55771,55772,55773,55774,55775,55776,55777,55778,55779,55780,55781,55782,55783,55784,55785,55786,55787,55788,55789,55790,55791,55792,55793,55794,55795,55796,55797,55798,55799,55800,55801,55802,55803,55804,55805,55806,55807,55808,55809,55810,55811,55812,55813,55814,55815,55816,55817,55818,55819,55820,55821,55822,55823,55824,55825,55826,55827,55828,55829,55830,55831,55832,55833,55834,55835,55836,55837,55838,55839,55840,55841,55842,55843,55844,55845,55846,55847,55848,55849,55850,55851,55852,55853,55854,55855,55856,55857,55858,55859,55860,55861,55862,55863,55864,55865,55866,55867,55868,55869,55870,55871,55872,55873,55874,55875,55876,55877,55878,55879,55880,55881,55882,55883,55884,55885,55886,55887,55888,55889,55890,55891,55892,55893,55894,55895,55896,55897,55898,55899,55900,55901,55902,55903,55904,55905,55906,55907,55908,55909,55910,55911,55912,55913,55914,55915,55916,55917,55918,55919,55920,55921,55922,55923,55924,55925,55926,55927,55928,55929,55930,55931,55932,55933,55934,55935,55936'/>
+  </group>
+  <group name='303'>
+    <ids val='55937,55938,55939,55940,55941,55942,55943,55944,55945,55946,55947,55948,55949,55950,55951,55952,55953,55954,55955,55956,55957,55958,55959,55960,55961,55962,55963,55964,55965,55966,55967,55968,55969,55970,55971,55972,55973,55974,55975,55976,55977,55978,55979,55980,55981,55982,55983,55984,55985,55986,55987,55988,55989,55990,55991,55992,55993,55994,55995,55996,55997,55998,55999,56000,56001,56002,56003,56004,56005,56006,56007,56008,56009,56010,56011,56012,56013,56014,56015,56016,56017,56018,56019,56020,56021,56022,56023,56024,56025,56026,56027,56028,56029,56030,56031,56032,56033,56034,56035,56036,56037,56038,56039,56040,56041,56042,56043,56044,56045,56046,56047,56048,56049,56050,56051,56052,56053,56054,56055,56056,56057,56058,56059,56060,56061,56062,56063,56064,56065,56066,56067,56068,56069,56070,56071,56072,56073,56074,56075,56076,56077,56078,56079,56080,56081,56082,56083,56084,56085,56086,56087,56088,56089,56090,56091,56092,56093,56094,56095,56096,56097,56098,56099,56100,56101,56102,56103,56104,56105,56106,56107,56108,56109,56110,56111,56112,56113,56114,56115,56116,56117,56118,56119,56120,56121,56122,56123,56124,56125,56126,56127,56128,56129,56130,56131,56132,56133,56134,56135,56136,56137,56138,56139,56140,56141,56142,56143,56144,56145,56146,56147,56148,56149,56150,56151,56152,56153,56154,56155,56156,56157,56158,56159,56160,56161,56162,56163,56164,56165,56166,56167,56168,56169,56170,56171,56172,56173,56174,56175,56176,56177,56178,56179,56180,56181,56182,56183,56184,56185,56186,56187,56188,56189,56190,56191,56192,56193,56194,56195,56196,56197,56198,56199,56200,56201,56202,56203,56204,56205,56206,56207,56208,56209,56210,56211,56212,56213,56214,56215,56216,56217,56218,56219,56220,56221,56222,56223,56224,56225,56226,56227,56228,56229,56230,56231,56232,56233,56234,56235,56236,56237,56238,56239,56240'/>
+  </group>
+  <group name='303'>
+    <ids val='56241,56242,56243,56244,56245,56246,56247,56248,56249,56250,56251,56252,56253,56254,56255,56256,56257,56258,56259,56260,56261,56262,56263,56264,56265,56266,56267,56268,56269,56270,56271,56272,56273,56274,56275,56276,56277,56278,56279,56280,56281,56282,56283,56284,56285,56286,56287,56288,56289,56290,56291,56292,56293,56294,56295,56296,56297,56298,56299,56300,56301,56302,56303,56304,56305,56306,56307,56308,56309,56310,56311,56312,56313,56314,56315,56316,56317,56318,56319,56320,56321,56322,56323,56324,56325,56326,56327,56328,56329,56330,56331,56332,56333,56334,56335,56336,56337,56338,56339,56340,56341,56342,56343,56344,56345,56346,56347,56348,56349,56350,56351,56352,56353,56354,56355,56356,56357,56358,56359,56360,56361,56362,56363,56364,56365,56366,56367,56368,56369,56370,56371,56372,56373,56374,56375,56376,56377,56378,56379,56380,56381,56382,56383,56384,56385,56386,56387,56388,56389,56390,56391,56392,56393,56394,56395,56396,56397,56398,56399,56400,56401,56402,56403,56404,56405,56406,56407,56408,56409,56410,56411,56412,56413,56414,56415,56416,56417,56418,56419,56420,56421,56422,56423,56424,56425,56426,56427,56428,56429,56430,56431,56432,56433,56434,56435,56436,56437,56438,56439,56440,56441,56442,56443,56444,56445,56446,56447,56448,56449,56450,56451,56452,56453,56454,56455,56456,56457,56458,56459,56460,56461,56462,56463,56464,56465,56466,56467,56468,56469,56470,56471,56472,56473,56474,56475,56476,56477,56478,56479,56480,56481,56482,56483,56484,56485,56486,56487,56488,56489,56490,56491,56492,56493,56494,56495,56496,56497,56498,56499,56500,56501,56502,56503,56504,56505,56506,56507,56508,56509,56510,56511,56512,56513,56514,56515,56516,56517,56518,56519,56520,56521,56522,56523,56524,56525,56526,56527,56528,56529,56530,56531,56532,56533,56534,56535,56536,56537,56538,56539,56540,56541,56542,56543,56544'/>
+  </group>
+  <group name='303'>
+    <ids val='56545,56546,56547,56548,56549,56550,56551,56552,56553,56554,56555,56556,56557,56558,56559,56560,56561,56562,56563,56564,56565,56566,56567,56568,56569,56570,56571,56572,56573,56574,56575,56576,56577,56578,56579,56580,56581,56582,56583,56584,56585,56586,56587,56588,56589,56590,56591,56592,56593,56594,56595,56596,56597,56598,56599,56600,56601,56602,56603,56604,56605,56606,56607,56608,56609,56610,56611,56612,56613,56614,56615,56616,56617,56618,56619,56620,56621,56622,56623,56624,56625,56626,56627,56628,56629,56630,56631,56632,56633,56634,56635,56636,56637,56638,56639,56640,56641,56642,56643,56644,56645,56646,56647,56648,56649,56650,56651,56652,56653,56654,56655,56656,56657,56658,56659,56660,56661,56662,56663,56664,56665,56666,56667,56668,56669,56670,56671,56672,56673,56674,56675,56676,56677,56678,56679,56680,56681,56682,56683,56684,56685,56686,56687,56688,56689,56690,56691,56692,56693,56694,56695,56696,56697,56698,56699,56700,56701,56702,56703,56704,56705,56706,56707,56708,56709,56710,56711,56712,56713,56714,56715,56716,56717,56718,56719,56720,56721,56722,56723,56724,56725,56726,56727,56728,56729,56730,56731,56732,56733,56734,56735,56736,56737,56738,56739,56740,56741,56742,56743,56744,56745,56746,56747,56748,56749,56750,56751,56752,56753,56754,56755,56756,56757,56758,56759,56760,56761,56762,56763,56764,56765,56766,56767,56768,56769,56770,56771,56772,56773,56774,56775,56776,56777,56778,56779,56780,56781,56782,56783,56784,56785,56786,56787,56788,56789,56790,56791,56792,56793,56794,56795,56796,56797,56798,56799,56800,56801,56802,56803,56804,56805,56806,56807,56808,56809,56810,56811,56812,56813,56814,56815,56816,56817,56818,56819,56820,56821,56822,56823,56824,56825,56826,56827,56828,56829,56830,56831,56832,56833,56834,56835,56836,56837,56838,56839,56840,56841,56842,56843,56844,56845,56846,56847,56848'/>
+  </group>
+  <group name='303'>
+    <ids val='56849,56850,56851,56852,56853,56854,56855,56856,56857,56858,56859,56860,56861,56862,56863,56864,56865,56866,56867,56868,56869,56870,56871,56872,56873,56874,56875,56876,56877,56878,56879,56880,56881,56882,56883,56884,56885,56886,56887,56888,56889,56890,56891,56892,56893,56894,56895,56896,56897,56898,56899,56900,56901,56902,56903,56904,56905,56906,56907,56908,56909,56910,56911,56912,56913,56914,56915,56916,56917,56918,56919,56920,56921,56922,56923,56924,56925,56926,56927,56928,56929,56930,56931,56932,56933,56934,56935,56936,56937,56938,56939,56940,56941,56942,56943,56944,56945,56946,56947,56948,56949,56950,56951,56952,56953,56954,56955,56956,56957,56958,56959,56960,56961,56962,56963,56964,56965,56966,56967,56968,56969,56970,56971,56972,56973,56974,56975,56976,56977,56978,56979,56980,56981,56982,56983,56984,56985,56986,56987,56988,56989,56990,56991,56992,56993,56994,56995,56996,56997,56998,56999,57000,57001,57002,57003,57004,57005,57006,57007,57008,57009,57010,57011,57012,57013,57014,57015,57016,57017,57018,57019,57020,57021,57022,57023,57024,57025,57026,57027,57028,57029,57030,57031,57032,57033,57034,57035,57036,57037,57038,57039,57040,57041,57042,57043,57044,57045,57046,57047,57048,57049,57050,57051,57052,57053,57054,57055,57056,57057,57058,57059,57060,57061,57062,57063,57064,57065,57066,57067,57068,57069,57070,57071,57072,57073,57074,57075,57076,57077,57078,57079,57080,57081,57082,57083,57084,57085,57086,57087,57088,57089,57090,57091,57092,57093,57094,57095,57096,57097,57098,57099,57100,57101,57102,57103,57104,57105,57106,57107,57108,57109,57110,57111,57112,57113,57114,57115,57116,57117,57118,57119,57120,57121,57122,57123,57124,57125,57126,57127,57128,57129,57130,57131,57132,57133,57134,57135,57136,57137,57138,57139,57140,57141,57142,57143,57144,57145,57146,57147,57148,57149,57150,57151,57152'/>
+  </group>
+  <group name='303'>
+    <ids val='57153,57154,57155,57156,57157,57158,57159,57160,57161,57162,57163,57164,57165,57166,57167,57168,57169,57170,57171,57172,57173,57174,57175,57176,57177,57178,57179,57180,57181,57182,57183,57184,57185,57186,57187,57188,57189,57190,57191,57192,57193,57194,57195,57196,57197,57198,57199,57200,57201,57202,57203,57204,57205,57206,57207,57208,57209,57210,57211,57212,57213,57214,57215,57216,57217,57218,57219,57220,57221,57222,57223,57224,57225,57226,57227,57228,57229,57230,57231,57232,57233,57234,57235,57236,57237,57238,57239,57240,57241,57242,57243,57244,57245,57246,57247,57248,57249,57250,57251,57252,57253,57254,57255,57256,57257,57258,57259,57260,57261,57262,57263,57264,57265,57266,57267,57268,57269,57270,57271,57272,57273,57274,57275,57276,57277,57278,57279,57280,57281,57282,57283,57284,57285,57286,57287,57288,57289,57290,57291,57292,57293,57294,57295,57296,57297,57298,57299,57300,57301,57302,57303,57304,57305,57306,57307,57308,57309,57310,57311,57312,57313,57314,57315,57316,57317,57318,57319,57320,57321,57322,57323,57324,57325,57326,57327,57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456'/>
+  </group>
+  <group name='303'>
+    <ids val='57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760'/>
+  </group>
+  <group name='303'>
+    <ids val='57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064'/>
+  </group>
+  <group name='303'>
+    <ids val='58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368'/>
+  </group>
+  <group name='303'>
+    <ids val='58369,58370,58371,58372,58373,58374,58375,58376,58377,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672'/>
+  </group>
+  <group name='303'>
+    <ids val='58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,58853,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976'/>
+  </group>
+  <group name='303'>
+    <ids val='58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,59238,59239,59240,59241,59242,59243,59244,59245,59246,59247,59248,59249,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,59261,59262,59263,59264,59265,59266,59267,59268,59269,59270,59271,59272,59273,59274,59275,59276,59277,59278,59279,59280'/>
+  </group>
+  <group name='303'>
+    <ids val='59281,59282,59283,59284,59285,59286,59287,59288,59289,59290,59291,59292,59293,59294,59295,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,59335,59336,59337,59338,59339,59340,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,59362,59363,59364,59365,59366,59367,59368,59369,59370,59371,59372,59373,59374,59375,59376,59377,59378,59379,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,59408,59409,59410,59411,59412,59413,59414,59415,59416,59417,59418,59419,59420,59421,59422,59423,59424,59425,59426,59427,59428,59429,59430,59431,59432,59433,59434,59435,59436,59437,59438,59439,59440,59441,59442,59443,59444,59445,59446,59447,59448,59449,59450,59451,59452,59453,59454,59455,59456,59457,59458,59459,59460,59461,59462,59463,59464,59465,59466,59467,59468,59469,59470,59471,59472,59473,59474,59475,59476,59477,59478,59479,59480,59481,59482,59483,59484,59485,59486,59487,59488,59489,59490,59491,59492,59493,59494,59495,59496,59497,59498,59499,59500,59501,59502,59503,59504,59505,59506,59507,59508,59509,59510,59511,59512,59513,59514,59515,59516,59517,59518,59519,59520,59521,59522,59523,59524,59525,59526,59527,59528,59529,59530,59531,59532,59533,59534,59535,59536,59537,59538,59539,59540,59541,59542,59543,59544,59545,59546,59547,59548,59549,59550,59551,59552,59553,59554,59555,59556,59557,59558,59559,59560,59561,59562,59563,59564,59565,59566,59567,59568,59569,59570,59571,59572,59573,59574,59575,59576,59577,59578,59579,59580,59581,59582,59583,59584'/>
+  </group>
+  <group name='303'>
+    <ids val='59585,59586,59587,59588,59589,59590,59591,59592,59593,59594,59595,59596,59597,59598,59599,59600,59601,59602,59603,59604,59605,59606,59607,59608,59609,59610,59611,59612,59613,59614,59615,59616,59617,59618,59619,59620,59621,59622,59623,59624,59625,59626,59627,59628,59629,59630,59631,59632,59633,59634,59635,59636,59637,59638,59639,59640,59641,59642,59643,59644,59645,59646,59647,59648,59649,59650,59651,59652,59653,59654,59655,59656,59657,59658,59659,59660,59661,59662,59663,59664,59665,59666,59667,59668,59669,59670,59671,59672,59673,59674,59675,59676,59677,59678,59679,59680,59681,59682,59683,59684,59685,59686,59687,59688,59689,59690,59691,59692,59693,59694,59695,59696,59697,59698,59699,59700,59701,59702,59703,59704,59705,59706,59707,59708,59709,59710,59711,59712,59713,59714,59715,59716,59717,59718,59719,59720,59721,59722,59723,59724,59725,59726,59727,59728,59729,59730,59731,59732,59733,59734,59735,59736,59737,59738,59739,59740,59741,59742,59743,59744,59745,59746,59747,59748,59749,59750,59751,59752,59753,59754,59755,59756,59757,59758,59759,59760,59761,59762,59763,59764,59765,59766,59767,59768,59769,59770,59771,59772,59773,59774,59775,59776,59777,59778,59779,59780,59781,59782,59783,59784,59785,59786,59787,59788,59789,59790,59791,59792,59793,59794,59795,59796,59797,59798,59799,59800,59801,59802,59803,59804,59805,59806,59807,59808,59809,59810,59811,59812,59813,59814,59815,59816,59817,59818,59819,59820,59821,59822,59823,59824,59825,59826,59827,59828,59829,59830,59831,59832,59833,59834,59835,59836,59837,59838,59839,59840,59841,59842,59843,59844,59845,59846,59847,59848,59849,59850,59851,59852,59853,59854,59855,59856,59857,59858,59859,59860,59861,59862,59863,59864,59865,59866,59867,59868,59869,59870,59871,59872,59873,59874,59875,59876,59877,59878,59879,59880,59881,59882,59883,59884,59885,59886,59887,59888'/>
+  </group>
+  <group name='303'>
+    <ids val='59889,59890,59891,59892,59893,59894,59895,59896,59897,59898,59899,59900,59901,59902,59903,59904,59905,59906,59907,59908,59909,59910,59911,59912,59913,59914,59915,59916,59917,59918,59919,59920,59921,59922,59923,59924,59925,59926,59927,59928,59929,59930,59931,59932,59933,59934,59935,59936,59937,59938,59939,59940,59941,59942,59943,59944,59945,59946,59947,59948,59949,59950,59951,59952,59953,59954,59955,59956,59957,59958,59959,59960,59961,59962,59963,59964,59965,59966,59967,59968,59969,59970,59971,59972,59973,59974,59975,59976,59977,59978,59979,59980,59981,59982,59983,59984,59985,59986,59987,59988,59989,59990,59991,59992,59993,59994,59995,59996,59997,59998,59999,60000,60001,60002,60003,60004,60005,60006,60007,60008,60009,60010,60011,60012,60013,60014,60015,60016,60017,60018,60019,60020,60021,60022,60023,60024,60025,60026,60027,60028,60029,60030,60031,60032,60033,60034,60035,60036,60037,60038,60039,60040,60041,60042,60043,60044,60045,60046,60047,60048,60049,60050,60051,60052,60053,60054,60055,60056,60057,60058,60059,60060,60061,60062,60063,60064,60065,60066,60067,60068,60069,60070,60071,60072,60073,60074,60075,60076,60077,60078,60079,60080,60081,60082,60083,60084,60085,60086,60087,60088,60089,60090,60091,60092,60093,60094,60095,60096,60097,60098,60099,60100,60101,60102,60103,60104,60105,60106,60107,60108,60109,60110,60111,60112,60113,60114,60115,60116,60117,60118,60119,60120,60121,60122,60123,60124,60125,60126,60127,60128,60129,60130,60131,60132,60133,60134,60135,60136,60137,60138,60139,60140,60141,60142,60143,60144,60145,60146,60147,60148,60149,60150,60151,60152,60153,60154,60155,60156,60157,60158,60159,60160,60161,60162,60163,60164,60165,60166,60167,60168,60169,60170,60171,60172,60173,60174,60175,60176,60177,60178,60179,60180,60181,60182,60183,60184,60185,60186,60187,60188,60189,60190,60191,60192'/>
+  </group>
+  <group name='303'>
+    <ids val='60193,60194,60195,60196,60197,60198,60199,60200,60201,60202,60203,60204,60205,60206,60207,60208,60209,60210,60211,60212,60213,60214,60215,60216,60217,60218,60219,60220,60221,60222,60223,60224,60225,60226,60227,60228,60229,60230,60231,60232,60233,60234,60235,60236,60237,60238,60239,60240,60241,60242,60243,60244,60245,60246,60247,60248,60249,60250,60251,60252,60253,60254,60255,60256,60257,60258,60259,60260,60261,60262,60263,60264,60265,60266,60267,60268,60269,60270,60271,60272,60273,60274,60275,60276,60277,60278,60279,60280,60281,60282,60283,60284,60285,60286,60287,60288,60289,60290,60291,60292,60293,60294,60295,60296,60297,60298,60299,60300,60301,60302,60303,60304,60305,60306,60307,60308,60309,60310,60311,60312,60313,60314,60315,60316,60317,60318,60319,60320,60321,60322,60323,60324,60325,60326,60327,60328,60329,60330,60331,60332,60333,60334,60335,60336,60337,60338,60339,60340,60341,60342,60343,60344,60345,60346,60347,60348,60349,60350,60351,60352,60353,60354,60355,60356,60357,60358,60359,60360,60361,60362,60363,60364,60365,60366,60367,60368,60369,60370,60371,60372,60373,60374,60375,60376,60377,60378,60379,60380,60381,60382,60383,60384,60385,60386,60387,60388,60389,60390,60391,60392,60393,60394,60395,60396,60397,60398,60399,60400,60401,60402,60403,60404,60405,60406,60407,60408,60409,60410,60411,60412,60413,60414,60415,60416,60417,60418,60419,60420,60421,60422,60423,60424,60425,60426,60427,60428,60429,60430,60431,60432,60433,60434,60435,60436,60437,60438,60439,60440,60441,60442,60443,60444,60445,60446,60447,60448,60449,60450,60451,60452,60453,60454,60455,60456,60457,60458,60459,60460,60461,60462,60463,60464,60465,60466,60467,60468,60469,60470,60471,60472,60473,60474,60475,60476,60477,60478,60479,60480,60481,60482,60483,60484,60485,60486,60487,60488,60489,60490,60491,60492,60493,60494,60495,60496'/>
+  </group>
+  <group name='303'>
+    <ids val='60497,60498,60499,60500,60501,60502,60503,60504,60505,60506,60507,60508,60509,60510,60511,60512,60513,60514,60515,60516,60517,60518,60519,60520,60521,60522,60523,60524,60525,60526,60527,60528,60529,60530,60531,60532,60533,60534,60535,60536,60537,60538,60539,60540,60541,60542,60543,60544,60545,60546,60547,60548,60549,60550,60551,60552,60553,60554,60555,60556,60557,60558,60559,60560,60561,60562,60563,60564,60565,60566,60567,60568,60569,60570,60571,60572,60573,60574,60575,60576,60577,60578,60579,60580,60581,60582,60583,60584,60585,60586,60587,60588,60589,60590,60591,60592,60593,60594,60595,60596,60597,60598,60599,60600,60601,60602,60603,60604,60605,60606,60607,60608,60609,60610,60611,60612,60613,60614,60615,60616,60617,60618,60619,60620,60621,60622,60623,60624,60625,60626,60627,60628,60629,60630,60631,60632,60633,60634,60635,60636,60637,60638,60639,60640,60641,60642,60643,60644,60645,60646,60647,60648,60649,60650,60651,60652,60653,60654,60655,60656,60657,60658,60659,60660,60661,60662,60663,60664,60665,60666,60667,60668,60669,60670,60671,60672,60673,60674,60675,60676,60677,60678,60679,60680,60681,60682,60683,60684,60685,60686,60687,60688,60689,60690,60691,60692,60693,60694,60695,60696,60697,60698,60699,60700,60701,60702,60703,60704,60705,60706,60707,60708,60709,60710,60711,60712,60713,60714,60715,60716,60717,60718,60719,60720,60721,60722,60723,60724,60725,60726,60727,60728,60729,60730,60731,60732,60733,60734,60735,60736,60737,60738,60739,60740,60741,60742,60743,60744,60745,60746,60747,60748,60749,60750,60751,60752,60753,60754,60755,60756,60757,60758,60759,60760,60761,60762,60763,60764,60765,60766,60767,60768,60769,60770,60771,60772,60773,60774,60775,60776,60777,60778,60779,60780,60781,60782,60783,60784,60785,60786,60787,60788,60789,60790,60791,60792,60793,60794,60795,60796,60797,60798,60799,60800'/>
+  </group>
+  <group name='303'>
+    <ids val='60801,60802,60803,60804,60805,60806,60807,60808,60809,60810,60811,60812,60813,60814,60815,60816,60817,60818,60819,60820,60821,60822,60823,60824,60825,60826,60827,60828,60829,60830,60831,60832,60833,60834,60835,60836,60837,60838,60839,60840,60841,60842,60843,60844,60845,60846,60847,60848,60849,60850,60851,60852,60853,60854,60855,60856,60857,60858,60859,60860,60861,60862,60863,60864,60865,60866,60867,60868,60869,60870,60871,60872,60873,60874,60875,60876,60877,60878,60879,60880,60881,60882,60883,60884,60885,60886,60887,60888,60889,60890,60891,60892,60893,60894,60895,60896,60897,60898,60899,60900,60901,60902,60903,60904,60905,60906,60907,60908,60909,60910,60911,60912,60913,60914,60915,60916,60917,60918,60919,60920,60921,60922,60923,60924,60925,60926,60927,60928,60929,60930,60931,60932,60933,60934,60935,60936,60937,60938,60939,60940,60941,60942,60943,60944,60945,60946,60947,60948,60949,60950,60951,60952,60953,60954,60955,60956,60957,60958,60959,60960,60961,60962,60963,60964,60965,60966,60967,60968,60969,60970,60971,60972,60973,60974,60975,60976,60977,60978,60979,60980,60981,60982,60983,60984,60985,60986,60987,60988,60989,60990,60991,60992,60993,60994,60995,60996,60997,60998,60999,61000,61001,61002,61003,61004,61005,61006,61007,61008,61009,61010,61011,61012,61013,61014,61015,61016,61017,61018,61019,61020,61021,61022,61023,61024,61025,61026,61027,61028,61029,61030,61031,61032,61033,61034,61035,61036,61037,61038,61039,61040,61041,61042,61043,61044,61045,61046,61047,61048,61049,61050,61051,61052,61053,61054,61055,61056,61057,61058,61059,61060,61061,61062,61063,61064,61065,61066,61067,61068,61069,61070,61071,61072,61073,61074,61075,61076,61077,61078,61079,61080,61081,61082,61083,61084,61085,61086,61087,61088,61089,61090,61091,61092,61093,61094,61095,61096,61097,61098,61099,61100,61101,61102,61103,61104'/>
+  </group>
+  <group name='303'>
+    <ids val='61105,61106,61107,61108,61109,61110,61111,61112,61113,61114,61115,61116,61117,61118,61119,61120,61121,61122,61123,61124,61125,61126,61127,61128,61129,61130,61131,61132,61133,61134,61135,61136,61137,61138,61139,61140,61141,61142,61143,61144,61145,61146,61147,61148,61149,61150,61151,61152,61153,61154,61155,61156,61157,61158,61159,61160,61161,61162,61163,61164,61165,61166,61167,61168,61169,61170,61171,61172,61173,61174,61175,61176,61177,61178,61179,61180,61181,61182,61183,61184,61185,61186,61187,61188,61189,61190,61191,61192,61193,61194,61195,61196,61197,61198,61199,61200,61201,61202,61203,61204,61205,61206,61207,61208,61209,61210,61211,61212,61213,61214,61215,61216,61217,61218,61219,61220,61221,61222,61223,61224,61225,61226,61227,61228,61229,61230,61231,61232,61233,61234,61235,61236,61237,61238,61239,61240,61241,61242,61243,61244,61245,61246,61247,61248,61249,61250,61251,61252,61253,61254,61255,61256,61257,61258,61259,61260,61261,61262,61263,61264,61265,61266,61267,61268,61269,61270,61271,61272,61273,61274,61275,61276,61277,61278,61279,61280,61281,61282,61283,61284,61285,61286,61287,61288,61289,61290,61291,61292,61293,61294,61295,61296,61297,61298,61299,61300,61301,61302,61303,61304,61305,61306,61307,61308,61309,61310,61311,61312,61313,61314,61315,61316,61317,61318,61319,61320,61321,61322,61323,61324,61325,61326,61327,61328,61329,61330,61331,61332,61333,61334,61335,61336,61337,61338,61339,61340,61341,61342,61343,61344,61345,61346,61347,61348,61349,61350,61351,61352,61353,61354,61355,61356,61357,61358,61359,61360,61361,61362,61363,61364,61365,61366,61367,61368,61369,61370,61371,61372,61373,61374,61375,61376,61377,61378,61379,61380,61381,61382,61383,61384,61385,61386,61387,61388,61389,61390,61391,61392,61393,61394,61395,61396,61397,61398,61399,61400,61401,61402,61403,61404,61405,61406,61407,61408'/>
+  </group>
+  <group name='303'>
+    <ids val='61409,61410,61411,61412,61413,61414,61415,61416,61417,61418,61419,61420,61421,61422,61423,61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439,61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455,61456,61457,61458,61459,61460,61461,61462,61463,61464,61465,61466,61467,61468,61469,61470,61471,61472,61473,61474,61475,61476,61477,61478,61479,61480,61481,61482,61483,61484,61485,61486,61487,61488,61489,61490,61491,61492,61493,61494,61495,61496,61497,61498,61499,61500,61501,61502,61503,61504,61505,61506,61507,61508,61509,61510,61511,61512,61513,61514,61515,61516,61517,61518,61519,61520,61521,61522,61523,61524,61525,61526,61527,61528,61529,61530,61531,61532,61533,61534,61535,61536,61537,61538,61539,61540,61541,61542,61543,61544,61545,61546,61547,61548,61549,61550,61551,61552,61553,61554,61555,61556,61557,61558,61559,61560,61561,61562,61563,61564,61565,61566,61567,61568,61569,61570,61571,61572,61573,61574,61575,61576,61577,61578,61579,61580,61581,61582,61583,61584,61585,61586,61587,61588,61589,61590,61591,61592,61593,61594,61595,61596,61597,61598,61599,61600,61601,61602,61603,61604,61605,61606,61607,61608,61609,61610,61611,61612,61613,61614,61615,61616,61617,61618,61619,61620,61621,61622,61623,61624,61625,61626,61627,61628,61629,61630,61631,61632,61633,61634,61635,61636,61637,61638,61639,61640,61641,61642,61643,61644,61645,61646,61647,61648,61649,61650,61651,61652,61653,61654,61655,61656,61657,61658,61659,61660,61661,61662,61663,61664,61665,61666,61667,61668,61669,61670,61671,61672,61673,61674,61675,61676,61677,61678,61679,61680,61681,61682,61683,61684,61685,61686,61687,61688,61689,61690,61691,61692,61693,61694,61695,61696,61697,61698,61699,61700,61701,61702,61703,61704,61705,61706,61707,61708,61709,61710,61711,61712'/>
+  </group>
+  <group name='303'>
+    <ids val='61713,61714,61715,61716,61717,61718,61719,61720,61721,61722,61723,61724,61725,61726,61727,61728,61729,61730,61731,61732,61733,61734,61735,61736,61737,61738,61739,61740,61741,61742,61743,61744,61745,61746,61747,61748,61749,61750,61751,61752,61753,61754,61755,61756,61757,61758,61759,61760,61761,61762,61763,61764,61765,61766,61767,61768,61769,61770,61771,61772,61773,61774,61775,61776,61777,61778,61779,61780,61781,61782,61783,61784,61785,61786,61787,61788,61789,61790,61791,61792,61793,61794,61795,61796,61797,61798,61799,61800,61801,61802,61803,61804,61805,61806,61807,61808,61809,61810,61811,61812,61813,61814,61815,61816,61817,61818,61819,61820,61821,61822,61823,61824,61825,61826,61827,61828,61829,61830,61831,61832,61833,61834,61835,61836,61837,61838,61839,61840,61841,61842,61843,61844,61845,61846,61847,61848,61849,61850,61851,61852,61853,61854,61855,61856,61857,61858,61859,61860,61861,61862,61863,61864,61865,61866,61867,61868,61869,61870,61871,61872,61873,61874,61875,61876,61877,61878,61879,61880,61881,61882,61883,61884,61885,61886,61887,61888,61889,61890,61891,61892,61893,61894,61895,61896,61897,61898,61899,61900,61901,61902,61903,61904,61905,61906,61907,61908,61909,61910,61911,61912,61913,61914,61915,61916,61917,61918,61919,61920,61921,61922,61923,61924,61925,61926,61927,61928,61929,61930,61931,61932,61933,61934,61935,61936,61937,61938,61939,61940,61941,61942,61943,61944,61945,61946,61947,61948,61949,61950,61951,61952,61953,61954,61955,61956,61957,61958,61959,61960,61961,61962,61963,61964,61965,61966,61967,61968,61969,61970,61971,61972,61973,61974,61975,61976,61977,61978,61979,61980,61981,61982,61983,61984,61985,61986,61987,61988,61989,61990,61991,61992,61993,61994,61995,61996,61997,61998,61999,62000,62001,62002,62003,62004,62005,62006,62007,62008,62009,62010,62011,62012,62013,62014,62015,62016'/>
+  </group>
+  <group name='303'>
+    <ids val='62017,62018,62019,62020,62021,62022,62023,62024,62025,62026,62027,62028,62029,62030,62031,62032,62033,62034,62035,62036,62037,62038,62039,62040,62041,62042,62043,62044,62045,62046,62047,62048,62049,62050,62051,62052,62053,62054,62055,62056,62057,62058,62059,62060,62061,62062,62063,62064,62065,62066,62067,62068,62069,62070,62071,62072,62073,62074,62075,62076,62077,62078,62079,62080,62081,62082,62083,62084,62085,62086,62087,62088,62089,62090,62091,62092,62093,62094,62095,62096,62097,62098,62099,62100,62101,62102,62103,62104,62105,62106,62107,62108,62109,62110,62111,62112,62113,62114,62115,62116,62117,62118,62119,62120,62121,62122,62123,62124,62125,62126,62127,62128,62129,62130,62131,62132,62133,62134,62135,62136,62137,62138,62139,62140,62141,62142,62143,62144,62145,62146,62147,62148,62149,62150,62151,62152,62153,62154,62155,62156,62157,62158,62159,62160,62161,62162,62163,62164,62165,62166,62167,62168,62169,62170,62171,62172,62173,62174,62175,62176,62177,62178,62179,62180,62181,62182,62183,62184,62185,62186,62187,62188,62189,62190,62191,62192,62193,62194,62195,62196,62197,62198,62199,62200,62201,62202,62203,62204,62205,62206,62207,62208,62209,62210,62211,62212,62213,62214,62215,62216,62217,62218,62219,62220,62221,62222,62223,62224,62225,62226,62227,62228,62229,62230,62231,62232,62233,62234,62235,62236,62237,62238,62239,62240,62241,62242,62243,62244,62245,62246,62247,62248,62249,62250,62251,62252,62253,62254,62255,62256,62257,62258,62259,62260,62261,62262,62263,62264,62265,62266,62267,62268,62269,62270,62271,62272,62273,62274,62275,62276,62277,62278,62279,62280,62281,62282,62283,62284,62285,62286,62287,62288,62289,62290,62291,62292,62293,62294,62295,62296,62297,62298,62299,62300,62301,62302,62303,62304,62305,62306,62307,62308,62309,62310,62311,62312,62313,62314,62315,62316,62317,62318,62319,62320'/>
+  </group>
+  <group name='303'>
+    <ids val='62321,62322,62323,62324,62325,62326,62327,62328,62329,62330,62331,62332,62333,62334,62335,62336,62337,62338,62339,62340,62341,62342,62343,62344,62345,62346,62347,62348,62349,62350,62351,62352,62353,62354,62355,62356,62357,62358,62359,62360,62361,62362,62363,62364,62365,62366,62367,62368,62369,62370,62371,62372,62373,62374,62375,62376,62377,62378,62379,62380,62381,62382,62383,62384,62385,62386,62387,62388,62389,62390,62391,62392,62393,62394,62395,62396,62397,62398,62399,62400,62401,62402,62403,62404,62405,62406,62407,62408,62409,62410,62411,62412,62413,62414,62415,62416,62417,62418,62419,62420,62421,62422,62423,62424,62425,62426,62427,62428,62429,62430,62431,62432,62433,62434,62435,62436,62437,62438,62439,62440,62441,62442,62443,62444,62445,62446,62447,62448,62449,62450,62451,62452,62453,62454,62455,62456,62457,62458,62459,62460,62461,62462,62463,62464,62465,62466,62467,62468,62469,62470,62471,62472,62473,62474,62475,62476,62477,62478,62479,62480,62481,62482,62483,62484,62485,62486,62487,62488,62489,62490,62491,62492,62493,62494,62495,62496,62497,62498,62499,62500,62501,62502,62503,62504,62505,62506,62507,62508,62509,62510,62511,62512,62513,62514,62515,62516,62517,62518,62519,62520,62521,62522,62523,62524,62525,62526,62527,62528,62529,62530,62531,62532,62533,62534,62535,62536,62537,62538,62539,62540,62541,62542,62543,62544,62545,62546,62547,62548,62549,62550,62551,62552,62553,62554,62555,62556,62557,62558,62559,62560,62561,62562,62563,62564,62565,62566,62567,62568,62569,62570,62571,62572,62573,62574,62575,62576,62577,62578,62579,62580,62581,62582,62583,62584,62585,62586,62587,62588,62589,62590,62591,62592,62593,62594,62595,62596,62597,62598,62599,62600,62601,62602,62603,62604,62605,62606,62607,62608,62609,62610,62611,62612,62613,62614,62615,62616,62617,62618,62619,62620,62621,62622,62623,62624'/>
+  </group>
+  <group name='303'>
+    <ids val='62625,62626,62627,62628,62629,62630,62631,62632,62633,62634,62635,62636,62637,62638,62639,62640,62641,62642,62643,62644,62645,62646,62647,62648,62649,62650,62651,62652,62653,62654,62655,62656,62657,62658,62659,62660,62661,62662,62663,62664,62665,62666,62667,62668,62669,62670,62671,62672,62673,62674,62675,62676,62677,62678,62679,62680,62681,62682,62683,62684,62685,62686,62687,62688,62689,62690,62691,62692,62693,62694,62695,62696,62697,62698,62699,62700,62701,62702,62703,62704,62705,62706,62707,62708,62709,62710,62711,62712,62713,62714,62715,62716,62717,62718,62719,62720,62721,62722,62723,62724,62725,62726,62727,62728,62729,62730,62731,62732,62733,62734,62735,62736,62737,62738,62739,62740,62741,62742,62743,62744,62745,62746,62747,62748,62749,62750,62751,62752,62753,62754,62755,62756,62757,62758,62759,62760,62761,62762,62763,62764,62765,62766,62767,62768,62769,62770,62771,62772,62773,62774,62775,62776,62777,62778,62779,62780,62781,62782,62783,62784,62785,62786,62787,62788,62789,62790,62791,62792,62793,62794,62795,62796,62797,62798,62799,62800,62801,62802,62803,62804,62805,62806,62807,62808,62809,62810,62811,62812,62813,62814,62815,62816,62817,62818,62819,62820,62821,62822,62823,62824,62825,62826,62827,62828,62829,62830,62831,62832,62833,62834,62835,62836,62837,62838,62839,62840,62841,62842,62843,62844,62845,62846,62847,62848,62849,62850,62851,62852,62853,62854,62855,62856,62857,62858,62859,62860,62861,62862,62863,62864,62865,62866,62867,62868,62869,62870,62871,62872,62873,62874,62875,62876,62877,62878,62879,62880,62881,62882,62883,62884,62885,62886,62887,62888,62889,62890,62891,62892,62893,62894,62895,62896,62897,62898,62899,62900,62901,62902,62903,62904,62905,62906,62907,62908,62909,62910,62911,62912,62913,62914,62915,62916,62917,62918,62919,62920,62921,62922,62923,62924,62925,62926,62927,62928'/>
+  </group>
+  <group name='303'>
+    <ids val='62929,62930,62931,62932,62933,62934,62935,62936,62937,62938,62939,62940,62941,62942,62943,62944,62945,62946,62947,62948,62949,62950,62951,62952,62953,62954,62955,62956,62957,62958,62959,62960,62961,62962,62963,62964,62965,62966,62967,62968,62969,62970,62971,62972,62973,62974,62975,62976,62977,62978,62979,62980,62981,62982,62983,62984,62985,62986,62987,62988,62989,62990,62991,62992,62993,62994,62995,62996,62997,62998,62999,63000,63001,63002,63003,63004,63005,63006,63007,63008,63009,63010,63011,63012,63013,63014,63015,63016,63017,63018,63019,63020,63021,63022,63023,63024,63025,63026,63027,63028,63029,63030,63031,63032,63033,63034,63035,63036,63037,63038,63039,63040,63041,63042,63043,63044,63045,63046,63047,63048,63049,63050,63051,63052,63053,63054,63055,63056,63057,63058,63059,63060,63061,63062,63063,63064,63065,63066,63067,63068,63069,63070,63071,63072,63073,63074,63075,63076,63077,63078,63079,63080,63081,63082,63083,63084,63085,63086,63087,63088,63089,63090,63091,63092,63093,63094,63095,63096,63097,63098,63099,63100,63101,63102,63103,63104,63105,63106,63107,63108,63109,63110,63111,63112,63113,63114,63115,63116,63117,63118,63119,63120,63121,63122,63123,63124,63125,63126,63127,63128,63129,63130,63131,63132,63133,63134,63135,63136,63137,63138,63139,63140,63141,63142,63143,63144,63145,63146,63147,63148,63149,63150,63151,63152,63153,63154,63155,63156,63157,63158,63159,63160,63161,63162,63163,63164,63165,63166,63167,63168,63169,63170,63171,63172,63173,63174,63175,63176,63177,63178,63179,63180,63181,63182,63183,63184,63185,63186,63187,63188,63189,63190,63191,63192,63193,63194,63195,63196,63197,63198,63199,63200,63201,63202,63203,63204,63205,63206,63207,63208,63209,63210,63211,63212,63213,63214,63215,63216,63217,63218,63219,63220,63221,63222,63223,63224,63225,63226,63227,63228,63229,63230,63231,63232'/>
+  </group>
+  <group name='303'>
+    <ids val='63233,63234,63235,63236,63237,63238,63239,63240,63241,63242,63243,63244,63245,63246,63247,63248,63249,63250,63251,63252,63253,63254,63255,63256,63257,63258,63259,63260,63261,63262,63263,63264,63265,63266,63267,63268,63269,63270,63271,63272,63273,63274,63275,63276,63277,63278,63279,63280,63281,63282,63283,63284,63285,63286,63287,63288,63289,63290,63291,63292,63293,63294,63295,63296,63297,63298,63299,63300,63301,63302,63303,63304,63305,63306,63307,63308,63309,63310,63311,63312,63313,63314,63315,63316,63317,63318,63319,63320,63321,63322,63323,63324,63325,63326,63327,63328,63329,63330,63331,63332,63333,63334,63335,63336,63337,63338,63339,63340,63341,63342,63343,63344,63345,63346,63347,63348,63349,63350,63351,63352,63353,63354,63355,63356,63357,63358,63359,63360,63361,63362,63363,63364,63365,63366,63367,63368,63369,63370,63371,63372,63373,63374,63375,63376,63377,63378,63379,63380,63381,63382,63383,63384,63385,63386,63387,63388,63389,63390,63391,63392,63393,63394,63395,63396,63397,63398,63399,63400,63401,63402,63403,63404,63405,63406,63407,63408,63409,63410,63411,63412,63413,63414,63415,63416,63417,63418,63419,63420,63421,63422,63423,63424,63425,63426,63427,63428,63429,63430,63431,63432,63433,63434,63435,63436,63437,63438,63439,63440,63441,63442,63443,63444,63445,63446,63447,63448,63449,63450,63451,63452,63453,63454,63455,63456,63457,63458,63459,63460,63461,63462,63463,63464,63465,63466,63467,63468,63469,63470,63471,63472,63473,63474,63475,63476,63477,63478,63479,63480,63481,63482,63483,63484,63485,63486,63487,63488,63489,63490,63491,63492,63493,63494,63495,63496,63497,63498,63499,63500,63501,63502,63503,63504,63505,63506,63507,63508,63509,63510,63511,63512,63513,63514,63515,63516,63517,63518,63519,63520,63521,63522,63523,63524,63525,63526,63527,63528,63529,63530,63531,63532,63533,63534,63535,63536'/>
+  </group>
+  <group name='303'>
+    <ids val='63537,63538,63539,63540,63541,63542,63543,63544,63545,63546,63547,63548,63549,63550,63551,63552,63553,63554,63555,63556,63557,63558,63559,63560,63561,63562,63563,63564,63565,63566,63567,63568,63569,63570,63571,63572,63573,63574,63575,63576,63577,63578,63579,63580,63581,63582,63583,63584,63585,63586,63587,63588,63589,63590,63591,63592,63593,63594,63595,63596,63597,63598,63599,63600,63601,63602,63603,63604,63605,63606,63607,63608,63609,63610,63611,63612,63613,63614,63615,63616,63617,63618,63619,63620,63621,63622,63623,63624,63625,63626,63627,63628,63629,63630,63631,63632,63633,63634,63635,63636,63637,63638,63639,63640,63641,63642,63643,63644,63645,63646,63647,63648,63649,63650,63651,63652,63653,63654,63655,63656,63657,63658,63659,63660,63661,63662,63663,63664,63665,63666,63667,63668,63669,63670,63671,63672,63673,63674,63675,63676,63677,63678,63679,63680,63681,63682,63683,63684,63685,63686,63687,63688,63689,63690,63691,63692,63693,63694,63695,63696,63697,63698,63699,63700,63701,63702,63703,63704,63705,63706,63707,63708,63709,63710,63711,63712,63713,63714,63715,63716,63717,63718,63719,63720,63721,63722,63723,63724,63725,63726,63727,63728,63729,63730,63731,63732,63733,63734,63735,63736,63737,63738,63739,63740,63741,63742,63743,63744,63745,63746,63747,63748,63749,63750,63751,63752,63753,63754,63755,63756,63757,63758,63759,63760,63761,63762,63763,63764,63765,63766,63767,63768,63769,63770,63771,63772,63773,63774,63775,63776,63777,63778,63779,63780,63781,63782,63783,63784,63785,63786,63787,63788,63789,63790,63791,63792,63793,63794,63795,63796,63797,63798,63799,63800,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,63812,63813,63814,63815,63816,63817,63818,63819,63820,63821,63822,63823,63824,63825,63826,63827,63828,63829,63830,63831,63832,63833,63834,63835,63836,63837,63838,63839,63840'/>
+  </group>
+  <group name='303'>
+    <ids val='63841,63842,63843,63844,63845,63846,63847,63848,63849,63850,63851,63852,63853,63854,63855,63856,63857,63858,63859,63860,63861,63862,63863,63864,63865,63866,63867,63868,63869,63870,63871,63872,63873,63874,63875,63876,63877,63878,63879,63880,63881,63882,63883,63884,63885,63886,63887,63888,63889,63890,63891,63892,63893,63894,63895,63896,63897,63898,63899,63900,63901,63902,63903,63904,63905,63906,63907,63908,63909,63910,63911,63912,63913,63914,63915,63916,63917,63918,63919,63920,63921,63922,63923,63924,63925,63926,63927,63928,63929,63930,63931,63932,63933,63934,63935,63936,63937,63938,63939,63940,63941,63942,63943,63944,63945,63946,63947,63948,63949,63950,63951,63952,63953,63954,63955,63956,63957,63958,63959,63960,63961,63962,63963,63964,63965,63966,63967,63968,63969,63970,63971,63972,63973,63974,63975,63976,63977,63978,63979,63980,63981,63982,63983,63984,63985,63986,63987,63988,63989,63990,63991,63992,63993,63994,63995,63996,63997,63998,63999,64000,64001,64002,64003,64004,64005,64006,64007,64008,64009,64010,64011,64012,64013,64014,64015,64016,64017,64018,64019,64020,64021,64022,64023,64024,64025,64026,64027,64028,64029,64030,64031,64032,64033,64034,64035,64036,64037,64038,64039,64040,64041,64042,64043,64044,64045,64046,64047,64048,64049,64050,64051,64052,64053,64054,64055,64056,64057,64058,64059,64060,64061,64062,64063,64064,64065,64066,64067,64068,64069,64070,64071,64072,64073,64074,64075,64076,64077,64078,64079,64080,64081,64082,64083,64084,64085,64086,64087,64088,64089,64090,64091,64092,64093,64094,64095,64096,64097,64098,64099,64100,64101,64102,64103,64104,64105,64106,64107,64108,64109,64110,64111,64112,64113,64114,64115,64116,64117,64118,64119,64120,64121,64122,64123,64124,64125,64126,64127,64128,64129,64130,64131,64132,64133,64134,64135,64136,64137,64138,64139,64140,64141,64142,64143,64144'/>
+  </group>
+  <group name='303'>
+    <ids val='64145,64146,64147,64148,64149,64150,64151,64152,64153,64154,64155,64156,64157,64158,64159,64160,64161,64162,64163,64164,64165,64166,64167,64168,64169,64170,64171,64172,64173,64174,64175,64176,64177,64178,64179,64180,64181,64182,64183,64184,64185,64186,64187,64188,64189,64190,64191,64192,64193,64194,64195,64196,64197,64198,64199,64200,64201,64202,64203,64204,64205,64206,64207,64208,64209,64210,64211,64212,64213,64214,64215,64216,64217,64218,64219,64220,64221,64222,64223,64224,64225,64226,64227,64228,64229,64230,64231,64232,64233,64234,64235,64236,64237,64238,64239,64240,64241,64242,64243,64244,64245,64246,64247,64248,64249,64250,64251,64252,64253,64254,64255,64256,64257,64258,64259,64260,64261,64262,64263,64264,64265,64266,64267,64268,64269,64270,64271,64272,64273,64274,64275,64276,64277,64278,64279,64280,64281,64282,64283,64284,64285,64286,64287,64288,64289,64290,64291,64292,64293,64294,64295,64296,64297,64298,64299,64300,64301,64302,64303,64304,64305,64306,64307,64308,64309,64310,64311,64312,64313,64314,64315,64316,64317,64318,64319,64320,64321,64322,64323,64324,64325,64326,64327,64328,64329,64330,64331,64332,64333,64334,64335,64336,64337,64338,64339,64340,64341,64342,64343,64344,64345,64346,64347,64348,64349,64350,64351,64352,64353,64354,64355,64356,64357,64358,64359,64360,64361,64362,64363,64364,64365,64366,64367,64368,64369,64370,64371,64372,64373,64374,64375,64376,64377,64378,64379,64380,64381,64382,64383,64384,64385,64386,64387,64388,64389,64390,64391,64392,64393,64394,64395,64396,64397,64398,64399,64400,64401,64402,64403,64404,64405,64406,64407,64408,64409,64410,64411,64412,64413,64414,64415,64416,64417,64418,64419,64420,64421,64422,64423,64424,64425,64426,64427,64428,64429,64430,64431,64432,64433,64434,64435,64436,64437,64438,64439,64440,64441,64442,64443,64444,64445,64446,64447,64448'/>
+  </group>
+  <group name='303'>
+    <ids val='64449,64450,64451,64452,64453,64454,64455,64456,64457,64458,64459,64460,64461,64462,64463,64464,64465,64466,64467,64468,64469,64470,64471,64472,64473,64474,64475,64476,64477,64478,64479,64480,64481,64482,64483,64484,64485,64486,64487,64488,64489,64490,64491,64492,64493,64494,64495,64496,64497,64498,64499,64500,64501,64502,64503,64504,64505,64506,64507,64508,64509,64510,64511,64512,64513,64514,64515,64516,64517,64518,64519,64520,64521,64522,64523,64524,64525,64526,64527,64528,64529,64530,64531,64532,64533,64534,64535,64536,64537,64538,64539,64540,64541,64542,64543,64544,64545,64546,64547,64548,64549,64550,64551,64552,64553,64554,64555,64556,64557,64558,64559,64560,64561,64562,64563,64564,64565,64566,64567,64568,64569,64570,64571,64572,64573,64574,64575,64576,64577,64578,64579,64580,64581,64582,64583,64584,64585,64586,64587,64588,64589,64590,64591,64592,64593,64594,64595,64596,64597,64598,64599,64600,64601,64602,64603,64604,64605,64606,64607,64608,64609,64610,64611,64612,64613,64614,64615,64616,64617,64618,64619,64620,64621,64622,64623,64624,64625,64626,64627,64628,64629,64630,64631,64632,64633,64634,64635,64636,64637,64638,64639,64640,64641,64642,64643,64644,64645,64646,64647,64648,64649,64650,64651,64652,64653,64654,64655,64656,64657,64658,64659,64660,64661,64662,64663,64664,64665,64666,64667,64668,64669,64670,64671,64672,64673,64674,64675,64676,64677,64678,64679,64680,64681,64682,64683,64684,64685,64686,64687,64688,64689,64690,64691,64692,64693,64694,64695,64696,64697,64698,64699,64700,64701,64702,64703,64704,64705,64706,64707,64708,64709,64710,64711,64712,64713,64714,64715,64716,64717,64718,64719,64720,64721,64722,64723,64724,64725,64726,64727,64728,64729,64730,64731,64732,64733,64734,64735,64736,64737,64738,64739,64740,64741,64742,64743,64744,64745,64746,64747,64748,64749,64750,64751,64752'/>
+  </group>
+  <group name='303'>
+    <ids val='64753,64754,64755,64756,64757,64758,64759,64760,64761,64762,64763,64764,64765,64766,64767,64768,64769,64770,64771,64772,64773,64774,64775,64776,64777,64778,64779,64780,64781,64782,64783,64784,64785,64786,64787,64788,64789,64790,64791,64792,64793,64794,64795,64796,64797,64798,64799,64800,64801,64802,64803,64804,64805,64806,64807,64808,64809,64810,64811,64812,64813,64814,64815,64816,64817,64818,64819,64820,64821,64822,64823,64824,64825,64826,64827,64828,64829,64830,64831,64832,64833,64834,64835,64836,64837,64838,64839,64840,64841,64842,64843,64844,64845,64846,64847,64848,64849,64850,64851,64852,64853,64854,64855,64856,64857,64858,64859,64860,64861,64862,64863,64864,64865,64866,64867,64868,64869,64870,64871,64872,64873,64874,64875,64876,64877,64878,64879,64880,64881,64882,64883,64884,64885,64886,64887,64888,64889,64890,64891,64892,64893,64894,64895,64896,64897,64898,64899,64900,64901,64902,64903,64904,64905,64906,64907,64908,64909,64910,64911,64912,64913,64914,64915,64916,64917,64918,64919,64920,64921,64922,64923,64924,64925,64926,64927,64928,64929,64930,64931,64932,64933,64934,64935,64936,64937,64938,64939,64940,64941,64942,64943,64944,64945,64946,64947,64948,64949,64950,64951,64952,64953,64954,64955,64956,64957,64958,64959,64960,64961,64962,64963,64964,64965,64966,64967,64968,64969,64970,64971,64972,64973,64974,64975,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65008,65009,65010,65011,65012,65013,65014,65015,65016,65017,65018,65019,65020,65021,65022,65023,65024,65025,65026,65027,65028,65029,65030,65031,65032,65033,65034,65035,65036,65037,65038,65039,65040,65041,65042,65043,65044,65045,65046,65047,65048,65049,65050,65051,65052,65053,65054,65055,65056'/>
+  </group>
+  <group name='303'>
+    <ids val='65057,65058,65059,65060,65061,65062,65063,65064,65065,65066,65067,65068,65069,65070,65071,65072,65073,65074,65075,65076,65077,65078,65079,65080,65081,65082,65083,65084,65085,65086,65087,65088,65089,65090,65091,65092,65093,65094,65095,65096,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65107,65108,65109,65110,65111,65112,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65127,65128,65129,65130,65131,65132,65133,65134,65135,65136,65137,65138,65139,65140,65141,65142,65143,65144,65145,65146,65147,65148,65149,65150,65151,65152,65153,65154,65155,65156,65157,65158,65159,65160,65161,65162,65163,65164,65165,65166,65167,65168,65169,65170,65171,65172,65173,65174,65175,65176,65177,65178,65179,65180,65181,65182,65183,65184,65185,65186,65187,65188,65189,65190,65191,65192,65193,65194,65195,65196,65197,65198,65199,65200,65201,65202,65203,65204,65205,65206,65207,65208,65209,65210,65211,65212,65213,65214,65215,65216,65217,65218,65219,65220,65221,65222,65223,65224,65225,65226,65227,65228,65229,65230,65231,65232,65233,65234,65235,65236,65237,65238,65239,65240,65241,65242,65243,65244,65245,65246,65247,65248,65249,65250,65251,65252,65253,65254,65255,65256,65257,65258,65259,65260,65261,65262,65263,65264,65265,65266,65267,65268,65269,65270,65271,65272,65273,65274,65275,65276,65277,65278,65279,65280,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360'/>
+  </group>
+  <group name='303'>
+    <ids val='65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65374,65375,65376,65377,65378,65379,65380,65381,65382,65383,65384,65385,65386,65387,65388,65389,65390,65391,65392,65393,65394,65395,65396,65397,65398,65399,65400,65401,65402,65403,65404,65405,65406,65407,65408,65409,65410,65411,65412,65413,65414,65415,65416,65417,65418,65419,65420,65421,65422,65423,65424,65425,65426,65427,65428,65429,65430,65431,65432,65433,65434,65435,65436,65437,65438,65439,65440,65441,65442,65443,65444,65445,65446,65447,65448,65449,65450,65451,65452,65453,65454,65455,65456,65457,65458,65459,65460,65461,65462,65463,65464,65465,65466,65467,65468,65469,65470,65471,65472,65473,65474,65475,65476,65477,65478,65479,65480,65481,65482,65483,65484,65485,65486,65487,65488,65489,65490,65491,65492,65493,65494,65495,65496,65497,65498,65499,65500,65501,65502,65503,65504,65505,65506,65507,65508,65509,65510,65511,65512,65513,65514,65515,65516,65517,65518,65519,65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535,65536,65537,65538,65539,65540,65541,65542,65543,65544,65545,65546,65547,65548,65549,65550,65551,65552,65553,65554,65555,65556,65557,65558,65559,65560,65561,65562,65563,65564,65565,65566,65567,65568,65569,65570,65571,65572,65573,65574,65575,65576,65577,65578,65579,65580,65581,65582,65583,65584,65585,65586,65587,65588,65589,65590,65591,65592,65593,65594,65595,65596,65597,65598,65599,65600,65601,65602,65603,65604,65605,65606,65607,65608,65609,65610,65611,65612,65613,65614,65615,65616,65617,65618,65619,65620,65621,65622,65623,65624,65625,65626,65627,65628,65629,65630,65631,65632,65633,65634,65635,65636,65637,65638,65639,65640,65641,65642,65643,65644,65645,65646,65647,65648,65649,65650,65651,65652,65653,65654,65655,65656,65657,65658,65659,65660,65661,65662,65663,65664'/>
+  </group>
+  <group name='303'>
+    <ids val='65665,65666,65667,65668,65669,65670,65671,65672,65673,65674,65675,65676,65677,65678,65679,65680,65681,65682,65683,65684,65685,65686,65687,65688,65689,65690,65691,65692,65693,65694,65695,65696,65697,65698,65699,65700,65701,65702,65703,65704,65705,65706,65707,65708,65709,65710,65711,65712,65713,65714,65715,65716,65717,65718,65719,65720,65721,65722,65723,65724,65725,65726,65727,65728,65729,65730,65731,65732,65733,65734,65735,65736,65737,65738,65739,65740,65741,65742,65743,65744,65745,65746,65747,65748,65749,65750,65751,65752,65753,65754,65755,65756,65757,65758,65759,65760,65761,65762,65763,65764,65765,65766,65767,65768,65769,65770,65771,65772,65773,65774,65775,65776,65777,65778,65779,65780,65781,65782,65783,65784,65785,65786,65787,65788,65789,65790,65791,65792,65793,65794,65795,65796,65797,65798,65799,65800,65801,65802,65803,65804,65805,65806,65807,65808,65809,65810,65811,65812,65813,65814,65815,65816,65817,65818,65819,65820,65821,65822,65823,65824,65825,65826,65827,65828,65829,65830,65831,65832,65833,65834,65835,65836,65837,65838,65839,65840,65841,65842,65843,65844,65845,65846,65847,65848,65849,65850,65851,65852,65853,65854,65855,65856,65857,65858,65859,65860,65861,65862,65863,65864,65865,65866,65867,65868,65869,65870,65871,65872,65873,65874,65875,65876,65877,65878,65879,65880,65881,65882,65883,65884,65885,65886,65887,65888,65889,65890,65891,65892,65893,65894,65895,65896,65897,65898,65899,65900,65901,65902,65903,65904,65905,65906,65907,65908,65909,65910,65911,65912,65913,65914,65915,65916,65917,65918,65919,65920,65921,65922,65923,65924,65925,65926,65927,65928,65929,65930,65931,65932,65933,65934,65935,65936,65937,65938,65939,65940,65941,65942,65943,65944,65945,65946,65947,65948,65949,65950,65951,65952,65953,65954,65955,65956,65957,65958,65959,65960,65961,65962,65963,65964,65965,65966,65967,65968'/>
+  </group>
+  <group name='303'>
+    <ids val='65969,65970,65971,65972,65973,65974,65975,65976,65977,65978,65979,65980,65981,65982,65983,65984,65985,65986,65987,65988,65989,65990,65991,65992,65993,65994,65995,65996,65997,65998,65999,66000,66001,66002,66003,66004,66005,66006,66007,66008,66009,66010,66011,66012,66013,66014,66015,66016,66017,66018,66019,66020,66021,66022,66023,66024,66025,66026,66027,66028,66029,66030,66031,66032,66033,66034,66035,66036,66037,66038,66039,66040,66041,66042,66043,66044,66045,66046,66047,66048,66049,66050,66051,66052,66053,66054,66055,66056,66057,66058,66059,66060,66061,66062,66063,66064,66065,66066,66067,66068,66069,66070,66071,66072,66073,66074,66075,66076,66077,66078,66079,66080,66081,66082,66083,66084,66085,66086,66087,66088,66089,66090,66091,66092,66093,66094,66095,66096,66097,66098,66099,66100,66101,66102,66103,66104,66105,66106,66107,66108,66109,66110,66111,66112,66113,66114,66115,66116,66117,66118,66119,66120,66121,66122,66123,66124,66125,66126,66127,66128,66129,66130,66131,66132,66133,66134,66135,66136,66137,66138,66139,66140,66141,66142,66143,66144,66145,66146,66147,66148,66149,66150,66151,66152,66153,66154,66155,66156,66157,66158,66159,66160,66161,66162,66163,66164,66165,66166,66167,66168,66169,66170,66171,66172,66173,66174,66175,66176,66177,66178,66179,66180,66181,66182,66183,66184,66185,66186,66187,66188,66189,66190,66191,66192,66193,66194,66195,66196,66197,66198,66199,66200,66201,66202,66203,66204,66205,66206,66207,66208,66209,66210,66211,66212,66213,66214,66215,66216,66217,66218,66219,66220,66221,66222,66223,66224,66225,66226,66227,66228,66229,66230,66231,66232,66233,66234,66235,66236,66237,66238,66239,66240,66241,66242,66243,66244,66245,66246,66247,66248,66249,66250,66251,66252,66253,66254,66255,66256,66257,66258,66259,66260,66261,66262,66263,66264,66265,66266,66267,66268,66269,66270,66271,66272'/>
+  </group>
+  <group name='303'>
+    <ids val='66273,66274,66275,66276,66277,66278,66279,66280,66281,66282,66283,66284,66285,66286,66287,66288,66289,66290,66291,66292,66293,66294,66295,66296,66297,66298,66299,66300,66301,66302,66303,66304,66305,66306,66307,66308,66309,66310,66311,66312,66313,66314,66315,66316,66317,66318,66319,66320,66321,66322,66323,66324,66325,66326,66327,66328,66329,66330,66331,66332,66333,66334,66335,66336,66337,66338,66339,66340,66341,66342,66343,66344,66345,66346,66347,66348,66349,66350,66351,66352,66353,66354,66355,66356,66357,66358,66359,66360,66361,66362,66363,66364,66365,66366,66367,66368,66369,66370,66371,66372,66373,66374,66375,66376,66377,66378,66379,66380,66381,66382,66383,66384,66385,66386,66387,66388,66389,66390,66391,66392,66393,66394,66395,66396,66397,66398,66399,66400,66401,66402,66403,66404,66405,66406,66407,66408,66409,66410,66411,66412,66413,66414,66415,66416,66417,66418,66419,66420,66421,66422,66423,66424,66425,66426,66427,66428,66429,66430,66431,66432,66433,66434,66435,66436,66437,66438,66439,66440,66441,66442,66443,66444,66445,66446,66447,66448,66449,66450,66451,66452,66453,66454,66455,66456,66457,66458,66459,66460,66461,66462,66463,66464,66465,66466,66467,66468,66469,66470,66471,66472,66473,66474,66475,66476,66477,66478,66479,66480,66481,66482,66483,66484,66485,66486,66487,66488,66489,66490,66491,66492,66493,66494,66495,66496,66497,66498,66499,66500,66501,66502,66503,66504,66505,66506,66507,66508,66509,66510,66511,66512,66513,66514,66515,66516,66517,66518,66519,66520,66521,66522,66523,66524,66525,66526,66527,66528,66529,66530,66531,66532,66533,66534,66535,66536,66537,66538,66539,66540,66541,66542,66543,66544,66545,66546,66547,66548,66549,66550,66551,66552,66553,66554,66555,66556,66557,66558,66559,66560,66561,66562,66563,66564,66565,66566,66567,66568,66569,66570,66571,66572,66573,66574,66575,66576'/>
+  </group>
+  <group name='303'>
+    <ids val='66577,66578,66579,66580,66581,66582,66583,66584,66585,66586,66587,66588,66589,66590,66591,66592,66593,66594,66595,66596,66597,66598,66599,66600,66601,66602,66603,66604,66605,66606,66607,66608,66609,66610,66611,66612,66613,66614,66615,66616,66617,66618,66619,66620,66621,66622,66623,66624,66625,66626,66627,66628,66629,66630,66631,66632,66633,66634,66635,66636,66637,66638,66639,66640,66641,66642,66643,66644,66645,66646,66647,66648,66649,66650,66651,66652,66653,66654,66655,66656,66657,66658,66659,66660,66661,66662,66663,66664,66665,66666,66667,66668,66669,66670,66671,66672,66673,66674,66675,66676,66677,66678,66679,66680,66681,66682,66683,66684,66685,66686,66687,66688,66689,66690,66691,66692,66693,66694,66695,66696,66697,66698,66699,66700,66701,66702,66703,66704,66705,66706,66707,66708,66709,66710,66711,66712,66713,66714,66715,66716,66717,66718,66719,66720,66721,66722,66723,66724,66725,66726,66727,66728,66729,66730,66731,66732,66733,66734,66735,66736,66737,66738,66739,66740,66741,66742,66743,66744,66745,66746,66747,66748,66749,66750,66751,66752,66753,66754,66755,66756,66757,66758,66759,66760,66761,66762,66763,66764,66765,66766,66767,66768,66769,66770,66771,66772,66773,66774,66775,66776,66777,66778,66779,66780,66781,66782,66783,66784,66785,66786,66787,66788,66789,66790,66791,66792,66793,66794,66795,66796,66797,66798,66799,66800,66801,66802,66803,66804,66805,66806,66807,66808,66809,66810,66811,66812,66813,66814,66815,66816,66817,66818,66819,66820,66821,66822,66823,66824,66825,66826,66827,66828,66829,66830,66831,66832,66833,66834,66835,66836,66837,66838,66839,66840,66841,66842,66843,66844,66845,66846,66847,66848,66849,66850,66851,66852,66853,66854,66855,66856,66857,66858,66859,66860,66861,66862,66863,66864,66865,66866,66867,66868,66869,66870,66871,66872,66873,66874,66875,66876,66877,66878,66879,66880'/>
+  </group>
+  <group name='303'>
+    <ids val='66881,66882,66883,66884,66885,66886,66887,66888,66889,66890,66891,66892,66893,66894,66895,66896,66897,66898,66899,66900,66901,66902,66903,66904,66905,66906,66907,66908,66909,66910,66911,66912,66913,66914,66915,66916,66917,66918,66919,66920,66921,66922,66923,66924,66925,66926,66927,66928,66929,66930,66931,66932,66933,66934,66935,66936,66937,66938,66939,66940,66941,66942,66943,66944,66945,66946,66947,66948,66949,66950,66951,66952,66953,66954,66955,66956,66957,66958,66959,66960,66961,66962,66963,66964,66965,66966,66967,66968,66969,66970,66971,66972,66973,66974,66975,66976,66977,66978,66979,66980,66981,66982,66983,66984,66985,66986,66987,66988,66989,66990,66991,66992,66993,66994,66995,66996,66997,66998,66999,67000,67001,67002,67003,67004,67005,67006,67007,67008,67009,67010,67011,67012,67013,67014,67015,67016,67017,67018,67019,67020,67021,67022,67023,67024,67025,67026,67027,67028,67029,67030,67031,67032,67033,67034,67035,67036,67037,67038,67039,67040,67041,67042,67043,67044,67045,67046,67047,67048,67049,67050,67051,67052,67053,67054,67055,67056,67057,67058,67059,67060,67061,67062,67063,67064,67065,67066,67067,67068,67069,67070,67071,67072,67073,67074,67075,67076,67077,67078,67079,67080,67081,67082,67083,67084,67085,67086,67087,67088,67089,67090,67091,67092,67093,67094,67095,67096,67097,67098,67099,67100,67101,67102,67103,67104,67105,67106,67107,67108,67109,67110,67111,67112,67113,67114,67115,67116,67117,67118,67119,67120,67121,67122,67123,67124,67125,67126,67127,67128,67129,67130,67131,67132,67133,67134,67135,67136,67137,67138,67139,67140,67141,67142,67143,67144,67145,67146,67147,67148,67149,67150,67151,67152,67153,67154,67155,67156,67157,67158,67159,67160,67161,67162,67163,67164,67165,67166,67167,67168,67169,67170,67171,67172,67173,67174,67175,67176,67177,67178,67179,67180,67181,67182,67183,67184'/>
+  </group>
+  <group name='303'>
+    <ids val='67185,67186,67187,67188,67189,67190,67191,67192,67193,67194,67195,67196,67197,67198,67199,67200,67201,67202,67203,67204,67205,67206,67207,67208,67209,67210,67211,67212,67213,67214,67215,67216,67217,67218,67219,67220,67221,67222,67223,67224,67225,67226,67227,67228,67229,67230,67231,67232,67233,67234,67235,67236,67237,67238,67239,67240,67241,67242,67243,67244,67245,67246,67247,67248,67249,67250,67251,67252,67253,67254,67255,67256,67257,67258,67259,67260,67261,67262,67263,67264,67265,67266,67267,67268,67269,67270,67271,67272,67273,67274,67275,67276,67277,67278,67279,67280,67281,67282,67283,67284,67285,67286,67287,67288,67289,67290,67291,67292,67293,67294,67295,67296,67297,67298,67299,67300,67301,67302,67303,67304,67305,67306,67307,67308,67309,67310,67311,67312,67313,67314,67315,67316,67317,67318,67319,67320,67321,67322,67323,67324,67325,67326,67327,67328,67329,67330,67331,67332,67333,67334,67335,67336,67337,67338,67339,67340,67341,67342,67343,67344,67345,67346,67347,67348,67349,67350,67351,67352,67353,67354,67355,67356,67357,67358,67359,67360,67361,67362,67363,67364,67365,67366,67367,67368,67369,67370,67371,67372,67373,67374,67375,67376,67377,67378,67379,67380,67381,67382,67383,67384,67385,67386,67387,67388,67389,67390,67391,67392,67393,67394,67395,67396,67397,67398,67399,67400,67401,67402,67403,67404,67405,67406,67407,67408,67409,67410,67411,67412,67413,67414,67415,67416,67417,67418,67419,67420,67421,67422,67423,67424,67425,67426,67427,67428,67429,67430,67431,67432,67433,67434,67435,67436,67437,67438,67439,67440,67441,67442,67443,67444,67445,67446,67447,67448,67449,67450,67451,67452,67453,67454,67455,67456,67457,67458,67459,67460,67461,67462,67463,67464,67465,67466,67467,67468,67469,67470,67471,67472,67473,67474,67475,67476,67477,67478,67479,67480,67481,67482,67483,67484,67485,67486,67487,67488'/>
+  </group>
+  <group name='303'>
+    <ids val='67489,67490,67491,67492,67493,67494,67495,67496,67497,67498,67499,67500,67501,67502,67503,67504,67505,67506,67507,67508,67509,67510,67511,67512,67513,67514,67515,67516,67517,67518,67519,67520,67521,67522,67523,67524,67525,67526,67527,67528,67529,67530,67531,67532,67533,67534,67535,67536,67537,67538,67539,67540,67541,67542,67543,67544,67545,67546,67547,67548,67549,67550,67551,67552,67553,67554,67555,67556,67557,67558,67559,67560,67561,67562,67563,67564,67565,67566,67567,67568,67569,67570,67571,67572,67573,67574,67575,67576,67577,67578,67579,67580,67581,67582,67583,67584,67585,67586,67587,67588,67589,67590,67591,67592,67593,67594,67595,67596,67597,67598,67599,67600,67601,67602,67603,67604,67605,67606,67607,67608,67609,67610,67611,67612,67613,67614,67615,67616,67617,67618,67619,67620,67621,67622,67623,67624,67625,67626,67627,67628,67629,67630,67631,67632,67633,67634,67635,67636,67637,67638,67639,67640,67641,67642,67643,67644,67645,67646,67647,67648,67649,67650,67651,67652,67653,67654,67655,67656,67657,67658,67659,67660,67661,67662,67663,67664,67665,67666,67667,67668,67669,67670,67671,67672,67673,67674,67675,67676,67677,67678,67679,67680,67681,67682,67683,67684,67685,67686,67687,67688,67689,67690,67691,67692,67693,67694,67695,67696,67697,67698,67699,67700,67701,67702,67703,67704,67705,67706,67707,67708,67709,67710,67711,67712,67713,67714,67715,67716,67717,67718,67719,67720,67721,67722,67723,67724,67725,67726,67727,67728,67729,67730,67731,67732,67733,67734,67735,67736,67737,67738,67739,67740,67741,67742,67743,67744,67745,67746,67747,67748,67749,67750,67751,67752,67753,67754,67755,67756,67757,67758,67759,67760,67761,67762,67763,67764,67765,67766,67767,67768,67769,67770,67771,67772,67773,67774,67775,67776,67777,67778,67779,67780,67781,67782,67783,67784,67785,67786,67787,67788,67789,67790,67791,67792'/>
+  </group>
+  <group name='303'>
+    <ids val='67793,67794,67795,67796,67797,67798,67799,67800,67801,67802,67803,67804,67805,67806,67807,67808,67809,67810,67811,67812,67813,67814,67815,67816,67817,67818,67819,67820,67821,67822,67823,67824,67825,67826,67827,67828,67829,67830,67831,67832,67833,67834,67835,67836,67837,67838,67839,67840,67841,67842,67843,67844,67845,67846,67847,67848,67849,67850,67851,67852,67853,67854,67855,67856,67857,67858,67859,67860,67861,67862,67863,67864,67865,67866,67867,67868,67869,67870,67871,67872,67873,67874,67875,67876,67877,67878,67879,67880,67881,67882,67883,67884,67885,67886,67887,67888,67889,67890,67891,67892,67893,67894,67895,67896,67897,67898,67899,67900,67901,67902,67903,67904,67905,67906,67907,67908,67909,67910,67911,67912,67913,67914,67915,67916,67917,67918,67919,67920,67921,67922,67923,67924,67925,67926,67927,67928,67929,67930,67931,67932,67933,67934,67935,67936,67937,67938,67939,67940,67941,67942,67943,67944,67945,67946,67947,67948,67949,67950,67951,67952,67953,67954,67955,67956,67957,67958,67959,67960,67961,67962,67963,67964,67965,67966,67967,67968,67969,67970,67971,67972,67973,67974,67975,67976,67977,67978,67979,67980,67981,67982,67983,67984,67985,67986,67987,67988,67989,67990,67991,67992,67993,67994,67995,67996,67997,67998,67999,68000,68001,68002,68003,68004,68005,68006,68007,68008,68009,68010,68011,68012,68013,68014,68015,68016,68017,68018,68019,68020,68021,68022,68023,68024,68025,68026,68027,68028,68029,68030,68031,68032,68033,68034,68035,68036,68037,68038,68039,68040,68041,68042,68043,68044,68045,68046,68047,68048,68049,68050,68051,68052,68053,68054,68055,68056,68057,68058,68059,68060,68061,68062,68063,68064,68065,68066,68067,68068,68069,68070,68071,68072,68073,68074,68075,68076,68077,68078,68079,68080,68081,68082,68083,68084,68085,68086,68087,68088,68089,68090,68091,68092,68093,68094,68095,68096'/>
+  </group>
+  <group name='303'>
+    <ids val='68097,68098,68099,68100,68101,68102,68103,68104,68105,68106,68107,68108,68109,68110,68111,68112,68113,68114,68115,68116,68117,68118,68119,68120,68121,68122,68123,68124,68125,68126,68127,68128,68129,68130,68131,68132,68133,68134,68135,68136,68137,68138,68139,68140,68141,68142,68143,68144,68145,68146,68147,68148,68149,68150,68151,68152,68153,68154,68155,68156,68157,68158,68159,68160,68161,68162,68163,68164,68165,68166,68167,68168,68169,68170,68171,68172,68173,68174,68175,68176,68177,68178,68179,68180,68181,68182,68183,68184,68185,68186,68187,68188,68189,68190,68191,68192,68193,68194,68195,68196,68197,68198,68199,68200,68201,68202,68203,68204,68205,68206,68207,68208,68209,68210,68211,68212,68213,68214,68215,68216,68217,68218,68219,68220,68221,68222,68223,68224,68225,68226,68227,68228,68229,68230,68231,68232,68233,68234,68235,68236,68237,68238,68239,68240,68241,68242,68243,68244,68245,68246,68247,68248,68249,68250,68251,68252,68253,68254,68255,68256,68257,68258,68259,68260,68261,68262,68263,68264,68265,68266,68267,68268,68269,68270,68271,68272,68273,68274,68275,68276,68277,68278,68279,68280,68281,68282,68283,68284,68285,68286,68287,68288,68289,68290,68291,68292,68293,68294,68295,68296,68297,68298,68299,68300,68301,68302,68303,68304,68305,68306,68307,68308,68309,68310,68311,68312,68313,68314,68315,68316,68317,68318,68319,68320,68321,68322,68323,68324,68325,68326,68327,68328,68329,68330,68331,68332,68333,68334,68335,68336,68337,68338,68339,68340,68341,68342,68343,68344,68345,68346,68347,68348,68349,68350,68351,68352,68353,68354,68355,68356,68357,68358,68359,68360,68361,68362,68363,68364,68365,68366,68367,68368,68369,68370,68371,68372,68373,68374,68375,68376,68377,68378,68379,68380,68381,68382,68383,68384,68385,68386,68387,68388,68389,68390,68391,68392,68393,68394,68395,68396,68397,68398,68399,68400'/>
+  </group>
+  <group name='303'>
+    <ids val='68401,68402,68403,68404,68405,68406,68407,68408,68409,68410,68411,68412,68413,68414,68415,68416,68417,68418,68419,68420,68421,68422,68423,68424,68425,68426,68427,68428,68429,68430,68431,68432,68433,68434,68435,68436,68437,68438,68439,68440,68441,68442,68443,68444,68445,68446,68447,68448,68449,68450,68451,68452,68453,68454,68455,68456,68457,68458,68459,68460,68461,68462,68463,68464,68465,68466,68467,68468,68469,68470,68471,68472,68473,68474,68475,68476,68477,68478,68479,68480,68481,68482,68483,68484,68485,68486,68487,68488,68489,68490,68491,68492,68493,68494,68495,68496,68497,68498,68499,68500,68501,68502,68503,68504,68505,68506,68507,68508,68509,68510,68511,68512,68513,68514,68515,68516,68517,68518,68519,68520,68521,68522,68523,68524,68525,68526,68527,68528,68529,68530,68531,68532,68533,68534,68535,68536,68537,68538,68539,68540,68541,68542,68543,68544,68545,68546,68547,68548,68549,68550,68551,68552,68553,68554,68555,68556,68557,68558,68559,68560,68561,68562,68563,68564,68565,68566,68567,68568,68569,68570,68571,68572,68573,68574,68575,68576,68577,68578,68579,68580,68581,68582,68583,68584,68585,68586,68587,68588,68589,68590,68591,68592,68593,68594,68595,68596,68597,68598,68599,68600,68601,68602,68603,68604,68605,68606,68607,68608,68609,68610,68611,68612,68613,68614,68615,68616,68617,68618,68619,68620,68621,68622,68623,68624,68625,68626,68627,68628,68629,68630,68631,68632,68633,68634,68635,68636,68637,68638,68639,68640,68641,68642,68643,68644,68645,68646,68647,68648,68649,68650,68651,68652,68653,68654,68655,68656,68657,68658,68659,68660,68661,68662,68663,68664,68665,68666,68667,68668,68669,68670,68671,68672,68673,68674,68675,68676,68677,68678,68679,68680,68681,68682,68683,68684,68685,68686,68687,68688,68689,68690,68691,68692,68693,68694,68695,68696,68697,68698,68699,68700,68701,68702,68703,68704'/>
+  </group>
+  <group name='303'>
+    <ids val='68705,68706,68707,68708,68709,68710,68711,68712,68713,68714,68715,68716,68717,68718,68719,68720,68721,68722,68723,68724,68725,68726,68727,68728,68729,68730,68731,68732,68733,68734,68735,68736,68737,68738,68739,68740,68741,68742,68743,68744,68745,68746,68747,68748,68749,68750,68751,68752,68753,68754,68755,68756,68757,68758,68759,68760,68761,68762,68763,68764,68765,68766,68767,68768,68769,68770,68771,68772,68773,68774,68775,68776,68777,68778,68779,68780,68781,68782,68783,68784,68785,68786,68787,68788,68789,68790,68791,68792,68793,68794,68795,68796,68797,68798,68799,68800,68801,68802,68803,68804,68805,68806,68807,68808,68809,68810,68811,68812,68813,68814,68815,68816,68817,68818,68819,68820,68821,68822,68823,68824,68825,68826,68827,68828,68829,68830,68831,68832,68833,68834,68835,68836,68837,68838,68839,68840,68841,68842,68843,68844,68845,68846,68847,68848,68849,68850,68851,68852,68853,68854,68855,68856,68857,68858,68859,68860,68861,68862,68863,68864,68865,68866,68867,68868,68869,68870,68871,68872,68873,68874,68875,68876,68877,68878,68879,68880,68881,68882,68883,68884,68885,68886,68887,68888,68889,68890,68891,68892,68893,68894,68895,68896,68897,68898,68899,68900,68901,68902,68903,68904,68905,68906,68907,68908,68909,68910,68911,68912,68913,68914,68915,68916,68917,68918,68919,68920,68921,68922,68923,68924,68925,68926,68927,68928,68929,68930,68931,68932,68933,68934,68935,68936,68937,68938,68939,68940,68941,68942,68943,68944,68945,68946,68947,68948,68949,68950,68951,68952,68953,68954,68955,68956,68957,68958,68959,68960,68961,68962,68963,68964,68965,68966,68967,68968,68969,68970,68971,68972,68973,68974,68975,68976,68977,68978,68979,68980,68981,68982,68983,68984,68985,68986,68987,68988,68989,68990,68991,68992,68993,68994,68995,68996,68997,68998,68999,69000,69001,69002,69003,69004,69005,69006,69007,69008'/>
+  </group>
+  <group name='303'>
+    <ids val='69009,69010,69011,69012,69013,69014,69015,69016,69017,69018,69019,69020,69021,69022,69023,69024,69025,69026,69027,69028,69029,69030,69031,69032,69033,69034,69035,69036,69037,69038,69039,69040,69041,69042,69043,69044,69045,69046,69047,69048,69049,69050,69051,69052,69053,69054,69055,69056,69057,69058,69059,69060,69061,69062,69063,69064,69065,69066,69067,69068,69069,69070,69071,69072,69073,69074,69075,69076,69077,69078,69079,69080,69081,69082,69083,69084,69085,69086,69087,69088,69089,69090,69091,69092,69093,69094,69095,69096,69097,69098,69099,69100,69101,69102,69103,69104,69105,69106,69107,69108,69109,69110,69111,69112,69113,69114,69115,69116,69117,69118,69119,69120,69121,69122,69123,69124,69125,69126,69127,69128,69129,69130,69131,69132,69133,69134,69135,69136,69137,69138,69139,69140,69141,69142,69143,69144,69145,69146,69147,69148,69149,69150,69151,69152,69153,69154,69155,69156,69157,69158,69159,69160,69161,69162,69163,69164,69165,69166,69167,69168,69169,69170,69171,69172,69173,69174,69175,69176,69177,69178,69179,69180,69181,69182,69183,69184,69185,69186,69187,69188,69189,69190,69191,69192,69193,69194,69195,69196,69197,69198,69199,69200,69201,69202,69203,69204,69205,69206,69207,69208,69209,69210,69211,69212,69213,69214,69215,69216,69217,69218,69219,69220,69221,69222,69223,69224,69225,69226,69227,69228,69229,69230,69231,69232,69233,69234,69235,69236,69237,69238,69239,69240,69241,69242,69243,69244,69245,69246,69247,69248,69249,69250,69251,69252,69253,69254,69255,69256,69257,69258,69259,69260,69261,69262,69263,69264,69265,69266,69267,69268,69269,69270,69271,69272,69273,69274,69275,69276,69277,69278,69279,69280,69281,69282,69283,69284,69285,69286,69287,69288,69289,69290,69291,69292,69293,69294,69295,69296,69297,69298,69299,69300,69301,69302,69303,69304,69305,69306,69307,69308,69309,69310,69311,69312'/>
+  </group>
+  <group name='303'>
+    <ids val='69313,69314,69315,69316,69317,69318,69319,69320,69321,69322,69323,69324,69325,69326,69327,69328,69329,69330,69331,69332,69333,69334,69335,69336,69337,69338,69339,69340,69341,69342,69343,69344,69345,69346,69347,69348,69349,69350,69351,69352,69353,69354,69355,69356,69357,69358,69359,69360,69361,69362,69363,69364,69365,69366,69367,69368,69369,69370,69371,69372,69373,69374,69375,69376,69377,69378,69379,69380,69381,69382,69383,69384,69385,69386,69387,69388,69389,69390,69391,69392,69393,69394,69395,69396,69397,69398,69399,69400,69401,69402,69403,69404,69405,69406,69407,69408,69409,69410,69411,69412,69413,69414,69415,69416,69417,69418,69419,69420,69421,69422,69423,69424,69425,69426,69427,69428,69429,69430,69431,69432,69433,69434,69435,69436,69437,69438,69439,69440,69441,69442,69443,69444,69445,69446,69447,69448,69449,69450,69451,69452,69453,69454,69455,69456,69457,69458,69459,69460,69461,69462,69463,69464,69465,69466,69467,69468,69469,69470,69471,69472,69473,69474,69475,69476,69477,69478,69479,69480,69481,69482,69483,69484,69485,69486,69487,69488,69489,69490,69491,69492,69493,69494,69495,69496,69497,69498,69499,69500,69501,69502,69503,69504,69505,69506,69507,69508,69509,69510,69511,69512,69513,69514,69515,69516,69517,69518,69519,69520,69521,69522,69523,69524,69525,69526,69527,69528,69529,69530,69531,69532,69533,69534,69535,69536,69537,69538,69539,69540,69541,69542,69543,69544,69545,69546,69547,69548,69549,69550,69551,69552,69553,69554,69555,69556,69557,69558,69559,69560,69561,69562,69563,69564,69565,69566,69567,69568,69569,69570,69571,69572,69573,69574,69575,69576,69577,69578,69579,69580,69581,69582,69583,69584,69585,69586,69587,69588,69589,69590,69591,69592,69593,69594,69595,69596,69597,69598,69599,69600,69601,69602,69603,69604,69605,69606,69607,69608,69609,69610,69611,69612,69613,69614,69615,69616'/>
+  </group>
+  <group name='303'>
+    <ids val='69617,69618,69619,69620,69621,69622,69623,69624,69625,69626,69627,69628,69629,69630,69631,69632,69633,69634,69635,69636,69637,69638,69639,69640,69641,69642,69643,69644,69645,69646,69647,69648,69649,69650,69651,69652,69653,69654,69655,69656,69657,69658,69659,69660,69661,69662,69663,69664,69665,69666,69667,69668,69669,69670,69671,69672,69673,69674,69675,69676,69677,69678,69679,69680,69681,69682,69683,69684,69685,69686,69687,69688,69689,69690,69691,69692,69693,69694,69695,69696,69697,69698,69699,69700,69701,69702,69703,69704,69705,69706,69707,69708,69709,69710,69711,69712,69713,69714,69715,69716,69717,69718,69719,69720,69721,69722,69723,69724,69725,69726,69727,69728,69729,69730,69731,69732,69733,69734,69735,69736,69737,69738,69739,69740,69741,69742,69743,69744,69745,69746,69747,69748,69749,69750,69751,69752,69753,69754,69755,69756,69757,69758,69759,69760,69761,69762,69763,69764,69765,69766,69767,69768,69769,69770,69771,69772,69773,69774,69775,69776,69777,69778,69779,69780,69781,69782,69783,69784,69785,69786,69787,69788,69789,69790,69791,69792,69793,69794,69795,69796,69797,69798,69799,69800,69801,69802,69803,69804,69805,69806,69807,69808,69809,69810,69811,69812,69813,69814,69815,69816,69817,69818,69819,69820,69821,69822,69823,69824,69825,69826,69827,69828,69829,69830,69831,69832,69833,69834,69835,69836,69837,69838,69839,69840,69841,69842,69843,69844,69845,69846,69847,69848,69849,69850,69851,69852,69853,69854,69855,69856,69857,69858,69859,69860,69861,69862,69863,69864,69865,69866,69867,69868,69869,69870,69871,69872,69873,69874,69875,69876,69877,69878,69879,69880,69881,69882,69883,69884,69885,69886,69887,69888,69889,69890,69891,69892,69893,69894,69895,69896,69897,69898,69899,69900,69901,69902,69903,69904,69905,69906,69907,69908,69909,69910,69911,69912,69913,69914,69915,69916,69917,69918,69919,69920'/>
+  </group>
+  <group name='303'>
+    <ids val='69921,69922,69923,69924,69925,69926,69927,69928,69929,69930,69931,69932,69933,69934,69935,69936,69937,69938,69939,69940,69941,69942,69943,69944,69945,69946,69947,69948,69949,69950,69951,69952,69953,69954,69955,69956,69957,69958,69959,69960,69961,69962,69963,69964,69965,69966,69967,69968,69969,69970,69971,69972,69973,69974,69975,69976,69977,69978,69979,69980,69981,69982,69983,69984,69985,69986,69987,69988,69989,69990,69991,69992,69993,69994,69995,69996,69997,69998,69999,70000,70001,70002,70003,70004,70005,70006,70007,70008,70009,70010,70011,70012,70013,70014,70015,70016,70017,70018,70019,70020,70021,70022,70023,70024,70025,70026,70027,70028,70029,70030,70031,70032,70033,70034,70035,70036,70037,70038,70039,70040,70041,70042,70043,70044,70045,70046,70047,70048,70049,70050,70051,70052,70053,70054,70055,70056,70057,70058,70059,70060,70061,70062,70063,70064,70065,70066,70067,70068,70069,70070,70071,70072,70073,70074,70075,70076,70077,70078,70079,70080,70081,70082,70083,70084,70085,70086,70087,70088,70089,70090,70091,70092,70093,70094,70095,70096,70097,70098,70099,70100,70101,70102,70103,70104,70105,70106,70107,70108,70109,70110,70111,70112,70113,70114,70115,70116,70117,70118,70119,70120,70121,70122,70123,70124,70125,70126,70127,70128,70129,70130,70131,70132,70133,70134,70135,70136,70137,70138,70139,70140,70141,70142,70143,70144,70145,70146,70147,70148,70149,70150,70151,70152,70153,70154,70155,70156,70157,70158,70159,70160,70161,70162,70163,70164,70165,70166,70167,70168,70169,70170,70171,70172,70173,70174,70175,70176,70177,70178,70179,70180,70181,70182,70183,70184,70185,70186,70187,70188,70189,70190,70191,70192,70193,70194,70195,70196,70197,70198,70199,70200,70201,70202,70203,70204,70205,70206,70207,70208,70209,70210,70211,70212,70213,70214,70215,70216,70217,70218,70219,70220,70221,70222,70223,70224'/>
+  </group>
+  <group name='303'>
+    <ids val='70225,70226,70227,70228,70229,70230,70231,70232,70233,70234,70235,70236,70237,70238,70239,70240,70241,70242,70243,70244,70245,70246,70247,70248,70249,70250,70251,70252,70253,70254,70255,70256,70257,70258,70259,70260,70261,70262,70263,70264,70265,70266,70267,70268,70269,70270,70271,70272,70273,70274,70275,70276,70277,70278,70279,70280,70281,70282,70283,70284,70285,70286,70287,70288,70289,70290,70291,70292,70293,70294,70295,70296,70297,70298,70299,70300,70301,70302,70303,70304,70305,70306,70307,70308,70309,70310,70311,70312,70313,70314,70315,70316,70317,70318,70319,70320,70321,70322,70323,70324,70325,70326,70327,70328,70329,70330,70331,70332,70333,70334,70335,70336,70337,70338,70339,70340,70341,70342,70343,70344,70345,70346,70347,70348,70349,70350,70351,70352,70353,70354,70355,70356,70357,70358,70359,70360,70361,70362,70363,70364,70365,70366,70367,70368,70369,70370,70371,70372,70373,70374,70375,70376,70377,70378,70379,70380,70381,70382,70383,70384,70385,70386,70387,70388,70389,70390,70391,70392,70393,70394,70395,70396,70397,70398,70399,70400,70401,70402,70403,70404,70405,70406,70407,70408,70409,70410,70411,70412,70413,70414,70415,70416,70417,70418,70419,70420,70421,70422,70423,70424,70425,70426,70427,70428,70429,70430,70431,70432,70433,70434,70435,70436,70437,70438,70439,70440,70441,70442,70443,70444,70445,70446,70447,70448,70449,70450,70451,70452,70453,70454,70455,70456,70457,70458,70459,70460,70461,70462,70463,70464,70465,70466,70467,70468,70469,70470,70471,70472,70473,70474,70475,70476,70477,70478,70479,70480,70481,70482,70483,70484,70485,70486,70487,70488,70489,70490,70491,70492,70493,70494,70495,70496,70497,70498,70499,70500,70501,70502,70503,70504,70505,70506,70507,70508,70509,70510,70511,70512,70513,70514,70515,70516,70517,70518,70519,70520,70521,70522,70523,70524,70525,70526,70527,70528'/>
+  </group>
+  <group name='303'>
+    <ids val='70529,70530,70531,70532,70533,70534,70535,70536,70537,70538,70539,70540,70541,70542,70543,70544,70545,70546,70547,70548,70549,70550,70551,70552,70553,70554,70555,70556,70557,70558,70559,70560,70561,70562,70563,70564,70565,70566,70567,70568,70569,70570,70571,70572,70573,70574,70575,70576,70577,70578,70579,70580,70581,70582,70583,70584,70585,70586,70587,70588,70589,70590,70591,70592,70593,70594,70595,70596,70597,70598,70599,70600,70601,70602,70603,70604,70605,70606,70607,70608,70609,70610,70611,70612,70613,70614,70615,70616,70617,70618,70619,70620,70621,70622,70623,70624,70625,70626,70627,70628,70629,70630,70631,70632,70633,70634,70635,70636,70637,70638,70639,70640,70641,70642,70643,70644,70645,70646,70647,70648,70649,70650,70651,70652,70653,70654,70655,70656,70657,70658,70659,70660,70661,70662,70663,70664,70665,70666,70667,70668,70669,70670,70671,70672,70673,70674,70675,70676,70677,70678,70679,70680,70681,70682,70683,70684,70685,70686,70687,70688,70689,70690,70691,70692,70693,70694,70695,70696,70697,70698,70699,70700,70701,70702,70703,70704,70705,70706,70707,70708,70709,70710,70711,70712,70713,70714,70715,70716,70717,70718,70719,70720,70721,70722,70723,70724,70725,70726,70727,70728,70729,70730,70731,70732,70733,70734,70735,70736,70737,70738,70739,70740,70741,70742,70743,70744,70745,70746,70747,70748,70749,70750,70751,70752,70753,70754,70755,70756,70757,70758,70759,70760,70761,70762,70763,70764,70765,70766,70767,70768,70769,70770,70771,70772,70773,70774,70775,70776,70777,70778,70779,70780,70781,70782,70783,70784,70785,70786,70787,70788,70789,70790,70791,70792,70793,70794,70795,70796,70797,70798,70799,70800,70801,70802,70803,70804,70805,70806,70807,70808,70809,70810,70811,70812,70813,70814,70815,70816,70817,70818,70819,70820,70821,70822,70823,70824,70825,70826,70827,70828,70829,70830,70831,70832'/>
+  </group>
+  <group name='303'>
+    <ids val='70833,70834,70835,70836,70837,70838,70839,70840,70841,70842,70843,70844,70845,70846,70847,70848,70849,70850,70851,70852,70853,70854,70855,70856,70857,70858,70859,70860,70861,70862,70863,70864,70865,70866,70867,70868,70869,70870,70871,70872,70873,70874,70875,70876,70877,70878,70879,70880,70881,70882,70883,70884,70885,70886,70887,70888,70889,70890,70891,70892,70893,70894,70895,70896,70897,70898,70899,70900,70901,70902,70903,70904,70905,70906,70907,70908,70909,70910,70911,70912,70913,70914,70915,70916,70917,70918,70919,70920,70921,70922,70923,70924,70925,70926,70927,70928,70929,70930,70931,70932,70933,70934,70935,70936,70937,70938,70939,70940,70941,70942,70943,70944,70945,70946,70947,70948,70949,70950,70951,70952,70953,70954,70955,70956,70957,70958,70959,70960,70961,70962,70963,70964,70965,70966,70967,70968,70969,70970,70971,70972,70973,70974,70975,70976,70977,70978,70979,70980,70981,70982,70983,70984,70985,70986,70987,70988,70989,70990,70991,70992,70993,70994,70995,70996,70997,70998,70999,71000,71001,71002,71003,71004,71005,71006,71007,71008,71009,71010,71011,71012,71013,71014,71015,71016,71017,71018,71019,71020,71021,71022,71023,71024,71025,71026,71027,71028,71029,71030,71031,71032,71033,71034,71035,71036,71037,71038,71039,71040,71041,71042,71043,71044,71045,71046,71047,71048,71049,71050,71051,71052,71053,71054,71055,71056,71057,71058,71059,71060,71061,71062,71063,71064,71065,71066,71067,71068,71069,71070,71071,71072,71073,71074,71075,71076,71077,71078,71079,71080,71081,71082,71083,71084,71085,71086,71087,71088,71089,71090,71091,71092,71093,71094,71095,71096,71097,71098,71099,71100,71101,71102,71103,71104,71105,71106,71107,71108,71109,71110,71111,71112,71113,71114,71115,71116,71117,71118,71119,71120,71121,71122,71123,71124,71125,71126,71127,71128,71129,71130,71131,71132,71133,71134,71135,71136'/>
+  </group>
+  <group name='303'>
+    <ids val='71137,71138,71139,71140,71141,71142,71143,71144,71145,71146,71147,71148,71149,71150,71151,71152,71153,71154,71155,71156,71157,71158,71159,71160,71161,71162,71163,71164,71165,71166,71167,71168,71169,71170,71171,71172,71173,71174,71175,71176,71177,71178,71179,71180,71181,71182,71183,71184,71185,71186,71187,71188,71189,71190,71191,71192,71193,71194,71195,71196,71197,71198,71199,71200,71201,71202,71203,71204,71205,71206,71207,71208,71209,71210,71211,71212,71213,71214,71215,71216,71217,71218,71219,71220,71221,71222,71223,71224,71225,71226,71227,71228,71229,71230,71231,71232,71233,71234,71235,71236,71237,71238,71239,71240,71241,71242,71243,71244,71245,71246,71247,71248,71249,71250,71251,71252,71253,71254,71255,71256,71257,71258,71259,71260,71261,71262,71263,71264,71265,71266,71267,71268,71269,71270,71271,71272,71273,71274,71275,71276,71277,71278,71279,71280,71281,71282,71283,71284,71285,71286,71287,71288,71289,71290,71291,71292,71293,71294,71295,71296,71297,71298,71299,71300,71301,71302,71303,71304,71305,71306,71307,71308,71309,71310,71311,71312,71313,71314,71315,71316,71317,71318,71319,71320,71321,71322,71323,71324,71325,71326,71327,71328,71329,71330,71331,71332,71333,71334,71335,71336,71337,71338,71339,71340,71341,71342,71343,71344,71345,71346,71347,71348,71349,71350,71351,71352,71353,71354,71355,71356,71357,71358,71359,71360,71361,71362,71363,71364,71365,71366,71367,71368,71369,71370,71371,71372,71373,71374,71375,71376,71377,71378,71379,71380,71381,71382,71383,71384,71385,71386,71387,71388,71389,71390,71391,71392,71393,71394,71395,71396,71397,71398,71399,71400,71401,71402,71403,71404,71405,71406,71407,71408,71409,71410,71411,71412,71413,71414,71415,71416,71417,71418,71419,71420,71421,71422,71423,71424,71425,71426,71427,71428,71429,71430,71431,71432,71433,71434,71435,71436,71437,71438,71439,71440'/>
+  </group>
+  <group name='303'>
+    <ids val='71441,71442,71443,71444,71445,71446,71447,71448,71449,71450,71451,71452,71453,71454,71455,71456,71457,71458,71459,71460,71461,71462,71463,71464,71465,71466,71467,71468,71469,71470,71471,71472,71473,71474,71475,71476,71477,71478,71479,71480,71481,71482,71483,71484,71485,71486,71487,71488,71489,71490,71491,71492,71493,71494,71495,71496,71497,71498,71499,71500,71501,71502,71503,71504,71505,71506,71507,71508,71509,71510,71511,71512,71513,71514,71515,71516,71517,71518,71519,71520,71521,71522,71523,71524,71525,71526,71527,71528,71529,71530,71531,71532,71533,71534,71535,71536,71537,71538,71539,71540,71541,71542,71543,71544,71545,71546,71547,71548,71549,71550,71551,71552,71553,71554,71555,71556,71557,71558,71559,71560,71561,71562,71563,71564,71565,71566,71567,71568,71569,71570,71571,71572,71573,71574,71575,71576,71577,71578,71579,71580,71581,71582,71583,71584,71585,71586,71587,71588,71589,71590,71591,71592,71593,71594,71595,71596,71597,71598,71599,71600,71601,71602,71603,71604,71605,71606,71607,71608,71609,71610,71611,71612,71613,71614,71615,71616,71617,71618,71619,71620,71621,71622,71623,71624,71625,71626,71627,71628,71629,71630,71631,71632,71633,71634,71635,71636,71637,71638,71639,71640,71641,71642,71643,71644,71645,71646,71647,71648,71649,71650,71651,71652,71653,71654,71655,71656,71657,71658,71659,71660,71661,71662,71663,71664,71665,71666,71667,71668,71669,71670,71671,71672,71673,71674,71675,71676,71677,71678,71679,71680,71681,71682,71683,71684,71685,71686,71687,71688,71689,71690,71691,71692,71693,71694,71695,71696,71697,71698,71699,71700,71701,71702,71703,71704,71705,71706,71707,71708,71709,71710,71711,71712,71713,71714,71715,71716,71717,71718,71719,71720,71721,71722,71723,71724,71725,71726,71727,71728,71729,71730,71731,71732,71733,71734,71735,71736,71737,71738,71739,71740,71741,71742,71743,71744'/>
+  </group>
+  <group name='303'>
+    <ids val='71745,71746,71747,71748,71749,71750,71751,71752,71753,71754,71755,71756,71757,71758,71759,71760,71761,71762,71763,71764,71765,71766,71767,71768,71769,71770,71771,71772,71773,71774,71775,71776,71777,71778,71779,71780,71781,71782,71783,71784,71785,71786,71787,71788,71789,71790,71791,71792,71793,71794,71795,71796,71797,71798,71799,71800,71801,71802,71803,71804,71805,71806,71807,71808,71809,71810,71811,71812,71813,71814,71815,71816,71817,71818,71819,71820,71821,71822,71823,71824,71825,71826,71827,71828,71829,71830,71831,71832,71833,71834,71835,71836,71837,71838,71839,71840,71841,71842,71843,71844,71845,71846,71847,71848,71849,71850,71851,71852,71853,71854,71855,71856,71857,71858,71859,71860,71861,71862,71863,71864,71865,71866,71867,71868,71869,71870,71871,71872,71873,71874,71875,71876,71877,71878,71879,71880,71881,71882,71883,71884,71885,71886,71887,71888,71889,71890,71891,71892,71893,71894,71895,71896,71897,71898,71899,71900,71901,71902,71903,71904,71905,71906,71907,71908,71909,71910,71911,71912,71913,71914,71915,71916,71917,71918,71919,71920,71921,71922,71923,71924,71925,71926,71927,71928,71929,71930,71931,71932,71933,71934,71935,71936,71937,71938,71939,71940,71941,71942,71943,71944,71945,71946,71947,71948,71949,71950,71951,71952,71953,71954,71955,71956,71957,71958,71959,71960,71961,71962,71963,71964,71965,71966,71967,71968,71969,71970,71971,71972,71973,71974,71975,71976,71977,71978,71979,71980,71981,71982,71983,71984,71985,71986,71987,71988,71989,71990,71991,71992,71993,71994,71995,71996,71997,71998,71999,72000,72001,72002,72003,72004,72005,72006,72007,72008,72009,72010,72011,72012,72013,72014,72015,72016,72017,72018,72019,72020,72021,72022,72023,72024,72025,72026,72027,72028,72029,72030,72031,72032,72033,72034,72035,72036,72037,72038,72039,72040,72041,72042,72043,72044,72045,72046,72047,72048'/>
+  </group>
+  <group name='303'>
+    <ids val='72049,72050,72051,72052,72053,72054,72055,72056,72057,72058,72059,72060,72061,72062,72063,72064,72065,72066,72067,72068,72069,72070,72071,72072,72073,72074,72075,72076,72077,72078,72079,72080,72081,72082,72083,72084,72085,72086,72087,72088,72089,72090,72091,72092,72093,72094,72095,72096,72097,72098,72099,72100,72101,72102,72103,72104,72105,72106,72107,72108,72109,72110,72111,72112,72113,72114,72115,72116,72117,72118,72119,72120,72121,72122,72123,72124,72125,72126,72127,72128,72129,72130,72131,72132,72133,72134,72135,72136,72137,72138,72139,72140,72141,72142,72143,72144,72145,72146,72147,72148,72149,72150,72151,72152,72153,72154,72155,72156,72157,72158,72159,72160,72161,72162,72163,72164,72165,72166,72167,72168,72169,72170,72171,72172,72173,72174,72175,72176,72177,72178,72179,72180,72181,72182,72183,72184,72185,72186,72187,72188,72189,72190,72191,72192,72193,72194,72195,72196,72197,72198,72199,72200,72201,72202,72203,72204,72205,72206,72207,72208,72209,72210,72211,72212,72213,72214,72215,72216,72217,72218,72219,72220,72221,72222,72223,72224,72225,72226,72227,72228,72229,72230,72231,72232,72233,72234,72235,72236,72237,72238,72239,72240,72241,72242,72243,72244,72245,72246,72247,72248,72249,72250,72251,72252,72253,72254,72255,72256,72257,72258,72259,72260,72261,72262,72263,72264,72265,72266,72267,72268,72269,72270,72271,72272,72273,72274,72275,72276,72277,72278,72279,72280,72281,72282,72283,72284,72285,72286,72287,72288,72289,72290,72291,72292,72293,72294,72295,72296,72297,72298,72299,72300,72301,72302,72303,72304,72305,72306,72307,72308,72309,72310,72311,72312,72313,72314,72315,72316,72317,72318,72319,72320,72321,72322,72323,72324,72325,72326,72327,72328,72329,72330,72331,72332,72333,72334,72335,72336,72337,72338,72339,72340,72341,72342,72343,72344,72345,72346,72347,72348,72349,72350,72351,72352'/>
+  </group>
+  <group name='303'>
+    <ids val='72353,72354,72355,72356,72357,72358,72359,72360,72361,72362,72363,72364,72365,72366,72367,72368,72369,72370,72371,72372,72373,72374,72375,72376,72377,72378,72379,72380,72381,72382,72383,72384,72385,72386,72387,72388,72389,72390,72391,72392,72393,72394,72395,72396,72397,72398,72399,72400,72401,72402,72403,72404,72405,72406,72407,72408,72409,72410,72411,72412,72413,72414,72415,72416,72417,72418,72419,72420,72421,72422,72423,72424,72425,72426,72427,72428,72429,72430,72431,72432,72433,72434,72435,72436,72437,72438,72439,72440,72441,72442,72443,72444,72445,72446,72447,72448,72449,72450,72451,72452,72453,72454,72455,72456,72457,72458,72459,72460,72461,72462,72463,72464,72465,72466,72467,72468,72469,72470,72471,72472,72473,72474,72475,72476,72477,72478,72479,72480,72481,72482,72483,72484,72485,72486,72487,72488,72489,72490,72491,72492,72493,72494,72495,72496,72497,72498,72499,72500,72501,72502,72503,72504,72505,72506,72507,72508,72509,72510,72511,72512,72513,72514,72515,72516,72517,72518,72519,72520,72521,72522,72523,72524,72525,72526,72527,72528,72529,72530,72531,72532,72533,72534,72535,72536,72537,72538,72539,72540,72541,72542,72543,72544,72545,72546,72547,72548,72549,72550,72551,72552,72553,72554,72555,72556,72557,72558,72559,72560,72561,72562,72563,72564,72565,72566,72567,72568,72569,72570,72571,72572,72573,72574,72575,72576,72577,72578,72579,72580,72581,72582,72583,72584,72585,72586,72587,72588,72589,72590,72591,72592,72593,72594,72595,72596,72597,72598,72599,72600,72601,72602,72603,72604,72605,72606,72607,72608,72609,72610,72611,72612,72613,72614,72615,72616,72617,72618,72619,72620,72621,72622,72623,72624,72625,72626,72627,72628,72629,72630,72631,72632,72633,72634,72635,72636,72637,72638,72639,72640,72641,72642,72643,72644,72645,72646,72647,72648,72649,72650,72651,72652,72653,72654,72655,72656'/>
+  </group>
+  <group name='303'>
+    <ids val='72657,72658,72659,72660,72661,72662,72663,72664,72665,72666,72667,72668,72669,72670,72671,72672,72673,72674,72675,72676,72677,72678,72679,72680,72681,72682,72683,72684,72685,72686,72687,72688,72689,72690,72691,72692,72693,72694,72695,72696,72697,72698,72699,72700,72701,72702,72703,72704,72705,72706,72707,72708,72709,72710,72711,72712,72713,72714,72715,72716,72717,72718,72719,72720,72721,72722,72723,72724,72725,72726,72727,72728,72729,72730,72731,72732,72733,72734,72735,72736,72737,72738,72739,72740,72741,72742,72743,72744,72745,72746,72747,72748,72749,72750,72751,72752,72753,72754,72755,72756,72757,72758,72759,72760,72761,72762,72763,72764,72765,72766,72767,72768,72769,72770,72771,72772,72773,72774,72775,72776,72777,72778,72779,72780,72781,72782,72783,72784,72785,72786,72787,72788,72789,72790,72791,72792,72793,72794,72795,72796,72797,72798,72799,72800,72801,72802,72803,72804,72805,72806,72807,72808,72809,72810,72811,72812,72813,72814,72815,72816,72817,72818,72819,72820,72821,72822,72823,72824,72825,72826,72827,72828,72829,72830,72831,72832,72833,72834,72835,72836,72837,72838,72839,72840,72841,72842,72843,72844,72845,72846,72847,72848,72849,72850,72851,72852,72853,72854,72855,72856,72857,72858,72859,72860,72861,72862,72863,72864,72865,72866,72867,72868,72869,72870,72871,72872,72873,72874,72875,72876,72877,72878,72879,72880,72881,72882,72883,72884,72885,72886,72887,72888,72889,72890,72891,72892,72893,72894,72895,72896,72897,72898,72899,72900,72901,72902,72903,72904,72905,72906,72907,72908,72909,72910,72911,72912,72913,72914,72915,72916,72917,72918,72919,72920,72921,72922,72923,72924,72925,72926,72927,72928,72929,72930,72931,72932,72933,72934,72935,72936,72937,72938,72939,72940,72941,72942,72943,72944,72945,72946,72947,72948,72949,72950,72951,72952,72953,72954,72955,72956,72957,72958,72959,72960'/>
+  </group>
+  <group name='303'>
+    <ids val='72961,72962,72963,72964,72965,72966,72967,72968,72969,72970,72971,72972,72973,72974,72975,72976,72977,72978,72979,72980,72981,72982,72983,72984,72985,72986,72987,72988,72989,72990,72991,72992,72993,72994,72995,72996,72997,72998,72999,73000,73001,73002,73003,73004,73005,73006,73007,73008,73009,73010,73011,73012,73013,73014,73015,73016,73017,73018,73019,73020,73021,73022,73023,73024,73025,73026,73027,73028,73029,73030,73031,73032,73033,73034,73035,73036,73037,73038,73039,73040,73041,73042,73043,73044,73045,73046,73047,73048,73049,73050,73051,73052,73053,73054,73055,73056,73057,73058,73059,73060,73061,73062,73063,73064,73065,73066,73067,73068,73069,73070,73071,73072,73073,73074,73075,73076,73077,73078,73079,73080,73081,73082,73083,73084,73085,73086,73087,73088,73089,73090,73091,73092,73093,73094,73095,73096,73097,73098,73099,73100,73101,73102,73103,73104,73105,73106,73107,73108,73109,73110,73111,73112,73113,73114,73115,73116,73117,73118,73119,73120,73121,73122,73123,73124,73125,73126,73127,73128,73129,73130,73131,73132,73133,73134,73135,73136,73137,73138,73139,73140,73141,73142,73143,73144,73145,73146,73147,73148,73149,73150,73151,73152,73153,73154,73155,73156,73157,73158,73159,73160,73161,73162,73163,73164,73165,73166,73167,73168,73169,73170,73171,73172,73173,73174,73175,73176,73177,73178,73179,73180,73181,73182,73183,73184,73185,73186,73187,73188,73189,73190,73191,73192,73193,73194,73195,73196,73197,73198,73199,73200,73201,73202,73203,73204,73205,73206,73207,73208,73209,73210,73211,73212,73213,73214,73215,73216,73217,73218,73219,73220,73221,73222,73223,73224,73225,73226,73227,73228,73229,73230,73231,73232,73233,73234,73235,73236,73237,73238,73239,73240,73241,73242,73243,73244,73245,73246,73247,73248,73249,73250,73251,73252,73253,73254,73255,73256,73257,73258,73259,73260,73261,73262,73263,73264'/>
+  </group>
+  <group name='303'>
+    <ids val='73265,73266,73267,73268,73269,73270,73271,73272,73273,73274,73275,73276,73277,73278,73279,73280,73281,73282,73283,73284,73285,73286,73287,73288,73289,73290,73291,73292,73293,73294,73295,73296,73297,73298,73299,73300,73301,73302,73303,73304,73305,73306,73307,73308,73309,73310,73311,73312,73313,73314,73315,73316,73317,73318,73319,73320,73321,73322,73323,73324,73325,73326,73327,73328,73329,73330,73331,73332,73333,73334,73335,73336,73337,73338,73339,73340,73341,73342,73343,73344,73345,73346,73347,73348,73349,73350,73351,73352,73353,73354,73355,73356,73357,73358,73359,73360,73361,73362,73363,73364,73365,73366,73367,73368,73369,73370,73371,73372,73373,73374,73375,73376,73377,73378,73379,73380,73381,73382,73383,73384,73385,73386,73387,73388,73389,73390,73391,73392,73393,73394,73395,73396,73397,73398,73399,73400,73401,73402,73403,73404,73405,73406,73407,73408,73409,73410,73411,73412,73413,73414,73415,73416,73417,73418,73419,73420,73421,73422,73423,73424,73425,73426,73427,73428,73429,73430,73431,73432,73433,73434,73435,73436,73437,73438,73439,73440,73441,73442,73443,73444,73445,73446,73447,73448,73449,73450,73451,73452,73453,73454,73455,73456,73457,73458,73459,73460,73461,73462,73463,73464,73465,73466,73467,73468,73469,73470,73471,73472,73473,73474,73475,73476,73477,73478,73479,73480,73481,73482,73483,73484,73485,73486,73487,73488,73489,73490,73491,73492,73493,73494,73495,73496,73497,73498,73499,73500,73501,73502,73503,73504,73505,73506,73507,73508,73509,73510,73511,73512,73513,73514,73515,73516,73517,73518,73519,73520,73521,73522,73523,73524,73525,73526,73527,73528,73529,73530,73531,73532,73533,73534,73535,73536,73537,73538,73539,73540,73541,73542,73543,73544,73545,73546,73547,73548,73549,73550,73551,73552,73553,73554,73555,73556,73557,73558,73559,73560,73561,73562,73563,73564,73565,73566,73567,73568'/>
+  </group>
+  <group name='303'>
+    <ids val='73569,73570,73571,73572,73573,73574,73575,73576,73577,73578,73579,73580,73581,73582,73583,73584,73585,73586,73587,73588,73589,73590,73591,73592,73593,73594,73595,73596,73597,73598,73599,73600,73601,73602,73603,73604,73605,73606,73607,73608,73609,73610,73611,73612,73613,73614,73615,73616,73617,73618,73619,73620,73621,73622,73623,73624,73625,73626,73627,73628,73629,73630,73631,73632,73633,73634,73635,73636,73637,73638,73639,73640,73641,73642,73643,73644,73645,73646,73647,73648,73649,73650,73651,73652,73653,73654,73655,73656,73657,73658,73659,73660,73661,73662,73663,73664,73665,73666,73667,73668,73669,73670,73671,73672,73673,73674,73675,73676,73677,73678,73679,73680,73681,73682,73683,73684,73685,73686,73687,73688,73689,73690,73691,73692,73693,73694,73695,73696,73697,73698,73699,73700,73701,73702,73703,73704,73705,73706,73707,73708,73709,73710,73711,73712,73713,73714,73715,73716,73717,73718,73719,73720,73721,73722,73723,73724,73725,73726,73727,73728,73729,73730,73731,73732,73733,73734,73735,73736,73737,73738,73739,73740,73741,73742,73743,73744,73745,73746,73747,73748,73749,73750,73751,73752,73753,73754,73755,73756,73757,73758,73759,73760,73761,73762,73763,73764,73765,73766,73767,73768,73769,73770,73771,73772,73773,73774,73775,73776,73777,73778,73779,73780,73781,73782,73783,73784,73785,73786,73787,73788,73789,73790,73791,73792,73793,73794,73795,73796,73797,73798,73799,73800,73801,73802,73803,73804,73805,73806,73807,73808,73809,73810,73811,73812,73813,73814,73815,73816,73817,73818,73819,73820,73821,73822,73823,73824,73825,73826,73827,73828,73829,73830,73831,73832,73833,73834,73835,73836,73837,73838,73839,73840,73841,73842,73843,73844,73845,73846,73847,73848,73849,73850,73851,73852,73853,73854,73855,73856,73857,73858,73859,73860,73861,73862,73863,73864,73865,73866,73867,73868,73869,73870,73871,73872'/>
+  </group>
+  <group name='303'>
+    <ids val='73873,73874,73875,73876,73877,73878,73879,73880,73881,73882,73883,73884,73885,73886,73887,73888,73889,73890,73891,73892,73893,73894,73895,73896,73897,73898,73899,73900,73901,73902,73903,73904,73905,73906,73907,73908,73909,73910,73911,73912,73913,73914,73915,73916,73917,73918,73919,73920,73921,73922,73923,73924,73925,73926,73927,73928,73929,73930,73931,73932,73933,73934,73935,73936,73937,73938,73939,73940,73941,73942,73943,73944,73945,73946,73947,73948,73949,73950,73951,73952,73953,73954,73955,73956,73957,73958,73959,73960,73961,73962,73963,73964,73965,73966,73967,73968,73969,73970,73971,73972,73973,73974,73975,73976,73977,73978,73979,73980,73981,73982,73983,73984,73985,73986,73987,73988,73989,73990,73991,73992,73993,73994,73995,73996,73997,73998,73999,74000,74001,74002,74003,74004,74005,74006,74007,74008,74009,74010,74011,74012,74013,74014,74015,74016,74017,74018,74019,74020,74021,74022,74023,74024,74025,74026,74027,74028,74029,74030,74031,74032,74033,74034,74035,74036,74037,74038,74039,74040,74041,74042,74043,74044,74045,74046,74047,74048,74049,74050,74051,74052,74053,74054,74055,74056,74057,74058,74059,74060,74061,74062,74063,74064,74065,74066,74067,74068,74069,74070,74071,74072,74073,74074,74075,74076,74077,74078,74079,74080,74081,74082,74083,74084,74085,74086,74087,74088,74089,74090,74091,74092,74093,74094,74095,74096,74097,74098,74099,74100,74101,74102,74103,74104,74105,74106,74107,74108,74109,74110,74111,74112,74113,74114,74115,74116,74117,74118,74119,74120,74121,74122,74123,74124,74125,74126,74127,74128,74129,74130,74131,74132,74133,74134,74135,74136,74137,74138,74139,74140,74141,74142,74143,74144,74145,74146,74147,74148,74149,74150,74151,74152,74153,74154,74155,74156,74157,74158,74159,74160,74161,74162,74163,74164,74165,74166,74167,74168,74169,74170,74171,74172,74173,74174,74175,74176'/>
+  </group>
+  <group name='303'>
+    <ids val='74177,74178,74179,74180,74181,74182,74183,74184,74185,74186,74187,74188,74189,74190,74191,74192,74193,74194,74195,74196,74197,74198,74199,74200,74201,74202,74203,74204,74205,74206,74207,74208,74209,74210,74211,74212,74213,74214,74215,74216,74217,74218,74219,74220,74221,74222,74223,74224,74225,74226,74227,74228,74229,74230,74231,74232,74233,74234,74235,74236,74237,74238,74239,74240,74241,74242,74243,74244,74245,74246,74247,74248,74249,74250,74251,74252,74253,74254,74255,74256,74257,74258,74259,74260,74261,74262,74263,74264,74265,74266,74267,74268,74269,74270,74271,74272,74273,74274,74275,74276,74277,74278,74279,74280,74281,74282,74283,74284,74285,74286,74287,74288,74289,74290,74291,74292,74293,74294,74295,74296,74297,74298,74299,74300,74301,74302,74303,74304,74305,74306,74307,74308,74309,74310,74311,74312,74313,74314,74315,74316,74317,74318,74319,74320,74321,74322,74323,74324,74325,74326,74327,74328,74329,74330,74331,74332,74333,74334,74335,74336,74337,74338,74339,74340,74341,74342,74343,74344,74345,74346,74347,74348,74349,74350,74351,74352,74353,74354,74355,74356,74357,74358,74359,74360,74361,74362,74363,74364,74365,74366,74367,74368,74369,74370,74371,74372,74373,74374,74375,74376,74377,74378,74379,74380,74381,74382,74383,74384,74385,74386,74387,74388,74389,74390,74391,74392,74393,74394,74395,74396,74397,74398,74399,74400,74401,74402,74403,74404,74405,74406,74407,74408,74409,74410,74411,74412,74413,74414,74415,74416,74417,74418,74419,74420,74421,74422,74423,74424,74425,74426,74427,74428,74429,74430,74431,74432,74433,74434,74435,74436,74437,74438,74439,74440,74441,74442,74443,74444,74445,74446,74447,74448,74449,74450,74451,74452,74453,74454,74455,74456,74457,74458,74459,74460,74461,74462,74463,74464,74465,74466,74467,74468,74469,74470,74471,74472,74473,74474,74475,74476,74477,74478,74479,74480'/>
+  </group>
+  <group name='303'>
+    <ids val='74481,74482,74483,74484,74485,74486,74487,74488,74489,74490,74491,74492,74493,74494,74495,74496,74497,74498,74499,74500,74501,74502,74503,74504,74505,74506,74507,74508,74509,74510,74511,74512,74513,74514,74515,74516,74517,74518,74519,74520,74521,74522,74523,74524,74525,74526,74527,74528,74529,74530,74531,74532,74533,74534,74535,74536,74537,74538,74539,74540,74541,74542,74543,74544,74545,74546,74547,74548,74549,74550,74551,74552,74553,74554,74555,74556,74557,74558,74559,74560,74561,74562,74563,74564,74565,74566,74567,74568,74569,74570,74571,74572,74573,74574,74575,74576,74577,74578,74579,74580,74581,74582,74583,74584,74585,74586,74587,74588,74589,74590,74591,74592,74593,74594,74595,74596,74597,74598,74599,74600,74601,74602,74603,74604,74605,74606,74607,74608,74609,74610,74611,74612,74613,74614,74615,74616,74617,74618,74619,74620,74621,74622,74623,74624,74625,74626,74627,74628,74629,74630,74631,74632,74633,74634,74635,74636,74637,74638,74639,74640,74641,74642,74643,74644,74645,74646,74647,74648,74649,74650,74651,74652,74653,74654,74655,74656,74657,74658,74659,74660,74661,74662,74663,74664,74665,74666,74667,74668,74669,74670,74671,74672,74673,74674,74675,74676,74677,74678,74679,74680,74681,74682,74683,74684,74685,74686,74687,74688,74689,74690,74691,74692,74693,74694,74695,74696,74697,74698,74699,74700,74701,74702,74703,74704,74705,74706,74707,74708,74709,74710,74711,74712,74713,74714,74715,74716,74717,74718,74719,74720,74721,74722,74723,74724,74725,74726,74727,74728,74729,74730,74731,74732,74733,74734,74735,74736,74737,74738,74739,74740,74741,74742,74743,74744,74745,74746,74747,74748,74749,74750,74751,74752,74753,74754,74755,74756,74757,74758,74759,74760,74761,74762,74763,74764,74765,74766,74767,74768,74769,74770,74771,74772,74773,74774,74775,74776,74777,74778,74779,74780,74781,74782,74783,74784'/>
+  </group>
+  <group name='303'>
+    <ids val='74785,74786,74787,74788,74789,74790,74791,74792,74793,74794,74795,74796,74797,74798,74799,74800,74801,74802,74803,74804,74805,74806,74807,74808,74809,74810,74811,74812,74813,74814,74815,74816,74817,74818,74819,74820,74821,74822,74823,74824,74825,74826,74827,74828,74829,74830,74831,74832,74833,74834,74835,74836,74837,74838,74839,74840,74841,74842,74843,74844,74845,74846,74847,74848,74849,74850,74851,74852,74853,74854,74855,74856,74857,74858,74859,74860,74861,74862,74863,74864,74865,74866,74867,74868,74869,74870,74871,74872,74873,74874,74875,74876,74877,74878,74879,74880,74881,74882,74883,74884,74885,74886,74887,74888,74889,74890,74891,74892,74893,74894,74895,74896,74897,74898,74899,74900,74901,74902,74903,74904,74905,74906,74907,74908,74909,74910,74911,74912,74913,74914,74915,74916,74917,74918,74919,74920,74921,74922,74923,74924,74925,74926,74927,74928,74929,74930,74931,74932,74933,74934,74935,74936,74937,74938,74939,74940,74941,74942,74943,74944,74945,74946,74947,74948,74949,74950,74951,74952,74953,74954,74955,74956,74957,74958,74959,74960,74961,74962,74963,74964,74965,74966,74967,74968,74969,74970,74971,74972,74973,74974,74975,74976,74977,74978,74979,74980,74981,74982,74983,74984,74985,74986,74987,74988,74989,74990,74991,74992,74993,74994,74995,74996,74997,74998,74999,75000,75001,75002,75003,75004,75005,75006,75007,75008,75009,75010,75011,75012,75013,75014,75015,75016,75017,75018,75019,75020,75021,75022,75023,75024,75025,75026,75027,75028,75029,75030,75031,75032,75033,75034,75035,75036,75037,75038,75039,75040,75041,75042,75043,75044,75045,75046,75047,75048,75049,75050,75051,75052,75053,75054,75055,75056,75057,75058,75059,75060,75061,75062,75063,75064,75065,75066,75067,75068,75069,75070,75071,75072,75073,75074,75075,75076,75077,75078,75079,75080,75081,75082,75083,75084,75085,75086,75087,75088'/>
+  </group>
+  <group name='303'>
+    <ids val='75089,75090,75091,75092,75093,75094,75095,75096,75097,75098,75099,75100,75101,75102,75103,75104,75105,75106,75107,75108,75109,75110,75111,75112,75113,75114,75115,75116,75117,75118,75119,75120,75121,75122,75123,75124,75125,75126,75127,75128,75129,75130,75131,75132,75133,75134,75135,75136,75137,75138,75139,75140,75141,75142,75143,75144,75145,75146,75147,75148,75149,75150,75151,75152,75153,75154,75155,75156,75157,75158,75159,75160,75161,75162,75163,75164,75165,75166,75167,75168,75169,75170,75171,75172,75173,75174,75175,75176,75177,75178,75179,75180,75181,75182,75183,75184,75185,75186,75187,75188,75189,75190,75191,75192,75193,75194,75195,75196,75197,75198,75199,75200,75201,75202,75203,75204,75205,75206,75207,75208,75209,75210,75211,75212,75213,75214,75215,75216,75217,75218,75219,75220,75221,75222,75223,75224,75225,75226,75227,75228,75229,75230,75231,75232,75233,75234,75235,75236,75237,75238,75239,75240,75241,75242,75243,75244,75245,75246,75247,75248,75249,75250,75251,75252,75253,75254,75255,75256,75257,75258,75259,75260,75261,75262,75263,75264,75265,75266,75267,75268,75269,75270,75271,75272,75273,75274,75275,75276,75277,75278,75279,75280,75281,75282,75283,75284,75285,75286,75287,75288,75289,75290,75291,75292,75293,75294,75295,75296,75297,75298,75299,75300,75301,75302,75303,75304,75305,75306,75307,75308,75309,75310,75311,75312,75313,75314,75315,75316,75317,75318,75319,75320,75321,75322,75323,75324,75325,75326,75327,75328,75329,75330,75331,75332,75333,75334,75335,75336,75337,75338,75339,75340,75341,75342,75343,75344,75345,75346,75347,75348,75349,75350,75351,75352,75353,75354,75355,75356,75357,75358,75359,75360,75361,75362,75363,75364,75365,75366,75367,75368,75369,75370,75371,75372,75373,75374,75375,75376,75377,75378,75379,75380,75381,75382,75383,75384,75385,75386,75387,75388,75389,75390,75391,75392'/>
+  </group>
+  <group name='303'>
+    <ids val='75393,75394,75395,75396,75397,75398,75399,75400,75401,75402,75403,75404,75405,75406,75407,75408,75409,75410,75411,75412,75413,75414,75415,75416,75417,75418,75419,75420,75421,75422,75423,75424,75425,75426,75427,75428,75429,75430,75431,75432,75433,75434,75435,75436,75437,75438,75439,75440,75441,75442,75443,75444,75445,75446,75447,75448,75449,75450,75451,75452,75453,75454,75455,75456,75457,75458,75459,75460,75461,75462,75463,75464,75465,75466,75467,75468,75469,75470,75471,75472,75473,75474,75475,75476,75477,75478,75479,75480,75481,75482,75483,75484,75485,75486,75487,75488,75489,75490,75491,75492,75493,75494,75495,75496,75497,75498,75499,75500,75501,75502,75503,75504,75505,75506,75507,75508,75509,75510,75511,75512,75513,75514,75515,75516,75517,75518,75519,75520,75521,75522,75523,75524,75525,75526,75527,75528,75529,75530,75531,75532,75533,75534,75535,75536,75537,75538,75539,75540,75541,75542,75543,75544,75545,75546,75547,75548,75549,75550,75551,75552,75553,75554,75555,75556,75557,75558,75559,75560,75561,75562,75563,75564,75565,75566,75567,75568,75569,75570,75571,75572,75573,75574,75575,75576,75577,75578,75579,75580,75581,75582,75583,75584,75585,75586,75587,75588,75589,75590,75591,75592,75593,75594,75595,75596,75597,75598,75599,75600,75601,75602,75603,75604,75605,75606,75607,75608,75609,75610,75611,75612,75613,75614,75615,75616,75617,75618,75619,75620,75621,75622,75623,75624,75625,75626,75627,75628,75629,75630,75631,75632,75633,75634,75635,75636,75637,75638,75639,75640,75641,75642,75643,75644,75645,75646,75647,75648,75649,75650,75651,75652,75653,75654,75655,75656,75657,75658,75659,75660,75661,75662,75663,75664,75665,75666,75667,75668,75669,75670,75671,75672,75673,75674,75675,75676,75677,75678,75679,75680,75681,75682,75683,75684,75685,75686,75687,75688,75689,75690,75691,75692,75693,75694,75695,75696'/>
+  </group>
+  <group name='303'>
+    <ids val='75697,75698,75699,75700,75701,75702,75703,75704,75705,75706,75707,75708,75709,75710,75711,75712,75713,75714,75715,75716,75717,75718,75719,75720,75721,75722,75723,75724,75725,75726,75727,75728,75729,75730,75731,75732,75733,75734,75735,75736,75737,75738,75739,75740,75741,75742,75743,75744,75745,75746,75747,75748,75749,75750,75751,75752,75753,75754,75755,75756,75757,75758,75759,75760,75761,75762,75763,75764,75765,75766,75767,75768,75769,75770,75771,75772,75773,75774,75775,75776,75777,75778,75779,75780,75781,75782,75783,75784,75785,75786,75787,75788,75789,75790,75791,75792,75793,75794,75795,75796,75797,75798,75799,75800,75801,75802,75803,75804,75805,75806,75807,75808,75809,75810,75811,75812,75813,75814,75815,75816,75817,75818,75819,75820,75821,75822,75823,75824,75825,75826,75827,75828,75829,75830,75831,75832,75833,75834,75835,75836,75837,75838,75839,75840,75841,75842,75843,75844,75845,75846,75847,75848,75849,75850,75851,75852,75853,75854,75855,75856,75857,75858,75859,75860,75861,75862,75863,75864,75865,75866,75867,75868,75869,75870,75871,75872,75873,75874,75875,75876,75877,75878,75879,75880,75881,75882,75883,75884,75885,75886,75887,75888,75889,75890,75891,75892,75893,75894,75895,75896,75897,75898,75899,75900,75901,75902,75903,75904,75905,75906,75907,75908,75909,75910,75911,75912,75913,75914,75915,75916,75917,75918,75919,75920,75921,75922,75923,75924,75925,75926,75927,75928,75929,75930,75931,75932,75933,75934,75935,75936,75937,75938,75939,75940,75941,75942,75943,75944,75945,75946,75947,75948,75949,75950,75951,75952,75953,75954,75955,75956,75957,75958,75959,75960,75961,75962,75963,75964,75965,75966,75967,75968,75969,75970,75971,75972,75973,75974,75975,75976,75977,75978,75979,75980,75981,75982,75983,75984,75985,75986,75987,75988,75989,75990,75991,75992,75993,75994,75995,75996,75997,75998,75999,76000'/>
+  </group>
+  <group name='303'>
+    <ids val='76001,76002,76003,76004,76005,76006,76007,76008,76009,76010,76011,76012,76013,76014,76015,76016,76017,76018,76019,76020,76021,76022,76023,76024,76025,76026,76027,76028,76029,76030,76031,76032,76033,76034,76035,76036,76037,76038,76039,76040,76041,76042,76043,76044,76045,76046,76047,76048,76049,76050,76051,76052,76053,76054,76055,76056,76057,76058,76059,76060,76061,76062,76063,76064,76065,76066,76067,76068,76069,76070,76071,76072,76073,76074,76075,76076,76077,76078,76079,76080,76081,76082,76083,76084,76085,76086,76087,76088,76089,76090,76091,76092,76093,76094,76095,76096,76097,76098,76099,76100,76101,76102,76103,76104,76105,76106,76107,76108,76109,76110,76111,76112,76113,76114,76115,76116,76117,76118,76119,76120,76121,76122,76123,76124,76125,76126,76127,76128,76129,76130,76131,76132,76133,76134,76135,76136,76137,76138,76139,76140,76141,76142,76143,76144,76145,76146,76147,76148,76149,76150,76151,76152,76153,76154,76155,76156,76157,76158,76159,76160,76161,76162,76163,76164,76165,76166,76167,76168,76169,76170,76171,76172,76173,76174,76175,76176,76177,76178,76179,76180,76181,76182,76183,76184,76185,76186,76187,76188,76189,76190,76191,76192,76193,76194,76195,76196,76197,76198,76199,76200,76201,76202,76203,76204,76205,76206,76207,76208,76209,76210,76211,76212,76213,76214,76215,76216,76217,76218,76219,76220,76221,76222,76223,76224,76225,76226,76227,76228,76229,76230,76231,76232,76233,76234,76235,76236,76237,76238,76239,76240,76241,76242,76243,76244,76245,76246,76247,76248,76249,76250,76251,76252,76253,76254,76255,76256,76257,76258,76259,76260,76261,76262,76263,76264,76265,76266,76267,76268,76269,76270,76271,76272,76273,76274,76275,76276,76277,76278,76279,76280,76281,76282,76283,76284,76285,76286,76287,76288,76289,76290,76291,76292,76293,76294,76295,76296,76297,76298,76299,76300,76301,76302,76303,76304'/>
+  </group>
+  <group name='303'>
+    <ids val='76305,76306,76307,76308,76309,76310,76311,76312,76313,76314,76315,76316,76317,76318,76319,76320,76321,76322,76323,76324,76325,76326,76327,76328,76329,76330,76331,76332,76333,76334,76335,76336,76337,76338,76339,76340,76341,76342,76343,76344,76345,76346,76347,76348,76349,76350,76351,76352,76353,76354,76355,76356,76357,76358,76359,76360,76361,76362,76363,76364,76365,76366,76367,76368,76369,76370,76371,76372,76373,76374,76375,76376,76377,76378,76379,76380,76381,76382,76383,76384,76385,76386,76387,76388,76389,76390,76391,76392,76393,76394,76395,76396,76397,76398,76399,76400,76401,76402,76403,76404,76405,76406,76407,76408,76409,76410,76411,76412,76413,76414,76415,76416,76417,76418,76419,76420,76421,76422,76423,76424,76425,76426,76427,76428,76429,76430,76431,76432,76433,76434,76435,76436,76437,76438,76439,76440,76441,76442,76443,76444,76445,76446,76447,76448,76449,76450,76451,76452,76453,76454,76455,76456,76457,76458,76459,76460,76461,76462,76463,76464,76465,76466,76467,76468,76469,76470,76471,76472,76473,76474,76475,76476,76477,76478,76479,76480,76481,76482,76483,76484,76485,76486,76487,76488,76489,76490,76491,76492,76493,76494,76495,76496,76497,76498,76499,76500,76501,76502,76503,76504,76505,76506,76507,76508,76509,76510,76511,76512,76513,76514,76515,76516,76517,76518,76519,76520,76521,76522,76523,76524,76525,76526,76527,76528,76529,76530,76531,76532,76533,76534,76535,76536,76537,76538,76539,76540,76541,76542,76543,76544,76545,76546,76547,76548,76549,76550,76551,76552,76553,76554,76555,76556,76557,76558,76559,76560,76561,76562,76563,76564,76565,76566,76567,76568,76569,76570,76571,76572,76573,76574,76575,76576,76577,76578,76579,76580,76581,76582,76583,76584,76585,76586,76587,76588,76589,76590,76591,76592,76593,76594,76595,76596,76597,76598,76599,76600,76601,76602,76603,76604,76605,76606,76607,76608'/>
+  </group>
+  <group name='303'>
+    <ids val='76609,76610,76611,76612,76613,76614,76615,76616,76617,76618,76619,76620,76621,76622,76623,76624,76625,76626,76627,76628,76629,76630,76631,76632,76633,76634,76635,76636,76637,76638,76639,76640,76641,76642,76643,76644,76645,76646,76647,76648,76649,76650,76651,76652,76653,76654,76655,76656,76657,76658,76659,76660,76661,76662,76663,76664,76665,76666,76667,76668,76669,76670,76671,76672,76673,76674,76675,76676,76677,76678,76679,76680,76681,76682,76683,76684,76685,76686,76687,76688,76689,76690,76691,76692,76693,76694,76695,76696,76697,76698,76699,76700,76701,76702,76703,76704,76705,76706,76707,76708,76709,76710,76711,76712,76713,76714,76715,76716,76717,76718,76719,76720,76721,76722,76723,76724,76725,76726,76727,76728,76729,76730,76731,76732,76733,76734,76735,76736,76737,76738,76739,76740,76741,76742,76743,76744,76745,76746,76747,76748,76749,76750,76751,76752,76753,76754,76755,76756,76757,76758,76759,76760,76761,76762,76763,76764,76765,76766,76767,76768,76769,76770,76771,76772,76773,76774,76775,76776,76777,76778,76779,76780,76781,76782,76783,76784,76785,76786,76787,76788,76789,76790,76791,76792,76793,76794,76795,76796,76797,76798,76799,76800,76801,76802,76803,76804,76805,76806,76807,76808,76809,76810,76811,76812,76813,76814,76815,76816,76817,76818,76819,76820,76821,76822,76823,76824,76825,76826,76827,76828,76829,76830,76831,76832,76833,76834,76835,76836,76837,76838,76839,76840,76841,76842,76843,76844,76845,76846,76847,76848,76849,76850,76851,76852,76853,76854,76855,76856,76857,76858,76859,76860,76861,76862,76863,76864,76865,76866,76867,76868,76869,76870,76871,76872,76873,76874,76875,76876,76877,76878,76879,76880,76881,76882,76883,76884,76885,76886,76887,76888,76889,76890,76891,76892,76893,76894,76895,76896,76897,76898,76899,76900,76901,76902,76903,76904,76905,76906,76907,76908,76909,76910,76911,76912'/>
+  </group>
+  <group name='303'>
+    <ids val='76913,76914,76915,76916,76917,76918,76919,76920,76921,76922,76923,76924,76925,76926,76927,76928,76929,76930,76931,76932,76933,76934,76935,76936,76937,76938,76939,76940,76941,76942,76943,76944,76945,76946,76947,76948,76949,76950,76951,76952,76953,76954,76955,76956,76957,76958,76959,76960,76961,76962,76963,76964,76965,76966,76967,76968,76969,76970,76971,76972,76973,76974,76975,76976,76977,76978,76979,76980,76981,76982,76983,76984,76985,76986,76987,76988,76989,76990,76991,76992,76993,76994,76995,76996,76997,76998,76999,77000,77001,77002,77003,77004,77005,77006,77007,77008,77009,77010,77011,77012,77013,77014,77015,77016,77017,77018,77019,77020,77021,77022,77023,77024,77025,77026,77027,77028,77029,77030,77031,77032,77033,77034,77035,77036,77037,77038,77039,77040,77041,77042,77043,77044,77045,77046,77047,77048,77049,77050,77051,77052,77053,77054,77055,77056,77057,77058,77059,77060,77061,77062,77063,77064,77065,77066,77067,77068,77069,77070,77071,77072,77073,77074,77075,77076,77077,77078,77079,77080,77081,77082,77083,77084,77085,77086,77087,77088,77089,77090,77091,77092,77093,77094,77095,77096,77097,77098,77099,77100,77101,77102,77103,77104,77105,77106,77107,77108,77109,77110,77111,77112,77113,77114,77115,77116,77117,77118,77119,77120,77121,77122,77123,77124,77125,77126,77127,77128,77129,77130,77131,77132,77133,77134,77135,77136,77137,77138,77139,77140,77141,77142,77143,77144,77145,77146,77147,77148,77149,77150,77151,77152,77153,77154,77155,77156,77157,77158,77159,77160,77161,77162,77163,77164,77165,77166,77167,77168,77169,77170,77171,77172,77173,77174,77175,77176,77177,77178,77179,77180,77181,77182,77183,77184,77185,77186,77187,77188,77189,77190,77191,77192,77193,77194,77195,77196,77197,77198,77199,77200,77201,77202,77203,77204,77205,77206,77207,77208,77209,77210,77211,77212,77213,77214,77215,77216'/>
+  </group>
+  <group name='303'>
+    <ids val='77217,77218,77219,77220,77221,77222,77223,77224,77225,77226,77227,77228,77229,77230,77231,77232,77233,77234,77235,77236,77237,77238,77239,77240,77241,77242,77243,77244,77245,77246,77247,77248,77249,77250,77251,77252,77253,77254,77255,77256,77257,77258,77259,77260,77261,77262,77263,77264,77265,77266,77267,77268,77269,77270,77271,77272,77273,77274,77275,77276,77277,77278,77279,77280,77281,77282,77283,77284,77285,77286,77287,77288,77289,77290,77291,77292,77293,77294,77295,77296,77297,77298,77299,77300,77301,77302,77303,77304,77305,77306,77307,77308,77309,77310,77311,77312,77313,77314,77315,77316,77317,77318,77319,77320,77321,77322,77323,77324,77325,77326,77327,77328,77329,77330,77331,77332,77333,77334,77335,77336,77337,77338,77339,77340,77341,77342,77343,77344,77345,77346,77347,77348,77349,77350,77351,77352,77353,77354,77355,77356,77357,77358,77359,77360,77361,77362,77363,77364,77365,77366,77367,77368,77369,77370,77371,77372,77373,77374,77375,77376,77377,77378,77379,77380,77381,77382,77383,77384,77385,77386,77387,77388,77389,77390,77391,77392,77393,77394,77395,77396,77397,77398,77399,77400,77401,77402,77403,77404,77405,77406,77407,77408,77409,77410,77411,77412,77413,77414,77415,77416,77417,77418,77419,77420,77421,77422,77423,77424,77425,77426,77427,77428,77429,77430,77431,77432,77433,77434,77435,77436,77437,77438,77439,77440,77441,77442,77443,77444,77445,77446,77447,77448,77449,77450,77451,77452,77453,77454,77455,77456,77457,77458,77459,77460,77461,77462,77463,77464,77465,77466,77467,77468,77469,77470,77471,77472,77473,77474,77475,77476,77477,77478,77479,77480,77481,77482,77483,77484,77485,77486,77487,77488,77489,77490,77491,77492,77493,77494,77495,77496,77497,77498,77499,77500,77501,77502,77503,77504,77505,77506,77507,77508,77509,77510,77511,77512,77513,77514,77515,77516,77517,77518,77519,77520'/>
+  </group>
+  <group name='303'>
+    <ids val='77521,77522,77523,77524,77525,77526,77527,77528,77529,77530,77531,77532,77533,77534,77535,77536,77537,77538,77539,77540,77541,77542,77543,77544,77545,77546,77547,77548,77549,77550,77551,77552,77553,77554,77555,77556,77557,77558,77559,77560,77561,77562,77563,77564,77565,77566,77567,77568,77569,77570,77571,77572,77573,77574,77575,77576,77577,77578,77579,77580,77581,77582,77583,77584,77585,77586,77587,77588,77589,77590,77591,77592,77593,77594,77595,77596,77597,77598,77599,77600,77601,77602,77603,77604,77605,77606,77607,77608,77609,77610,77611,77612,77613,77614,77615,77616,77617,77618,77619,77620,77621,77622,77623,77624,77625,77626,77627,77628,77629,77630,77631,77632,77633,77634,77635,77636,77637,77638,77639,77640,77641,77642,77643,77644,77645,77646,77647,77648,77649,77650,77651,77652,77653,77654,77655,77656,77657,77658,77659,77660,77661,77662,77663,77664,77665,77666,77667,77668,77669,77670,77671,77672,77673,77674,77675,77676,77677,77678,77679,77680,77681,77682,77683,77684,77685,77686,77687,77688,77689,77690,77691,77692,77693,77694,77695,77696,77697,77698,77699,77700,77701,77702,77703,77704,77705,77706,77707,77708,77709,77710,77711,77712,77713,77714,77715,77716,77717,77718,77719,77720,77721,77722,77723,77724,77725,77726,77727,77728,77729,77730,77731,77732,77733,77734,77735,77736,77737,77738,77739,77740,77741,77742,77743,77744,77745,77746,77747,77748,77749,77750,77751,77752,77753,77754,77755,77756,77757,77758,77759,77760,77761,77762,77763,77764,77765,77766,77767,77768,77769,77770,77771,77772,77773,77774,77775,77776,77777,77778,77779,77780,77781,77782,77783,77784,77785,77786,77787,77788,77789,77790,77791,77792,77793,77794,77795,77796,77797,77798,77799,77800,77801,77802,77803,77804,77805,77806,77807,77808,77809,77810,77811,77812,77813,77814,77815,77816,77817,77818,77819,77820,77821,77822,77823,77824'/>
+  </group>
+</detector-grouping>
diff --git a/Code/Mantid/instrument/POLDI_Definition_2014b.xml b/Code/Mantid/instrument/POLDI_Definition_2014b.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c79f61504ea828c30f95bbb6ab0a4eb04290c7ba
--- /dev/null
+++ b/Code/Mantid/instrument/POLDI_Definition_2014b.xml
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<instrument xmlns="http://www.mantidproject.org/IDF/1.0"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 Schema/IDFSchema.xsd"
+            name="POLDI"
+            valid-from="2014-08-05 00:00:00"
+            last-modified="2014-09-10 00:00:00">
+    
+    <type name="source" is="Source" />
+    
+    <type name="chopper" is="ChopperPos">
+        <component type="chopperSlit">
+            <location x="0.000000" name="slit0" />
+            <location x="0.162156" name="slit1" />
+            <location x="0.250867" name="slit2" />
+            <location x="0.3704" name="slit3" />
+            <location x="0.439811" name="slit4" />
+            <location x="0.588455" name="slit5" />
+            <location x="0.761389" name="slit6" />
+            <location x="0.895667" name="slit7" />
+        </component>
+    </type>
+    
+    <type name="chopperSlit" />
+    
+    <type name="detector">
+        <component type="element" idlist="detector-elements-idlist">
+            <locations r="2.0000" t="75.0" t-end="103.0" p="0" n-elements="400" name="element" />
+        </component>
+    </type>
+    
+    <type name="element" is="Detector" />
+    
+    <idlist idname="detector-elements-idlist">
+        <id start="0" end="399" />
+    </idlist>
+    
+    <type name="sample" is="SamplePos" />
+    
+    <component type="source" name="source">
+        <location z="-12.0000" />
+        <parameter name="PoldiSpectrum:WavelengthDistribution" type="fitting">
+            <!--
+                This is the POLDI neutron wavelength distribution. The intensities
+                are given such that Mean(I) = 1.0.
+            -->
+            <lookuptable x-unit="Wavelength">
+                <point x="0.986430049" y="0.0379200461685" />
+                <point x="1.01097" y="0.0647900877564" />
+                <point x="1.03552008" y="0.158472779233" />
+                <point x="1.06007004" y="0.519912166374" />
+                <point x="1.08460999" y="1.61236820184" />
+                <point x="1.10916007" y="2.92556206166" />
+                <point x="1.13371003" y="3.01527151822" />
+                <point x="1.15825999" y="3.08617045167" />
+                <point x="1.18280005" y="3.3797870393" />
+                <point x="1.20735002" y="3.54669731732" />
+                <point x="1.23189998" y="3.6408488786" />
+                <point x="1.25644004" y="3.61670774172" />
+                <point x="1.28099" y="3.74104456034" />
+                <point x="1.30553997" y="3.85943944836" />
+                <point x="1.33009005" y="3.75758537926" />
+                <point x="1.35462999" y="3.72106056606" />
+                <point x="1.37918007" y="3.73501609979" />
+                <point x="1.40373003" y="3.80737158413" />
+                <point x="1.42826998" y="3.74757696126" />
+                <point x="1.45282006" y="3.79171629046" />
+                <point x="1.47737002" y="3.70519039935" />
+                <point x="1.50190997" y="3.64835854136" />
+                <point x="1.52646005" y="3.58509014427" />
+                <point x="1.55101001" y="3.52528432718" />
+                <point x="1.57554996" y="3.58574587753" />
+                <point x="1.60010004" y="3.52296612136" />
+                <point x="1.62465" y="3.48146692706" />
+                <point x="1.64919996" y="3.29247486904" />
+                <point x="1.67374003" y="3.18613505977" />
+                <point x="1.69828999" y="3.11493402243" />
+                <point x="1.72284007" y="3.019974154" />
+                <point x="1.74738002" y="2.95223419475" />
+                <point x="1.77192998" y="2.87013941439" />
+                <point x="1.79648006" y="2.8518896839" />
+                <point x="1.82102001" y="2.81334596521" />
+                <point x="1.84556997" y="2.79063867035" />
+                <point x="1.87012005" y="2.73278925933" />
+                <point x="1.89467001" y="2.70067519099" />
+                <point x="1.91921008" y="2.6032279618" />
+                <point x="1.94376004" y="2.49786056822" />
+                <point x="1.96831" y="2.3271600338" />
+                <point x="1.99285007" y="2.34552390934" />
+                <point x="2.01740003" y="2.22035491325" />
+                <point x="2.04194999" y="2.29464387452" />
+                <point x="2.06648993" y="2.20015866926" />
+                <point x="2.09104013" y="2.1126010471" />
+                <point x="2.1155901" y="2.03543605117" />
+                <point x="2.14014006" y="2.03696461356" />
+                <point x="2.16468" y="2.02314915783" />
+                <point x="2.18922997" y="1.92865797498" />
+                <point x="2.21377993" y="1.76339003593" />
+                <point x="2.23832011" y="1.70948140257" />
+                <point x="2.26287007" y="1.70655034399" />
+                <point x="2.28742003" y="1.63185257524" />
+                <point x="2.31195998" y="1.6101119067" />
+                <point x="2.33650994" y="1.52402877822" />
+                <point x="2.3610599" y="1.41765223428" />
+                <point x="2.3856101" y="1.41372656581" />
+                <point x="2.41015005" y="1.37861914774" />
+                <point x="2.43470001" y="1.39547907016" />
+                <point x="2.45924997" y="1.32522954793" />
+                <point x="2.48378992" y="1.3747536237" />
+                <point x="2.50834012" y="1.26342285426" />
+                <point x="2.53289008" y="1.1961405706" />
+                <point x="2.55743003" y="1.15607902115" />
+                <point x="2.58197999" y="1.09374471504" />
+                <point x="2.60652995" y="1.08882219384" />
+                <point x="2.63107991" y="1.08884830502" />
+                <point x="2.6556201" y="1.05670290487" />
+                <point x="2.68017006" y="1.02406197103" />
+                <point x="2.70472002" y="0.989440668677" />
+                <point x="2.72925997" y="1.00035277903" />
+                <point x="2.75380993" y="0.95038734642" />
+                <point x="2.77836013" y="0.869240260323" />
+                <point x="2.80291009" y="0.836101367713" />
+                <point x="2.82745004" y="0.832658084227" />
+                <point x="2.852" y="0.784670032334" />
+                <point x="2.87654996" y="0.789144670394" />
+                <point x="2.90108991" y="0.725317653441" />
+                <point x="2.92564011" y="0.737710213048" />
+                <point x="2.95019007" y="0.742183265093" />
+                <point x="2.97473001" y="0.692213030379" />
+                <point x="2.99927998" y="0.653130845445" />
+                <point x="3.02382994" y="0.658097474694" />
+                <point x="3.04837012" y="0.629903015127" />
+                <point x="3.07292008" y="0.620515648311" />
+                <point x="3.09747005" y="0.59182542276" />
+                <point x="3.12202001" y="0.596295491013" />
+                <point x="3.14655995" y="0.553251221336" />
+                <point x="3.17110991" y="0.561185043087" />
+                <point x="3.19566011" y="0.509726198752" />
+                <point x="3.22020006" y="0.497861766253" />
+                <point x="3.24475002" y="0.500350162334" />
+                <point x="3.26929998" y="0.462253499734" />
+                <point x="3.29383993" y="0.448903255167" />
+                <point x="3.31839013" y="0.442976704117" />
+                <point x="3.34293699" y="0.410906557596" />
+                <point x="3.36748409" y="0.400728656223" />
+                <point x="3.39203095" y="0.390802883239" />
+                <point x="3.41657805" y="0.381123104847" />
+                <point x="3.44112492" y="0.371682888874" />
+                <point x="3.46567202" y="0.362476568119" />
+                <point x="3.49021912" y="0.35349822306" />
+                <point x="3.51476598" y="0.34474241879" />
+                <point x="3.53931308" y="0.336203424027" />
+                <point x="3.56385994" y="0.327875851925" />
+                <point x="3.58840704" y="0.319754644057" />
+                <point x="3.61295295" y="0.311834601816" />
+                <point x="3.637501" y="0.304110594682" />
+                <point x="3.66204691" y="0.296578008794" />
+                <point x="3.68659401" y="0.289232018017" />
+                <point x="3.71114111" y="0.282067934396" />
+                <point x="3.73568797" y="0.275081354334" />
+                <point x="3.76023507" y="0.268267710027" />
+                <point x="3.78478193" y="0.261622986372" />
+                <point x="3.80932903" y="0.255142781777" />
+                <point x="3.83387613" y="0.248823039086" />
+                <point x="3.85842299" y="0.242659933438" />
+                <point x="3.88297009" y="0.236649455739" />
+                <point x="3.90751696" y="0.230787759101" />
+                <point x="3.93206406" y="0.225071303024" />
+                <point x="3.95661092" y="0.219496468911" />
+                <point x="3.98115826" y="0.214059716263" />
+                <point x="4.0057044" y="0.208757618724" />
+                <point x="4.03025055" y="0.203586864087" />
+                <point x="4.0547986" y="0.198544166977" />
+                <point x="4.0793457" y="0.193626378592" />
+                <point x="4.10389137" y="0.188830387379" />
+                <point x="4.12843847" y="0.184153209345" />
+                <point x="4.15298653" y="0.179591790409" />
+                <point x="4.17753267" y="0.17514353127" />
+                <point x="4.20207977" y="0.170805354615" />
+                <point x="4.2266264" y="0.166574544595" />
+                <point x="4.2511735" y="0.162448630069" />
+                <point x="4.2757206" y="0.158424976688" />
+                <point x="4.3002677" y="0.154500833359" />
+                <point x="4.32481432" y="0.150673962236" />
+                <point x="4.34936142" y="0.146941962269" />
+                <point x="4.37390852" y="0.143302256984" />
+                <point x="4.39845562" y="0.139752771944" />
+                <point x="4.42300272" y="0.136291257291" />
+                <point x="4.44754934" y="0.132915370247" />
+                <point x="4.47209644" y="0.129623152325" />
+                <point x="4.49664354" y="0.126412482228" />
+                <point x="4.52119064" y="0.123281343393" />
+                <point x="4.54573774" y="0.120227765918" />
+                <point x="4.57028341" y="0.11724980313" />
+                <point x="4.59483051" y="0.114345613286" />
+                <point x="4.61937857" y="0.111513366463" />
+                <point x="4.64392471" y="0.108751267379" />
+                <point x="4.66847134" y="0.106057579427" />
+                <point x="4.69301844" y="0.103430600844" />
+                <point x="4.71756554" y="0.100868711172" />
+                <point x="4.74211264" y="0.0983702671227" />
+                <point x="4.76665974" y="0.0959336772731" />
+                <point x="4.79120636" y="0.093557508202" />
+                <point x="4.81575346" y="0.0912401628801" />
+                <point x="4.84030056" y="0.0889801784484" />
+                <point x="4.86484766" y="0.0867762492478" />
+                <point x="4.88939476" y="0.084626860153" />
+                <point x="4.91394138" y="0.0825306822753" />
+                <point x="4.93848753" y="0.0804864976671" />
+                <point x="4.96303558" y="0.0784929071503" />
+                <point x="4.98758268" y="0.0765486581333" />
+                <point x="5.01212931" y="0.0746526079641" />
+                <point x="5.03667545" y="0.0728035212728" />
+                <point x="5.06122255" y="0.0710002323781" />
+                <point x="5.08577061" y="0.0692416164508" />
+                <point x="5.11031771" y="0.0675265194243" />
+                <point x="5.13486338" y="0.0658539680618" />
+                <point x="5.15941048" y="0.0642228143046" />
+                <point x="5.18395853" y="0.0626320322489" />
+                <point x="5.20850468" y="0.0610807125393" />
+                <point x="5.23305178" y="0.0595677948282" />
+                <point x="5.2575984" y="0.0580923114862" />
+                <point x="5.2821455" y="0.0566534406688" />
+                <point x="5.3066926" y="0.0552501801025" />
+                <point x="5.3312397" y="0.0538816494685" />
+                <point x="5.35578632" y="0.0525470679748" />
+                <point x="5.38033342" y="0.0512454914214" />
+                <point x="5.40488052" y="0.049976179668" />
+                <point x="5.42942762" y="0.0487383282922" />
+                <point x="5.45397472" y="0.0475310954243" />
+                <point x="5.47852135" y="0.0463537841787" />
+                <point x="5.50306749" y="0.0452056576189" />
+                <point x="5.52761555" y="0.044085928745" />
+                <point x="5.55216265" y="0.0429939565424" />
+                <point x="5.60125542" y="0.0408904789888" />
+                <point x="5.62580252" y="0.0398776505566" />
+                <point x="5.65034962" y="0.0388899122071" />
+                <point x="5.69944334" y="0.0369872268062" />
+                <point x="5.72399044" y="0.0360710788288" />
+                <point x="5.77308464" y="0.0343063026735" />
+                <point x="5.79763174" y="0.0334565608805" />
+                <point x="5.82217836" y="0.0326278676345" />
+                <point x="5.87127256" y="0.0310315517468" />
+                <point x="5.89581966" y="0.0302629090089" />
+                <point x="5.94491243" y="0.0287823115682" />
+                <point x="5.96946049" y="0.0280693832282" />
+                <point x="5.99400759" y="0.0273741231399" />
+            </lookuptable>
+        </parameter>
+    </component>
+
+    <component type="chopper" name="chopper">
+        <location />
+        <parameter name="z">
+            <value val="-11.8000" />
+        </parameter>
+        <parameter name="rotation_speed">
+            <logfile id="chopperspeed" extract-single-value-as="first_value" />
+        </parameter>
+    </component>
+    
+    <component type="sample" name="sample">
+        <location x="0.0" y="0.0" z="0.0" />
+    </component>
+    
+    <component type="detector" name="detector">
+        <location />
+        <parameter name="radius">
+            <value val="3.0000" />
+        </parameter>
+        <parameter name="element_separation">
+            <value val="0.0025" />
+        </parameter>
+        <parameter name="efficiency">
+            <value val="0.88" />
+        </parameter>
+    </component>
+</instrument>
diff --git a/Code/Mantid/instrument/POLDI_Parameters_2014b.xml b/Code/Mantid/instrument/POLDI_Parameters_2014b.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f26d7516f9814afe3c4daf6cd29f036928b3f845
--- /dev/null
+++ b/Code/Mantid/instrument/POLDI_Parameters_2014b.xml
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<parameter-file instrument="POLDI" valid-from="2014-08-05 00:00:00">
+    
+    <component-link name="chopper">
+        <parameter name="t0" type="number">
+            <value val="-0.00705" />
+        </parameter>
+        <parameter name="t0_const" type="number">
+            <value val="-4.6" />
+        </parameter>
+    </component-link>
+    
+    <component-link name="detector">
+        <parameter name="two_theta" type="number">
+            <value val="90.90" />
+        </parameter>
+        <parameter name="x">
+            <value val="-1.000" />
+        </parameter>
+        <parameter name="y">
+            <value val="-0.900" />
+        </parameter>
+    </component-link>
+    
+    <!-- dead wires !-->    
+    <component-link name="detector/element0">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+
+    <component-link name="detector/element1">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+
+    <component-link name="detector/element2">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+
+    <component-link name="detector/element3">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+
+    <component-link name="detector/element4">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+
+    <component-link name="detector/element5">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    
+    <component-link name="detector/element376">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element373">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element371">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element357">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element355">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element341">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element339">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element335">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element325">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element323">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element291">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element275">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element259">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element243">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element235">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element227">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element225">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element211">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element209">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element195">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element193">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element179">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element163">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element161">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+        <component-link name="detector/element131">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element115">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element99">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element83">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element55">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element51">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element35">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    <component-link name="detector/element19">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+    
+
+    <component-link name="detector/element394">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+
+    <component-link name="detector/element395">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+
+    <component-link name="detector/element396">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+
+    <component-link name="detector/element397">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+
+    <component-link name="detector/element398">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+
+    <component-link name="detector/element399">
+        <parameter name="masked" type="bool">
+            <value val="true" />
+        </parameter>
+    </component-link>
+
+</parameter-file>
\ No newline at end of file
diff --git a/Code/Mantid/instrument/VESUVIO_Definition.xml b/Code/Mantid/instrument/VESUVIO_Definition.xml
index fc0314f30a5d8cce1acc99f1880947f395442c2d..f2094e0a82d86de68fa02621c35cf82247ece61e 100644
--- a/Code/Mantid/instrument/VESUVIO_Definition.xml
+++ b/Code/Mantid/instrument/VESUVIO_Definition.xml
@@ -322,22 +322,22 @@
   
   <type name="pixel forward" is="detector">
     <cuboid id="shape">
-      <left-front-bottom-point x="0.0125" y="-0.04" z="0.0"  />
-      <left-front-top-point  x="0.0125" y="-0.04" z="0.003"  />
-      <left-back-bottom-point  x="-0.0125" y="-0.04" z="0.0"  />
-      <right-front-bottom-point  x="0.0125" y="0.04" z="0.0"  />
+      <left-front-bottom-point x="0.0125" y="-0.0395" z= "0.0045" />
+      <left-front-top-point x="0.0125" y="0.0395" z= "0.0045" />
+      <left-back-bottom-point x="0.0125" y="-0.0395" z= "-0.0045" />
+      <right-front-bottom-point x="-0.0125" y="-0.0395" z= "0.0045" />
     </cuboid>
     <algebra val="shape" />
   </type>  
 
   <type name="pixel back" is="detector">
-    <cuboid id="shape">
-      <left-front-bottom-point x="0.01" y="-0.02" z="0.0"  />
-      <left-front-top-point  x="0.01" y="-0.02" z="0.003"  />
-      <left-back-bottom-point  x="-0.01" y="-0.02" z="0.0"  />
-      <right-front-bottom-point  x="0.01" y="0.02" z="0.0"  />
+    <cuboid id="shape" >
+      <left-front-bottom-point x="0.0125" y="-0.04" z= "0.0045" />
+      <left-front-top-point x="0.0125" y="0.04" z= "0.0045" />
+      <left-back-bottom-point x="0.0125" y="-0.04" z= "-0.0045" />
+      <right-front-bottom-point x="-0.0125" y="-0.04" z= "0.0045" />
     </cuboid>
-    <algebra val="shape" />
+  <algebra val="shape" />
   </type>  
   
   <!-- DETECTOR ID LISTS -->
@@ -357,4 +357,4 @@
     <id start="3201" end="3232" />    
   </idlist>  
   
-</instrument>
\ No newline at end of file
+</instrument>
diff --git a/Code/Mantid/instrument/VESUVIO_Parameters.xml b/Code/Mantid/instrument/VESUVIO_Parameters.xml
index d1fcdc31ad6a09fa08cc82ad1f2cf21e231d59bd..f6d4504712725f916553e6e2dcac22fc428b26e9 100644
--- a/Code/Mantid/instrument/VESUVIO_Parameters.xml
+++ b/Code/Mantid/instrument/VESUVIO_Parameters.xml
@@ -7,106 +7,111 @@
   <parameter name="monitor_spectrum">
     <value val="1"/>
   </parameter>
-  
+
   <!-- Back scattering spectrum numbers -->
   <parameter name="backward_scatter_spectra" type="string">
     <value val="3-134"/>
   </parameter>
-  
+
   <!-- Forward scattering spectrum numbers -->
   <parameter name="forward_scatter_spectra" type="string">
     <value val="135-198"/>
   </parameter>
-  
+
   <!-- Maximum TOF for loaded raw data (monitors use mon_tof_max below) -->
   <parameter name="tof_max">
     <value val="600"/>
   </parameter>
-  
+
   <!-- Maximum TOF for loaded monitor data -->
   <parameter name="monitor_tof_max">
     <value val="700"/>
   </parameter>
-  
+
   <!-- Constant that sets the monitor scale -->
   <parameter name="monitor_scale">
     <value val="1000"/>
   </parameter>
-  
+
   <!-- Double-difference mixing parameter (beta) -->
   <parameter name="double_diff_mixing">
     <value val="0.28"/>
   </parameter>
-  
+
   <!-- ======== Normalisation ranges. ========
     These are different depending for the forward/backward scattering banks.
   -->
-  
+
   <!-- Backward Scattering -->
-  
+
   <!-- Sum over lower range   -->
   <parameter name="backward_period_sum1" type="string">
     <value val="300-400"/>
   </parameter>
-  
+
   <!-- Sum over upper range   -->
   <parameter name="backward_period_sum2" type="string">
     <value val="550-600"/>
   </parameter>
-  
+
   <!-- Monitor normalisation -->
   <parameter name="backward_monitor_norm" type="string">
     <value val="600-700"/>
   </parameter>
-  
+
   <!-- Normalisation by foil out -->
   <parameter name="backward_foil_out_norm" type="string">
     <value val="410-430"/>
   </parameter>
-  
+
   <!-- ====================================================== -->
-  
+
   <!-- Forward Scattering -->
   <!-- Sum over lower range   -->
   <parameter name="forward_period_sum1" type="string">
     <value val="100-400"/>
   </parameter>
-  
+
   <!-- Sum over upper range   -->
   <parameter name="forward_period_sum2" type="string">
     <value val="550-600"/>
   </parameter>
-  
+
   <!-- Monitor normalisation -->
   <parameter name="forward_monitor_norm" type="string">
     <value val="600-700"/>
   </parameter>
-  
+
   <!-- Normalisation by foil out -->
   <parameter name="forward_foil_out_norm" type="string">
     <value val="400-450"/>
   </parameter>
-  
+
   <!-- ======== Resolution parameters ========
     Defined at two levels: Instrument level for the common parameters
     then at component level below for the component specific ones
   -->
-  
+
   <!-- Standard deviation of source-sample distribution (metres) -->
   <parameter name="sigma_l1">
     <value val="0.021"/>
   </parameter>
-  
+
   <!-- Standard deviation of sample-detector distribution (metres) -->
   <parameter name="sigma_l2">
     <value val="0.023"/>
   </parameter>
-  
+
+  <!-- Standard deviation of tof measurement (microseconds) -->
+  <parameter name="sigma_tof">
+    <value val="0.3"/>
+  </parameter>
+
   <!-- Standard deviation of detector theta distribution (radians) -->
   <parameter name="sigma_theta">
     <value val="0.028"/>
   </parameter>
-  
+
   <!-- Final energy of neutrons (meV) (Currently common but should it be?) -->
   <parameter name="efixed">
     <value val="4908"/>
@@ -117,7 +122,7 @@
     <value val="24"/>
   </parameter>
 
-  <!-- Gaussian standard deviation of the analyser energy (efixed) (meV) 
+  <!-- Gaussian standard deviation of the analyser energy (efixed) (meV)
        Note that this is not the HWHM but the standard deviation unlike the
        Lorentzian parameter -->
   <parameter name="sigma_gauss">
@@ -132,7 +137,35 @@
     <value val="diffspec" />
   </parameter>
 
-</component-link> 
+  <!-- Monitor workflow parameters -->
+  <parameter name="Workflow.Monitor1-SpectrumNumber" >
+    <value val="0" />
+  </parameter>
+
+  <!-- Area, thickness, attenuation and scale factor taken from TOSCA. -->
+  <!-- By lack of actual data and the fact the monitors would have been installed at -->
+  <!-- a similar time this is a reasonable guess. -->
+  <parameter name="Workflow.Monitor1-Area" >
+    <value val="5.391011e-5" />
+  </parameter>
+
+  <parameter name="Workflow.Monitor1-Thickness" >
+    <value val="0.013" />
+  </parameter>
+
+  <parameter name="Workflow.Monitor1-Attenuation" >
+    <value val="8.3" />
+  </parameter>
+
+  <parameter name="Workflow.Monitor1-ScalingFactor">
+    <value val="1e9" />
+  </parameter>
+
+  <parameter name="Workflow.NamingConvention" type="string">
+    <value val="AnalyserReflection" />
+  </parameter>
+
+</component-link>
 <!-- End VESUVIO link -->
 
 <!-- ======================= Energy widths for foils ================================= -->
@@ -143,7 +176,7 @@
     <value val="144"/>
   </parameter>
 
-  <!-- Gaussian standard deviation of the foil energy (meV) 
+  <!-- Gaussian standard deviation of the foil energy (meV)
        Note that this is not the HWHM but the standard deviation unlike the
        Lorentzian parameter -->
   <parameter name="sigma_gauss">
@@ -156,8 +189,8 @@
   <parameter name="hwhm_lorentz">
     <value val="144"/>
   </parameter>
-  
-  <!-- Gaussian standard deviation of the foil energy (meV) 
+
+  <!-- Gaussian standard deviation of the foil energy (meV)
        Note that this is not the HWHM but the standard deviation unlike the
        Lorentzian parameter -->
   <parameter name="sigma_gauss">
diff --git a/Code/Mantid/instrument/nexusdictionaries/poldi.dic b/Code/Mantid/instrument/nexusdictionaries/poldi.dic
index 83d5264521142e669095b9f825f09faa902fbfcb..d54f592483a7b8c3f1329ebb55fc4b64eb3d4d74 100644
--- a/Code/Mantid/instrument/nexusdictionaries/poldi.dic
+++ b/Code/Mantid/instrument/nexusdictionaries/poldi.dic
@@ -49,6 +49,10 @@ Diaphragme2plus0=/entry1/POLDI/diaphragm2/zplus_zero
 ChopperName=/entry1/POLDI/chopper/name
 ChopperPhase=/entry1/POLDI/chopper/chopper_phase
 ChopperSpeed=/entry1/POLDI/chopper/rotation_speed
+
+# There seems to be an issue with this field in some data files.
+# Once this is fixed, it can be reactivated.
+#ChopperSpeedTarget=/entry1/POLDI/chopper/rotation_speed_target
 #
 SampleName=/entry1/POLDI/name
 #
diff --git a/Code/Mantid/scripts/Inelastic/IndirectDataAnalysis.py b/Code/Mantid/scripts/Inelastic/IndirectDataAnalysis.py
index 81302bd4c2ea66fd9362f5c7fdc85e717c7a9b17..dd3e5fec2d941affa1080669d664acc9b80fb718 100644
--- a/Code/Mantid/scripts/Inelastic/IndirectDataAnalysis.py
+++ b/Code/Mantid/scripts/Inelastic/IndirectDataAnalysis.py
@@ -74,7 +74,7 @@ def calculateEISF(params_table):
 
 ##############################################################################
 
-def confitSeq(inputWS, func, startX, endX, ftype, bgd, temperature=None, specMin=0, specMax=None, Verbose=False, Plot='None', Save=False):
+def confitSeq(inputWS, func, startX, endX, ftype, bgd, temperature=None, specMin=0, specMax=None, convolve=True, Verbose=False, Plot='None', Save=False):
     StartTime('ConvFit')
 
     bgd = bgd[:-2]
@@ -105,7 +105,7 @@ def confitSeq(inputWS, func, startX, endX, ftype, bgd, temperature=None, specMin
                        OutputWorkspace=output_workspace, Function=func,
                        StartX=startX, EndX=endX, FitType='Sequential',
                        CreateOutput=True, OutputCompositeMembers=True,
-                       ConvolveMembers=True)
+                       ConvolveMembers=convolve)
 
     DeleteWorkspace(output_workspace + '_NormalisedCovarianceMatrices')
     DeleteWorkspace(output_workspace + '_Parameters')
@@ -122,6 +122,7 @@ def confitSeq(inputWS, func, startX, endX, ftype, bgd, temperature=None, specMin
     axis.setUnit("MomentumTransfer")
 
     CopyLogs(InputWorkspace=inputWS, OutputWorkspace=wsname)
+    AddSampleLog(Workspace=wsname, LogName='convolve_members', LogType='String', LogText=str(convolve))
     AddSampleLog(Workspace=wsname, LogName="fit_program", LogType="String", LogText='ConvFit')
     AddSampleLog(Workspace=wsname, LogName='background', LogType='String', LogText=str(bgd))
     AddSampleLog(Workspace=wsname, LogName='delta_function', LogType='String', LogText=str(using_delta_func))
diff --git a/Code/Mantid/scripts/Inelastic/IndirectDiffractionReduction.py b/Code/Mantid/scripts/Inelastic/IndirectDiffractionReduction.py
index fafc71c22180fbc7e5dedf17e2b6dcf864c3d967..f41533106ec1d3b1e82980bd7bb120bdb46e45ab 100644
--- a/Code/Mantid/scripts/Inelastic/IndirectDiffractionReduction.py
+++ b/Code/Mantid/scripts/Inelastic/IndirectDiffractionReduction.py
@@ -2,12 +2,14 @@ import mantid
 from msg_reducer import MSGReducer
 import inelastic_indirect_reduction_steps as steps
 
+
 class MSGDiffractionReducer(MSGReducer):
     """Reducer for Diffraction on IRIS and TOSCA.
     """
 
     def __init__(self):
         super(MSGDiffractionReducer, self).__init__()
+        self._grouping_policy = 'All'
 
     def _setup_steps(self):
         self.append_step(steps.IdentifyBadDetectors(
@@ -36,11 +38,11 @@ class MSGDiffractionReducer(MSGReducer):
             self.append_step(steps.RebinToFirstSpectrum())
 
         step = steps.Grouping()
-        step.set_grouping_policy("All")
+        step.set_grouping_policy(self._grouping_policy)
         self.append_step(step)
 
         # The "SaveItem" step saves the files in the requested formats.
-        if (len(self._save_formats) > 0):
+        if len(self._save_formats) > 0:
             step = steps.SaveItem()
             step.set_formats(self._save_formats)
             self.append_step(step)
@@ -48,6 +50,17 @@ class MSGDiffractionReducer(MSGReducer):
         step = steps.Naming()
         self.append_step(step)
 
+    def set_grouping_policy(self, policy):
+        """
+        Sets the grouping policy for the result data.
+
+        @parm policy New grouping policy
+        """
+        if not isinstance(policy, str):
+            raise ValueError('Grouping policy must be a string')
+
+        self._grouping_policy = policy
+
 
 def getStringProperty(workspace, property):
     """This function is used in the interface.
diff --git a/Code/Mantid/scripts/Inelastic/IndirectEnergyConversion.py b/Code/Mantid/scripts/Inelastic/IndirectEnergyConversion.py
index a9fc9ba47ffe2a68b52676aa04b1dfd82a9afdc7..c295b1c277de844dea8f63e2d579dd2ac7700201 100644
--- a/Code/Mantid/scripts/Inelastic/IndirectEnergyConversion.py
+++ b/Code/Mantid/scripts/Inelastic/IndirectEnergyConversion.py
@@ -32,48 +32,23 @@ def loadData(rawfiles, outWS='RawFile', Sum=False, SpecMin=-1, SpecMax=-1,
     else:
         return workspaces
 
-def resolution(files, iconOpt, rebinParam, bground,
-        instrument, analyser, reflection,
-        Res=True, factor=None, Plot=False, Verbose=False, Save=False):
-    reducer = inelastic_indirect_reducer.IndirectReducer()
-    reducer.set_instrument_name(instrument)
-    reducer.set_detector_range(iconOpt['first']-1,iconOpt['last']-1)
-    for file in files:
-        reducer.append_data_file(file)
-    parfile = instrument +"_"+ analyser +"_"+ reflection +"_Parameters.xml"
-    reducer.set_parameter_file(parfile)
-    reducer.set_grouping_policy('All')
-    reducer.set_sum_files(True)
-
-    try:
-        reducer.reduce()
-    except Exception, e:
-        logger.error(str(e))
-        return
-
-    iconWS = reducer.get_result_workspaces()[0]
-
-    if factor != None:
-        Scale(InputWorkspace=iconWS, OutputWorkspace=iconWS, Factor = factor)
-
-    if Res:
-        name = getWSprefix(iconWS) + 'res'
-        CalculateFlatBackground(InputWorkspace=iconWS, OutputWorkspace=name, StartX=bground[0], EndX=bground[1],
-            Mode='Mean', OutputMode='Subtract Background')
-        Rebin(InputWorkspace=name, OutputWorkspace=name, Params=rebinParam)
-
-        if Save:
-            if Verbose:
-                logger.notice("Resolution file saved to default save directory.")
-            SaveNexusProcessed(InputWorkspace=name, Filename=name+'.nxs')
-
-        if Plot:
-            graph = mp.plotSpectrum(name, 0)
-        return name
-    else:
-        if Plot:
-            graph = mp.plotSpectrum(iconWS, 0)
-        return iconWS
+def createMappingFile(groupFile, ngroup, nspec, first):
+    if ( ngroup == 1 ): return 'All'
+    if ( nspec == 1 ): return 'Individual'
+    filename = config['defaultsave.directory']
+    filename = os.path.join(filename, groupFile)
+    handle = open(filename, 'w')
+    handle.write(str(ngroup) +  "\n" )
+    for n in range(0, ngroup):
+        n1 = n * nspec + first
+        handle.write(str(n+1) +  '\n' )
+        handle.write(str(nspec) +  '\n')
+        for i in range(1, nspec+1):
+            n3 = n1 + i - 1
+            handle.write(str(n3).center(4) + ' ')
+        handle.write('\n')
+    handle.close()
+    return filename
 
 
 def getInstrumentDetails(instrument):
diff --git a/Code/Mantid/scripts/Inelastic/IndirectMolDyn.py b/Code/Mantid/scripts/Inelastic/IndirectMolDyn.py
deleted file mode 100644
index 3b9485f8dea23c25217b76636ef131526d5467ba..0000000000000000000000000000000000000000
--- a/Code/Mantid/scripts/Inelastic/IndirectMolDyn.py
+++ /dev/null
@@ -1,328 +0,0 @@
-#Force for ILL backscattering raw
-#
-from IndirectImport import *
-from mantid.simpleapi import *
-from mantid import config, logger, mtd
-from mantid.kernel import V3D
-import sys, math, os.path, numpy as np
-from IndirectCommon import StartTime, EndTime, ExtractFloat, ExtractInt
-from IndirectNeutron import ChangeAngles, InstrParas, RunParas
-mp = import_mantidplot()
-
-#  Routines for Ascii file of MolDyn data
-
-def SplitLine(a):
-    elements = a.split()							#split line on character
-    extracted = []
-    for n in elements:
-    	extracted.append(float(n))
-    return extracted                                 #values as list
-
-def FindDimensions(a,Verbose):
-    ldim = FindStarts(a,'dimensions',0)
-    lQ = FindTabStarts(a,'NQVALUES',0)
-    lT = FindTabStarts(a,'NTIMES',0)
-    lF = FindTabStarts(a,'NFREQUENCIES',0)
-    Qel = a[lQ].split()
-    nQ = int(Qel[2])
-    Tel = a[lT].split()
-    nT = int(Tel[2])
-    Fel = a[lF].split()
-    nF = int(Tel[2])
-    if Verbose:
-    	logger.notice(a[2][1:-1])
-    	logger.notice(a[3][1:-1])
-    	logger.notice(a[6][1:-1])
-    return nQ,nT,nF
-
-def FindStarts(asc,c,l1):
-    for l in range(l1,len(asc)):
-    	char = asc[l]
-    	if char.startswith(c):
-    		line = l
-    		break
-    return line
-
-def FindTabStarts(asc,c,l1):
-    for l in range(l1,len(asc)):
-    	char = asc[l][1:]
-    	if char.startswith(c):
-    		line = l
-    		break
-    return line
-
-def FindEnds(asc,c,l1):
-    for l in range(l1,len(asc)):
-    	char = asc[l]
-    	if char.endswith(c):
-    		line = l
-    		break
-    return line
-
-def FindChar(asc,c,l1):
-    for l in range(l1,len(asc)):
-    	char = asc[l]
-    	if char.find(c):
-    		line = l
-    		break
-    return line
-
-def MakeList(a,l1,l2):
-    asc = ''
-    for m in range(l1,l2+1):
-    	asc += a[m]
-    	alist = asc.split(',')
-    return alist
-
-# Load an dat/cdl file
-def loadFile(path):
-    try:
-    	handle = open(path, 'r')
-    	asc = []
-    	for line in handle:
-    		line = line.rstrip()
-    		asc.append(line)
-    	handle.close()
-
-    	return asc
-    except:
-    	error = 'ERROR *** Could not load ' + path
-    	sys.exit(error)
-
-def MolDynImport(fname,functions,Verbose,Plot,Save):      #Ascii start routine
-    StartTime('MolDynImport')
-    workdir = config['defaultsave.directory']
-
-    #seperate functions string and strip whitespace
-    functions = [x.strip() for x in functions.split(',')]
-
-    path = fname
-    base = os.path.basename(path)
-    fname = os.path.splitext(base)[0]
-
-    if(not os.path.isfile(path)):
-    	path = FileFinder.getFullPath(path)
-
-    if Verbose:
-    	logger.notice('Functions : '+str(functions))
-    	logger.notice('Reading file : ' + path)
-
-    asc = loadFile(path)
-    lasc = len(asc)
-
-# raw head
-    nQ,nT,nF = FindDimensions(asc,Verbose)
-    ldata = FindStarts(asc,'data:',0)
-    lq1 = FindStarts(asc,' q =',ldata)       #start Q values
-    lq2 = FindStarts(asc,' q =',lq1-1)
-    Qlist = MakeList(asc,lq1,lq2)
-    if nQ != len(Qlist):
-    	error = 'ERROR *** reading Q values'
-    	logger.notice(error)
-    	sys.exit(error)
-    Qf = Qlist[0].split()
-    Q = [float(Qf[2])/10.0]
-    for m in range(1,nQ-1):
-    	Q.append(float(Qlist[m])/10.0)
-    Q.append(float(Qlist[nQ-1][:-1])/10.0)
-    if Verbose:
-    	logger.notice('Q values = '+str(Q))
-    lt1 = FindStarts(asc,' time =',lq2)       #start T values
-    lt2 = FindEnds(asc,';',lt1)
-    Tlist = MakeList(asc,lt1,lt2)
-    if nT != len(Tlist):
-    	error = 'ERROR *** reading Time values'
-    	logger.notice(error)
-    	sys.exit(error)
-    Tf = Tlist[0].split()
-    T = [float(Tf[2])]
-    for m in range(1,nT-1):
-    	T.append(float(Tlist[m]))
-    T.append(float(Tlist[nT-1][:-1]))
-    T.append(2*T[nT-1]-T[nT-2])
-    if Verbose:
-    	logger.notice('T values = '+str(T[:2])+' to '+str(T[-3:]))
-    lf1 = FindStarts(asc,' frequency =',lq2)       #start F values
-    lf2 = FindEnds(asc,';',lf1)
-    Flist = MakeList(asc,lf1,lf2)
-    if nF != len(Flist):
-    	error = 'ERROR *** reading Freq values'
-    	logger.notice(error)
-    	sys.exit(error)
-    Ff = Flist[0].split()
-    F = [float(Ff[2])]
-    for m in range(1,nF-1):
-    	F.append(float(Flist[m]))
-    F.append(float(Flist[nF-1][:-1]))
-    F.append(2*F[nF-1]-T[nF-2])
-    if Verbose:
-    	logger.notice('F values = '+str(F[:2])+' to '+str(F[-3:]))
-# Function
-    for func in functions:
-    	start = []
-    	lstart = lt2
-    	if func[:3] == 'Fqt':
-    		nP = nT
-    		xEn = np.array(T)
-    		eZero = np.zeros(nT)
-    		xUnit = 'TOF'
-    	elif func[:3] == 'Sqw':
-    		nP = nF
-    		xEn = np.array(F)
-    		eZero = np.zeros(nF)
-    		xUnit = 'Energy'
-    	else:
-    		error = "ERROR *** Failed to parse function string " + func
-    		sys.exit(error)
-
-    	for n in range(0,nQ):
-    		for m in range(lstart,lasc):
-    			char = asc[m]
-    			if char.startswith('  // '+func):
-    				start.append(m)
-    				lstart = m+1
-    	lend = FindEnds(asc,';',lstart)
-    	start.append(lend+1)
-
-    	#Throw error if we couldn't find the function
-    	if(len(start) < 2):
-    		error = "ERROR *** Failed to parse function string " + func
-    		sys.exit(error)
-
-#    logger.notice('Start lines : '+str(start))
-    	Qaxis = ''
-    	for n in range(0,nQ):
-    		if Verbose:
-    			print start
-    			logger.notice('Reading : '+asc[start[n]])
-    		Slist = MakeList(asc,start[n]+1,start[n+1]-1)
-    		if n == nQ-1:
-    			Slist[nP-1] = Slist[nP-1][:-1]
-    		S = []
-    		for m in range(0,nP):
-    			S.append(float(Slist[m]))
-    		if nP != len(S):
-    			error = 'ERROR *** reading S values'
-    			logger.notice(error)
-    			sys.exit(error)
-    		else:
-    			if Verbose:
-    				logger.notice('S values = '+str(S[:2])+' to '+str(S[-2:]))
-    		if n == 0:
-    			Qaxis += str(Q[n])
-    			xDat = xEn
-    			yDat = np.array(S)
-    			eDat = eZero
-    		else:
-    			Qaxis += ','+str(Q[n])
-    			xDat = np.append(xDat,xEn)
-    			yDat = np.append(yDat,np.array(S))
-    			eDat = np.append(eDat,eZero)
-    	outWS = fname+'_'+func
-    	CreateWorkspace(OutputWorkspace=outWS, DataX=xDat, DataY=yDat, DataE=eDat,
-    		Nspec=nQ, UnitX=xUnit, VerticalAxisUnit='MomentumTransfer', VerticalAxisValues=Qaxis)
-    	if Save:
-    		opath = os.path.join(workdir,outWS+'.nxs')
-    		SaveNexusProcessed(InputWorkspace=outWS, Filename=opath)
-    		if Verbose:
-    			logger.notice('Output file : ' + opath)
-    	if (Plot != 'None'):
-    		plotMolDyn(outWS,Plot)
-    EndTime('MolDynImport')
-
-def plotMolDyn(inWS,Plot):
-    if (Plot == 'Spectrum' or Plot == 'Both'):
-    	nHist = mtd[inWS].getNumberHistograms()
-    	if nHist > 10 :
-    		nHist = 10
-    	plot_list = []
-    	for i in range(0, nHist):
-    		plot_list.append(i)
-    	res_plot=mp.plotSpectrum(inWS,plot_list)
-    if (Plot == 'Contour' or Plot == 'Both'):
-    	cont_plot=mp.importMatrixWorkspace(inWS).plotGraph2D()
-
-def MolDynText(fname,Verbose,Plot,Save):      #Ascii start routine
-    StartTime('MolDynAscii')
-    workdir = config['defaultsave.directory']
-
-    path = fname
-    base = os.path.basename(path)
-    fname = os.path.splitext(base)[0]
-
-    if(not os.path.isfile(path)):
-    	path = FileFinder.getFullPath(path)
-
-    if Verbose:
-    	logger.notice('Reading file : ' + path)
-
-    asc = loadFile(path)
-    lasc = len(asc)
-
-    val = SplitLine(asc[3])
-    Q = []
-    for n in range(1,len(val)):
-    	Q.append(val[n])
-    nQ = len(Q)
-    x = []
-    y = []
-    for n in range(4,lasc):
-    	val = SplitLine(asc[n])
-    	x.append(val[0])
-    	yval = val[1:]
-    	y.append(yval)
-    nX = len(x)
-    if Verbose:
-    	logger.notice('nQ = '+str(nQ))
-    	logger.notice('nT = '+str(nX))
-    xT = np.array(x)
-    eZero = np.zeros(nX)
-    Qaxis = ''
-    for m in range(0,nQ):
-    	if Verbose:
-    		logger.notice('Q['+str(m+1)+'] : '+str(Q[m]))
-    	S = []
-    	for n in range(0,nX):
-    		S.append(y[n][m])
-    	if m == 0:
-    		Qaxis += str(Q[m])
-    		xDat = xT
-    		yDat = np.array(S)
-    		eDat = eZero
-    	else:
-    		Qaxis += ','+str(Q[m])
-    		xDat = np.append(xDat,xT)
-    		yDat = np.append(yDat,np.array(S))
-    		eDat = np.append(eDat,eZero)
-    outWS = fname + '_iqt'
-    CreateWorkspace(OutputWorkspace=outWS, DataX=xDat, DataY=yDat, DataE=eDat,
-    	Nspec=nQ, UnitX='TOF')
-#    	Nspec=nQ, UnitX='TOF', VerticalAxisUnit='MomentumTransfer', VerticalAxisValues=Qaxis)
-    Qmax = Q[nQ-1]
-    instr = 'MolDyn'
-    ana = 'qmax'
-    if Qmax <= 2.0:
-    	refl = '2'
-    else:
-    	refl = '4'
-    InstrParas(outWS,instr,ana,refl)
-    efixed = RunParas(outWS,instr,fname,fname,Verbose)
-    if Verbose:
-    	logger.notice('Qmax = '+str(Qmax)+' ; efixed = '+str(efixed))
-    pi4 = 4.0*math.pi
-    wave=1.8*math.sqrt(25.2429/efixed)
-    theta = []
-    for n in range(0,nQ):
-    	qw = wave*Q[n]/pi4
-    	ang = 2.0*math.degrees(math.asin(qw))
-    	theta.append(ang)
-    ChangeAngles(outWS,instr,theta,Verbose)
-    if Save:
-    	opath = os.path.join(workdir,outWS+'.nxs')
-    	SaveNexusProcessed(InputWorkspace=outWS, Filename=opath)
-    	if Verbose:
-    		logger.notice('Output file : ' + opath)
-    if (Plot != 'None'):
-    	plotMolDyn(outWS,Plot)
-    EndTime('MolDynAscii')
-
diff --git a/Code/Mantid/scripts/Inelastic/IndirectSymm.py b/Code/Mantid/scripts/Inelastic/IndirectSymm.py
deleted file mode 100644
index 5405b44a42bf26c921a133f2df9e6760083fa69f..0000000000000000000000000000000000000000
--- a/Code/Mantid/scripts/Inelastic/IndirectSymm.py
+++ /dev/null
@@ -1,98 +0,0 @@
-# SYMMetrise
-#
-from mantid.simpleapi import *
-from mantid import config, logger, mtd
-from IndirectCommon import *
-from IndirectImport import import_mantidplot
-import sys, platform, math, os.path, numpy as np
-mp = import_mantidplot()
-
-def SymmRun(sample,cut,Verbose,Plot,Save):
-    workdir = config['defaultsave.directory']
-    symWS = sample[:-3] + 'sym'
-    hist,npt = CheckHistZero(sample)
-    Xin = mtd[sample].readX(0)
-    delx = Xin[1]-Xin[0]
-    if math.fabs(cut) < 1e-5:
-    	error = 'Cut point is Zero'
-    	logger.notice('ERROR *** ' + error)
-    	sys.exit(error)
-    for n in range(0,npt):
-    	x = Xin[n]-cut
-    	if math.fabs(x) < delx:
-    		ineg = n
-    if ineg <= 0:
-    	error = 'Negative point('+str(ineg)+') < 0'
-    	logger.notice('ERROR *** ' + error)
-    	sys.exit(error)
-    if ineg >= npt:
-    	error = type + 'Negative point('+str(ineg)+') > '+str(npt)
-    	logger.notice('ERROR *** ' + error)
-    	sys.exit(error)
-    for n in range(0,npt):
-    	x = Xin[n]+Xin[ineg]
-    	if math.fabs(x) < delx:
-    		ipos = n
-    if ipos <= 0:
-    	error = 'Positive point('+str(ipos)+') < 0'
-    	logger.notice('ERROR *** ' + error)
-    	sys.exit(error)
-    if ipos >= npt:
-    	error = type + 'Positive point('+str(ipos)+') > '+str(npt)
-    	logger.notice('ERROR *** ' + error)
-    	sys.exit(error)
-    ncut = npt-ipos+1
-    if Verbose:
-    	logger.notice('No. points = '+str(npt))
-    	logger.notice('Negative : at i ='+str(ineg)+' ; x = '+str(Xin[ineg]))
-    	logger.notice('Positive : at i ='+str(ipos)+' ; x = '+str(Xin[ipos]))
-    	logger.notice('Copy points = '+str(ncut))
-    for m in range(0,hist):
-    	Xin = mtd[sample].readX(m)
-    	Yin = mtd[sample].readY(m)
-    	Ein = mtd[sample].readE(m)
-    	Xout = []
-    	Yout = []
-    	Eout = []
-    	for n in range(0,ncut):
-    		icut = npt-n-1
-    		Xout.append(-Xin[icut])
-    		Yout.append(Yin[icut])
-    		Eout.append(Ein[icut])
-    	for n in range(ncut,npt):
-    		Xout.append(Xin[n])
-    		Yout.append(Yin[n])
-    		Eout.append(Ein[n])
-    	if m == 0:
-    		CreateWorkspace(OutputWorkspace=symWS, DataX=Xout, DataY=Yout, DataE=Eout,
-    			Nspec=1, UnitX='DeltaE')
-    	else:
-    		CreateWorkspace(OutputWorkspace='__tmp', DataX=Xout, DataY=Yout, DataE=Eout,
-    			Nspec=1, UnitX='DeltaE')
-    		ConjoinWorkspaces(InputWorkspace1=symWS, InputWorkspace2='__tmp',CheckOverlapping=False)
-#    	Nspec=nt, UnitX='MomentumTransfer', VerticalAxisUnit='Text', VerticalAxisValues='Taxis')
-# start output
-    if Save:
-    	path = os.path.join(workdir,symWS+'.nxs')
-    	SaveNexusProcessed(InputWorkspace=symWS, Filename=path)
-    	if Verbose:
-    		logger.notice('Output file : ' + path)
-    if Plot:
-    	plotSymm(symWS,sample)
-
-def SymmStart(inType,sname,cut,Verbose,Plot,Save):
-    StartTime('Symmetrise')
-    workdir = config['defaultsave.directory']
-    if inType == 'File':
-    	spath = os.path.join(workdir, sname+'.nxs')		# path name for sample nxs file
-    	LoadNexusProcessed(FileName=spath, OutputWorkspace=sname)
-    	message = 'Input from File : '+spath
-    else:
-    	message = 'Input from Workspace : '+sname
-    if Verbose:
-    	logger.notice(message)
-    SymmRun(sname,cut,Verbose,Plot,Save)
-    EndTime('Symmetrise')
-
-def plotSymm(sym,sample):
-    tot_plot=mp.plotSpectrum([sym,sample],0)
diff --git a/Code/Mantid/scripts/Inelastic/dgreduce.py b/Code/Mantid/scripts/Inelastic/dgreduce.py
index fed605942091eda6a0b2a3854b85ac8a85376aa9..df35acd037bc338f513e796bafa609b63921134f 100644
--- a/Code/Mantid/scripts/Inelastic/dgreduce.py
+++ b/Code/Mantid/scripts/Inelastic/dgreduce.py
@@ -45,7 +45,7 @@ def setup(instname=None,reload=False):
 def help(keyword=None) :
     """function returns help on reduction parameters.
 
-       Returns the list of the parameters availible if provided without arguments
+       Returns the list of the parameters available if provided without arguments
        or the description and the default value for the key requested
     """
     if Reducer == None:
@@ -54,7 +54,7 @@ def help(keyword=None) :
     Reducer.help(keyword)
 
 
-def arb_units(wb_run,sample_run,ei_guess,rebin,map_file='default',monovan_run=None,**kwargs):
+def arb_units(wb_run,sample_run,ei_guess,rebin,map_file='default',monovan_run=None,second_wb=None,**kwargs):
     """ One step conversion of run into workspace containing information about energy transfer
     Usage:
     >>arb_units(wb_run,sample_run,ei_guess,rebin)
@@ -190,7 +190,10 @@ def arb_units(wb_run,sample_run,ei_guess,rebin,map_file='default',monovan_run=No
          wb_for_monovanadium = kwargs['wb_for_monovanadium']
          del kwargs['wb_for_monovanadium']
     else:
-         wb_for_monovanadium = wb_run;
+        if second_wb is None:
+             wb_for_monovanadium = wb_run;
+        else:
+             wb_for_monovanadium = second_wb;
 
 
 
@@ -256,7 +259,7 @@ def arb_units(wb_run,sample_run,ei_guess,rebin,map_file='default',monovan_run=No
         #this sums the runs together before passing the summed file to the rest of the reduction
         #this circumvents the inbuilt method of summing which fails to sum the files for diag
 
-        #the D.E.C. tries to be too clever so we have to fool it into thinking the raw file is already exists as a workpsace
+        #the D.E.C. tries to be too clever so we have to fool it into thinking the raw file is already exists as a workspace
         sumfilename=Reducer.instr_name+str(sample_run[0])+'.raw'
         sample_run =sum_files(Reducer.instr_name,sumfilename, sample_run)
         common.apply_calibration(Reducer.instr_name,sample_run,Reducer.det_cal_file)
@@ -291,7 +294,7 @@ def arb_units(wb_run,sample_run,ei_guess,rebin,map_file='default',monovan_run=No
     if not   masks_done:
         print '########### Run diagnose for sample run ##############################'
         masking = Reducer.diagnose(wb_run,sample = mask_run,
-                                    second_white = None,print_results=True)
+                                    second_white=None,print_results=True)
         header = "Diag Processed workspace with {0:d} spectra and masked {1:d} bad spectra"
 
 
@@ -329,7 +332,7 @@ def arb_units(wb_run,sample_run,ei_guess,rebin,map_file='default',monovan_run=No
 
     # calculate absolute units integral and apply it to the workspace
     if monovan_run != None or Reducer.mono_correction_factor != None :
-        deltaE_wkspace_sample = apply_absolute_normalization(Reducer,deltaE_wkspace_sample,monovan_run,ei_guess,wb_run)
+        deltaE_wkspace_sample = apply_absolute_normalization(Reducer,deltaE_wkspace_sample,monovan_run,ei_guess,wb_for_monovanadium)
         # Hack for multirep
         #if isinstance(monovan_run,int):
         #    filename = common.find_file(monovan_run)
@@ -412,7 +415,7 @@ def abs_units(wb_for_run,sample_run,monovan_run,wb_for_monovanadium,samp_rmm,sam
     variation       -The number of medians the ratio of the first/second white beam can deviate from
                     the average by (default=1.1)
     bleed_test      - If true then the CreatePSDBleedMask algorithm is run
-    bleed_maxrate   - If the bleed test is on then this is the maximum framerate allowed in a tube
+    bleed_maxrate   - If the bleed test is on then this is the maximum frame rate allowed in a tube
     bleed_pixels    - If the bleed test is on then this is the number of pixels ignored within the
                     bleed test diagnostic
     print_results - If True then the results are printed to the screen
@@ -438,11 +441,10 @@ def abs_units(wb_for_run,sample_run,monovan_run,wb_for_monovanadium,samp_rmm,sam
 
     abs_units_van_range=[-40,40] integral range for absolute vanadium data
 
-    mono_correction_factor=float User specified correction factor for absolute units normalisation
+    mono_correction_factor=float User specified correction factor for absolute units normalization
     """
 
     kwargs['monovan_mapfile']    = monovan_mapfile
-    kwargs['wb_for_monovanadium']= wb_for_monovanadium
     kwargs['sample_mass']        = samp_mass
     kwargs['sample_rmm']         = samp_rmm
 
@@ -462,7 +464,7 @@ def abs_units(wb_for_run,sample_run,monovan_run,wb_for_monovanadium,samp_rmm,sam
 
 
     results_name = wksp_out
-    wksp_out = arb_units(wb_for_run,sample_run,ei_guess,rebin,map_file,monovan_run,**kwargs)
+    wksp_out = arb_units(wb_for_run,sample_run,ei_guess,rebin,map_file,monovan_run,wb_for_monovanadium,**kwargs)
 
 
     if  results_name != wksp_out.getName():
@@ -522,7 +524,7 @@ def apply_absolute_normalization(Reducer,deltaE_wkspace_sample,monovan_run,ei_gu
 
 def process_legacy_parameters(**kwargs) :
     """ The method to deal with old parameters which have logi c different from default and easy to process using
-        subprogram. All other parameters just copiet to output
+        subprogram. All other parameters just copied to output
     """
     params = dict();
     for key,value in kwargs.iteritems():
@@ -568,7 +570,7 @@ def get_abs_normalization_factor(Reducer,deltaE_wkspaceName,ei_monovan) :
      are different and accounted for by dividing each MV value by corresponding WBV value,
      the signal on a detector has poison distribution and the error for a detector is the square
      root of correspondent signal on a detector.
-     Error for WBV considered negligebly small wrt the error on MV
+     Error for WBV considered negligibly small wrt. the error on MV
     """
 
     van_mass=Reducer.van_mass;
@@ -627,7 +629,7 @@ def get_abs_normalization_factor(Reducer,deltaE_wkspaceName,ei_monovan) :
         weight      = err_sq/signal
         signal3_sum += err_sq
         weight3_sum += weight
-        # Guess which estimatnes value sum(n_i^2/Sigma_i^2)/sum(n_i/Sigma_i^2) TGP suggestion from 12-2012
+        # Guess which estimates value sum(n_i^2/Sigma_i^2)/sum(n_i/Sigma_i^2) TGP suggestion from 12-2012
         signal4_sum += signal*signal/err_sq
         weight4_sum += signal/err_sq
 
@@ -638,7 +640,7 @@ def get_abs_normalization_factor(Reducer,deltaE_wkspaceName,ei_monovan) :
    #---------------- Loop finished
 
     if( weight1_sum==0.0 or weight2_sum == 0.0 or weight3_sum == 0.0 or weight4_sum == 0.0) :
-        print "WB integral has been calculated incorrectrly, look at van_int workspace in the input workspace: ",deltaE_wkspaceName
+        print "WB integral has been calculated incorrectly, look at van_int workspace in the input workspace: ",deltaE_wkspaceName
         raise IOError(" divided by 0 weight")
 
     integral_monovanLibISIS=signal1_sum / weight1_sum
@@ -693,7 +695,7 @@ def get_abs_normalization_factor(Reducer,deltaE_wkspaceName,ei_monovan) :
 def sum_files(inst_name, accumulator, files):
     """ Custom sum for multiple runs
 
-        Left for compartibility as internal summation had some unspecified problems.
+        Left for compatibility as internal summation had some unspecified problems.
         Will go in a future
     """
     accum_name = accumulator
diff --git a/Code/Mantid/scripts/Inelastic/inelastic_indirect_reduction_steps.py b/Code/Mantid/scripts/Inelastic/inelastic_indirect_reduction_steps.py
index b1afb5f180237da17d93997991a18dab2a84a2f1..6a663d354eec19f7075dda5cce469128039830b9 100644
--- a/Code/Mantid/scripts/Inelastic/inelastic_indirect_reduction_steps.py
+++ b/Code/Mantid/scripts/Inelastic/inelastic_indirect_reduction_steps.py
@@ -164,7 +164,6 @@ class LoadData(ReductionStep):
     def _load_data(self, filename, output_ws):
         if self._parameter_file is not None and "VESUVIO" in self._parameter_file:
             loaded_ws = LoadVesuvio(Filename=filename, OutputWorkspace=output_ws, SpectrumList="1-198", **self._extra_load_opts)
-            loader_name = "LoadVesuvio"
         else:
             # loaded_ws = Load(Filename=filename, OutputWorkspace=output_ws, LoadLogFiles=False, **self._extra_load_opts)
             if self._load_logs == True:
diff --git a/Code/Mantid/scripts/Inelastic/msg_reducer.py b/Code/Mantid/scripts/Inelastic/msg_reducer.py
index 825a528f42ade5a789ebbc647c90b64a93c3b847..2f06d44cee444621bb9fcb1d53bfc1d5dfc76211 100644
--- a/Code/Mantid/scripts/Inelastic/msg_reducer.py
+++ b/Code/Mantid/scripts/Inelastic/msg_reducer.py
@@ -107,8 +107,11 @@ class MSGReducer(reducer.Reducer):
         Note: This is *not* the base parameter file, ie "IRIS_Parameters.xml"
         but, rather, the additional parameter file.
         """
-        self._parameter_file = \
-            os.path.join(config["parameterDefinition.directory"], file_name)
+        self._parameter_file = file_name
+        for directory in config.getInstrumentDirectories():
+            if os.path.isfile(os.path.join(directory, file_name)):
+                self._parameter_file = os.path.join(directory, file_name)
+                return 
 
     def set_rebin_string(self, rebin):
         """Sets the rebin string to be used with the Rebin algorithm.
diff --git a/Code/Mantid/scripts/Interface/reduction_gui/reduction/sans/hfir_options_script.py b/Code/Mantid/scripts/Interface/reduction_gui/reduction/sans/hfir_options_script.py
index 2e417b07acb14ae4133b56721af9693ca0715969..32ad19dd277886ae81abd611bfec37149ab09aa5 100644
--- a/Code/Mantid/scripts/Interface/reduction_gui/reduction/sans/hfir_options_script.py
+++ b/Code/Mantid/scripts/Interface/reduction_gui/reduction/sans/hfir_options_script.py
@@ -38,6 +38,9 @@ class ReductionOptions(BaseScriptElement):
     n_q_bins = 100
     n_sub_pix = 1
     log_binning = False
+    
+    # Mask side
+    masked_side = None
 
     # Masking
     class RectangleMask(object):
@@ -116,6 +119,9 @@ class ReductionOptions(BaseScriptElement):
         script += "IQxQy(nbins=%g)\n" % self.n_q_bins
 
         # Mask
+        #   Detector plane
+        if self.masked_side is not None:
+            script += "MaskDetectorSide('%s')\n" % str(self.masked_side)
         #   Edges
         if (self.top != 0 or self.bottom != 0 or self.left != 0 or self.right != 0):
             script += "Mask(nx_low=%d, nx_high=%d, ny_low=%d, ny_high=%d)\n" % (self.left, self.right, self.bottom, self.top)
@@ -182,6 +188,8 @@ class ReductionOptions(BaseScriptElement):
         xml += "  <mask_bottom>%g</mask_bottom>\n" % self.bottom
         xml += "  <mask_left>%g</mask_left>\n" % self.left
         xml += "  <mask_right>%g</mask_right>\n" % self.right
+        
+        xml += "  <mask_side>%s</mask_side>\n" % str(self.masked_side)
 
         xml += "  <Shapes>\n"
         for item in self.shapes:
@@ -265,6 +273,8 @@ class ReductionOptions(BaseScriptElement):
             self.right = BaseScriptElement.getIntElement(mask_dom, "mask_right", default=ReductionOptions.right)
             self.left = BaseScriptElement.getIntElement(mask_dom, "mask_left", default=ReductionOptions.left)
 
+            self.masked_side = BaseScriptElement.getStringElement(mask_dom, "mask_side", default=ReductionOptions.masked_side)
+
             self.shapes = []
             shapes_dom_list = mask_dom.getElementsByTagName("Shapes")
             if len(shapes_dom_list)>0:
@@ -409,6 +419,7 @@ class ReductionOptions(BaseScriptElement):
         self.detector_ids = []
         self.mask_file = ''
         self.use_mask_file = ReductionOptions.use_mask_file
+        self.masked_side = None
 
         self.use_data_directory = ReductionOptions.use_data_directory
         self.output_directory = ReductionOptions.output_directory
diff --git a/Code/Mantid/scripts/Interface/reduction_gui/widgets/reflectometer/base_ref_reduction.py b/Code/Mantid/scripts/Interface/reduction_gui/widgets/reflectometer/base_ref_reduction.py
index 2fbdd9a26918b42618c1da8cf5572ab145d4141a..f8105395e8d8f4c27c784b0d6632056e8d80c833 100644
--- a/Code/Mantid/scripts/Interface/reduction_gui/widgets/reflectometer/base_ref_reduction.py
+++ b/Code/Mantid/scripts/Interface/reduction_gui/widgets/reflectometer/base_ref_reduction.py
@@ -973,7 +973,7 @@ class BaseRefWidget(BaseWidget):
             For REFM, this is X
             For REFL, this is Y
         """
-
+        
 #        run_number = self._summary.data_run_number_edit.text()
 #        f = FileFinder.findRuns("%s%s" % (self.instrument_name, str(run_number)))[0]
 #
@@ -1246,7 +1246,8 @@ class BaseRefWidget(BaseWidget):
                 max_ctrl.setText("%-d" % int(xmax))
 
             # For REFL, Y is high-res
-            is_pixel_y = is_high_res
+
+            is_pixel_y =  is_high_res
             # For REFM it's the other way around
             if self.short_name == "REFM":
                 is_pixel_y = not is_pixel_y
diff --git a/Code/Mantid/scripts/Interface/reduction_gui/widgets/reflectometer/refm_reduction.py b/Code/Mantid/scripts/Interface/reduction_gui/widgets/reflectometer/refm_reduction.py
index ecc838d6552ee25fcb7313a6ca8fd3cdca3391d6..062c0497128a7046eca229fcdabdd7a629813cbd 100644
--- a/Code/Mantid/scripts/Interface/reduction_gui/widgets/reflectometer/refm_reduction.py
+++ b/Code/Mantid/scripts/Interface/reduction_gui/widgets/reflectometer/refm_reduction.py
@@ -973,7 +973,7 @@ class DataReflWidget(BaseWidget):
 
         import mantidqtpython
         self.ref_det_view = mantidqtpython.MantidQt.RefDetectorViewer.RefMatrixWSImageView(ws_output_base_ff+'_2D', peak_min, peak_max, back_min, back_max, tof_min, tof_max)
-        QtCore.QObject.connect(self.ref_det_view.getConnections(), QtCore.SIGNAL("peak_back_tof_range_update(double,double, double,double,double,double)"), self.call_back)
+        QtCore.QObject.connect(self.ref_det_view.getConnections(), QtCore.SIGNAL("peakBackTofRangeUpdate(double,double,double,double,double,double)"), self.call_back)
 
     def call_back(self, peakmin, peakmax, backmin, backmax, tofmin, tofmax):
         self._summary.data_peak_from_pixel.setText("%-d" % int(peakmin))
diff --git a/Code/Mantid/scripts/Interface/reduction_gui/widgets/sans/hfir_instrument.py b/Code/Mantid/scripts/Interface/reduction_gui/widgets/sans/hfir_instrument.py
index 32b5983d9caece1449b96659bc856eb25c17a2e5..4f44d963b0f73f2ae92de94d63dfd67dbafefc7f 100644
--- a/Code/Mantid/scripts/Interface/reduction_gui/widgets/sans/hfir_instrument.py
+++ b/Code/Mantid/scripts/Interface/reduction_gui/widgets/sans/hfir_instrument.py
@@ -138,6 +138,14 @@ class SANSInstrumentWidget(BaseWidget):
         self.connect(self._summary.scale_chk, QtCore.SIGNAL("clicked(bool)"), self._scale_clicked)
         self._scale_clicked(self._summary.scale_chk.isChecked())
 
+        # If we are not in debug/expert mode, hide some advanced options
+        if not self._settings.debug:
+            self._summary.mask_side_layout.deleteLater()
+            self._summary.mask_side_label.hide()
+            self._summary.mask_side_none_radio.hide()
+            self._summary.mask_side_front_radio.hide()
+            self._summary.mask_side_back_radio.hide()
+            
         if not self._in_mantidplot:
             self._summary.dark_plot_button.hide()
             self._summary.scale_data_plot_button.hide()
@@ -340,6 +348,13 @@ class SANSInstrumentWidget(BaseWidget):
         self._mask_checked(state.use_mask_file)
         self._masked_detectors = state.detector_ids
         self.mask_reload = True
+        
+        if state.masked_side == 'Front':
+            self._summary.mask_side_front_radio.setChecked(True)
+        elif state.masked_side == 'Back':
+            self._summary.mask_side_back_radio.setChecked(True)
+        else:
+            self._summary.mask_side_none_radio.setChecked(True)
 
     def _prepare_field(self, is_enabled, stored_value, chk_widget, edit_widget, suppl_value=None, suppl_edit=None):
         #to_display = str(stored_value) if is_enabled else ''
@@ -400,6 +415,14 @@ class SANSInstrumentWidget(BaseWidget):
         m.n_sub_pix = util._check_and_get_int_line_edit(self._summary.n_sub_pix_edit)
         m.log_binning = self._summary.log_binning_radio.isChecked()
 
+        # Detector side masking
+        if self._summary.mask_side_front_radio.isChecked():
+            m.masked_side = 'Front'
+        elif self._summary.mask_side_back_radio.isChecked():
+            m.masked_side = 'Back'
+        else:
+            m.masked_side = None
+            
         # Mask detector IDs
         m.use_mask_file = self._summary.mask_check.isChecked()
         m.mask_file = unicode(self._summary.mask_edit.text())
diff --git a/Code/Mantid/scripts/Interface/ui/sans/hfir_instrument.ui b/Code/Mantid/scripts/Interface/ui/sans/hfir_instrument.ui
index 68d7d79351d68e9bf0791a48226326792a8ea41b..3ec86accdd4af608835c20f2207f3364e2cd4470 100644
--- a/Code/Mantid/scripts/Interface/ui/sans/hfir_instrument.ui
+++ b/Code/Mantid/scripts/Interface/ui/sans/hfir_instrument.ui
@@ -1052,6 +1052,72 @@ Values can be selected by hand by checking the boxes below.</string>
          <layout class="QVBoxLayout" name="verticalLayout_2">
           <item>
            <layout class="QVBoxLayout" name="verticalLayout_3">
+            <item>
+             <layout class="QHBoxLayout" name="mask_side_layout">
+              <item>
+               <widget class="QLabel" name="mask_side_label">
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+                <property name="minimumSize">
+                 <size>
+                  <width>150</width>
+                  <height>0</height>
+                 </size>
+                </property>
+                <property name="text">
+                 <string>Mask detector side</string>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <widget class="QRadioButton" name="mask_side_none_radio">
+                <property name="toolTip">
+                 <string>Select to keep both sides of the detector active [default].</string>
+                </property>
+                <property name="text">
+                 <string>None</string>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <widget class="QRadioButton" name="mask_side_front_radio">
+                <property name="toolTip">
+                 <string>Select to mask the front panel of the detector.</string>
+                </property>
+                <property name="text">
+                 <string>Front</string>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <widget class="QRadioButton" name="mask_side_back_radio">
+                <property name="toolTip">
+                 <string>Select to mask the back panel of the detector.</string>
+                </property>
+                <property name="text">
+                 <string>Back</string>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <spacer name="horizontalSpacer_6">
+                <property name="orientation">
+                 <enum>Qt::Horizontal</enum>
+                </property>
+                <property name="sizeHint" stdset="0">
+                 <size>
+                  <width>40</width>
+                  <height>20</height>
+                 </size>
+                </property>
+               </spacer>
+              </item>
+             </layout>
+            </item>
             <item>
              <widget class="QLabel" name="label_5">
               <property name="font">
diff --git a/Code/Mantid/scripts/Interface/ui/sans/ui_hfir_instrument.py b/Code/Mantid/scripts/Interface/ui/sans/ui_hfir_instrument.py
index d9193459baae30ef040bb39a62fa501274470115..93b22de1ce872b69ae867590daa9ef413e87d9c9 100644
--- a/Code/Mantid/scripts/Interface/ui/sans/ui_hfir_instrument.py
+++ b/Code/Mantid/scripts/Interface/ui/sans/ui_hfir_instrument.py
@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'ui/sans/hfir_instrument.ui'
 #
-# Created: Thu Jun 27 16:46:08 2013
+# Created: Fri Oct 10 11:46:57 2014
 #      by: PyQt4 UI code generator 4.7.4
 #
 # WARNING! All changes made in this file will be lost!
@@ -398,6 +398,29 @@ class Ui_Frame(object):
         self.verticalLayout_2.setObjectName("verticalLayout_2")
         self.verticalLayout_3 = QtGui.QVBoxLayout()
         self.verticalLayout_3.setObjectName("verticalLayout_3")
+        self.mask_side_layout = QtGui.QHBoxLayout()
+        self.mask_side_layout.setObjectName("mask_side_layout")
+        self.mask_side_label = QtGui.QLabel(self.groupBox)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.mask_side_label.sizePolicy().hasHeightForWidth())
+        self.mask_side_label.setSizePolicy(sizePolicy)
+        self.mask_side_label.setMinimumSize(QtCore.QSize(150, 0))
+        self.mask_side_label.setObjectName("mask_side_label")
+        self.mask_side_layout.addWidget(self.mask_side_label)
+        self.mask_side_none_radio = QtGui.QRadioButton(self.groupBox)
+        self.mask_side_none_radio.setObjectName("mask_side_none_radio")
+        self.mask_side_layout.addWidget(self.mask_side_none_radio)
+        self.mask_side_front_radio = QtGui.QRadioButton(self.groupBox)
+        self.mask_side_front_radio.setObjectName("mask_side_front_radio")
+        self.mask_side_layout.addWidget(self.mask_side_front_radio)
+        self.mask_side_back_radio = QtGui.QRadioButton(self.groupBox)
+        self.mask_side_back_radio.setObjectName("mask_side_back_radio")
+        self.mask_side_layout.addWidget(self.mask_side_back_radio)
+        spacerItem9 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.mask_side_layout.addItem(spacerItem9)
+        self.verticalLayout_3.addLayout(self.mask_side_layout)
         self.label_5 = QtGui.QLabel(self.groupBox)
         font = QtGui.QFont()
         font.setFamily("Bitstream Charter")
@@ -428,13 +451,13 @@ class Ui_Frame(object):
         self.mask_plot_button = QtGui.QPushButton(self.groupBox)
         self.mask_plot_button.setObjectName("mask_plot_button")
         self.horizontalLayout.addWidget(self.mask_plot_button)
-        spacerItem9 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum)
-        self.horizontalLayout.addItem(spacerItem9)
+        spacerItem10 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem10)
         self.verticalLayout_3.addLayout(self.horizontalLayout)
         self.verticalLayout_2.addLayout(self.verticalLayout_3)
         self.verticalLayout_4.addWidget(self.groupBox)
-        spacerItem10 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.verticalLayout_4.addItem(spacerItem10)
+        spacerItem11 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        self.verticalLayout_4.addItem(spacerItem11)
         self.scrollArea.setWidget(self.scrollAreaWidgetContents)
         self.verticalLayout.addWidget(self.scrollArea)
 
@@ -501,6 +524,13 @@ class Ui_Frame(object):
         self.label_10.setText(QtGui.QApplication.translate("Frame", "Wavelength spread [ratio]", None, QtGui.QApplication.UnicodeUTF8))
         self.wavelength_spread_edit.setToolTip(QtGui.QApplication.translate("Frame", "Enter the value of the neutron wavelength spread.", None, QtGui.QApplication.UnicodeUTF8))
         self.groupBox.setTitle(QtGui.QApplication.translate("Frame", "Mask", None, QtGui.QApplication.UnicodeUTF8))
+        self.mask_side_label.setText(QtGui.QApplication.translate("Frame", "Mask detector side", None, QtGui.QApplication.UnicodeUTF8))
+        self.mask_side_none_radio.setToolTip(QtGui.QApplication.translate("Frame", "Select to keep both sides of the detector active [default].", None, QtGui.QApplication.UnicodeUTF8))
+        self.mask_side_none_radio.setText(QtGui.QApplication.translate("Frame", "None", None, QtGui.QApplication.UnicodeUTF8))
+        self.mask_side_front_radio.setToolTip(QtGui.QApplication.translate("Frame", "Select to mask the front panel of the detector.", None, QtGui.QApplication.UnicodeUTF8))
+        self.mask_side_front_radio.setText(QtGui.QApplication.translate("Frame", "Front", None, QtGui.QApplication.UnicodeUTF8))
+        self.mask_side_back_radio.setToolTip(QtGui.QApplication.translate("Frame", "Select to mask the back panel of the detector.", None, QtGui.QApplication.UnicodeUTF8))
+        self.mask_side_back_radio.setText(QtGui.QApplication.translate("Frame", "Back", None, QtGui.QApplication.UnicodeUTF8))
         self.label_5.setText(QtGui.QApplication.translate("Frame", "Choose a file to set your mask. Note that only the mask information, not the data, will be used in the reduction.\n"
 "The data is only used to help you setting the mask.\n"
 "The mask information is saved separately so that your data file will NOT be modified.", None, QtGui.QApplication.UnicodeUTF8))
diff --git a/Code/Mantid/scripts/LargeScaleStructures/REFL_Detector_Grouping_Sum_X_rot.xml b/Code/Mantid/scripts/LargeScaleStructures/REFL_Detector_Grouping_Sum_X_rot.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3a884fe2a0351a976068a13daaf898ef91ac343f
--- /dev/null
+++ b/Code/Mantid/scripts/LargeScaleStructures/REFL_Detector_Grouping_Sum_X_rot.xml
@@ -0,0 +1,914 @@
+<detector-grouping description="Integrated over X">
+  <group name='0'>
+    <ids val='1,305,609,913,1217,1521,1825,2129,2433,2737,3041,3345,3649,3953,4257,4561,4865,5169,5473,5777,6081,6385,6689,6993,7297,7601,7905,8209,8513,8817,9121,9425,9729,10033,10337,10641,10945,11249,11553,11857,12161,12465,12769,13073,13377,13681,13985,14289,14593,14897,15201,15505,15809,16113,16417,16721,17025,17329,17633,17937,18241,18545,18849,19153,19457,19761,20065,20369,20673,20977,21281,21585,21889,22193,22497,22801,23105,23409,23713,24017,24321,24625,24929,25233,25537,25841,26145,26449,26753,27057,27361,27665,27969,28273,28577,28881,29185,29489,29793,30097,30401,30705,31009,31313,31617,31921,32225,32529,32833,33137,33441,33745,34049,34353,34657,34961,35265,35569,35873,36177,36481,36785,37089,37393,37697,38001,38305,38609,38913,39217,39521,39825,40129,40433,40737,41041,41345,41649,41953,42257,42561,42865,43169,43473,43777,44081,44385,44689,44993,45297,45601,45905,46209,46513,46817,47121,47425,47729,48033,48337,48641,48945,49249,49553,49857,50161,50465,50769,51073,51377,51681,51985,52289,52593,52897,53201,53505,53809,54113,54417,54721,55025,55329,55633,55937,56241,56545,56849,57153,57457,57761,58065,58369,58673,58977,59281,59585,59889,60193,60497,60801,61105,61409,61713,62017,62321,62625,62929,63233,63537,63841,64145,64449,64753,65057,65361,65665,65969,66273,66577,66881,67185,67489,67793,68097,68401,68705,69009,69313,69617,69921,70225,70529,70833,71137,71441,71745,72049,72353,72657,72961,73265,73569,73873,74177,74481,74785,75089,75393,75697,76001,76305,76609,76913,77217,77521'/>
+  </group>
+  <group name='1'>
+    <ids val='2,306,610,914,1218,1522,1826,2130,2434,2738,3042,3346,3650,3954,4258,4562,4866,5170,5474,5778,6082,6386,6690,6994,7298,7602,7906,8210,8514,8818,9122,9426,9730,10034,10338,10642,10946,11250,11554,11858,12162,12466,12770,13074,13378,13682,13986,14290,14594,14898,15202,15506,15810,16114,16418,16722,17026,17330,17634,17938,18242,18546,18850,19154,19458,19762,20066,20370,20674,20978,21282,21586,21890,22194,22498,22802,23106,23410,23714,24018,24322,24626,24930,25234,25538,25842,26146,26450,26754,27058,27362,27666,27970,28274,28578,28882,29186,29490,29794,30098,30402,30706,31010,31314,31618,31922,32226,32530,32834,33138,33442,33746,34050,34354,34658,34962,35266,35570,35874,36178,36482,36786,37090,37394,37698,38002,38306,38610,38914,39218,39522,39826,40130,40434,40738,41042,41346,41650,41954,42258,42562,42866,43170,43474,43778,44082,44386,44690,44994,45298,45602,45906,46210,46514,46818,47122,47426,47730,48034,48338,48642,48946,49250,49554,49858,50162,50466,50770,51074,51378,51682,51986,52290,52594,52898,53202,53506,53810,54114,54418,54722,55026,55330,55634,55938,56242,56546,56850,57154,57458,57762,58066,58370,58674,58978,59282,59586,59890,60194,60498,60802,61106,61410,61714,62018,62322,62626,62930,63234,63538,63842,64146,64450,64754,65058,65362,65666,65970,66274,66578,66882,67186,67490,67794,68098,68402,68706,69010,69314,69618,69922,70226,70530,70834,71138,71442,71746,72050,72354,72658,72962,73266,73570,73874,74178,74482,74786,75090,75394,75698,76002,76306,76610,76914,77218,77522'/>
+  </group>
+  <group name='2'>
+    <ids val='3,307,611,915,1219,1523,1827,2131,2435,2739,3043,3347,3651,3955,4259,4563,4867,5171,5475,5779,6083,6387,6691,6995,7299,7603,7907,8211,8515,8819,9123,9427,9731,10035,10339,10643,10947,11251,11555,11859,12163,12467,12771,13075,13379,13683,13987,14291,14595,14899,15203,15507,15811,16115,16419,16723,17027,17331,17635,17939,18243,18547,18851,19155,19459,19763,20067,20371,20675,20979,21283,21587,21891,22195,22499,22803,23107,23411,23715,24019,24323,24627,24931,25235,25539,25843,26147,26451,26755,27059,27363,27667,27971,28275,28579,28883,29187,29491,29795,30099,30403,30707,31011,31315,31619,31923,32227,32531,32835,33139,33443,33747,34051,34355,34659,34963,35267,35571,35875,36179,36483,36787,37091,37395,37699,38003,38307,38611,38915,39219,39523,39827,40131,40435,40739,41043,41347,41651,41955,42259,42563,42867,43171,43475,43779,44083,44387,44691,44995,45299,45603,45907,46211,46515,46819,47123,47427,47731,48035,48339,48643,48947,49251,49555,49859,50163,50467,50771,51075,51379,51683,51987,52291,52595,52899,53203,53507,53811,54115,54419,54723,55027,55331,55635,55939,56243,56547,56851,57155,57459,57763,58067,58371,58675,58979,59283,59587,59891,60195,60499,60803,61107,61411,61715,62019,62323,62627,62931,63235,63539,63843,64147,64451,64755,65059,65363,65667,65971,66275,66579,66883,67187,67491,67795,68099,68403,68707,69011,69315,69619,69923,70227,70531,70835,71139,71443,71747,72051,72355,72659,72963,73267,73571,73875,74179,74483,74787,75091,75395,75699,76003,76307,76611,76915,77219,77523'/>
+  </group>
+  <group name='3'>
+    <ids val='4,308,612,916,1220,1524,1828,2132,2436,2740,3044,3348,3652,3956,4260,4564,4868,5172,5476,5780,6084,6388,6692,6996,7300,7604,7908,8212,8516,8820,9124,9428,9732,10036,10340,10644,10948,11252,11556,11860,12164,12468,12772,13076,13380,13684,13988,14292,14596,14900,15204,15508,15812,16116,16420,16724,17028,17332,17636,17940,18244,18548,18852,19156,19460,19764,20068,20372,20676,20980,21284,21588,21892,22196,22500,22804,23108,23412,23716,24020,24324,24628,24932,25236,25540,25844,26148,26452,26756,27060,27364,27668,27972,28276,28580,28884,29188,29492,29796,30100,30404,30708,31012,31316,31620,31924,32228,32532,32836,33140,33444,33748,34052,34356,34660,34964,35268,35572,35876,36180,36484,36788,37092,37396,37700,38004,38308,38612,38916,39220,39524,39828,40132,40436,40740,41044,41348,41652,41956,42260,42564,42868,43172,43476,43780,44084,44388,44692,44996,45300,45604,45908,46212,46516,46820,47124,47428,47732,48036,48340,48644,48948,49252,49556,49860,50164,50468,50772,51076,51380,51684,51988,52292,52596,52900,53204,53508,53812,54116,54420,54724,55028,55332,55636,55940,56244,56548,56852,57156,57460,57764,58068,58372,58676,58980,59284,59588,59892,60196,60500,60804,61108,61412,61716,62020,62324,62628,62932,63236,63540,63844,64148,64452,64756,65060,65364,65668,65972,66276,66580,66884,67188,67492,67796,68100,68404,68708,69012,69316,69620,69924,70228,70532,70836,71140,71444,71748,72052,72356,72660,72964,73268,73572,73876,74180,74484,74788,75092,75396,75700,76004,76308,76612,76916,77220,77524'/>
+  </group>
+  <group name='4'>
+    <ids val='5,309,613,917,1221,1525,1829,2133,2437,2741,3045,3349,3653,3957,4261,4565,4869,5173,5477,5781,6085,6389,6693,6997,7301,7605,7909,8213,8517,8821,9125,9429,9733,10037,10341,10645,10949,11253,11557,11861,12165,12469,12773,13077,13381,13685,13989,14293,14597,14901,15205,15509,15813,16117,16421,16725,17029,17333,17637,17941,18245,18549,18853,19157,19461,19765,20069,20373,20677,20981,21285,21589,21893,22197,22501,22805,23109,23413,23717,24021,24325,24629,24933,25237,25541,25845,26149,26453,26757,27061,27365,27669,27973,28277,28581,28885,29189,29493,29797,30101,30405,30709,31013,31317,31621,31925,32229,32533,32837,33141,33445,33749,34053,34357,34661,34965,35269,35573,35877,36181,36485,36789,37093,37397,37701,38005,38309,38613,38917,39221,39525,39829,40133,40437,40741,41045,41349,41653,41957,42261,42565,42869,43173,43477,43781,44085,44389,44693,44997,45301,45605,45909,46213,46517,46821,47125,47429,47733,48037,48341,48645,48949,49253,49557,49861,50165,50469,50773,51077,51381,51685,51989,52293,52597,52901,53205,53509,53813,54117,54421,54725,55029,55333,55637,55941,56245,56549,56853,57157,57461,57765,58069,58373,58677,58981,59285,59589,59893,60197,60501,60805,61109,61413,61717,62021,62325,62629,62933,63237,63541,63845,64149,64453,64757,65061,65365,65669,65973,66277,66581,66885,67189,67493,67797,68101,68405,68709,69013,69317,69621,69925,70229,70533,70837,71141,71445,71749,72053,72357,72661,72965,73269,73573,73877,74181,74485,74789,75093,75397,75701,76005,76309,76613,76917,77221,77525'/>
+  </group>
+  <group name='5'>
+    <ids val='6,310,614,918,1222,1526,1830,2134,2438,2742,3046,3350,3654,3958,4262,4566,4870,5174,5478,5782,6086,6390,6694,6998,7302,7606,7910,8214,8518,8822,9126,9430,9734,10038,10342,10646,10950,11254,11558,11862,12166,12470,12774,13078,13382,13686,13990,14294,14598,14902,15206,15510,15814,16118,16422,16726,17030,17334,17638,17942,18246,18550,18854,19158,19462,19766,20070,20374,20678,20982,21286,21590,21894,22198,22502,22806,23110,23414,23718,24022,24326,24630,24934,25238,25542,25846,26150,26454,26758,27062,27366,27670,27974,28278,28582,28886,29190,29494,29798,30102,30406,30710,31014,31318,31622,31926,32230,32534,32838,33142,33446,33750,34054,34358,34662,34966,35270,35574,35878,36182,36486,36790,37094,37398,37702,38006,38310,38614,38918,39222,39526,39830,40134,40438,40742,41046,41350,41654,41958,42262,42566,42870,43174,43478,43782,44086,44390,44694,44998,45302,45606,45910,46214,46518,46822,47126,47430,47734,48038,48342,48646,48950,49254,49558,49862,50166,50470,50774,51078,51382,51686,51990,52294,52598,52902,53206,53510,53814,54118,54422,54726,55030,55334,55638,55942,56246,56550,56854,57158,57462,57766,58070,58374,58678,58982,59286,59590,59894,60198,60502,60806,61110,61414,61718,62022,62326,62630,62934,63238,63542,63846,64150,64454,64758,65062,65366,65670,65974,66278,66582,66886,67190,67494,67798,68102,68406,68710,69014,69318,69622,69926,70230,70534,70838,71142,71446,71750,72054,72358,72662,72966,73270,73574,73878,74182,74486,74790,75094,75398,75702,76006,76310,76614,76918,77222,77526'/>
+  </group>
+  <group name='6'>
+    <ids val='7,311,615,919,1223,1527,1831,2135,2439,2743,3047,3351,3655,3959,4263,4567,4871,5175,5479,5783,6087,6391,6695,6999,7303,7607,7911,8215,8519,8823,9127,9431,9735,10039,10343,10647,10951,11255,11559,11863,12167,12471,12775,13079,13383,13687,13991,14295,14599,14903,15207,15511,15815,16119,16423,16727,17031,17335,17639,17943,18247,18551,18855,19159,19463,19767,20071,20375,20679,20983,21287,21591,21895,22199,22503,22807,23111,23415,23719,24023,24327,24631,24935,25239,25543,25847,26151,26455,26759,27063,27367,27671,27975,28279,28583,28887,29191,29495,29799,30103,30407,30711,31015,31319,31623,31927,32231,32535,32839,33143,33447,33751,34055,34359,34663,34967,35271,35575,35879,36183,36487,36791,37095,37399,37703,38007,38311,38615,38919,39223,39527,39831,40135,40439,40743,41047,41351,41655,41959,42263,42567,42871,43175,43479,43783,44087,44391,44695,44999,45303,45607,45911,46215,46519,46823,47127,47431,47735,48039,48343,48647,48951,49255,49559,49863,50167,50471,50775,51079,51383,51687,51991,52295,52599,52903,53207,53511,53815,54119,54423,54727,55031,55335,55639,55943,56247,56551,56855,57159,57463,57767,58071,58375,58679,58983,59287,59591,59895,60199,60503,60807,61111,61415,61719,62023,62327,62631,62935,63239,63543,63847,64151,64455,64759,65063,65367,65671,65975,66279,66583,66887,67191,67495,67799,68103,68407,68711,69015,69319,69623,69927,70231,70535,70839,71143,71447,71751,72055,72359,72663,72967,73271,73575,73879,74183,74487,74791,75095,75399,75703,76007,76311,76615,76919,77223,77527'/>
+  </group>
+  <group name='7'>
+    <ids val='8,312,616,920,1224,1528,1832,2136,2440,2744,3048,3352,3656,3960,4264,4568,4872,5176,5480,5784,6088,6392,6696,7000,7304,7608,7912,8216,8520,8824,9128,9432,9736,10040,10344,10648,10952,11256,11560,11864,12168,12472,12776,13080,13384,13688,13992,14296,14600,14904,15208,15512,15816,16120,16424,16728,17032,17336,17640,17944,18248,18552,18856,19160,19464,19768,20072,20376,20680,20984,21288,21592,21896,22200,22504,22808,23112,23416,23720,24024,24328,24632,24936,25240,25544,25848,26152,26456,26760,27064,27368,27672,27976,28280,28584,28888,29192,29496,29800,30104,30408,30712,31016,31320,31624,31928,32232,32536,32840,33144,33448,33752,34056,34360,34664,34968,35272,35576,35880,36184,36488,36792,37096,37400,37704,38008,38312,38616,38920,39224,39528,39832,40136,40440,40744,41048,41352,41656,41960,42264,42568,42872,43176,43480,43784,44088,44392,44696,45000,45304,45608,45912,46216,46520,46824,47128,47432,47736,48040,48344,48648,48952,49256,49560,49864,50168,50472,50776,51080,51384,51688,51992,52296,52600,52904,53208,53512,53816,54120,54424,54728,55032,55336,55640,55944,56248,56552,56856,57160,57464,57768,58072,58376,58680,58984,59288,59592,59896,60200,60504,60808,61112,61416,61720,62024,62328,62632,62936,63240,63544,63848,64152,64456,64760,65064,65368,65672,65976,66280,66584,66888,67192,67496,67800,68104,68408,68712,69016,69320,69624,69928,70232,70536,70840,71144,71448,71752,72056,72360,72664,72968,73272,73576,73880,74184,74488,74792,75096,75400,75704,76008,76312,76616,76920,77224,77528'/>
+  </group>
+  <group name='8'>
+    <ids val='9,313,617,921,1225,1529,1833,2137,2441,2745,3049,3353,3657,3961,4265,4569,4873,5177,5481,5785,6089,6393,6697,7001,7305,7609,7913,8217,8521,8825,9129,9433,9737,10041,10345,10649,10953,11257,11561,11865,12169,12473,12777,13081,13385,13689,13993,14297,14601,14905,15209,15513,15817,16121,16425,16729,17033,17337,17641,17945,18249,18553,18857,19161,19465,19769,20073,20377,20681,20985,21289,21593,21897,22201,22505,22809,23113,23417,23721,24025,24329,24633,24937,25241,25545,25849,26153,26457,26761,27065,27369,27673,27977,28281,28585,28889,29193,29497,29801,30105,30409,30713,31017,31321,31625,31929,32233,32537,32841,33145,33449,33753,34057,34361,34665,34969,35273,35577,35881,36185,36489,36793,37097,37401,37705,38009,38313,38617,38921,39225,39529,39833,40137,40441,40745,41049,41353,41657,41961,42265,42569,42873,43177,43481,43785,44089,44393,44697,45001,45305,45609,45913,46217,46521,46825,47129,47433,47737,48041,48345,48649,48953,49257,49561,49865,50169,50473,50777,51081,51385,51689,51993,52297,52601,52905,53209,53513,53817,54121,54425,54729,55033,55337,55641,55945,56249,56553,56857,57161,57465,57769,58073,58377,58681,58985,59289,59593,59897,60201,60505,60809,61113,61417,61721,62025,62329,62633,62937,63241,63545,63849,64153,64457,64761,65065,65369,65673,65977,66281,66585,66889,67193,67497,67801,68105,68409,68713,69017,69321,69625,69929,70233,70537,70841,71145,71449,71753,72057,72361,72665,72969,73273,73577,73881,74185,74489,74793,75097,75401,75705,76009,76313,76617,76921,77225,77529'/>
+  </group>
+  <group name='9'>
+    <ids val='10,314,618,922,1226,1530,1834,2138,2442,2746,3050,3354,3658,3962,4266,4570,4874,5178,5482,5786,6090,6394,6698,7002,7306,7610,7914,8218,8522,8826,9130,9434,9738,10042,10346,10650,10954,11258,11562,11866,12170,12474,12778,13082,13386,13690,13994,14298,14602,14906,15210,15514,15818,16122,16426,16730,17034,17338,17642,17946,18250,18554,18858,19162,19466,19770,20074,20378,20682,20986,21290,21594,21898,22202,22506,22810,23114,23418,23722,24026,24330,24634,24938,25242,25546,25850,26154,26458,26762,27066,27370,27674,27978,28282,28586,28890,29194,29498,29802,30106,30410,30714,31018,31322,31626,31930,32234,32538,32842,33146,33450,33754,34058,34362,34666,34970,35274,35578,35882,36186,36490,36794,37098,37402,37706,38010,38314,38618,38922,39226,39530,39834,40138,40442,40746,41050,41354,41658,41962,42266,42570,42874,43178,43482,43786,44090,44394,44698,45002,45306,45610,45914,46218,46522,46826,47130,47434,47738,48042,48346,48650,48954,49258,49562,49866,50170,50474,50778,51082,51386,51690,51994,52298,52602,52906,53210,53514,53818,54122,54426,54730,55034,55338,55642,55946,56250,56554,56858,57162,57466,57770,58074,58378,58682,58986,59290,59594,59898,60202,60506,60810,61114,61418,61722,62026,62330,62634,62938,63242,63546,63850,64154,64458,64762,65066,65370,65674,65978,66282,66586,66890,67194,67498,67802,68106,68410,68714,69018,69322,69626,69930,70234,70538,70842,71146,71450,71754,72058,72362,72666,72970,73274,73578,73882,74186,74490,74794,75098,75402,75706,76010,76314,76618,76922,77226,77530'/>
+  </group>
+  <group name='10'>
+    <ids val='11,315,619,923,1227,1531,1835,2139,2443,2747,3051,3355,3659,3963,4267,4571,4875,5179,5483,5787,6091,6395,6699,7003,7307,7611,7915,8219,8523,8827,9131,9435,9739,10043,10347,10651,10955,11259,11563,11867,12171,12475,12779,13083,13387,13691,13995,14299,14603,14907,15211,15515,15819,16123,16427,16731,17035,17339,17643,17947,18251,18555,18859,19163,19467,19771,20075,20379,20683,20987,21291,21595,21899,22203,22507,22811,23115,23419,23723,24027,24331,24635,24939,25243,25547,25851,26155,26459,26763,27067,27371,27675,27979,28283,28587,28891,29195,29499,29803,30107,30411,30715,31019,31323,31627,31931,32235,32539,32843,33147,33451,33755,34059,34363,34667,34971,35275,35579,35883,36187,36491,36795,37099,37403,37707,38011,38315,38619,38923,39227,39531,39835,40139,40443,40747,41051,41355,41659,41963,42267,42571,42875,43179,43483,43787,44091,44395,44699,45003,45307,45611,45915,46219,46523,46827,47131,47435,47739,48043,48347,48651,48955,49259,49563,49867,50171,50475,50779,51083,51387,51691,51995,52299,52603,52907,53211,53515,53819,54123,54427,54731,55035,55339,55643,55947,56251,56555,56859,57163,57467,57771,58075,58379,58683,58987,59291,59595,59899,60203,60507,60811,61115,61419,61723,62027,62331,62635,62939,63243,63547,63851,64155,64459,64763,65067,65371,65675,65979,66283,66587,66891,67195,67499,67803,68107,68411,68715,69019,69323,69627,69931,70235,70539,70843,71147,71451,71755,72059,72363,72667,72971,73275,73579,73883,74187,74491,74795,75099,75403,75707,76011,76315,76619,76923,77227,77531'/>
+  </group>
+  <group name='11'>
+    <ids val='12,316,620,924,1228,1532,1836,2140,2444,2748,3052,3356,3660,3964,4268,4572,4876,5180,5484,5788,6092,6396,6700,7004,7308,7612,7916,8220,8524,8828,9132,9436,9740,10044,10348,10652,10956,11260,11564,11868,12172,12476,12780,13084,13388,13692,13996,14300,14604,14908,15212,15516,15820,16124,16428,16732,17036,17340,17644,17948,18252,18556,18860,19164,19468,19772,20076,20380,20684,20988,21292,21596,21900,22204,22508,22812,23116,23420,23724,24028,24332,24636,24940,25244,25548,25852,26156,26460,26764,27068,27372,27676,27980,28284,28588,28892,29196,29500,29804,30108,30412,30716,31020,31324,31628,31932,32236,32540,32844,33148,33452,33756,34060,34364,34668,34972,35276,35580,35884,36188,36492,36796,37100,37404,37708,38012,38316,38620,38924,39228,39532,39836,40140,40444,40748,41052,41356,41660,41964,42268,42572,42876,43180,43484,43788,44092,44396,44700,45004,45308,45612,45916,46220,46524,46828,47132,47436,47740,48044,48348,48652,48956,49260,49564,49868,50172,50476,50780,51084,51388,51692,51996,52300,52604,52908,53212,53516,53820,54124,54428,54732,55036,55340,55644,55948,56252,56556,56860,57164,57468,57772,58076,58380,58684,58988,59292,59596,59900,60204,60508,60812,61116,61420,61724,62028,62332,62636,62940,63244,63548,63852,64156,64460,64764,65068,65372,65676,65980,66284,66588,66892,67196,67500,67804,68108,68412,68716,69020,69324,69628,69932,70236,70540,70844,71148,71452,71756,72060,72364,72668,72972,73276,73580,73884,74188,74492,74796,75100,75404,75708,76012,76316,76620,76924,77228,77532'/>
+  </group>
+  <group name='12'>
+    <ids val='13,317,621,925,1229,1533,1837,2141,2445,2749,3053,3357,3661,3965,4269,4573,4877,5181,5485,5789,6093,6397,6701,7005,7309,7613,7917,8221,8525,8829,9133,9437,9741,10045,10349,10653,10957,11261,11565,11869,12173,12477,12781,13085,13389,13693,13997,14301,14605,14909,15213,15517,15821,16125,16429,16733,17037,17341,17645,17949,18253,18557,18861,19165,19469,19773,20077,20381,20685,20989,21293,21597,21901,22205,22509,22813,23117,23421,23725,24029,24333,24637,24941,25245,25549,25853,26157,26461,26765,27069,27373,27677,27981,28285,28589,28893,29197,29501,29805,30109,30413,30717,31021,31325,31629,31933,32237,32541,32845,33149,33453,33757,34061,34365,34669,34973,35277,35581,35885,36189,36493,36797,37101,37405,37709,38013,38317,38621,38925,39229,39533,39837,40141,40445,40749,41053,41357,41661,41965,42269,42573,42877,43181,43485,43789,44093,44397,44701,45005,45309,45613,45917,46221,46525,46829,47133,47437,47741,48045,48349,48653,48957,49261,49565,49869,50173,50477,50781,51085,51389,51693,51997,52301,52605,52909,53213,53517,53821,54125,54429,54733,55037,55341,55645,55949,56253,56557,56861,57165,57469,57773,58077,58381,58685,58989,59293,59597,59901,60205,60509,60813,61117,61421,61725,62029,62333,62637,62941,63245,63549,63853,64157,64461,64765,65069,65373,65677,65981,66285,66589,66893,67197,67501,67805,68109,68413,68717,69021,69325,69629,69933,70237,70541,70845,71149,71453,71757,72061,72365,72669,72973,73277,73581,73885,74189,74493,74797,75101,75405,75709,76013,76317,76621,76925,77229,77533'/>
+  </group>
+  <group name='13'>
+    <ids val='14,318,622,926,1230,1534,1838,2142,2446,2750,3054,3358,3662,3966,4270,4574,4878,5182,5486,5790,6094,6398,6702,7006,7310,7614,7918,8222,8526,8830,9134,9438,9742,10046,10350,10654,10958,11262,11566,11870,12174,12478,12782,13086,13390,13694,13998,14302,14606,14910,15214,15518,15822,16126,16430,16734,17038,17342,17646,17950,18254,18558,18862,19166,19470,19774,20078,20382,20686,20990,21294,21598,21902,22206,22510,22814,23118,23422,23726,24030,24334,24638,24942,25246,25550,25854,26158,26462,26766,27070,27374,27678,27982,28286,28590,28894,29198,29502,29806,30110,30414,30718,31022,31326,31630,31934,32238,32542,32846,33150,33454,33758,34062,34366,34670,34974,35278,35582,35886,36190,36494,36798,37102,37406,37710,38014,38318,38622,38926,39230,39534,39838,40142,40446,40750,41054,41358,41662,41966,42270,42574,42878,43182,43486,43790,44094,44398,44702,45006,45310,45614,45918,46222,46526,46830,47134,47438,47742,48046,48350,48654,48958,49262,49566,49870,50174,50478,50782,51086,51390,51694,51998,52302,52606,52910,53214,53518,53822,54126,54430,54734,55038,55342,55646,55950,56254,56558,56862,57166,57470,57774,58078,58382,58686,58990,59294,59598,59902,60206,60510,60814,61118,61422,61726,62030,62334,62638,62942,63246,63550,63854,64158,64462,64766,65070,65374,65678,65982,66286,66590,66894,67198,67502,67806,68110,68414,68718,69022,69326,69630,69934,70238,70542,70846,71150,71454,71758,72062,72366,72670,72974,73278,73582,73886,74190,74494,74798,75102,75406,75710,76014,76318,76622,76926,77230,77534'/>
+  </group>
+  <group name='14'>
+    <ids val='15,319,623,927,1231,1535,1839,2143,2447,2751,3055,3359,3663,3967,4271,4575,4879,5183,5487,5791,6095,6399,6703,7007,7311,7615,7919,8223,8527,8831,9135,9439,9743,10047,10351,10655,10959,11263,11567,11871,12175,12479,12783,13087,13391,13695,13999,14303,14607,14911,15215,15519,15823,16127,16431,16735,17039,17343,17647,17951,18255,18559,18863,19167,19471,19775,20079,20383,20687,20991,21295,21599,21903,22207,22511,22815,23119,23423,23727,24031,24335,24639,24943,25247,25551,25855,26159,26463,26767,27071,27375,27679,27983,28287,28591,28895,29199,29503,29807,30111,30415,30719,31023,31327,31631,31935,32239,32543,32847,33151,33455,33759,34063,34367,34671,34975,35279,35583,35887,36191,36495,36799,37103,37407,37711,38015,38319,38623,38927,39231,39535,39839,40143,40447,40751,41055,41359,41663,41967,42271,42575,42879,43183,43487,43791,44095,44399,44703,45007,45311,45615,45919,46223,46527,46831,47135,47439,47743,48047,48351,48655,48959,49263,49567,49871,50175,50479,50783,51087,51391,51695,51999,52303,52607,52911,53215,53519,53823,54127,54431,54735,55039,55343,55647,55951,56255,56559,56863,57167,57471,57775,58079,58383,58687,58991,59295,59599,59903,60207,60511,60815,61119,61423,61727,62031,62335,62639,62943,63247,63551,63855,64159,64463,64767,65071,65375,65679,65983,66287,66591,66895,67199,67503,67807,68111,68415,68719,69023,69327,69631,69935,70239,70543,70847,71151,71455,71759,72063,72367,72671,72975,73279,73583,73887,74191,74495,74799,75103,75407,75711,76015,76319,76623,76927,77231,77535'/>
+  </group>
+  <group name='15'>
+    <ids val='16,320,624,928,1232,1536,1840,2144,2448,2752,3056,3360,3664,3968,4272,4576,4880,5184,5488,5792,6096,6400,6704,7008,7312,7616,7920,8224,8528,8832,9136,9440,9744,10048,10352,10656,10960,11264,11568,11872,12176,12480,12784,13088,13392,13696,14000,14304,14608,14912,15216,15520,15824,16128,16432,16736,17040,17344,17648,17952,18256,18560,18864,19168,19472,19776,20080,20384,20688,20992,21296,21600,21904,22208,22512,22816,23120,23424,23728,24032,24336,24640,24944,25248,25552,25856,26160,26464,26768,27072,27376,27680,27984,28288,28592,28896,29200,29504,29808,30112,30416,30720,31024,31328,31632,31936,32240,32544,32848,33152,33456,33760,34064,34368,34672,34976,35280,35584,35888,36192,36496,36800,37104,37408,37712,38016,38320,38624,38928,39232,39536,39840,40144,40448,40752,41056,41360,41664,41968,42272,42576,42880,43184,43488,43792,44096,44400,44704,45008,45312,45616,45920,46224,46528,46832,47136,47440,47744,48048,48352,48656,48960,49264,49568,49872,50176,50480,50784,51088,51392,51696,52000,52304,52608,52912,53216,53520,53824,54128,54432,54736,55040,55344,55648,55952,56256,56560,56864,57168,57472,57776,58080,58384,58688,58992,59296,59600,59904,60208,60512,60816,61120,61424,61728,62032,62336,62640,62944,63248,63552,63856,64160,64464,64768,65072,65376,65680,65984,66288,66592,66896,67200,67504,67808,68112,68416,68720,69024,69328,69632,69936,70240,70544,70848,71152,71456,71760,72064,72368,72672,72976,73280,73584,73888,74192,74496,74800,75104,75408,75712,76016,76320,76624,76928,77232,77536'/>
+  </group>
+  <group name='16'>
+    <ids val='17,321,625,929,1233,1537,1841,2145,2449,2753,3057,3361,3665,3969,4273,4577,4881,5185,5489,5793,6097,6401,6705,7009,7313,7617,7921,8225,8529,8833,9137,9441,9745,10049,10353,10657,10961,11265,11569,11873,12177,12481,12785,13089,13393,13697,14001,14305,14609,14913,15217,15521,15825,16129,16433,16737,17041,17345,17649,17953,18257,18561,18865,19169,19473,19777,20081,20385,20689,20993,21297,21601,21905,22209,22513,22817,23121,23425,23729,24033,24337,24641,24945,25249,25553,25857,26161,26465,26769,27073,27377,27681,27985,28289,28593,28897,29201,29505,29809,30113,30417,30721,31025,31329,31633,31937,32241,32545,32849,33153,33457,33761,34065,34369,34673,34977,35281,35585,35889,36193,36497,36801,37105,37409,37713,38017,38321,38625,38929,39233,39537,39841,40145,40449,40753,41057,41361,41665,41969,42273,42577,42881,43185,43489,43793,44097,44401,44705,45009,45313,45617,45921,46225,46529,46833,47137,47441,47745,48049,48353,48657,48961,49265,49569,49873,50177,50481,50785,51089,51393,51697,52001,52305,52609,52913,53217,53521,53825,54129,54433,54737,55041,55345,55649,55953,56257,56561,56865,57169,57473,57777,58081,58385,58689,58993,59297,59601,59905,60209,60513,60817,61121,61425,61729,62033,62337,62641,62945,63249,63553,63857,64161,64465,64769,65073,65377,65681,65985,66289,66593,66897,67201,67505,67809,68113,68417,68721,69025,69329,69633,69937,70241,70545,70849,71153,71457,71761,72065,72369,72673,72977,73281,73585,73889,74193,74497,74801,75105,75409,75713,76017,76321,76625,76929,77233,77537'/>
+  </group>
+  <group name='17'>
+    <ids val='18,322,626,930,1234,1538,1842,2146,2450,2754,3058,3362,3666,3970,4274,4578,4882,5186,5490,5794,6098,6402,6706,7010,7314,7618,7922,8226,8530,8834,9138,9442,9746,10050,10354,10658,10962,11266,11570,11874,12178,12482,12786,13090,13394,13698,14002,14306,14610,14914,15218,15522,15826,16130,16434,16738,17042,17346,17650,17954,18258,18562,18866,19170,19474,19778,20082,20386,20690,20994,21298,21602,21906,22210,22514,22818,23122,23426,23730,24034,24338,24642,24946,25250,25554,25858,26162,26466,26770,27074,27378,27682,27986,28290,28594,28898,29202,29506,29810,30114,30418,30722,31026,31330,31634,31938,32242,32546,32850,33154,33458,33762,34066,34370,34674,34978,35282,35586,35890,36194,36498,36802,37106,37410,37714,38018,38322,38626,38930,39234,39538,39842,40146,40450,40754,41058,41362,41666,41970,42274,42578,42882,43186,43490,43794,44098,44402,44706,45010,45314,45618,45922,46226,46530,46834,47138,47442,47746,48050,48354,48658,48962,49266,49570,49874,50178,50482,50786,51090,51394,51698,52002,52306,52610,52914,53218,53522,53826,54130,54434,54738,55042,55346,55650,55954,56258,56562,56866,57170,57474,57778,58082,58386,58690,58994,59298,59602,59906,60210,60514,60818,61122,61426,61730,62034,62338,62642,62946,63250,63554,63858,64162,64466,64770,65074,65378,65682,65986,66290,66594,66898,67202,67506,67810,68114,68418,68722,69026,69330,69634,69938,70242,70546,70850,71154,71458,71762,72066,72370,72674,72978,73282,73586,73890,74194,74498,74802,75106,75410,75714,76018,76322,76626,76930,77234,77538'/>
+  </group>
+  <group name='18'>
+    <ids val='19,323,627,931,1235,1539,1843,2147,2451,2755,3059,3363,3667,3971,4275,4579,4883,5187,5491,5795,6099,6403,6707,7011,7315,7619,7923,8227,8531,8835,9139,9443,9747,10051,10355,10659,10963,11267,11571,11875,12179,12483,12787,13091,13395,13699,14003,14307,14611,14915,15219,15523,15827,16131,16435,16739,17043,17347,17651,17955,18259,18563,18867,19171,19475,19779,20083,20387,20691,20995,21299,21603,21907,22211,22515,22819,23123,23427,23731,24035,24339,24643,24947,25251,25555,25859,26163,26467,26771,27075,27379,27683,27987,28291,28595,28899,29203,29507,29811,30115,30419,30723,31027,31331,31635,31939,32243,32547,32851,33155,33459,33763,34067,34371,34675,34979,35283,35587,35891,36195,36499,36803,37107,37411,37715,38019,38323,38627,38931,39235,39539,39843,40147,40451,40755,41059,41363,41667,41971,42275,42579,42883,43187,43491,43795,44099,44403,44707,45011,45315,45619,45923,46227,46531,46835,47139,47443,47747,48051,48355,48659,48963,49267,49571,49875,50179,50483,50787,51091,51395,51699,52003,52307,52611,52915,53219,53523,53827,54131,54435,54739,55043,55347,55651,55955,56259,56563,56867,57171,57475,57779,58083,58387,58691,58995,59299,59603,59907,60211,60515,60819,61123,61427,61731,62035,62339,62643,62947,63251,63555,63859,64163,64467,64771,65075,65379,65683,65987,66291,66595,66899,67203,67507,67811,68115,68419,68723,69027,69331,69635,69939,70243,70547,70851,71155,71459,71763,72067,72371,72675,72979,73283,73587,73891,74195,74499,74803,75107,75411,75715,76019,76323,76627,76931,77235,77539'/>
+  </group>
+  <group name='19'>
+    <ids val='20,324,628,932,1236,1540,1844,2148,2452,2756,3060,3364,3668,3972,4276,4580,4884,5188,5492,5796,6100,6404,6708,7012,7316,7620,7924,8228,8532,8836,9140,9444,9748,10052,10356,10660,10964,11268,11572,11876,12180,12484,12788,13092,13396,13700,14004,14308,14612,14916,15220,15524,15828,16132,16436,16740,17044,17348,17652,17956,18260,18564,18868,19172,19476,19780,20084,20388,20692,20996,21300,21604,21908,22212,22516,22820,23124,23428,23732,24036,24340,24644,24948,25252,25556,25860,26164,26468,26772,27076,27380,27684,27988,28292,28596,28900,29204,29508,29812,30116,30420,30724,31028,31332,31636,31940,32244,32548,32852,33156,33460,33764,34068,34372,34676,34980,35284,35588,35892,36196,36500,36804,37108,37412,37716,38020,38324,38628,38932,39236,39540,39844,40148,40452,40756,41060,41364,41668,41972,42276,42580,42884,43188,43492,43796,44100,44404,44708,45012,45316,45620,45924,46228,46532,46836,47140,47444,47748,48052,48356,48660,48964,49268,49572,49876,50180,50484,50788,51092,51396,51700,52004,52308,52612,52916,53220,53524,53828,54132,54436,54740,55044,55348,55652,55956,56260,56564,56868,57172,57476,57780,58084,58388,58692,58996,59300,59604,59908,60212,60516,60820,61124,61428,61732,62036,62340,62644,62948,63252,63556,63860,64164,64468,64772,65076,65380,65684,65988,66292,66596,66900,67204,67508,67812,68116,68420,68724,69028,69332,69636,69940,70244,70548,70852,71156,71460,71764,72068,72372,72676,72980,73284,73588,73892,74196,74500,74804,75108,75412,75716,76020,76324,76628,76932,77236,77540'/>
+  </group>
+  <group name='20'>
+    <ids val='21,325,629,933,1237,1541,1845,2149,2453,2757,3061,3365,3669,3973,4277,4581,4885,5189,5493,5797,6101,6405,6709,7013,7317,7621,7925,8229,8533,8837,9141,9445,9749,10053,10357,10661,10965,11269,11573,11877,12181,12485,12789,13093,13397,13701,14005,14309,14613,14917,15221,15525,15829,16133,16437,16741,17045,17349,17653,17957,18261,18565,18869,19173,19477,19781,20085,20389,20693,20997,21301,21605,21909,22213,22517,22821,23125,23429,23733,24037,24341,24645,24949,25253,25557,25861,26165,26469,26773,27077,27381,27685,27989,28293,28597,28901,29205,29509,29813,30117,30421,30725,31029,31333,31637,31941,32245,32549,32853,33157,33461,33765,34069,34373,34677,34981,35285,35589,35893,36197,36501,36805,37109,37413,37717,38021,38325,38629,38933,39237,39541,39845,40149,40453,40757,41061,41365,41669,41973,42277,42581,42885,43189,43493,43797,44101,44405,44709,45013,45317,45621,45925,46229,46533,46837,47141,47445,47749,48053,48357,48661,48965,49269,49573,49877,50181,50485,50789,51093,51397,51701,52005,52309,52613,52917,53221,53525,53829,54133,54437,54741,55045,55349,55653,55957,56261,56565,56869,57173,57477,57781,58085,58389,58693,58997,59301,59605,59909,60213,60517,60821,61125,61429,61733,62037,62341,62645,62949,63253,63557,63861,64165,64469,64773,65077,65381,65685,65989,66293,66597,66901,67205,67509,67813,68117,68421,68725,69029,69333,69637,69941,70245,70549,70853,71157,71461,71765,72069,72373,72677,72981,73285,73589,73893,74197,74501,74805,75109,75413,75717,76021,76325,76629,76933,77237,77541'/>
+  </group>
+  <group name='21'>
+    <ids val='22,326,630,934,1238,1542,1846,2150,2454,2758,3062,3366,3670,3974,4278,4582,4886,5190,5494,5798,6102,6406,6710,7014,7318,7622,7926,8230,8534,8838,9142,9446,9750,10054,10358,10662,10966,11270,11574,11878,12182,12486,12790,13094,13398,13702,14006,14310,14614,14918,15222,15526,15830,16134,16438,16742,17046,17350,17654,17958,18262,18566,18870,19174,19478,19782,20086,20390,20694,20998,21302,21606,21910,22214,22518,22822,23126,23430,23734,24038,24342,24646,24950,25254,25558,25862,26166,26470,26774,27078,27382,27686,27990,28294,28598,28902,29206,29510,29814,30118,30422,30726,31030,31334,31638,31942,32246,32550,32854,33158,33462,33766,34070,34374,34678,34982,35286,35590,35894,36198,36502,36806,37110,37414,37718,38022,38326,38630,38934,39238,39542,39846,40150,40454,40758,41062,41366,41670,41974,42278,42582,42886,43190,43494,43798,44102,44406,44710,45014,45318,45622,45926,46230,46534,46838,47142,47446,47750,48054,48358,48662,48966,49270,49574,49878,50182,50486,50790,51094,51398,51702,52006,52310,52614,52918,53222,53526,53830,54134,54438,54742,55046,55350,55654,55958,56262,56566,56870,57174,57478,57782,58086,58390,58694,58998,59302,59606,59910,60214,60518,60822,61126,61430,61734,62038,62342,62646,62950,63254,63558,63862,64166,64470,64774,65078,65382,65686,65990,66294,66598,66902,67206,67510,67814,68118,68422,68726,69030,69334,69638,69942,70246,70550,70854,71158,71462,71766,72070,72374,72678,72982,73286,73590,73894,74198,74502,74806,75110,75414,75718,76022,76326,76630,76934,77238,77542'/>
+  </group>
+  <group name='22'>
+    <ids val='23,327,631,935,1239,1543,1847,2151,2455,2759,3063,3367,3671,3975,4279,4583,4887,5191,5495,5799,6103,6407,6711,7015,7319,7623,7927,8231,8535,8839,9143,9447,9751,10055,10359,10663,10967,11271,11575,11879,12183,12487,12791,13095,13399,13703,14007,14311,14615,14919,15223,15527,15831,16135,16439,16743,17047,17351,17655,17959,18263,18567,18871,19175,19479,19783,20087,20391,20695,20999,21303,21607,21911,22215,22519,22823,23127,23431,23735,24039,24343,24647,24951,25255,25559,25863,26167,26471,26775,27079,27383,27687,27991,28295,28599,28903,29207,29511,29815,30119,30423,30727,31031,31335,31639,31943,32247,32551,32855,33159,33463,33767,34071,34375,34679,34983,35287,35591,35895,36199,36503,36807,37111,37415,37719,38023,38327,38631,38935,39239,39543,39847,40151,40455,40759,41063,41367,41671,41975,42279,42583,42887,43191,43495,43799,44103,44407,44711,45015,45319,45623,45927,46231,46535,46839,47143,47447,47751,48055,48359,48663,48967,49271,49575,49879,50183,50487,50791,51095,51399,51703,52007,52311,52615,52919,53223,53527,53831,54135,54439,54743,55047,55351,55655,55959,56263,56567,56871,57175,57479,57783,58087,58391,58695,58999,59303,59607,59911,60215,60519,60823,61127,61431,61735,62039,62343,62647,62951,63255,63559,63863,64167,64471,64775,65079,65383,65687,65991,66295,66599,66903,67207,67511,67815,68119,68423,68727,69031,69335,69639,69943,70247,70551,70855,71159,71463,71767,72071,72375,72679,72983,73287,73591,73895,74199,74503,74807,75111,75415,75719,76023,76327,76631,76935,77239,77543'/>
+  </group>
+  <group name='23'>
+    <ids val='24,328,632,936,1240,1544,1848,2152,2456,2760,3064,3368,3672,3976,4280,4584,4888,5192,5496,5800,6104,6408,6712,7016,7320,7624,7928,8232,8536,8840,9144,9448,9752,10056,10360,10664,10968,11272,11576,11880,12184,12488,12792,13096,13400,13704,14008,14312,14616,14920,15224,15528,15832,16136,16440,16744,17048,17352,17656,17960,18264,18568,18872,19176,19480,19784,20088,20392,20696,21000,21304,21608,21912,22216,22520,22824,23128,23432,23736,24040,24344,24648,24952,25256,25560,25864,26168,26472,26776,27080,27384,27688,27992,28296,28600,28904,29208,29512,29816,30120,30424,30728,31032,31336,31640,31944,32248,32552,32856,33160,33464,33768,34072,34376,34680,34984,35288,35592,35896,36200,36504,36808,37112,37416,37720,38024,38328,38632,38936,39240,39544,39848,40152,40456,40760,41064,41368,41672,41976,42280,42584,42888,43192,43496,43800,44104,44408,44712,45016,45320,45624,45928,46232,46536,46840,47144,47448,47752,48056,48360,48664,48968,49272,49576,49880,50184,50488,50792,51096,51400,51704,52008,52312,52616,52920,53224,53528,53832,54136,54440,54744,55048,55352,55656,55960,56264,56568,56872,57176,57480,57784,58088,58392,58696,59000,59304,59608,59912,60216,60520,60824,61128,61432,61736,62040,62344,62648,62952,63256,63560,63864,64168,64472,64776,65080,65384,65688,65992,66296,66600,66904,67208,67512,67816,68120,68424,68728,69032,69336,69640,69944,70248,70552,70856,71160,71464,71768,72072,72376,72680,72984,73288,73592,73896,74200,74504,74808,75112,75416,75720,76024,76328,76632,76936,77240,77544'/>
+  </group>
+  <group name='24'>
+    <ids val='25,329,633,937,1241,1545,1849,2153,2457,2761,3065,3369,3673,3977,4281,4585,4889,5193,5497,5801,6105,6409,6713,7017,7321,7625,7929,8233,8537,8841,9145,9449,9753,10057,10361,10665,10969,11273,11577,11881,12185,12489,12793,13097,13401,13705,14009,14313,14617,14921,15225,15529,15833,16137,16441,16745,17049,17353,17657,17961,18265,18569,18873,19177,19481,19785,20089,20393,20697,21001,21305,21609,21913,22217,22521,22825,23129,23433,23737,24041,24345,24649,24953,25257,25561,25865,26169,26473,26777,27081,27385,27689,27993,28297,28601,28905,29209,29513,29817,30121,30425,30729,31033,31337,31641,31945,32249,32553,32857,33161,33465,33769,34073,34377,34681,34985,35289,35593,35897,36201,36505,36809,37113,37417,37721,38025,38329,38633,38937,39241,39545,39849,40153,40457,40761,41065,41369,41673,41977,42281,42585,42889,43193,43497,43801,44105,44409,44713,45017,45321,45625,45929,46233,46537,46841,47145,47449,47753,48057,48361,48665,48969,49273,49577,49881,50185,50489,50793,51097,51401,51705,52009,52313,52617,52921,53225,53529,53833,54137,54441,54745,55049,55353,55657,55961,56265,56569,56873,57177,57481,57785,58089,58393,58697,59001,59305,59609,59913,60217,60521,60825,61129,61433,61737,62041,62345,62649,62953,63257,63561,63865,64169,64473,64777,65081,65385,65689,65993,66297,66601,66905,67209,67513,67817,68121,68425,68729,69033,69337,69641,69945,70249,70553,70857,71161,71465,71769,72073,72377,72681,72985,73289,73593,73897,74201,74505,74809,75113,75417,75721,76025,76329,76633,76937,77241,77545'/>
+  </group>
+  <group name='25'>
+    <ids val='26,330,634,938,1242,1546,1850,2154,2458,2762,3066,3370,3674,3978,4282,4586,4890,5194,5498,5802,6106,6410,6714,7018,7322,7626,7930,8234,8538,8842,9146,9450,9754,10058,10362,10666,10970,11274,11578,11882,12186,12490,12794,13098,13402,13706,14010,14314,14618,14922,15226,15530,15834,16138,16442,16746,17050,17354,17658,17962,18266,18570,18874,19178,19482,19786,20090,20394,20698,21002,21306,21610,21914,22218,22522,22826,23130,23434,23738,24042,24346,24650,24954,25258,25562,25866,26170,26474,26778,27082,27386,27690,27994,28298,28602,28906,29210,29514,29818,30122,30426,30730,31034,31338,31642,31946,32250,32554,32858,33162,33466,33770,34074,34378,34682,34986,35290,35594,35898,36202,36506,36810,37114,37418,37722,38026,38330,38634,38938,39242,39546,39850,40154,40458,40762,41066,41370,41674,41978,42282,42586,42890,43194,43498,43802,44106,44410,44714,45018,45322,45626,45930,46234,46538,46842,47146,47450,47754,48058,48362,48666,48970,49274,49578,49882,50186,50490,50794,51098,51402,51706,52010,52314,52618,52922,53226,53530,53834,54138,54442,54746,55050,55354,55658,55962,56266,56570,56874,57178,57482,57786,58090,58394,58698,59002,59306,59610,59914,60218,60522,60826,61130,61434,61738,62042,62346,62650,62954,63258,63562,63866,64170,64474,64778,65082,65386,65690,65994,66298,66602,66906,67210,67514,67818,68122,68426,68730,69034,69338,69642,69946,70250,70554,70858,71162,71466,71770,72074,72378,72682,72986,73290,73594,73898,74202,74506,74810,75114,75418,75722,76026,76330,76634,76938,77242,77546'/>
+  </group>
+  <group name='26'>
+    <ids val='27,331,635,939,1243,1547,1851,2155,2459,2763,3067,3371,3675,3979,4283,4587,4891,5195,5499,5803,6107,6411,6715,7019,7323,7627,7931,8235,8539,8843,9147,9451,9755,10059,10363,10667,10971,11275,11579,11883,12187,12491,12795,13099,13403,13707,14011,14315,14619,14923,15227,15531,15835,16139,16443,16747,17051,17355,17659,17963,18267,18571,18875,19179,19483,19787,20091,20395,20699,21003,21307,21611,21915,22219,22523,22827,23131,23435,23739,24043,24347,24651,24955,25259,25563,25867,26171,26475,26779,27083,27387,27691,27995,28299,28603,28907,29211,29515,29819,30123,30427,30731,31035,31339,31643,31947,32251,32555,32859,33163,33467,33771,34075,34379,34683,34987,35291,35595,35899,36203,36507,36811,37115,37419,37723,38027,38331,38635,38939,39243,39547,39851,40155,40459,40763,41067,41371,41675,41979,42283,42587,42891,43195,43499,43803,44107,44411,44715,45019,45323,45627,45931,46235,46539,46843,47147,47451,47755,48059,48363,48667,48971,49275,49579,49883,50187,50491,50795,51099,51403,51707,52011,52315,52619,52923,53227,53531,53835,54139,54443,54747,55051,55355,55659,55963,56267,56571,56875,57179,57483,57787,58091,58395,58699,59003,59307,59611,59915,60219,60523,60827,61131,61435,61739,62043,62347,62651,62955,63259,63563,63867,64171,64475,64779,65083,65387,65691,65995,66299,66603,66907,67211,67515,67819,68123,68427,68731,69035,69339,69643,69947,70251,70555,70859,71163,71467,71771,72075,72379,72683,72987,73291,73595,73899,74203,74507,74811,75115,75419,75723,76027,76331,76635,76939,77243,77547'/>
+  </group>
+  <group name='27'>
+    <ids val='28,332,636,940,1244,1548,1852,2156,2460,2764,3068,3372,3676,3980,4284,4588,4892,5196,5500,5804,6108,6412,6716,7020,7324,7628,7932,8236,8540,8844,9148,9452,9756,10060,10364,10668,10972,11276,11580,11884,12188,12492,12796,13100,13404,13708,14012,14316,14620,14924,15228,15532,15836,16140,16444,16748,17052,17356,17660,17964,18268,18572,18876,19180,19484,19788,20092,20396,20700,21004,21308,21612,21916,22220,22524,22828,23132,23436,23740,24044,24348,24652,24956,25260,25564,25868,26172,26476,26780,27084,27388,27692,27996,28300,28604,28908,29212,29516,29820,30124,30428,30732,31036,31340,31644,31948,32252,32556,32860,33164,33468,33772,34076,34380,34684,34988,35292,35596,35900,36204,36508,36812,37116,37420,37724,38028,38332,38636,38940,39244,39548,39852,40156,40460,40764,41068,41372,41676,41980,42284,42588,42892,43196,43500,43804,44108,44412,44716,45020,45324,45628,45932,46236,46540,46844,47148,47452,47756,48060,48364,48668,48972,49276,49580,49884,50188,50492,50796,51100,51404,51708,52012,52316,52620,52924,53228,53532,53836,54140,54444,54748,55052,55356,55660,55964,56268,56572,56876,57180,57484,57788,58092,58396,58700,59004,59308,59612,59916,60220,60524,60828,61132,61436,61740,62044,62348,62652,62956,63260,63564,63868,64172,64476,64780,65084,65388,65692,65996,66300,66604,66908,67212,67516,67820,68124,68428,68732,69036,69340,69644,69948,70252,70556,70860,71164,71468,71772,72076,72380,72684,72988,73292,73596,73900,74204,74508,74812,75116,75420,75724,76028,76332,76636,76940,77244,77548'/>
+  </group>
+  <group name='28'>
+    <ids val='29,333,637,941,1245,1549,1853,2157,2461,2765,3069,3373,3677,3981,4285,4589,4893,5197,5501,5805,6109,6413,6717,7021,7325,7629,7933,8237,8541,8845,9149,9453,9757,10061,10365,10669,10973,11277,11581,11885,12189,12493,12797,13101,13405,13709,14013,14317,14621,14925,15229,15533,15837,16141,16445,16749,17053,17357,17661,17965,18269,18573,18877,19181,19485,19789,20093,20397,20701,21005,21309,21613,21917,22221,22525,22829,23133,23437,23741,24045,24349,24653,24957,25261,25565,25869,26173,26477,26781,27085,27389,27693,27997,28301,28605,28909,29213,29517,29821,30125,30429,30733,31037,31341,31645,31949,32253,32557,32861,33165,33469,33773,34077,34381,34685,34989,35293,35597,35901,36205,36509,36813,37117,37421,37725,38029,38333,38637,38941,39245,39549,39853,40157,40461,40765,41069,41373,41677,41981,42285,42589,42893,43197,43501,43805,44109,44413,44717,45021,45325,45629,45933,46237,46541,46845,47149,47453,47757,48061,48365,48669,48973,49277,49581,49885,50189,50493,50797,51101,51405,51709,52013,52317,52621,52925,53229,53533,53837,54141,54445,54749,55053,55357,55661,55965,56269,56573,56877,57181,57485,57789,58093,58397,58701,59005,59309,59613,59917,60221,60525,60829,61133,61437,61741,62045,62349,62653,62957,63261,63565,63869,64173,64477,64781,65085,65389,65693,65997,66301,66605,66909,67213,67517,67821,68125,68429,68733,69037,69341,69645,69949,70253,70557,70861,71165,71469,71773,72077,72381,72685,72989,73293,73597,73901,74205,74509,74813,75117,75421,75725,76029,76333,76637,76941,77245,77549'/>
+  </group>
+  <group name='29'>
+    <ids val='30,334,638,942,1246,1550,1854,2158,2462,2766,3070,3374,3678,3982,4286,4590,4894,5198,5502,5806,6110,6414,6718,7022,7326,7630,7934,8238,8542,8846,9150,9454,9758,10062,10366,10670,10974,11278,11582,11886,12190,12494,12798,13102,13406,13710,14014,14318,14622,14926,15230,15534,15838,16142,16446,16750,17054,17358,17662,17966,18270,18574,18878,19182,19486,19790,20094,20398,20702,21006,21310,21614,21918,22222,22526,22830,23134,23438,23742,24046,24350,24654,24958,25262,25566,25870,26174,26478,26782,27086,27390,27694,27998,28302,28606,28910,29214,29518,29822,30126,30430,30734,31038,31342,31646,31950,32254,32558,32862,33166,33470,33774,34078,34382,34686,34990,35294,35598,35902,36206,36510,36814,37118,37422,37726,38030,38334,38638,38942,39246,39550,39854,40158,40462,40766,41070,41374,41678,41982,42286,42590,42894,43198,43502,43806,44110,44414,44718,45022,45326,45630,45934,46238,46542,46846,47150,47454,47758,48062,48366,48670,48974,49278,49582,49886,50190,50494,50798,51102,51406,51710,52014,52318,52622,52926,53230,53534,53838,54142,54446,54750,55054,55358,55662,55966,56270,56574,56878,57182,57486,57790,58094,58398,58702,59006,59310,59614,59918,60222,60526,60830,61134,61438,61742,62046,62350,62654,62958,63262,63566,63870,64174,64478,64782,65086,65390,65694,65998,66302,66606,66910,67214,67518,67822,68126,68430,68734,69038,69342,69646,69950,70254,70558,70862,71166,71470,71774,72078,72382,72686,72990,73294,73598,73902,74206,74510,74814,75118,75422,75726,76030,76334,76638,76942,77246,77550'/>
+  </group>
+  <group name='30'>
+    <ids val='31,335,639,943,1247,1551,1855,2159,2463,2767,3071,3375,3679,3983,4287,4591,4895,5199,5503,5807,6111,6415,6719,7023,7327,7631,7935,8239,8543,8847,9151,9455,9759,10063,10367,10671,10975,11279,11583,11887,12191,12495,12799,13103,13407,13711,14015,14319,14623,14927,15231,15535,15839,16143,16447,16751,17055,17359,17663,17967,18271,18575,18879,19183,19487,19791,20095,20399,20703,21007,21311,21615,21919,22223,22527,22831,23135,23439,23743,24047,24351,24655,24959,25263,25567,25871,26175,26479,26783,27087,27391,27695,27999,28303,28607,28911,29215,29519,29823,30127,30431,30735,31039,31343,31647,31951,32255,32559,32863,33167,33471,33775,34079,34383,34687,34991,35295,35599,35903,36207,36511,36815,37119,37423,37727,38031,38335,38639,38943,39247,39551,39855,40159,40463,40767,41071,41375,41679,41983,42287,42591,42895,43199,43503,43807,44111,44415,44719,45023,45327,45631,45935,46239,46543,46847,47151,47455,47759,48063,48367,48671,48975,49279,49583,49887,50191,50495,50799,51103,51407,51711,52015,52319,52623,52927,53231,53535,53839,54143,54447,54751,55055,55359,55663,55967,56271,56575,56879,57183,57487,57791,58095,58399,58703,59007,59311,59615,59919,60223,60527,60831,61135,61439,61743,62047,62351,62655,62959,63263,63567,63871,64175,64479,64783,65087,65391,65695,65999,66303,66607,66911,67215,67519,67823,68127,68431,68735,69039,69343,69647,69951,70255,70559,70863,71167,71471,71775,72079,72383,72687,72991,73295,73599,73903,74207,74511,74815,75119,75423,75727,76031,76335,76639,76943,77247,77551'/>
+  </group>
+  <group name='31'>
+    <ids val='32,336,640,944,1248,1552,1856,2160,2464,2768,3072,3376,3680,3984,4288,4592,4896,5200,5504,5808,6112,6416,6720,7024,7328,7632,7936,8240,8544,8848,9152,9456,9760,10064,10368,10672,10976,11280,11584,11888,12192,12496,12800,13104,13408,13712,14016,14320,14624,14928,15232,15536,15840,16144,16448,16752,17056,17360,17664,17968,18272,18576,18880,19184,19488,19792,20096,20400,20704,21008,21312,21616,21920,22224,22528,22832,23136,23440,23744,24048,24352,24656,24960,25264,25568,25872,26176,26480,26784,27088,27392,27696,28000,28304,28608,28912,29216,29520,29824,30128,30432,30736,31040,31344,31648,31952,32256,32560,32864,33168,33472,33776,34080,34384,34688,34992,35296,35600,35904,36208,36512,36816,37120,37424,37728,38032,38336,38640,38944,39248,39552,39856,40160,40464,40768,41072,41376,41680,41984,42288,42592,42896,43200,43504,43808,44112,44416,44720,45024,45328,45632,45936,46240,46544,46848,47152,47456,47760,48064,48368,48672,48976,49280,49584,49888,50192,50496,50800,51104,51408,51712,52016,52320,52624,52928,53232,53536,53840,54144,54448,54752,55056,55360,55664,55968,56272,56576,56880,57184,57488,57792,58096,58400,58704,59008,59312,59616,59920,60224,60528,60832,61136,61440,61744,62048,62352,62656,62960,63264,63568,63872,64176,64480,64784,65088,65392,65696,66000,66304,66608,66912,67216,67520,67824,68128,68432,68736,69040,69344,69648,69952,70256,70560,70864,71168,71472,71776,72080,72384,72688,72992,73296,73600,73904,74208,74512,74816,75120,75424,75728,76032,76336,76640,76944,77248,77552'/>
+  </group>
+  <group name='32'>
+    <ids val='33,337,641,945,1249,1553,1857,2161,2465,2769,3073,3377,3681,3985,4289,4593,4897,5201,5505,5809,6113,6417,6721,7025,7329,7633,7937,8241,8545,8849,9153,9457,9761,10065,10369,10673,10977,11281,11585,11889,12193,12497,12801,13105,13409,13713,14017,14321,14625,14929,15233,15537,15841,16145,16449,16753,17057,17361,17665,17969,18273,18577,18881,19185,19489,19793,20097,20401,20705,21009,21313,21617,21921,22225,22529,22833,23137,23441,23745,24049,24353,24657,24961,25265,25569,25873,26177,26481,26785,27089,27393,27697,28001,28305,28609,28913,29217,29521,29825,30129,30433,30737,31041,31345,31649,31953,32257,32561,32865,33169,33473,33777,34081,34385,34689,34993,35297,35601,35905,36209,36513,36817,37121,37425,37729,38033,38337,38641,38945,39249,39553,39857,40161,40465,40769,41073,41377,41681,41985,42289,42593,42897,43201,43505,43809,44113,44417,44721,45025,45329,45633,45937,46241,46545,46849,47153,47457,47761,48065,48369,48673,48977,49281,49585,49889,50193,50497,50801,51105,51409,51713,52017,52321,52625,52929,53233,53537,53841,54145,54449,54753,55057,55361,55665,55969,56273,56577,56881,57185,57489,57793,58097,58401,58705,59009,59313,59617,59921,60225,60529,60833,61137,61441,61745,62049,62353,62657,62961,63265,63569,63873,64177,64481,64785,65089,65393,65697,66001,66305,66609,66913,67217,67521,67825,68129,68433,68737,69041,69345,69649,69953,70257,70561,70865,71169,71473,71777,72081,72385,72689,72993,73297,73601,73905,74209,74513,74817,75121,75425,75729,76033,76337,76641,76945,77249,77553'/>
+  </group>
+  <group name='33'>
+    <ids val='34,338,642,946,1250,1554,1858,2162,2466,2770,3074,3378,3682,3986,4290,4594,4898,5202,5506,5810,6114,6418,6722,7026,7330,7634,7938,8242,8546,8850,9154,9458,9762,10066,10370,10674,10978,11282,11586,11890,12194,12498,12802,13106,13410,13714,14018,14322,14626,14930,15234,15538,15842,16146,16450,16754,17058,17362,17666,17970,18274,18578,18882,19186,19490,19794,20098,20402,20706,21010,21314,21618,21922,22226,22530,22834,23138,23442,23746,24050,24354,24658,24962,25266,25570,25874,26178,26482,26786,27090,27394,27698,28002,28306,28610,28914,29218,29522,29826,30130,30434,30738,31042,31346,31650,31954,32258,32562,32866,33170,33474,33778,34082,34386,34690,34994,35298,35602,35906,36210,36514,36818,37122,37426,37730,38034,38338,38642,38946,39250,39554,39858,40162,40466,40770,41074,41378,41682,41986,42290,42594,42898,43202,43506,43810,44114,44418,44722,45026,45330,45634,45938,46242,46546,46850,47154,47458,47762,48066,48370,48674,48978,49282,49586,49890,50194,50498,50802,51106,51410,51714,52018,52322,52626,52930,53234,53538,53842,54146,54450,54754,55058,55362,55666,55970,56274,56578,56882,57186,57490,57794,58098,58402,58706,59010,59314,59618,59922,60226,60530,60834,61138,61442,61746,62050,62354,62658,62962,63266,63570,63874,64178,64482,64786,65090,65394,65698,66002,66306,66610,66914,67218,67522,67826,68130,68434,68738,69042,69346,69650,69954,70258,70562,70866,71170,71474,71778,72082,72386,72690,72994,73298,73602,73906,74210,74514,74818,75122,75426,75730,76034,76338,76642,76946,77250,77554'/>
+  </group>
+  <group name='34'>
+    <ids val='35,339,643,947,1251,1555,1859,2163,2467,2771,3075,3379,3683,3987,4291,4595,4899,5203,5507,5811,6115,6419,6723,7027,7331,7635,7939,8243,8547,8851,9155,9459,9763,10067,10371,10675,10979,11283,11587,11891,12195,12499,12803,13107,13411,13715,14019,14323,14627,14931,15235,15539,15843,16147,16451,16755,17059,17363,17667,17971,18275,18579,18883,19187,19491,19795,20099,20403,20707,21011,21315,21619,21923,22227,22531,22835,23139,23443,23747,24051,24355,24659,24963,25267,25571,25875,26179,26483,26787,27091,27395,27699,28003,28307,28611,28915,29219,29523,29827,30131,30435,30739,31043,31347,31651,31955,32259,32563,32867,33171,33475,33779,34083,34387,34691,34995,35299,35603,35907,36211,36515,36819,37123,37427,37731,38035,38339,38643,38947,39251,39555,39859,40163,40467,40771,41075,41379,41683,41987,42291,42595,42899,43203,43507,43811,44115,44419,44723,45027,45331,45635,45939,46243,46547,46851,47155,47459,47763,48067,48371,48675,48979,49283,49587,49891,50195,50499,50803,51107,51411,51715,52019,52323,52627,52931,53235,53539,53843,54147,54451,54755,55059,55363,55667,55971,56275,56579,56883,57187,57491,57795,58099,58403,58707,59011,59315,59619,59923,60227,60531,60835,61139,61443,61747,62051,62355,62659,62963,63267,63571,63875,64179,64483,64787,65091,65395,65699,66003,66307,66611,66915,67219,67523,67827,68131,68435,68739,69043,69347,69651,69955,70259,70563,70867,71171,71475,71779,72083,72387,72691,72995,73299,73603,73907,74211,74515,74819,75123,75427,75731,76035,76339,76643,76947,77251,77555'/>
+  </group>
+  <group name='35'>
+    <ids val='36,340,644,948,1252,1556,1860,2164,2468,2772,3076,3380,3684,3988,4292,4596,4900,5204,5508,5812,6116,6420,6724,7028,7332,7636,7940,8244,8548,8852,9156,9460,9764,10068,10372,10676,10980,11284,11588,11892,12196,12500,12804,13108,13412,13716,14020,14324,14628,14932,15236,15540,15844,16148,16452,16756,17060,17364,17668,17972,18276,18580,18884,19188,19492,19796,20100,20404,20708,21012,21316,21620,21924,22228,22532,22836,23140,23444,23748,24052,24356,24660,24964,25268,25572,25876,26180,26484,26788,27092,27396,27700,28004,28308,28612,28916,29220,29524,29828,30132,30436,30740,31044,31348,31652,31956,32260,32564,32868,33172,33476,33780,34084,34388,34692,34996,35300,35604,35908,36212,36516,36820,37124,37428,37732,38036,38340,38644,38948,39252,39556,39860,40164,40468,40772,41076,41380,41684,41988,42292,42596,42900,43204,43508,43812,44116,44420,44724,45028,45332,45636,45940,46244,46548,46852,47156,47460,47764,48068,48372,48676,48980,49284,49588,49892,50196,50500,50804,51108,51412,51716,52020,52324,52628,52932,53236,53540,53844,54148,54452,54756,55060,55364,55668,55972,56276,56580,56884,57188,57492,57796,58100,58404,58708,59012,59316,59620,59924,60228,60532,60836,61140,61444,61748,62052,62356,62660,62964,63268,63572,63876,64180,64484,64788,65092,65396,65700,66004,66308,66612,66916,67220,67524,67828,68132,68436,68740,69044,69348,69652,69956,70260,70564,70868,71172,71476,71780,72084,72388,72692,72996,73300,73604,73908,74212,74516,74820,75124,75428,75732,76036,76340,76644,76948,77252,77556'/>
+  </group>
+  <group name='36'>
+    <ids val='37,341,645,949,1253,1557,1861,2165,2469,2773,3077,3381,3685,3989,4293,4597,4901,5205,5509,5813,6117,6421,6725,7029,7333,7637,7941,8245,8549,8853,9157,9461,9765,10069,10373,10677,10981,11285,11589,11893,12197,12501,12805,13109,13413,13717,14021,14325,14629,14933,15237,15541,15845,16149,16453,16757,17061,17365,17669,17973,18277,18581,18885,19189,19493,19797,20101,20405,20709,21013,21317,21621,21925,22229,22533,22837,23141,23445,23749,24053,24357,24661,24965,25269,25573,25877,26181,26485,26789,27093,27397,27701,28005,28309,28613,28917,29221,29525,29829,30133,30437,30741,31045,31349,31653,31957,32261,32565,32869,33173,33477,33781,34085,34389,34693,34997,35301,35605,35909,36213,36517,36821,37125,37429,37733,38037,38341,38645,38949,39253,39557,39861,40165,40469,40773,41077,41381,41685,41989,42293,42597,42901,43205,43509,43813,44117,44421,44725,45029,45333,45637,45941,46245,46549,46853,47157,47461,47765,48069,48373,48677,48981,49285,49589,49893,50197,50501,50805,51109,51413,51717,52021,52325,52629,52933,53237,53541,53845,54149,54453,54757,55061,55365,55669,55973,56277,56581,56885,57189,57493,57797,58101,58405,58709,59013,59317,59621,59925,60229,60533,60837,61141,61445,61749,62053,62357,62661,62965,63269,63573,63877,64181,64485,64789,65093,65397,65701,66005,66309,66613,66917,67221,67525,67829,68133,68437,68741,69045,69349,69653,69957,70261,70565,70869,71173,71477,71781,72085,72389,72693,72997,73301,73605,73909,74213,74517,74821,75125,75429,75733,76037,76341,76645,76949,77253,77557'/>
+  </group>
+  <group name='37'>
+    <ids val='38,342,646,950,1254,1558,1862,2166,2470,2774,3078,3382,3686,3990,4294,4598,4902,5206,5510,5814,6118,6422,6726,7030,7334,7638,7942,8246,8550,8854,9158,9462,9766,10070,10374,10678,10982,11286,11590,11894,12198,12502,12806,13110,13414,13718,14022,14326,14630,14934,15238,15542,15846,16150,16454,16758,17062,17366,17670,17974,18278,18582,18886,19190,19494,19798,20102,20406,20710,21014,21318,21622,21926,22230,22534,22838,23142,23446,23750,24054,24358,24662,24966,25270,25574,25878,26182,26486,26790,27094,27398,27702,28006,28310,28614,28918,29222,29526,29830,30134,30438,30742,31046,31350,31654,31958,32262,32566,32870,33174,33478,33782,34086,34390,34694,34998,35302,35606,35910,36214,36518,36822,37126,37430,37734,38038,38342,38646,38950,39254,39558,39862,40166,40470,40774,41078,41382,41686,41990,42294,42598,42902,43206,43510,43814,44118,44422,44726,45030,45334,45638,45942,46246,46550,46854,47158,47462,47766,48070,48374,48678,48982,49286,49590,49894,50198,50502,50806,51110,51414,51718,52022,52326,52630,52934,53238,53542,53846,54150,54454,54758,55062,55366,55670,55974,56278,56582,56886,57190,57494,57798,58102,58406,58710,59014,59318,59622,59926,60230,60534,60838,61142,61446,61750,62054,62358,62662,62966,63270,63574,63878,64182,64486,64790,65094,65398,65702,66006,66310,66614,66918,67222,67526,67830,68134,68438,68742,69046,69350,69654,69958,70262,70566,70870,71174,71478,71782,72086,72390,72694,72998,73302,73606,73910,74214,74518,74822,75126,75430,75734,76038,76342,76646,76950,77254,77558'/>
+  </group>
+  <group name='38'>
+    <ids val='39,343,647,951,1255,1559,1863,2167,2471,2775,3079,3383,3687,3991,4295,4599,4903,5207,5511,5815,6119,6423,6727,7031,7335,7639,7943,8247,8551,8855,9159,9463,9767,10071,10375,10679,10983,11287,11591,11895,12199,12503,12807,13111,13415,13719,14023,14327,14631,14935,15239,15543,15847,16151,16455,16759,17063,17367,17671,17975,18279,18583,18887,19191,19495,19799,20103,20407,20711,21015,21319,21623,21927,22231,22535,22839,23143,23447,23751,24055,24359,24663,24967,25271,25575,25879,26183,26487,26791,27095,27399,27703,28007,28311,28615,28919,29223,29527,29831,30135,30439,30743,31047,31351,31655,31959,32263,32567,32871,33175,33479,33783,34087,34391,34695,34999,35303,35607,35911,36215,36519,36823,37127,37431,37735,38039,38343,38647,38951,39255,39559,39863,40167,40471,40775,41079,41383,41687,41991,42295,42599,42903,43207,43511,43815,44119,44423,44727,45031,45335,45639,45943,46247,46551,46855,47159,47463,47767,48071,48375,48679,48983,49287,49591,49895,50199,50503,50807,51111,51415,51719,52023,52327,52631,52935,53239,53543,53847,54151,54455,54759,55063,55367,55671,55975,56279,56583,56887,57191,57495,57799,58103,58407,58711,59015,59319,59623,59927,60231,60535,60839,61143,61447,61751,62055,62359,62663,62967,63271,63575,63879,64183,64487,64791,65095,65399,65703,66007,66311,66615,66919,67223,67527,67831,68135,68439,68743,69047,69351,69655,69959,70263,70567,70871,71175,71479,71783,72087,72391,72695,72999,73303,73607,73911,74215,74519,74823,75127,75431,75735,76039,76343,76647,76951,77255,77559'/>
+  </group>
+  <group name='39'>
+    <ids val='40,344,648,952,1256,1560,1864,2168,2472,2776,3080,3384,3688,3992,4296,4600,4904,5208,5512,5816,6120,6424,6728,7032,7336,7640,7944,8248,8552,8856,9160,9464,9768,10072,10376,10680,10984,11288,11592,11896,12200,12504,12808,13112,13416,13720,14024,14328,14632,14936,15240,15544,15848,16152,16456,16760,17064,17368,17672,17976,18280,18584,18888,19192,19496,19800,20104,20408,20712,21016,21320,21624,21928,22232,22536,22840,23144,23448,23752,24056,24360,24664,24968,25272,25576,25880,26184,26488,26792,27096,27400,27704,28008,28312,28616,28920,29224,29528,29832,30136,30440,30744,31048,31352,31656,31960,32264,32568,32872,33176,33480,33784,34088,34392,34696,35000,35304,35608,35912,36216,36520,36824,37128,37432,37736,38040,38344,38648,38952,39256,39560,39864,40168,40472,40776,41080,41384,41688,41992,42296,42600,42904,43208,43512,43816,44120,44424,44728,45032,45336,45640,45944,46248,46552,46856,47160,47464,47768,48072,48376,48680,48984,49288,49592,49896,50200,50504,50808,51112,51416,51720,52024,52328,52632,52936,53240,53544,53848,54152,54456,54760,55064,55368,55672,55976,56280,56584,56888,57192,57496,57800,58104,58408,58712,59016,59320,59624,59928,60232,60536,60840,61144,61448,61752,62056,62360,62664,62968,63272,63576,63880,64184,64488,64792,65096,65400,65704,66008,66312,66616,66920,67224,67528,67832,68136,68440,68744,69048,69352,69656,69960,70264,70568,70872,71176,71480,71784,72088,72392,72696,73000,73304,73608,73912,74216,74520,74824,75128,75432,75736,76040,76344,76648,76952,77256,77560'/>
+  </group>
+  <group name='40'>
+    <ids val='41,345,649,953,1257,1561,1865,2169,2473,2777,3081,3385,3689,3993,4297,4601,4905,5209,5513,5817,6121,6425,6729,7033,7337,7641,7945,8249,8553,8857,9161,9465,9769,10073,10377,10681,10985,11289,11593,11897,12201,12505,12809,13113,13417,13721,14025,14329,14633,14937,15241,15545,15849,16153,16457,16761,17065,17369,17673,17977,18281,18585,18889,19193,19497,19801,20105,20409,20713,21017,21321,21625,21929,22233,22537,22841,23145,23449,23753,24057,24361,24665,24969,25273,25577,25881,26185,26489,26793,27097,27401,27705,28009,28313,28617,28921,29225,29529,29833,30137,30441,30745,31049,31353,31657,31961,32265,32569,32873,33177,33481,33785,34089,34393,34697,35001,35305,35609,35913,36217,36521,36825,37129,37433,37737,38041,38345,38649,38953,39257,39561,39865,40169,40473,40777,41081,41385,41689,41993,42297,42601,42905,43209,43513,43817,44121,44425,44729,45033,45337,45641,45945,46249,46553,46857,47161,47465,47769,48073,48377,48681,48985,49289,49593,49897,50201,50505,50809,51113,51417,51721,52025,52329,52633,52937,53241,53545,53849,54153,54457,54761,55065,55369,55673,55977,56281,56585,56889,57193,57497,57801,58105,58409,58713,59017,59321,59625,59929,60233,60537,60841,61145,61449,61753,62057,62361,62665,62969,63273,63577,63881,64185,64489,64793,65097,65401,65705,66009,66313,66617,66921,67225,67529,67833,68137,68441,68745,69049,69353,69657,69961,70265,70569,70873,71177,71481,71785,72089,72393,72697,73001,73305,73609,73913,74217,74521,74825,75129,75433,75737,76041,76345,76649,76953,77257,77561'/>
+  </group>
+  <group name='41'>
+    <ids val='42,346,650,954,1258,1562,1866,2170,2474,2778,3082,3386,3690,3994,4298,4602,4906,5210,5514,5818,6122,6426,6730,7034,7338,7642,7946,8250,8554,8858,9162,9466,9770,10074,10378,10682,10986,11290,11594,11898,12202,12506,12810,13114,13418,13722,14026,14330,14634,14938,15242,15546,15850,16154,16458,16762,17066,17370,17674,17978,18282,18586,18890,19194,19498,19802,20106,20410,20714,21018,21322,21626,21930,22234,22538,22842,23146,23450,23754,24058,24362,24666,24970,25274,25578,25882,26186,26490,26794,27098,27402,27706,28010,28314,28618,28922,29226,29530,29834,30138,30442,30746,31050,31354,31658,31962,32266,32570,32874,33178,33482,33786,34090,34394,34698,35002,35306,35610,35914,36218,36522,36826,37130,37434,37738,38042,38346,38650,38954,39258,39562,39866,40170,40474,40778,41082,41386,41690,41994,42298,42602,42906,43210,43514,43818,44122,44426,44730,45034,45338,45642,45946,46250,46554,46858,47162,47466,47770,48074,48378,48682,48986,49290,49594,49898,50202,50506,50810,51114,51418,51722,52026,52330,52634,52938,53242,53546,53850,54154,54458,54762,55066,55370,55674,55978,56282,56586,56890,57194,57498,57802,58106,58410,58714,59018,59322,59626,59930,60234,60538,60842,61146,61450,61754,62058,62362,62666,62970,63274,63578,63882,64186,64490,64794,65098,65402,65706,66010,66314,66618,66922,67226,67530,67834,68138,68442,68746,69050,69354,69658,69962,70266,70570,70874,71178,71482,71786,72090,72394,72698,73002,73306,73610,73914,74218,74522,74826,75130,75434,75738,76042,76346,76650,76954,77258,77562'/>
+  </group>
+  <group name='42'>
+    <ids val='43,347,651,955,1259,1563,1867,2171,2475,2779,3083,3387,3691,3995,4299,4603,4907,5211,5515,5819,6123,6427,6731,7035,7339,7643,7947,8251,8555,8859,9163,9467,9771,10075,10379,10683,10987,11291,11595,11899,12203,12507,12811,13115,13419,13723,14027,14331,14635,14939,15243,15547,15851,16155,16459,16763,17067,17371,17675,17979,18283,18587,18891,19195,19499,19803,20107,20411,20715,21019,21323,21627,21931,22235,22539,22843,23147,23451,23755,24059,24363,24667,24971,25275,25579,25883,26187,26491,26795,27099,27403,27707,28011,28315,28619,28923,29227,29531,29835,30139,30443,30747,31051,31355,31659,31963,32267,32571,32875,33179,33483,33787,34091,34395,34699,35003,35307,35611,35915,36219,36523,36827,37131,37435,37739,38043,38347,38651,38955,39259,39563,39867,40171,40475,40779,41083,41387,41691,41995,42299,42603,42907,43211,43515,43819,44123,44427,44731,45035,45339,45643,45947,46251,46555,46859,47163,47467,47771,48075,48379,48683,48987,49291,49595,49899,50203,50507,50811,51115,51419,51723,52027,52331,52635,52939,53243,53547,53851,54155,54459,54763,55067,55371,55675,55979,56283,56587,56891,57195,57499,57803,58107,58411,58715,59019,59323,59627,59931,60235,60539,60843,61147,61451,61755,62059,62363,62667,62971,63275,63579,63883,64187,64491,64795,65099,65403,65707,66011,66315,66619,66923,67227,67531,67835,68139,68443,68747,69051,69355,69659,69963,70267,70571,70875,71179,71483,71787,72091,72395,72699,73003,73307,73611,73915,74219,74523,74827,75131,75435,75739,76043,76347,76651,76955,77259,77563'/>
+  </group>
+  <group name='43'>
+    <ids val='44,348,652,956,1260,1564,1868,2172,2476,2780,3084,3388,3692,3996,4300,4604,4908,5212,5516,5820,6124,6428,6732,7036,7340,7644,7948,8252,8556,8860,9164,9468,9772,10076,10380,10684,10988,11292,11596,11900,12204,12508,12812,13116,13420,13724,14028,14332,14636,14940,15244,15548,15852,16156,16460,16764,17068,17372,17676,17980,18284,18588,18892,19196,19500,19804,20108,20412,20716,21020,21324,21628,21932,22236,22540,22844,23148,23452,23756,24060,24364,24668,24972,25276,25580,25884,26188,26492,26796,27100,27404,27708,28012,28316,28620,28924,29228,29532,29836,30140,30444,30748,31052,31356,31660,31964,32268,32572,32876,33180,33484,33788,34092,34396,34700,35004,35308,35612,35916,36220,36524,36828,37132,37436,37740,38044,38348,38652,38956,39260,39564,39868,40172,40476,40780,41084,41388,41692,41996,42300,42604,42908,43212,43516,43820,44124,44428,44732,45036,45340,45644,45948,46252,46556,46860,47164,47468,47772,48076,48380,48684,48988,49292,49596,49900,50204,50508,50812,51116,51420,51724,52028,52332,52636,52940,53244,53548,53852,54156,54460,54764,55068,55372,55676,55980,56284,56588,56892,57196,57500,57804,58108,58412,58716,59020,59324,59628,59932,60236,60540,60844,61148,61452,61756,62060,62364,62668,62972,63276,63580,63884,64188,64492,64796,65100,65404,65708,66012,66316,66620,66924,67228,67532,67836,68140,68444,68748,69052,69356,69660,69964,70268,70572,70876,71180,71484,71788,72092,72396,72700,73004,73308,73612,73916,74220,74524,74828,75132,75436,75740,76044,76348,76652,76956,77260,77564'/>
+  </group>
+  <group name='44'>
+    <ids val='45,349,653,957,1261,1565,1869,2173,2477,2781,3085,3389,3693,3997,4301,4605,4909,5213,5517,5821,6125,6429,6733,7037,7341,7645,7949,8253,8557,8861,9165,9469,9773,10077,10381,10685,10989,11293,11597,11901,12205,12509,12813,13117,13421,13725,14029,14333,14637,14941,15245,15549,15853,16157,16461,16765,17069,17373,17677,17981,18285,18589,18893,19197,19501,19805,20109,20413,20717,21021,21325,21629,21933,22237,22541,22845,23149,23453,23757,24061,24365,24669,24973,25277,25581,25885,26189,26493,26797,27101,27405,27709,28013,28317,28621,28925,29229,29533,29837,30141,30445,30749,31053,31357,31661,31965,32269,32573,32877,33181,33485,33789,34093,34397,34701,35005,35309,35613,35917,36221,36525,36829,37133,37437,37741,38045,38349,38653,38957,39261,39565,39869,40173,40477,40781,41085,41389,41693,41997,42301,42605,42909,43213,43517,43821,44125,44429,44733,45037,45341,45645,45949,46253,46557,46861,47165,47469,47773,48077,48381,48685,48989,49293,49597,49901,50205,50509,50813,51117,51421,51725,52029,52333,52637,52941,53245,53549,53853,54157,54461,54765,55069,55373,55677,55981,56285,56589,56893,57197,57501,57805,58109,58413,58717,59021,59325,59629,59933,60237,60541,60845,61149,61453,61757,62061,62365,62669,62973,63277,63581,63885,64189,64493,64797,65101,65405,65709,66013,66317,66621,66925,67229,67533,67837,68141,68445,68749,69053,69357,69661,69965,70269,70573,70877,71181,71485,71789,72093,72397,72701,73005,73309,73613,73917,74221,74525,74829,75133,75437,75741,76045,76349,76653,76957,77261,77565'/>
+  </group>
+  <group name='45'>
+    <ids val='46,350,654,958,1262,1566,1870,2174,2478,2782,3086,3390,3694,3998,4302,4606,4910,5214,5518,5822,6126,6430,6734,7038,7342,7646,7950,8254,8558,8862,9166,9470,9774,10078,10382,10686,10990,11294,11598,11902,12206,12510,12814,13118,13422,13726,14030,14334,14638,14942,15246,15550,15854,16158,16462,16766,17070,17374,17678,17982,18286,18590,18894,19198,19502,19806,20110,20414,20718,21022,21326,21630,21934,22238,22542,22846,23150,23454,23758,24062,24366,24670,24974,25278,25582,25886,26190,26494,26798,27102,27406,27710,28014,28318,28622,28926,29230,29534,29838,30142,30446,30750,31054,31358,31662,31966,32270,32574,32878,33182,33486,33790,34094,34398,34702,35006,35310,35614,35918,36222,36526,36830,37134,37438,37742,38046,38350,38654,38958,39262,39566,39870,40174,40478,40782,41086,41390,41694,41998,42302,42606,42910,43214,43518,43822,44126,44430,44734,45038,45342,45646,45950,46254,46558,46862,47166,47470,47774,48078,48382,48686,48990,49294,49598,49902,50206,50510,50814,51118,51422,51726,52030,52334,52638,52942,53246,53550,53854,54158,54462,54766,55070,55374,55678,55982,56286,56590,56894,57198,57502,57806,58110,58414,58718,59022,59326,59630,59934,60238,60542,60846,61150,61454,61758,62062,62366,62670,62974,63278,63582,63886,64190,64494,64798,65102,65406,65710,66014,66318,66622,66926,67230,67534,67838,68142,68446,68750,69054,69358,69662,69966,70270,70574,70878,71182,71486,71790,72094,72398,72702,73006,73310,73614,73918,74222,74526,74830,75134,75438,75742,76046,76350,76654,76958,77262,77566'/>
+  </group>
+  <group name='46'>
+    <ids val='47,351,655,959,1263,1567,1871,2175,2479,2783,3087,3391,3695,3999,4303,4607,4911,5215,5519,5823,6127,6431,6735,7039,7343,7647,7951,8255,8559,8863,9167,9471,9775,10079,10383,10687,10991,11295,11599,11903,12207,12511,12815,13119,13423,13727,14031,14335,14639,14943,15247,15551,15855,16159,16463,16767,17071,17375,17679,17983,18287,18591,18895,19199,19503,19807,20111,20415,20719,21023,21327,21631,21935,22239,22543,22847,23151,23455,23759,24063,24367,24671,24975,25279,25583,25887,26191,26495,26799,27103,27407,27711,28015,28319,28623,28927,29231,29535,29839,30143,30447,30751,31055,31359,31663,31967,32271,32575,32879,33183,33487,33791,34095,34399,34703,35007,35311,35615,35919,36223,36527,36831,37135,37439,37743,38047,38351,38655,38959,39263,39567,39871,40175,40479,40783,41087,41391,41695,41999,42303,42607,42911,43215,43519,43823,44127,44431,44735,45039,45343,45647,45951,46255,46559,46863,47167,47471,47775,48079,48383,48687,48991,49295,49599,49903,50207,50511,50815,51119,51423,51727,52031,52335,52639,52943,53247,53551,53855,54159,54463,54767,55071,55375,55679,55983,56287,56591,56895,57199,57503,57807,58111,58415,58719,59023,59327,59631,59935,60239,60543,60847,61151,61455,61759,62063,62367,62671,62975,63279,63583,63887,64191,64495,64799,65103,65407,65711,66015,66319,66623,66927,67231,67535,67839,68143,68447,68751,69055,69359,69663,69967,70271,70575,70879,71183,71487,71791,72095,72399,72703,73007,73311,73615,73919,74223,74527,74831,75135,75439,75743,76047,76351,76655,76959,77263,77567'/>
+  </group>
+  <group name='47'>
+    <ids val='48,352,656,960,1264,1568,1872,2176,2480,2784,3088,3392,3696,4000,4304,4608,4912,5216,5520,5824,6128,6432,6736,7040,7344,7648,7952,8256,8560,8864,9168,9472,9776,10080,10384,10688,10992,11296,11600,11904,12208,12512,12816,13120,13424,13728,14032,14336,14640,14944,15248,15552,15856,16160,16464,16768,17072,17376,17680,17984,18288,18592,18896,19200,19504,19808,20112,20416,20720,21024,21328,21632,21936,22240,22544,22848,23152,23456,23760,24064,24368,24672,24976,25280,25584,25888,26192,26496,26800,27104,27408,27712,28016,28320,28624,28928,29232,29536,29840,30144,30448,30752,31056,31360,31664,31968,32272,32576,32880,33184,33488,33792,34096,34400,34704,35008,35312,35616,35920,36224,36528,36832,37136,37440,37744,38048,38352,38656,38960,39264,39568,39872,40176,40480,40784,41088,41392,41696,42000,42304,42608,42912,43216,43520,43824,44128,44432,44736,45040,45344,45648,45952,46256,46560,46864,47168,47472,47776,48080,48384,48688,48992,49296,49600,49904,50208,50512,50816,51120,51424,51728,52032,52336,52640,52944,53248,53552,53856,54160,54464,54768,55072,55376,55680,55984,56288,56592,56896,57200,57504,57808,58112,58416,58720,59024,59328,59632,59936,60240,60544,60848,61152,61456,61760,62064,62368,62672,62976,63280,63584,63888,64192,64496,64800,65104,65408,65712,66016,66320,66624,66928,67232,67536,67840,68144,68448,68752,69056,69360,69664,69968,70272,70576,70880,71184,71488,71792,72096,72400,72704,73008,73312,73616,73920,74224,74528,74832,75136,75440,75744,76048,76352,76656,76960,77264,77568'/>
+  </group>
+  <group name='48'>
+    <ids val='49,353,657,961,1265,1569,1873,2177,2481,2785,3089,3393,3697,4001,4305,4609,4913,5217,5521,5825,6129,6433,6737,7041,7345,7649,7953,8257,8561,8865,9169,9473,9777,10081,10385,10689,10993,11297,11601,11905,12209,12513,12817,13121,13425,13729,14033,14337,14641,14945,15249,15553,15857,16161,16465,16769,17073,17377,17681,17985,18289,18593,18897,19201,19505,19809,20113,20417,20721,21025,21329,21633,21937,22241,22545,22849,23153,23457,23761,24065,24369,24673,24977,25281,25585,25889,26193,26497,26801,27105,27409,27713,28017,28321,28625,28929,29233,29537,29841,30145,30449,30753,31057,31361,31665,31969,32273,32577,32881,33185,33489,33793,34097,34401,34705,35009,35313,35617,35921,36225,36529,36833,37137,37441,37745,38049,38353,38657,38961,39265,39569,39873,40177,40481,40785,41089,41393,41697,42001,42305,42609,42913,43217,43521,43825,44129,44433,44737,45041,45345,45649,45953,46257,46561,46865,47169,47473,47777,48081,48385,48689,48993,49297,49601,49905,50209,50513,50817,51121,51425,51729,52033,52337,52641,52945,53249,53553,53857,54161,54465,54769,55073,55377,55681,55985,56289,56593,56897,57201,57505,57809,58113,58417,58721,59025,59329,59633,59937,60241,60545,60849,61153,61457,61761,62065,62369,62673,62977,63281,63585,63889,64193,64497,64801,65105,65409,65713,66017,66321,66625,66929,67233,67537,67841,68145,68449,68753,69057,69361,69665,69969,70273,70577,70881,71185,71489,71793,72097,72401,72705,73009,73313,73617,73921,74225,74529,74833,75137,75441,75745,76049,76353,76657,76961,77265,77569'/>
+  </group>
+  <group name='49'>
+    <ids val='50,354,658,962,1266,1570,1874,2178,2482,2786,3090,3394,3698,4002,4306,4610,4914,5218,5522,5826,6130,6434,6738,7042,7346,7650,7954,8258,8562,8866,9170,9474,9778,10082,10386,10690,10994,11298,11602,11906,12210,12514,12818,13122,13426,13730,14034,14338,14642,14946,15250,15554,15858,16162,16466,16770,17074,17378,17682,17986,18290,18594,18898,19202,19506,19810,20114,20418,20722,21026,21330,21634,21938,22242,22546,22850,23154,23458,23762,24066,24370,24674,24978,25282,25586,25890,26194,26498,26802,27106,27410,27714,28018,28322,28626,28930,29234,29538,29842,30146,30450,30754,31058,31362,31666,31970,32274,32578,32882,33186,33490,33794,34098,34402,34706,35010,35314,35618,35922,36226,36530,36834,37138,37442,37746,38050,38354,38658,38962,39266,39570,39874,40178,40482,40786,41090,41394,41698,42002,42306,42610,42914,43218,43522,43826,44130,44434,44738,45042,45346,45650,45954,46258,46562,46866,47170,47474,47778,48082,48386,48690,48994,49298,49602,49906,50210,50514,50818,51122,51426,51730,52034,52338,52642,52946,53250,53554,53858,54162,54466,54770,55074,55378,55682,55986,56290,56594,56898,57202,57506,57810,58114,58418,58722,59026,59330,59634,59938,60242,60546,60850,61154,61458,61762,62066,62370,62674,62978,63282,63586,63890,64194,64498,64802,65106,65410,65714,66018,66322,66626,66930,67234,67538,67842,68146,68450,68754,69058,69362,69666,69970,70274,70578,70882,71186,71490,71794,72098,72402,72706,73010,73314,73618,73922,74226,74530,74834,75138,75442,75746,76050,76354,76658,76962,77266,77570'/>
+  </group>
+  <group name='50'>
+    <ids val='51,355,659,963,1267,1571,1875,2179,2483,2787,3091,3395,3699,4003,4307,4611,4915,5219,5523,5827,6131,6435,6739,7043,7347,7651,7955,8259,8563,8867,9171,9475,9779,10083,10387,10691,10995,11299,11603,11907,12211,12515,12819,13123,13427,13731,14035,14339,14643,14947,15251,15555,15859,16163,16467,16771,17075,17379,17683,17987,18291,18595,18899,19203,19507,19811,20115,20419,20723,21027,21331,21635,21939,22243,22547,22851,23155,23459,23763,24067,24371,24675,24979,25283,25587,25891,26195,26499,26803,27107,27411,27715,28019,28323,28627,28931,29235,29539,29843,30147,30451,30755,31059,31363,31667,31971,32275,32579,32883,33187,33491,33795,34099,34403,34707,35011,35315,35619,35923,36227,36531,36835,37139,37443,37747,38051,38355,38659,38963,39267,39571,39875,40179,40483,40787,41091,41395,41699,42003,42307,42611,42915,43219,43523,43827,44131,44435,44739,45043,45347,45651,45955,46259,46563,46867,47171,47475,47779,48083,48387,48691,48995,49299,49603,49907,50211,50515,50819,51123,51427,51731,52035,52339,52643,52947,53251,53555,53859,54163,54467,54771,55075,55379,55683,55987,56291,56595,56899,57203,57507,57811,58115,58419,58723,59027,59331,59635,59939,60243,60547,60851,61155,61459,61763,62067,62371,62675,62979,63283,63587,63891,64195,64499,64803,65107,65411,65715,66019,66323,66627,66931,67235,67539,67843,68147,68451,68755,69059,69363,69667,69971,70275,70579,70883,71187,71491,71795,72099,72403,72707,73011,73315,73619,73923,74227,74531,74835,75139,75443,75747,76051,76355,76659,76963,77267,77571'/>
+  </group>
+  <group name='51'>
+    <ids val='52,356,660,964,1268,1572,1876,2180,2484,2788,3092,3396,3700,4004,4308,4612,4916,5220,5524,5828,6132,6436,6740,7044,7348,7652,7956,8260,8564,8868,9172,9476,9780,10084,10388,10692,10996,11300,11604,11908,12212,12516,12820,13124,13428,13732,14036,14340,14644,14948,15252,15556,15860,16164,16468,16772,17076,17380,17684,17988,18292,18596,18900,19204,19508,19812,20116,20420,20724,21028,21332,21636,21940,22244,22548,22852,23156,23460,23764,24068,24372,24676,24980,25284,25588,25892,26196,26500,26804,27108,27412,27716,28020,28324,28628,28932,29236,29540,29844,30148,30452,30756,31060,31364,31668,31972,32276,32580,32884,33188,33492,33796,34100,34404,34708,35012,35316,35620,35924,36228,36532,36836,37140,37444,37748,38052,38356,38660,38964,39268,39572,39876,40180,40484,40788,41092,41396,41700,42004,42308,42612,42916,43220,43524,43828,44132,44436,44740,45044,45348,45652,45956,46260,46564,46868,47172,47476,47780,48084,48388,48692,48996,49300,49604,49908,50212,50516,50820,51124,51428,51732,52036,52340,52644,52948,53252,53556,53860,54164,54468,54772,55076,55380,55684,55988,56292,56596,56900,57204,57508,57812,58116,58420,58724,59028,59332,59636,59940,60244,60548,60852,61156,61460,61764,62068,62372,62676,62980,63284,63588,63892,64196,64500,64804,65108,65412,65716,66020,66324,66628,66932,67236,67540,67844,68148,68452,68756,69060,69364,69668,69972,70276,70580,70884,71188,71492,71796,72100,72404,72708,73012,73316,73620,73924,74228,74532,74836,75140,75444,75748,76052,76356,76660,76964,77268,77572'/>
+  </group>
+  <group name='52'>
+    <ids val='53,357,661,965,1269,1573,1877,2181,2485,2789,3093,3397,3701,4005,4309,4613,4917,5221,5525,5829,6133,6437,6741,7045,7349,7653,7957,8261,8565,8869,9173,9477,9781,10085,10389,10693,10997,11301,11605,11909,12213,12517,12821,13125,13429,13733,14037,14341,14645,14949,15253,15557,15861,16165,16469,16773,17077,17381,17685,17989,18293,18597,18901,19205,19509,19813,20117,20421,20725,21029,21333,21637,21941,22245,22549,22853,23157,23461,23765,24069,24373,24677,24981,25285,25589,25893,26197,26501,26805,27109,27413,27717,28021,28325,28629,28933,29237,29541,29845,30149,30453,30757,31061,31365,31669,31973,32277,32581,32885,33189,33493,33797,34101,34405,34709,35013,35317,35621,35925,36229,36533,36837,37141,37445,37749,38053,38357,38661,38965,39269,39573,39877,40181,40485,40789,41093,41397,41701,42005,42309,42613,42917,43221,43525,43829,44133,44437,44741,45045,45349,45653,45957,46261,46565,46869,47173,47477,47781,48085,48389,48693,48997,49301,49605,49909,50213,50517,50821,51125,51429,51733,52037,52341,52645,52949,53253,53557,53861,54165,54469,54773,55077,55381,55685,55989,56293,56597,56901,57205,57509,57813,58117,58421,58725,59029,59333,59637,59941,60245,60549,60853,61157,61461,61765,62069,62373,62677,62981,63285,63589,63893,64197,64501,64805,65109,65413,65717,66021,66325,66629,66933,67237,67541,67845,68149,68453,68757,69061,69365,69669,69973,70277,70581,70885,71189,71493,71797,72101,72405,72709,73013,73317,73621,73925,74229,74533,74837,75141,75445,75749,76053,76357,76661,76965,77269,77573'/>
+  </group>
+  <group name='53'>
+    <ids val='54,358,662,966,1270,1574,1878,2182,2486,2790,3094,3398,3702,4006,4310,4614,4918,5222,5526,5830,6134,6438,6742,7046,7350,7654,7958,8262,8566,8870,9174,9478,9782,10086,10390,10694,10998,11302,11606,11910,12214,12518,12822,13126,13430,13734,14038,14342,14646,14950,15254,15558,15862,16166,16470,16774,17078,17382,17686,17990,18294,18598,18902,19206,19510,19814,20118,20422,20726,21030,21334,21638,21942,22246,22550,22854,23158,23462,23766,24070,24374,24678,24982,25286,25590,25894,26198,26502,26806,27110,27414,27718,28022,28326,28630,28934,29238,29542,29846,30150,30454,30758,31062,31366,31670,31974,32278,32582,32886,33190,33494,33798,34102,34406,34710,35014,35318,35622,35926,36230,36534,36838,37142,37446,37750,38054,38358,38662,38966,39270,39574,39878,40182,40486,40790,41094,41398,41702,42006,42310,42614,42918,43222,43526,43830,44134,44438,44742,45046,45350,45654,45958,46262,46566,46870,47174,47478,47782,48086,48390,48694,48998,49302,49606,49910,50214,50518,50822,51126,51430,51734,52038,52342,52646,52950,53254,53558,53862,54166,54470,54774,55078,55382,55686,55990,56294,56598,56902,57206,57510,57814,58118,58422,58726,59030,59334,59638,59942,60246,60550,60854,61158,61462,61766,62070,62374,62678,62982,63286,63590,63894,64198,64502,64806,65110,65414,65718,66022,66326,66630,66934,67238,67542,67846,68150,68454,68758,69062,69366,69670,69974,70278,70582,70886,71190,71494,71798,72102,72406,72710,73014,73318,73622,73926,74230,74534,74838,75142,75446,75750,76054,76358,76662,76966,77270,77574'/>
+  </group>
+  <group name='54'>
+    <ids val='55,359,663,967,1271,1575,1879,2183,2487,2791,3095,3399,3703,4007,4311,4615,4919,5223,5527,5831,6135,6439,6743,7047,7351,7655,7959,8263,8567,8871,9175,9479,9783,10087,10391,10695,10999,11303,11607,11911,12215,12519,12823,13127,13431,13735,14039,14343,14647,14951,15255,15559,15863,16167,16471,16775,17079,17383,17687,17991,18295,18599,18903,19207,19511,19815,20119,20423,20727,21031,21335,21639,21943,22247,22551,22855,23159,23463,23767,24071,24375,24679,24983,25287,25591,25895,26199,26503,26807,27111,27415,27719,28023,28327,28631,28935,29239,29543,29847,30151,30455,30759,31063,31367,31671,31975,32279,32583,32887,33191,33495,33799,34103,34407,34711,35015,35319,35623,35927,36231,36535,36839,37143,37447,37751,38055,38359,38663,38967,39271,39575,39879,40183,40487,40791,41095,41399,41703,42007,42311,42615,42919,43223,43527,43831,44135,44439,44743,45047,45351,45655,45959,46263,46567,46871,47175,47479,47783,48087,48391,48695,48999,49303,49607,49911,50215,50519,50823,51127,51431,51735,52039,52343,52647,52951,53255,53559,53863,54167,54471,54775,55079,55383,55687,55991,56295,56599,56903,57207,57511,57815,58119,58423,58727,59031,59335,59639,59943,60247,60551,60855,61159,61463,61767,62071,62375,62679,62983,63287,63591,63895,64199,64503,64807,65111,65415,65719,66023,66327,66631,66935,67239,67543,67847,68151,68455,68759,69063,69367,69671,69975,70279,70583,70887,71191,71495,71799,72103,72407,72711,73015,73319,73623,73927,74231,74535,74839,75143,75447,75751,76055,76359,76663,76967,77271,77575'/>
+  </group>
+  <group name='55'>
+    <ids val='56,360,664,968,1272,1576,1880,2184,2488,2792,3096,3400,3704,4008,4312,4616,4920,5224,5528,5832,6136,6440,6744,7048,7352,7656,7960,8264,8568,8872,9176,9480,9784,10088,10392,10696,11000,11304,11608,11912,12216,12520,12824,13128,13432,13736,14040,14344,14648,14952,15256,15560,15864,16168,16472,16776,17080,17384,17688,17992,18296,18600,18904,19208,19512,19816,20120,20424,20728,21032,21336,21640,21944,22248,22552,22856,23160,23464,23768,24072,24376,24680,24984,25288,25592,25896,26200,26504,26808,27112,27416,27720,28024,28328,28632,28936,29240,29544,29848,30152,30456,30760,31064,31368,31672,31976,32280,32584,32888,33192,33496,33800,34104,34408,34712,35016,35320,35624,35928,36232,36536,36840,37144,37448,37752,38056,38360,38664,38968,39272,39576,39880,40184,40488,40792,41096,41400,41704,42008,42312,42616,42920,43224,43528,43832,44136,44440,44744,45048,45352,45656,45960,46264,46568,46872,47176,47480,47784,48088,48392,48696,49000,49304,49608,49912,50216,50520,50824,51128,51432,51736,52040,52344,52648,52952,53256,53560,53864,54168,54472,54776,55080,55384,55688,55992,56296,56600,56904,57208,57512,57816,58120,58424,58728,59032,59336,59640,59944,60248,60552,60856,61160,61464,61768,62072,62376,62680,62984,63288,63592,63896,64200,64504,64808,65112,65416,65720,66024,66328,66632,66936,67240,67544,67848,68152,68456,68760,69064,69368,69672,69976,70280,70584,70888,71192,71496,71800,72104,72408,72712,73016,73320,73624,73928,74232,74536,74840,75144,75448,75752,76056,76360,76664,76968,77272,77576'/>
+  </group>
+  <group name='56'>
+    <ids val='57,361,665,969,1273,1577,1881,2185,2489,2793,3097,3401,3705,4009,4313,4617,4921,5225,5529,5833,6137,6441,6745,7049,7353,7657,7961,8265,8569,8873,9177,9481,9785,10089,10393,10697,11001,11305,11609,11913,12217,12521,12825,13129,13433,13737,14041,14345,14649,14953,15257,15561,15865,16169,16473,16777,17081,17385,17689,17993,18297,18601,18905,19209,19513,19817,20121,20425,20729,21033,21337,21641,21945,22249,22553,22857,23161,23465,23769,24073,24377,24681,24985,25289,25593,25897,26201,26505,26809,27113,27417,27721,28025,28329,28633,28937,29241,29545,29849,30153,30457,30761,31065,31369,31673,31977,32281,32585,32889,33193,33497,33801,34105,34409,34713,35017,35321,35625,35929,36233,36537,36841,37145,37449,37753,38057,38361,38665,38969,39273,39577,39881,40185,40489,40793,41097,41401,41705,42009,42313,42617,42921,43225,43529,43833,44137,44441,44745,45049,45353,45657,45961,46265,46569,46873,47177,47481,47785,48089,48393,48697,49001,49305,49609,49913,50217,50521,50825,51129,51433,51737,52041,52345,52649,52953,53257,53561,53865,54169,54473,54777,55081,55385,55689,55993,56297,56601,56905,57209,57513,57817,58121,58425,58729,59033,59337,59641,59945,60249,60553,60857,61161,61465,61769,62073,62377,62681,62985,63289,63593,63897,64201,64505,64809,65113,65417,65721,66025,66329,66633,66937,67241,67545,67849,68153,68457,68761,69065,69369,69673,69977,70281,70585,70889,71193,71497,71801,72105,72409,72713,73017,73321,73625,73929,74233,74537,74841,75145,75449,75753,76057,76361,76665,76969,77273,77577'/>
+  </group>
+  <group name='57'>
+    <ids val='58,362,666,970,1274,1578,1882,2186,2490,2794,3098,3402,3706,4010,4314,4618,4922,5226,5530,5834,6138,6442,6746,7050,7354,7658,7962,8266,8570,8874,9178,9482,9786,10090,10394,10698,11002,11306,11610,11914,12218,12522,12826,13130,13434,13738,14042,14346,14650,14954,15258,15562,15866,16170,16474,16778,17082,17386,17690,17994,18298,18602,18906,19210,19514,19818,20122,20426,20730,21034,21338,21642,21946,22250,22554,22858,23162,23466,23770,24074,24378,24682,24986,25290,25594,25898,26202,26506,26810,27114,27418,27722,28026,28330,28634,28938,29242,29546,29850,30154,30458,30762,31066,31370,31674,31978,32282,32586,32890,33194,33498,33802,34106,34410,34714,35018,35322,35626,35930,36234,36538,36842,37146,37450,37754,38058,38362,38666,38970,39274,39578,39882,40186,40490,40794,41098,41402,41706,42010,42314,42618,42922,43226,43530,43834,44138,44442,44746,45050,45354,45658,45962,46266,46570,46874,47178,47482,47786,48090,48394,48698,49002,49306,49610,49914,50218,50522,50826,51130,51434,51738,52042,52346,52650,52954,53258,53562,53866,54170,54474,54778,55082,55386,55690,55994,56298,56602,56906,57210,57514,57818,58122,58426,58730,59034,59338,59642,59946,60250,60554,60858,61162,61466,61770,62074,62378,62682,62986,63290,63594,63898,64202,64506,64810,65114,65418,65722,66026,66330,66634,66938,67242,67546,67850,68154,68458,68762,69066,69370,69674,69978,70282,70586,70890,71194,71498,71802,72106,72410,72714,73018,73322,73626,73930,74234,74538,74842,75146,75450,75754,76058,76362,76666,76970,77274,77578'/>
+  </group>
+  <group name='58'>
+    <ids val='59,363,667,971,1275,1579,1883,2187,2491,2795,3099,3403,3707,4011,4315,4619,4923,5227,5531,5835,6139,6443,6747,7051,7355,7659,7963,8267,8571,8875,9179,9483,9787,10091,10395,10699,11003,11307,11611,11915,12219,12523,12827,13131,13435,13739,14043,14347,14651,14955,15259,15563,15867,16171,16475,16779,17083,17387,17691,17995,18299,18603,18907,19211,19515,19819,20123,20427,20731,21035,21339,21643,21947,22251,22555,22859,23163,23467,23771,24075,24379,24683,24987,25291,25595,25899,26203,26507,26811,27115,27419,27723,28027,28331,28635,28939,29243,29547,29851,30155,30459,30763,31067,31371,31675,31979,32283,32587,32891,33195,33499,33803,34107,34411,34715,35019,35323,35627,35931,36235,36539,36843,37147,37451,37755,38059,38363,38667,38971,39275,39579,39883,40187,40491,40795,41099,41403,41707,42011,42315,42619,42923,43227,43531,43835,44139,44443,44747,45051,45355,45659,45963,46267,46571,46875,47179,47483,47787,48091,48395,48699,49003,49307,49611,49915,50219,50523,50827,51131,51435,51739,52043,52347,52651,52955,53259,53563,53867,54171,54475,54779,55083,55387,55691,55995,56299,56603,56907,57211,57515,57819,58123,58427,58731,59035,59339,59643,59947,60251,60555,60859,61163,61467,61771,62075,62379,62683,62987,63291,63595,63899,64203,64507,64811,65115,65419,65723,66027,66331,66635,66939,67243,67547,67851,68155,68459,68763,69067,69371,69675,69979,70283,70587,70891,71195,71499,71803,72107,72411,72715,73019,73323,73627,73931,74235,74539,74843,75147,75451,75755,76059,76363,76667,76971,77275,77579'/>
+  </group>
+  <group name='59'>
+    <ids val='60,364,668,972,1276,1580,1884,2188,2492,2796,3100,3404,3708,4012,4316,4620,4924,5228,5532,5836,6140,6444,6748,7052,7356,7660,7964,8268,8572,8876,9180,9484,9788,10092,10396,10700,11004,11308,11612,11916,12220,12524,12828,13132,13436,13740,14044,14348,14652,14956,15260,15564,15868,16172,16476,16780,17084,17388,17692,17996,18300,18604,18908,19212,19516,19820,20124,20428,20732,21036,21340,21644,21948,22252,22556,22860,23164,23468,23772,24076,24380,24684,24988,25292,25596,25900,26204,26508,26812,27116,27420,27724,28028,28332,28636,28940,29244,29548,29852,30156,30460,30764,31068,31372,31676,31980,32284,32588,32892,33196,33500,33804,34108,34412,34716,35020,35324,35628,35932,36236,36540,36844,37148,37452,37756,38060,38364,38668,38972,39276,39580,39884,40188,40492,40796,41100,41404,41708,42012,42316,42620,42924,43228,43532,43836,44140,44444,44748,45052,45356,45660,45964,46268,46572,46876,47180,47484,47788,48092,48396,48700,49004,49308,49612,49916,50220,50524,50828,51132,51436,51740,52044,52348,52652,52956,53260,53564,53868,54172,54476,54780,55084,55388,55692,55996,56300,56604,56908,57212,57516,57820,58124,58428,58732,59036,59340,59644,59948,60252,60556,60860,61164,61468,61772,62076,62380,62684,62988,63292,63596,63900,64204,64508,64812,65116,65420,65724,66028,66332,66636,66940,67244,67548,67852,68156,68460,68764,69068,69372,69676,69980,70284,70588,70892,71196,71500,71804,72108,72412,72716,73020,73324,73628,73932,74236,74540,74844,75148,75452,75756,76060,76364,76668,76972,77276,77580'/>
+  </group>
+  <group name='60'>
+    <ids val='61,365,669,973,1277,1581,1885,2189,2493,2797,3101,3405,3709,4013,4317,4621,4925,5229,5533,5837,6141,6445,6749,7053,7357,7661,7965,8269,8573,8877,9181,9485,9789,10093,10397,10701,11005,11309,11613,11917,12221,12525,12829,13133,13437,13741,14045,14349,14653,14957,15261,15565,15869,16173,16477,16781,17085,17389,17693,17997,18301,18605,18909,19213,19517,19821,20125,20429,20733,21037,21341,21645,21949,22253,22557,22861,23165,23469,23773,24077,24381,24685,24989,25293,25597,25901,26205,26509,26813,27117,27421,27725,28029,28333,28637,28941,29245,29549,29853,30157,30461,30765,31069,31373,31677,31981,32285,32589,32893,33197,33501,33805,34109,34413,34717,35021,35325,35629,35933,36237,36541,36845,37149,37453,37757,38061,38365,38669,38973,39277,39581,39885,40189,40493,40797,41101,41405,41709,42013,42317,42621,42925,43229,43533,43837,44141,44445,44749,45053,45357,45661,45965,46269,46573,46877,47181,47485,47789,48093,48397,48701,49005,49309,49613,49917,50221,50525,50829,51133,51437,51741,52045,52349,52653,52957,53261,53565,53869,54173,54477,54781,55085,55389,55693,55997,56301,56605,56909,57213,57517,57821,58125,58429,58733,59037,59341,59645,59949,60253,60557,60861,61165,61469,61773,62077,62381,62685,62989,63293,63597,63901,64205,64509,64813,65117,65421,65725,66029,66333,66637,66941,67245,67549,67853,68157,68461,68765,69069,69373,69677,69981,70285,70589,70893,71197,71501,71805,72109,72413,72717,73021,73325,73629,73933,74237,74541,74845,75149,75453,75757,76061,76365,76669,76973,77277,77581'/>
+  </group>
+  <group name='61'>
+    <ids val='62,366,670,974,1278,1582,1886,2190,2494,2798,3102,3406,3710,4014,4318,4622,4926,5230,5534,5838,6142,6446,6750,7054,7358,7662,7966,8270,8574,8878,9182,9486,9790,10094,10398,10702,11006,11310,11614,11918,12222,12526,12830,13134,13438,13742,14046,14350,14654,14958,15262,15566,15870,16174,16478,16782,17086,17390,17694,17998,18302,18606,18910,19214,19518,19822,20126,20430,20734,21038,21342,21646,21950,22254,22558,22862,23166,23470,23774,24078,24382,24686,24990,25294,25598,25902,26206,26510,26814,27118,27422,27726,28030,28334,28638,28942,29246,29550,29854,30158,30462,30766,31070,31374,31678,31982,32286,32590,32894,33198,33502,33806,34110,34414,34718,35022,35326,35630,35934,36238,36542,36846,37150,37454,37758,38062,38366,38670,38974,39278,39582,39886,40190,40494,40798,41102,41406,41710,42014,42318,42622,42926,43230,43534,43838,44142,44446,44750,45054,45358,45662,45966,46270,46574,46878,47182,47486,47790,48094,48398,48702,49006,49310,49614,49918,50222,50526,50830,51134,51438,51742,52046,52350,52654,52958,53262,53566,53870,54174,54478,54782,55086,55390,55694,55998,56302,56606,56910,57214,57518,57822,58126,58430,58734,59038,59342,59646,59950,60254,60558,60862,61166,61470,61774,62078,62382,62686,62990,63294,63598,63902,64206,64510,64814,65118,65422,65726,66030,66334,66638,66942,67246,67550,67854,68158,68462,68766,69070,69374,69678,69982,70286,70590,70894,71198,71502,71806,72110,72414,72718,73022,73326,73630,73934,74238,74542,74846,75150,75454,75758,76062,76366,76670,76974,77278,77582'/>
+  </group>
+  <group name='62'>
+    <ids val='63,367,671,975,1279,1583,1887,2191,2495,2799,3103,3407,3711,4015,4319,4623,4927,5231,5535,5839,6143,6447,6751,7055,7359,7663,7967,8271,8575,8879,9183,9487,9791,10095,10399,10703,11007,11311,11615,11919,12223,12527,12831,13135,13439,13743,14047,14351,14655,14959,15263,15567,15871,16175,16479,16783,17087,17391,17695,17999,18303,18607,18911,19215,19519,19823,20127,20431,20735,21039,21343,21647,21951,22255,22559,22863,23167,23471,23775,24079,24383,24687,24991,25295,25599,25903,26207,26511,26815,27119,27423,27727,28031,28335,28639,28943,29247,29551,29855,30159,30463,30767,31071,31375,31679,31983,32287,32591,32895,33199,33503,33807,34111,34415,34719,35023,35327,35631,35935,36239,36543,36847,37151,37455,37759,38063,38367,38671,38975,39279,39583,39887,40191,40495,40799,41103,41407,41711,42015,42319,42623,42927,43231,43535,43839,44143,44447,44751,45055,45359,45663,45967,46271,46575,46879,47183,47487,47791,48095,48399,48703,49007,49311,49615,49919,50223,50527,50831,51135,51439,51743,52047,52351,52655,52959,53263,53567,53871,54175,54479,54783,55087,55391,55695,55999,56303,56607,56911,57215,57519,57823,58127,58431,58735,59039,59343,59647,59951,60255,60559,60863,61167,61471,61775,62079,62383,62687,62991,63295,63599,63903,64207,64511,64815,65119,65423,65727,66031,66335,66639,66943,67247,67551,67855,68159,68463,68767,69071,69375,69679,69983,70287,70591,70895,71199,71503,71807,72111,72415,72719,73023,73327,73631,73935,74239,74543,74847,75151,75455,75759,76063,76367,76671,76975,77279,77583'/>
+  </group>
+  <group name='63'>
+    <ids val='64,368,672,976,1280,1584,1888,2192,2496,2800,3104,3408,3712,4016,4320,4624,4928,5232,5536,5840,6144,6448,6752,7056,7360,7664,7968,8272,8576,8880,9184,9488,9792,10096,10400,10704,11008,11312,11616,11920,12224,12528,12832,13136,13440,13744,14048,14352,14656,14960,15264,15568,15872,16176,16480,16784,17088,17392,17696,18000,18304,18608,18912,19216,19520,19824,20128,20432,20736,21040,21344,21648,21952,22256,22560,22864,23168,23472,23776,24080,24384,24688,24992,25296,25600,25904,26208,26512,26816,27120,27424,27728,28032,28336,28640,28944,29248,29552,29856,30160,30464,30768,31072,31376,31680,31984,32288,32592,32896,33200,33504,33808,34112,34416,34720,35024,35328,35632,35936,36240,36544,36848,37152,37456,37760,38064,38368,38672,38976,39280,39584,39888,40192,40496,40800,41104,41408,41712,42016,42320,42624,42928,43232,43536,43840,44144,44448,44752,45056,45360,45664,45968,46272,46576,46880,47184,47488,47792,48096,48400,48704,49008,49312,49616,49920,50224,50528,50832,51136,51440,51744,52048,52352,52656,52960,53264,53568,53872,54176,54480,54784,55088,55392,55696,56000,56304,56608,56912,57216,57520,57824,58128,58432,58736,59040,59344,59648,59952,60256,60560,60864,61168,61472,61776,62080,62384,62688,62992,63296,63600,63904,64208,64512,64816,65120,65424,65728,66032,66336,66640,66944,67248,67552,67856,68160,68464,68768,69072,69376,69680,69984,70288,70592,70896,71200,71504,71808,72112,72416,72720,73024,73328,73632,73936,74240,74544,74848,75152,75456,75760,76064,76368,76672,76976,77280,77584'/>
+  </group>
+  <group name='64'>
+    <ids val='65,369,673,977,1281,1585,1889,2193,2497,2801,3105,3409,3713,4017,4321,4625,4929,5233,5537,5841,6145,6449,6753,7057,7361,7665,7969,8273,8577,8881,9185,9489,9793,10097,10401,10705,11009,11313,11617,11921,12225,12529,12833,13137,13441,13745,14049,14353,14657,14961,15265,15569,15873,16177,16481,16785,17089,17393,17697,18001,18305,18609,18913,19217,19521,19825,20129,20433,20737,21041,21345,21649,21953,22257,22561,22865,23169,23473,23777,24081,24385,24689,24993,25297,25601,25905,26209,26513,26817,27121,27425,27729,28033,28337,28641,28945,29249,29553,29857,30161,30465,30769,31073,31377,31681,31985,32289,32593,32897,33201,33505,33809,34113,34417,34721,35025,35329,35633,35937,36241,36545,36849,37153,37457,37761,38065,38369,38673,38977,39281,39585,39889,40193,40497,40801,41105,41409,41713,42017,42321,42625,42929,43233,43537,43841,44145,44449,44753,45057,45361,45665,45969,46273,46577,46881,47185,47489,47793,48097,48401,48705,49009,49313,49617,49921,50225,50529,50833,51137,51441,51745,52049,52353,52657,52961,53265,53569,53873,54177,54481,54785,55089,55393,55697,56001,56305,56609,56913,57217,57521,57825,58129,58433,58737,59041,59345,59649,59953,60257,60561,60865,61169,61473,61777,62081,62385,62689,62993,63297,63601,63905,64209,64513,64817,65121,65425,65729,66033,66337,66641,66945,67249,67553,67857,68161,68465,68769,69073,69377,69681,69985,70289,70593,70897,71201,71505,71809,72113,72417,72721,73025,73329,73633,73937,74241,74545,74849,75153,75457,75761,76065,76369,76673,76977,77281,77585'/>
+  </group>
+  <group name='65'>
+    <ids val='66,370,674,978,1282,1586,1890,2194,2498,2802,3106,3410,3714,4018,4322,4626,4930,5234,5538,5842,6146,6450,6754,7058,7362,7666,7970,8274,8578,8882,9186,9490,9794,10098,10402,10706,11010,11314,11618,11922,12226,12530,12834,13138,13442,13746,14050,14354,14658,14962,15266,15570,15874,16178,16482,16786,17090,17394,17698,18002,18306,18610,18914,19218,19522,19826,20130,20434,20738,21042,21346,21650,21954,22258,22562,22866,23170,23474,23778,24082,24386,24690,24994,25298,25602,25906,26210,26514,26818,27122,27426,27730,28034,28338,28642,28946,29250,29554,29858,30162,30466,30770,31074,31378,31682,31986,32290,32594,32898,33202,33506,33810,34114,34418,34722,35026,35330,35634,35938,36242,36546,36850,37154,37458,37762,38066,38370,38674,38978,39282,39586,39890,40194,40498,40802,41106,41410,41714,42018,42322,42626,42930,43234,43538,43842,44146,44450,44754,45058,45362,45666,45970,46274,46578,46882,47186,47490,47794,48098,48402,48706,49010,49314,49618,49922,50226,50530,50834,51138,51442,51746,52050,52354,52658,52962,53266,53570,53874,54178,54482,54786,55090,55394,55698,56002,56306,56610,56914,57218,57522,57826,58130,58434,58738,59042,59346,59650,59954,60258,60562,60866,61170,61474,61778,62082,62386,62690,62994,63298,63602,63906,64210,64514,64818,65122,65426,65730,66034,66338,66642,66946,67250,67554,67858,68162,68466,68770,69074,69378,69682,69986,70290,70594,70898,71202,71506,71810,72114,72418,72722,73026,73330,73634,73938,74242,74546,74850,75154,75458,75762,76066,76370,76674,76978,77282,77586'/>
+  </group>
+  <group name='66'>
+    <ids val='67,371,675,979,1283,1587,1891,2195,2499,2803,3107,3411,3715,4019,4323,4627,4931,5235,5539,5843,6147,6451,6755,7059,7363,7667,7971,8275,8579,8883,9187,9491,9795,10099,10403,10707,11011,11315,11619,11923,12227,12531,12835,13139,13443,13747,14051,14355,14659,14963,15267,15571,15875,16179,16483,16787,17091,17395,17699,18003,18307,18611,18915,19219,19523,19827,20131,20435,20739,21043,21347,21651,21955,22259,22563,22867,23171,23475,23779,24083,24387,24691,24995,25299,25603,25907,26211,26515,26819,27123,27427,27731,28035,28339,28643,28947,29251,29555,29859,30163,30467,30771,31075,31379,31683,31987,32291,32595,32899,33203,33507,33811,34115,34419,34723,35027,35331,35635,35939,36243,36547,36851,37155,37459,37763,38067,38371,38675,38979,39283,39587,39891,40195,40499,40803,41107,41411,41715,42019,42323,42627,42931,43235,43539,43843,44147,44451,44755,45059,45363,45667,45971,46275,46579,46883,47187,47491,47795,48099,48403,48707,49011,49315,49619,49923,50227,50531,50835,51139,51443,51747,52051,52355,52659,52963,53267,53571,53875,54179,54483,54787,55091,55395,55699,56003,56307,56611,56915,57219,57523,57827,58131,58435,58739,59043,59347,59651,59955,60259,60563,60867,61171,61475,61779,62083,62387,62691,62995,63299,63603,63907,64211,64515,64819,65123,65427,65731,66035,66339,66643,66947,67251,67555,67859,68163,68467,68771,69075,69379,69683,69987,70291,70595,70899,71203,71507,71811,72115,72419,72723,73027,73331,73635,73939,74243,74547,74851,75155,75459,75763,76067,76371,76675,76979,77283,77587'/>
+  </group>
+  <group name='67'>
+    <ids val='68,372,676,980,1284,1588,1892,2196,2500,2804,3108,3412,3716,4020,4324,4628,4932,5236,5540,5844,6148,6452,6756,7060,7364,7668,7972,8276,8580,8884,9188,9492,9796,10100,10404,10708,11012,11316,11620,11924,12228,12532,12836,13140,13444,13748,14052,14356,14660,14964,15268,15572,15876,16180,16484,16788,17092,17396,17700,18004,18308,18612,18916,19220,19524,19828,20132,20436,20740,21044,21348,21652,21956,22260,22564,22868,23172,23476,23780,24084,24388,24692,24996,25300,25604,25908,26212,26516,26820,27124,27428,27732,28036,28340,28644,28948,29252,29556,29860,30164,30468,30772,31076,31380,31684,31988,32292,32596,32900,33204,33508,33812,34116,34420,34724,35028,35332,35636,35940,36244,36548,36852,37156,37460,37764,38068,38372,38676,38980,39284,39588,39892,40196,40500,40804,41108,41412,41716,42020,42324,42628,42932,43236,43540,43844,44148,44452,44756,45060,45364,45668,45972,46276,46580,46884,47188,47492,47796,48100,48404,48708,49012,49316,49620,49924,50228,50532,50836,51140,51444,51748,52052,52356,52660,52964,53268,53572,53876,54180,54484,54788,55092,55396,55700,56004,56308,56612,56916,57220,57524,57828,58132,58436,58740,59044,59348,59652,59956,60260,60564,60868,61172,61476,61780,62084,62388,62692,62996,63300,63604,63908,64212,64516,64820,65124,65428,65732,66036,66340,66644,66948,67252,67556,67860,68164,68468,68772,69076,69380,69684,69988,70292,70596,70900,71204,71508,71812,72116,72420,72724,73028,73332,73636,73940,74244,74548,74852,75156,75460,75764,76068,76372,76676,76980,77284,77588'/>
+  </group>
+  <group name='68'>
+    <ids val='69,373,677,981,1285,1589,1893,2197,2501,2805,3109,3413,3717,4021,4325,4629,4933,5237,5541,5845,6149,6453,6757,7061,7365,7669,7973,8277,8581,8885,9189,9493,9797,10101,10405,10709,11013,11317,11621,11925,12229,12533,12837,13141,13445,13749,14053,14357,14661,14965,15269,15573,15877,16181,16485,16789,17093,17397,17701,18005,18309,18613,18917,19221,19525,19829,20133,20437,20741,21045,21349,21653,21957,22261,22565,22869,23173,23477,23781,24085,24389,24693,24997,25301,25605,25909,26213,26517,26821,27125,27429,27733,28037,28341,28645,28949,29253,29557,29861,30165,30469,30773,31077,31381,31685,31989,32293,32597,32901,33205,33509,33813,34117,34421,34725,35029,35333,35637,35941,36245,36549,36853,37157,37461,37765,38069,38373,38677,38981,39285,39589,39893,40197,40501,40805,41109,41413,41717,42021,42325,42629,42933,43237,43541,43845,44149,44453,44757,45061,45365,45669,45973,46277,46581,46885,47189,47493,47797,48101,48405,48709,49013,49317,49621,49925,50229,50533,50837,51141,51445,51749,52053,52357,52661,52965,53269,53573,53877,54181,54485,54789,55093,55397,55701,56005,56309,56613,56917,57221,57525,57829,58133,58437,58741,59045,59349,59653,59957,60261,60565,60869,61173,61477,61781,62085,62389,62693,62997,63301,63605,63909,64213,64517,64821,65125,65429,65733,66037,66341,66645,66949,67253,67557,67861,68165,68469,68773,69077,69381,69685,69989,70293,70597,70901,71205,71509,71813,72117,72421,72725,73029,73333,73637,73941,74245,74549,74853,75157,75461,75765,76069,76373,76677,76981,77285,77589'/>
+  </group>
+  <group name='69'>
+    <ids val='70,374,678,982,1286,1590,1894,2198,2502,2806,3110,3414,3718,4022,4326,4630,4934,5238,5542,5846,6150,6454,6758,7062,7366,7670,7974,8278,8582,8886,9190,9494,9798,10102,10406,10710,11014,11318,11622,11926,12230,12534,12838,13142,13446,13750,14054,14358,14662,14966,15270,15574,15878,16182,16486,16790,17094,17398,17702,18006,18310,18614,18918,19222,19526,19830,20134,20438,20742,21046,21350,21654,21958,22262,22566,22870,23174,23478,23782,24086,24390,24694,24998,25302,25606,25910,26214,26518,26822,27126,27430,27734,28038,28342,28646,28950,29254,29558,29862,30166,30470,30774,31078,31382,31686,31990,32294,32598,32902,33206,33510,33814,34118,34422,34726,35030,35334,35638,35942,36246,36550,36854,37158,37462,37766,38070,38374,38678,38982,39286,39590,39894,40198,40502,40806,41110,41414,41718,42022,42326,42630,42934,43238,43542,43846,44150,44454,44758,45062,45366,45670,45974,46278,46582,46886,47190,47494,47798,48102,48406,48710,49014,49318,49622,49926,50230,50534,50838,51142,51446,51750,52054,52358,52662,52966,53270,53574,53878,54182,54486,54790,55094,55398,55702,56006,56310,56614,56918,57222,57526,57830,58134,58438,58742,59046,59350,59654,59958,60262,60566,60870,61174,61478,61782,62086,62390,62694,62998,63302,63606,63910,64214,64518,64822,65126,65430,65734,66038,66342,66646,66950,67254,67558,67862,68166,68470,68774,69078,69382,69686,69990,70294,70598,70902,71206,71510,71814,72118,72422,72726,73030,73334,73638,73942,74246,74550,74854,75158,75462,75766,76070,76374,76678,76982,77286,77590'/>
+  </group>
+  <group name='70'>
+    <ids val='71,375,679,983,1287,1591,1895,2199,2503,2807,3111,3415,3719,4023,4327,4631,4935,5239,5543,5847,6151,6455,6759,7063,7367,7671,7975,8279,8583,8887,9191,9495,9799,10103,10407,10711,11015,11319,11623,11927,12231,12535,12839,13143,13447,13751,14055,14359,14663,14967,15271,15575,15879,16183,16487,16791,17095,17399,17703,18007,18311,18615,18919,19223,19527,19831,20135,20439,20743,21047,21351,21655,21959,22263,22567,22871,23175,23479,23783,24087,24391,24695,24999,25303,25607,25911,26215,26519,26823,27127,27431,27735,28039,28343,28647,28951,29255,29559,29863,30167,30471,30775,31079,31383,31687,31991,32295,32599,32903,33207,33511,33815,34119,34423,34727,35031,35335,35639,35943,36247,36551,36855,37159,37463,37767,38071,38375,38679,38983,39287,39591,39895,40199,40503,40807,41111,41415,41719,42023,42327,42631,42935,43239,43543,43847,44151,44455,44759,45063,45367,45671,45975,46279,46583,46887,47191,47495,47799,48103,48407,48711,49015,49319,49623,49927,50231,50535,50839,51143,51447,51751,52055,52359,52663,52967,53271,53575,53879,54183,54487,54791,55095,55399,55703,56007,56311,56615,56919,57223,57527,57831,58135,58439,58743,59047,59351,59655,59959,60263,60567,60871,61175,61479,61783,62087,62391,62695,62999,63303,63607,63911,64215,64519,64823,65127,65431,65735,66039,66343,66647,66951,67255,67559,67863,68167,68471,68775,69079,69383,69687,69991,70295,70599,70903,71207,71511,71815,72119,72423,72727,73031,73335,73639,73943,74247,74551,74855,75159,75463,75767,76071,76375,76679,76983,77287,77591'/>
+  </group>
+  <group name='71'>
+    <ids val='72,376,680,984,1288,1592,1896,2200,2504,2808,3112,3416,3720,4024,4328,4632,4936,5240,5544,5848,6152,6456,6760,7064,7368,7672,7976,8280,8584,8888,9192,9496,9800,10104,10408,10712,11016,11320,11624,11928,12232,12536,12840,13144,13448,13752,14056,14360,14664,14968,15272,15576,15880,16184,16488,16792,17096,17400,17704,18008,18312,18616,18920,19224,19528,19832,20136,20440,20744,21048,21352,21656,21960,22264,22568,22872,23176,23480,23784,24088,24392,24696,25000,25304,25608,25912,26216,26520,26824,27128,27432,27736,28040,28344,28648,28952,29256,29560,29864,30168,30472,30776,31080,31384,31688,31992,32296,32600,32904,33208,33512,33816,34120,34424,34728,35032,35336,35640,35944,36248,36552,36856,37160,37464,37768,38072,38376,38680,38984,39288,39592,39896,40200,40504,40808,41112,41416,41720,42024,42328,42632,42936,43240,43544,43848,44152,44456,44760,45064,45368,45672,45976,46280,46584,46888,47192,47496,47800,48104,48408,48712,49016,49320,49624,49928,50232,50536,50840,51144,51448,51752,52056,52360,52664,52968,53272,53576,53880,54184,54488,54792,55096,55400,55704,56008,56312,56616,56920,57224,57528,57832,58136,58440,58744,59048,59352,59656,59960,60264,60568,60872,61176,61480,61784,62088,62392,62696,63000,63304,63608,63912,64216,64520,64824,65128,65432,65736,66040,66344,66648,66952,67256,67560,67864,68168,68472,68776,69080,69384,69688,69992,70296,70600,70904,71208,71512,71816,72120,72424,72728,73032,73336,73640,73944,74248,74552,74856,75160,75464,75768,76072,76376,76680,76984,77288,77592'/>
+  </group>
+  <group name='72'>
+    <ids val='73,377,681,985,1289,1593,1897,2201,2505,2809,3113,3417,3721,4025,4329,4633,4937,5241,5545,5849,6153,6457,6761,7065,7369,7673,7977,8281,8585,8889,9193,9497,9801,10105,10409,10713,11017,11321,11625,11929,12233,12537,12841,13145,13449,13753,14057,14361,14665,14969,15273,15577,15881,16185,16489,16793,17097,17401,17705,18009,18313,18617,18921,19225,19529,19833,20137,20441,20745,21049,21353,21657,21961,22265,22569,22873,23177,23481,23785,24089,24393,24697,25001,25305,25609,25913,26217,26521,26825,27129,27433,27737,28041,28345,28649,28953,29257,29561,29865,30169,30473,30777,31081,31385,31689,31993,32297,32601,32905,33209,33513,33817,34121,34425,34729,35033,35337,35641,35945,36249,36553,36857,37161,37465,37769,38073,38377,38681,38985,39289,39593,39897,40201,40505,40809,41113,41417,41721,42025,42329,42633,42937,43241,43545,43849,44153,44457,44761,45065,45369,45673,45977,46281,46585,46889,47193,47497,47801,48105,48409,48713,49017,49321,49625,49929,50233,50537,50841,51145,51449,51753,52057,52361,52665,52969,53273,53577,53881,54185,54489,54793,55097,55401,55705,56009,56313,56617,56921,57225,57529,57833,58137,58441,58745,59049,59353,59657,59961,60265,60569,60873,61177,61481,61785,62089,62393,62697,63001,63305,63609,63913,64217,64521,64825,65129,65433,65737,66041,66345,66649,66953,67257,67561,67865,68169,68473,68777,69081,69385,69689,69993,70297,70601,70905,71209,71513,71817,72121,72425,72729,73033,73337,73641,73945,74249,74553,74857,75161,75465,75769,76073,76377,76681,76985,77289,77593'/>
+  </group>
+  <group name='73'>
+    <ids val='74,378,682,986,1290,1594,1898,2202,2506,2810,3114,3418,3722,4026,4330,4634,4938,5242,5546,5850,6154,6458,6762,7066,7370,7674,7978,8282,8586,8890,9194,9498,9802,10106,10410,10714,11018,11322,11626,11930,12234,12538,12842,13146,13450,13754,14058,14362,14666,14970,15274,15578,15882,16186,16490,16794,17098,17402,17706,18010,18314,18618,18922,19226,19530,19834,20138,20442,20746,21050,21354,21658,21962,22266,22570,22874,23178,23482,23786,24090,24394,24698,25002,25306,25610,25914,26218,26522,26826,27130,27434,27738,28042,28346,28650,28954,29258,29562,29866,30170,30474,30778,31082,31386,31690,31994,32298,32602,32906,33210,33514,33818,34122,34426,34730,35034,35338,35642,35946,36250,36554,36858,37162,37466,37770,38074,38378,38682,38986,39290,39594,39898,40202,40506,40810,41114,41418,41722,42026,42330,42634,42938,43242,43546,43850,44154,44458,44762,45066,45370,45674,45978,46282,46586,46890,47194,47498,47802,48106,48410,48714,49018,49322,49626,49930,50234,50538,50842,51146,51450,51754,52058,52362,52666,52970,53274,53578,53882,54186,54490,54794,55098,55402,55706,56010,56314,56618,56922,57226,57530,57834,58138,58442,58746,59050,59354,59658,59962,60266,60570,60874,61178,61482,61786,62090,62394,62698,63002,63306,63610,63914,64218,64522,64826,65130,65434,65738,66042,66346,66650,66954,67258,67562,67866,68170,68474,68778,69082,69386,69690,69994,70298,70602,70906,71210,71514,71818,72122,72426,72730,73034,73338,73642,73946,74250,74554,74858,75162,75466,75770,76074,76378,76682,76986,77290,77594'/>
+  </group>
+  <group name='74'>
+    <ids val='75,379,683,987,1291,1595,1899,2203,2507,2811,3115,3419,3723,4027,4331,4635,4939,5243,5547,5851,6155,6459,6763,7067,7371,7675,7979,8283,8587,8891,9195,9499,9803,10107,10411,10715,11019,11323,11627,11931,12235,12539,12843,13147,13451,13755,14059,14363,14667,14971,15275,15579,15883,16187,16491,16795,17099,17403,17707,18011,18315,18619,18923,19227,19531,19835,20139,20443,20747,21051,21355,21659,21963,22267,22571,22875,23179,23483,23787,24091,24395,24699,25003,25307,25611,25915,26219,26523,26827,27131,27435,27739,28043,28347,28651,28955,29259,29563,29867,30171,30475,30779,31083,31387,31691,31995,32299,32603,32907,33211,33515,33819,34123,34427,34731,35035,35339,35643,35947,36251,36555,36859,37163,37467,37771,38075,38379,38683,38987,39291,39595,39899,40203,40507,40811,41115,41419,41723,42027,42331,42635,42939,43243,43547,43851,44155,44459,44763,45067,45371,45675,45979,46283,46587,46891,47195,47499,47803,48107,48411,48715,49019,49323,49627,49931,50235,50539,50843,51147,51451,51755,52059,52363,52667,52971,53275,53579,53883,54187,54491,54795,55099,55403,55707,56011,56315,56619,56923,57227,57531,57835,58139,58443,58747,59051,59355,59659,59963,60267,60571,60875,61179,61483,61787,62091,62395,62699,63003,63307,63611,63915,64219,64523,64827,65131,65435,65739,66043,66347,66651,66955,67259,67563,67867,68171,68475,68779,69083,69387,69691,69995,70299,70603,70907,71211,71515,71819,72123,72427,72731,73035,73339,73643,73947,74251,74555,74859,75163,75467,75771,76075,76379,76683,76987,77291,77595'/>
+  </group>
+  <group name='75'>
+    <ids val='76,380,684,988,1292,1596,1900,2204,2508,2812,3116,3420,3724,4028,4332,4636,4940,5244,5548,5852,6156,6460,6764,7068,7372,7676,7980,8284,8588,8892,9196,9500,9804,10108,10412,10716,11020,11324,11628,11932,12236,12540,12844,13148,13452,13756,14060,14364,14668,14972,15276,15580,15884,16188,16492,16796,17100,17404,17708,18012,18316,18620,18924,19228,19532,19836,20140,20444,20748,21052,21356,21660,21964,22268,22572,22876,23180,23484,23788,24092,24396,24700,25004,25308,25612,25916,26220,26524,26828,27132,27436,27740,28044,28348,28652,28956,29260,29564,29868,30172,30476,30780,31084,31388,31692,31996,32300,32604,32908,33212,33516,33820,34124,34428,34732,35036,35340,35644,35948,36252,36556,36860,37164,37468,37772,38076,38380,38684,38988,39292,39596,39900,40204,40508,40812,41116,41420,41724,42028,42332,42636,42940,43244,43548,43852,44156,44460,44764,45068,45372,45676,45980,46284,46588,46892,47196,47500,47804,48108,48412,48716,49020,49324,49628,49932,50236,50540,50844,51148,51452,51756,52060,52364,52668,52972,53276,53580,53884,54188,54492,54796,55100,55404,55708,56012,56316,56620,56924,57228,57532,57836,58140,58444,58748,59052,59356,59660,59964,60268,60572,60876,61180,61484,61788,62092,62396,62700,63004,63308,63612,63916,64220,64524,64828,65132,65436,65740,66044,66348,66652,66956,67260,67564,67868,68172,68476,68780,69084,69388,69692,69996,70300,70604,70908,71212,71516,71820,72124,72428,72732,73036,73340,73644,73948,74252,74556,74860,75164,75468,75772,76076,76380,76684,76988,77292,77596'/>
+  </group>
+  <group name='76'>
+    <ids val='77,381,685,989,1293,1597,1901,2205,2509,2813,3117,3421,3725,4029,4333,4637,4941,5245,5549,5853,6157,6461,6765,7069,7373,7677,7981,8285,8589,8893,9197,9501,9805,10109,10413,10717,11021,11325,11629,11933,12237,12541,12845,13149,13453,13757,14061,14365,14669,14973,15277,15581,15885,16189,16493,16797,17101,17405,17709,18013,18317,18621,18925,19229,19533,19837,20141,20445,20749,21053,21357,21661,21965,22269,22573,22877,23181,23485,23789,24093,24397,24701,25005,25309,25613,25917,26221,26525,26829,27133,27437,27741,28045,28349,28653,28957,29261,29565,29869,30173,30477,30781,31085,31389,31693,31997,32301,32605,32909,33213,33517,33821,34125,34429,34733,35037,35341,35645,35949,36253,36557,36861,37165,37469,37773,38077,38381,38685,38989,39293,39597,39901,40205,40509,40813,41117,41421,41725,42029,42333,42637,42941,43245,43549,43853,44157,44461,44765,45069,45373,45677,45981,46285,46589,46893,47197,47501,47805,48109,48413,48717,49021,49325,49629,49933,50237,50541,50845,51149,51453,51757,52061,52365,52669,52973,53277,53581,53885,54189,54493,54797,55101,55405,55709,56013,56317,56621,56925,57229,57533,57837,58141,58445,58749,59053,59357,59661,59965,60269,60573,60877,61181,61485,61789,62093,62397,62701,63005,63309,63613,63917,64221,64525,64829,65133,65437,65741,66045,66349,66653,66957,67261,67565,67869,68173,68477,68781,69085,69389,69693,69997,70301,70605,70909,71213,71517,71821,72125,72429,72733,73037,73341,73645,73949,74253,74557,74861,75165,75469,75773,76077,76381,76685,76989,77293,77597'/>
+  </group>
+  <group name='77'>
+    <ids val='78,382,686,990,1294,1598,1902,2206,2510,2814,3118,3422,3726,4030,4334,4638,4942,5246,5550,5854,6158,6462,6766,7070,7374,7678,7982,8286,8590,8894,9198,9502,9806,10110,10414,10718,11022,11326,11630,11934,12238,12542,12846,13150,13454,13758,14062,14366,14670,14974,15278,15582,15886,16190,16494,16798,17102,17406,17710,18014,18318,18622,18926,19230,19534,19838,20142,20446,20750,21054,21358,21662,21966,22270,22574,22878,23182,23486,23790,24094,24398,24702,25006,25310,25614,25918,26222,26526,26830,27134,27438,27742,28046,28350,28654,28958,29262,29566,29870,30174,30478,30782,31086,31390,31694,31998,32302,32606,32910,33214,33518,33822,34126,34430,34734,35038,35342,35646,35950,36254,36558,36862,37166,37470,37774,38078,38382,38686,38990,39294,39598,39902,40206,40510,40814,41118,41422,41726,42030,42334,42638,42942,43246,43550,43854,44158,44462,44766,45070,45374,45678,45982,46286,46590,46894,47198,47502,47806,48110,48414,48718,49022,49326,49630,49934,50238,50542,50846,51150,51454,51758,52062,52366,52670,52974,53278,53582,53886,54190,54494,54798,55102,55406,55710,56014,56318,56622,56926,57230,57534,57838,58142,58446,58750,59054,59358,59662,59966,60270,60574,60878,61182,61486,61790,62094,62398,62702,63006,63310,63614,63918,64222,64526,64830,65134,65438,65742,66046,66350,66654,66958,67262,67566,67870,68174,68478,68782,69086,69390,69694,69998,70302,70606,70910,71214,71518,71822,72126,72430,72734,73038,73342,73646,73950,74254,74558,74862,75166,75470,75774,76078,76382,76686,76990,77294,77598'/>
+  </group>
+  <group name='78'>
+    <ids val='79,383,687,991,1295,1599,1903,2207,2511,2815,3119,3423,3727,4031,4335,4639,4943,5247,5551,5855,6159,6463,6767,7071,7375,7679,7983,8287,8591,8895,9199,9503,9807,10111,10415,10719,11023,11327,11631,11935,12239,12543,12847,13151,13455,13759,14063,14367,14671,14975,15279,15583,15887,16191,16495,16799,17103,17407,17711,18015,18319,18623,18927,19231,19535,19839,20143,20447,20751,21055,21359,21663,21967,22271,22575,22879,23183,23487,23791,24095,24399,24703,25007,25311,25615,25919,26223,26527,26831,27135,27439,27743,28047,28351,28655,28959,29263,29567,29871,30175,30479,30783,31087,31391,31695,31999,32303,32607,32911,33215,33519,33823,34127,34431,34735,35039,35343,35647,35951,36255,36559,36863,37167,37471,37775,38079,38383,38687,38991,39295,39599,39903,40207,40511,40815,41119,41423,41727,42031,42335,42639,42943,43247,43551,43855,44159,44463,44767,45071,45375,45679,45983,46287,46591,46895,47199,47503,47807,48111,48415,48719,49023,49327,49631,49935,50239,50543,50847,51151,51455,51759,52063,52367,52671,52975,53279,53583,53887,54191,54495,54799,55103,55407,55711,56015,56319,56623,56927,57231,57535,57839,58143,58447,58751,59055,59359,59663,59967,60271,60575,60879,61183,61487,61791,62095,62399,62703,63007,63311,63615,63919,64223,64527,64831,65135,65439,65743,66047,66351,66655,66959,67263,67567,67871,68175,68479,68783,69087,69391,69695,69999,70303,70607,70911,71215,71519,71823,72127,72431,72735,73039,73343,73647,73951,74255,74559,74863,75167,75471,75775,76079,76383,76687,76991,77295,77599'/>
+  </group>
+  <group name='79'>
+    <ids val='80,384,688,992,1296,1600,1904,2208,2512,2816,3120,3424,3728,4032,4336,4640,4944,5248,5552,5856,6160,6464,6768,7072,7376,7680,7984,8288,8592,8896,9200,9504,9808,10112,10416,10720,11024,11328,11632,11936,12240,12544,12848,13152,13456,13760,14064,14368,14672,14976,15280,15584,15888,16192,16496,16800,17104,17408,17712,18016,18320,18624,18928,19232,19536,19840,20144,20448,20752,21056,21360,21664,21968,22272,22576,22880,23184,23488,23792,24096,24400,24704,25008,25312,25616,25920,26224,26528,26832,27136,27440,27744,28048,28352,28656,28960,29264,29568,29872,30176,30480,30784,31088,31392,31696,32000,32304,32608,32912,33216,33520,33824,34128,34432,34736,35040,35344,35648,35952,36256,36560,36864,37168,37472,37776,38080,38384,38688,38992,39296,39600,39904,40208,40512,40816,41120,41424,41728,42032,42336,42640,42944,43248,43552,43856,44160,44464,44768,45072,45376,45680,45984,46288,46592,46896,47200,47504,47808,48112,48416,48720,49024,49328,49632,49936,50240,50544,50848,51152,51456,51760,52064,52368,52672,52976,53280,53584,53888,54192,54496,54800,55104,55408,55712,56016,56320,56624,56928,57232,57536,57840,58144,58448,58752,59056,59360,59664,59968,60272,60576,60880,61184,61488,61792,62096,62400,62704,63008,63312,63616,63920,64224,64528,64832,65136,65440,65744,66048,66352,66656,66960,67264,67568,67872,68176,68480,68784,69088,69392,69696,70000,70304,70608,70912,71216,71520,71824,72128,72432,72736,73040,73344,73648,73952,74256,74560,74864,75168,75472,75776,76080,76384,76688,76992,77296,77600'/>
+  </group>
+  <group name='80'>
+    <ids val='81,385,689,993,1297,1601,1905,2209,2513,2817,3121,3425,3729,4033,4337,4641,4945,5249,5553,5857,6161,6465,6769,7073,7377,7681,7985,8289,8593,8897,9201,9505,9809,10113,10417,10721,11025,11329,11633,11937,12241,12545,12849,13153,13457,13761,14065,14369,14673,14977,15281,15585,15889,16193,16497,16801,17105,17409,17713,18017,18321,18625,18929,19233,19537,19841,20145,20449,20753,21057,21361,21665,21969,22273,22577,22881,23185,23489,23793,24097,24401,24705,25009,25313,25617,25921,26225,26529,26833,27137,27441,27745,28049,28353,28657,28961,29265,29569,29873,30177,30481,30785,31089,31393,31697,32001,32305,32609,32913,33217,33521,33825,34129,34433,34737,35041,35345,35649,35953,36257,36561,36865,37169,37473,37777,38081,38385,38689,38993,39297,39601,39905,40209,40513,40817,41121,41425,41729,42033,42337,42641,42945,43249,43553,43857,44161,44465,44769,45073,45377,45681,45985,46289,46593,46897,47201,47505,47809,48113,48417,48721,49025,49329,49633,49937,50241,50545,50849,51153,51457,51761,52065,52369,52673,52977,53281,53585,53889,54193,54497,54801,55105,55409,55713,56017,56321,56625,56929,57233,57537,57841,58145,58449,58753,59057,59361,59665,59969,60273,60577,60881,61185,61489,61793,62097,62401,62705,63009,63313,63617,63921,64225,64529,64833,65137,65441,65745,66049,66353,66657,66961,67265,67569,67873,68177,68481,68785,69089,69393,69697,70001,70305,70609,70913,71217,71521,71825,72129,72433,72737,73041,73345,73649,73953,74257,74561,74865,75169,75473,75777,76081,76385,76689,76993,77297,77601'/>
+  </group>
+  <group name='81'>
+    <ids val='82,386,690,994,1298,1602,1906,2210,2514,2818,3122,3426,3730,4034,4338,4642,4946,5250,5554,5858,6162,6466,6770,7074,7378,7682,7986,8290,8594,8898,9202,9506,9810,10114,10418,10722,11026,11330,11634,11938,12242,12546,12850,13154,13458,13762,14066,14370,14674,14978,15282,15586,15890,16194,16498,16802,17106,17410,17714,18018,18322,18626,18930,19234,19538,19842,20146,20450,20754,21058,21362,21666,21970,22274,22578,22882,23186,23490,23794,24098,24402,24706,25010,25314,25618,25922,26226,26530,26834,27138,27442,27746,28050,28354,28658,28962,29266,29570,29874,30178,30482,30786,31090,31394,31698,32002,32306,32610,32914,33218,33522,33826,34130,34434,34738,35042,35346,35650,35954,36258,36562,36866,37170,37474,37778,38082,38386,38690,38994,39298,39602,39906,40210,40514,40818,41122,41426,41730,42034,42338,42642,42946,43250,43554,43858,44162,44466,44770,45074,45378,45682,45986,46290,46594,46898,47202,47506,47810,48114,48418,48722,49026,49330,49634,49938,50242,50546,50850,51154,51458,51762,52066,52370,52674,52978,53282,53586,53890,54194,54498,54802,55106,55410,55714,56018,56322,56626,56930,57234,57538,57842,58146,58450,58754,59058,59362,59666,59970,60274,60578,60882,61186,61490,61794,62098,62402,62706,63010,63314,63618,63922,64226,64530,64834,65138,65442,65746,66050,66354,66658,66962,67266,67570,67874,68178,68482,68786,69090,69394,69698,70002,70306,70610,70914,71218,71522,71826,72130,72434,72738,73042,73346,73650,73954,74258,74562,74866,75170,75474,75778,76082,76386,76690,76994,77298,77602'/>
+  </group>
+  <group name='82'>
+    <ids val='83,387,691,995,1299,1603,1907,2211,2515,2819,3123,3427,3731,4035,4339,4643,4947,5251,5555,5859,6163,6467,6771,7075,7379,7683,7987,8291,8595,8899,9203,9507,9811,10115,10419,10723,11027,11331,11635,11939,12243,12547,12851,13155,13459,13763,14067,14371,14675,14979,15283,15587,15891,16195,16499,16803,17107,17411,17715,18019,18323,18627,18931,19235,19539,19843,20147,20451,20755,21059,21363,21667,21971,22275,22579,22883,23187,23491,23795,24099,24403,24707,25011,25315,25619,25923,26227,26531,26835,27139,27443,27747,28051,28355,28659,28963,29267,29571,29875,30179,30483,30787,31091,31395,31699,32003,32307,32611,32915,33219,33523,33827,34131,34435,34739,35043,35347,35651,35955,36259,36563,36867,37171,37475,37779,38083,38387,38691,38995,39299,39603,39907,40211,40515,40819,41123,41427,41731,42035,42339,42643,42947,43251,43555,43859,44163,44467,44771,45075,45379,45683,45987,46291,46595,46899,47203,47507,47811,48115,48419,48723,49027,49331,49635,49939,50243,50547,50851,51155,51459,51763,52067,52371,52675,52979,53283,53587,53891,54195,54499,54803,55107,55411,55715,56019,56323,56627,56931,57235,57539,57843,58147,58451,58755,59059,59363,59667,59971,60275,60579,60883,61187,61491,61795,62099,62403,62707,63011,63315,63619,63923,64227,64531,64835,65139,65443,65747,66051,66355,66659,66963,67267,67571,67875,68179,68483,68787,69091,69395,69699,70003,70307,70611,70915,71219,71523,71827,72131,72435,72739,73043,73347,73651,73955,74259,74563,74867,75171,75475,75779,76083,76387,76691,76995,77299,77603'/>
+  </group>
+  <group name='83'>
+    <ids val='84,388,692,996,1300,1604,1908,2212,2516,2820,3124,3428,3732,4036,4340,4644,4948,5252,5556,5860,6164,6468,6772,7076,7380,7684,7988,8292,8596,8900,9204,9508,9812,10116,10420,10724,11028,11332,11636,11940,12244,12548,12852,13156,13460,13764,14068,14372,14676,14980,15284,15588,15892,16196,16500,16804,17108,17412,17716,18020,18324,18628,18932,19236,19540,19844,20148,20452,20756,21060,21364,21668,21972,22276,22580,22884,23188,23492,23796,24100,24404,24708,25012,25316,25620,25924,26228,26532,26836,27140,27444,27748,28052,28356,28660,28964,29268,29572,29876,30180,30484,30788,31092,31396,31700,32004,32308,32612,32916,33220,33524,33828,34132,34436,34740,35044,35348,35652,35956,36260,36564,36868,37172,37476,37780,38084,38388,38692,38996,39300,39604,39908,40212,40516,40820,41124,41428,41732,42036,42340,42644,42948,43252,43556,43860,44164,44468,44772,45076,45380,45684,45988,46292,46596,46900,47204,47508,47812,48116,48420,48724,49028,49332,49636,49940,50244,50548,50852,51156,51460,51764,52068,52372,52676,52980,53284,53588,53892,54196,54500,54804,55108,55412,55716,56020,56324,56628,56932,57236,57540,57844,58148,58452,58756,59060,59364,59668,59972,60276,60580,60884,61188,61492,61796,62100,62404,62708,63012,63316,63620,63924,64228,64532,64836,65140,65444,65748,66052,66356,66660,66964,67268,67572,67876,68180,68484,68788,69092,69396,69700,70004,70308,70612,70916,71220,71524,71828,72132,72436,72740,73044,73348,73652,73956,74260,74564,74868,75172,75476,75780,76084,76388,76692,76996,77300,77604'/>
+  </group>
+  <group name='84'>
+    <ids val='85,389,693,997,1301,1605,1909,2213,2517,2821,3125,3429,3733,4037,4341,4645,4949,5253,5557,5861,6165,6469,6773,7077,7381,7685,7989,8293,8597,8901,9205,9509,9813,10117,10421,10725,11029,11333,11637,11941,12245,12549,12853,13157,13461,13765,14069,14373,14677,14981,15285,15589,15893,16197,16501,16805,17109,17413,17717,18021,18325,18629,18933,19237,19541,19845,20149,20453,20757,21061,21365,21669,21973,22277,22581,22885,23189,23493,23797,24101,24405,24709,25013,25317,25621,25925,26229,26533,26837,27141,27445,27749,28053,28357,28661,28965,29269,29573,29877,30181,30485,30789,31093,31397,31701,32005,32309,32613,32917,33221,33525,33829,34133,34437,34741,35045,35349,35653,35957,36261,36565,36869,37173,37477,37781,38085,38389,38693,38997,39301,39605,39909,40213,40517,40821,41125,41429,41733,42037,42341,42645,42949,43253,43557,43861,44165,44469,44773,45077,45381,45685,45989,46293,46597,46901,47205,47509,47813,48117,48421,48725,49029,49333,49637,49941,50245,50549,50853,51157,51461,51765,52069,52373,52677,52981,53285,53589,53893,54197,54501,54805,55109,55413,55717,56021,56325,56629,56933,57237,57541,57845,58149,58453,58757,59061,59365,59669,59973,60277,60581,60885,61189,61493,61797,62101,62405,62709,63013,63317,63621,63925,64229,64533,64837,65141,65445,65749,66053,66357,66661,66965,67269,67573,67877,68181,68485,68789,69093,69397,69701,70005,70309,70613,70917,71221,71525,71829,72133,72437,72741,73045,73349,73653,73957,74261,74565,74869,75173,75477,75781,76085,76389,76693,76997,77301,77605'/>
+  </group>
+  <group name='85'>
+    <ids val='86,390,694,998,1302,1606,1910,2214,2518,2822,3126,3430,3734,4038,4342,4646,4950,5254,5558,5862,6166,6470,6774,7078,7382,7686,7990,8294,8598,8902,9206,9510,9814,10118,10422,10726,11030,11334,11638,11942,12246,12550,12854,13158,13462,13766,14070,14374,14678,14982,15286,15590,15894,16198,16502,16806,17110,17414,17718,18022,18326,18630,18934,19238,19542,19846,20150,20454,20758,21062,21366,21670,21974,22278,22582,22886,23190,23494,23798,24102,24406,24710,25014,25318,25622,25926,26230,26534,26838,27142,27446,27750,28054,28358,28662,28966,29270,29574,29878,30182,30486,30790,31094,31398,31702,32006,32310,32614,32918,33222,33526,33830,34134,34438,34742,35046,35350,35654,35958,36262,36566,36870,37174,37478,37782,38086,38390,38694,38998,39302,39606,39910,40214,40518,40822,41126,41430,41734,42038,42342,42646,42950,43254,43558,43862,44166,44470,44774,45078,45382,45686,45990,46294,46598,46902,47206,47510,47814,48118,48422,48726,49030,49334,49638,49942,50246,50550,50854,51158,51462,51766,52070,52374,52678,52982,53286,53590,53894,54198,54502,54806,55110,55414,55718,56022,56326,56630,56934,57238,57542,57846,58150,58454,58758,59062,59366,59670,59974,60278,60582,60886,61190,61494,61798,62102,62406,62710,63014,63318,63622,63926,64230,64534,64838,65142,65446,65750,66054,66358,66662,66966,67270,67574,67878,68182,68486,68790,69094,69398,69702,70006,70310,70614,70918,71222,71526,71830,72134,72438,72742,73046,73350,73654,73958,74262,74566,74870,75174,75478,75782,76086,76390,76694,76998,77302,77606'/>
+  </group>
+  <group name='86'>
+    <ids val='87,391,695,999,1303,1607,1911,2215,2519,2823,3127,3431,3735,4039,4343,4647,4951,5255,5559,5863,6167,6471,6775,7079,7383,7687,7991,8295,8599,8903,9207,9511,9815,10119,10423,10727,11031,11335,11639,11943,12247,12551,12855,13159,13463,13767,14071,14375,14679,14983,15287,15591,15895,16199,16503,16807,17111,17415,17719,18023,18327,18631,18935,19239,19543,19847,20151,20455,20759,21063,21367,21671,21975,22279,22583,22887,23191,23495,23799,24103,24407,24711,25015,25319,25623,25927,26231,26535,26839,27143,27447,27751,28055,28359,28663,28967,29271,29575,29879,30183,30487,30791,31095,31399,31703,32007,32311,32615,32919,33223,33527,33831,34135,34439,34743,35047,35351,35655,35959,36263,36567,36871,37175,37479,37783,38087,38391,38695,38999,39303,39607,39911,40215,40519,40823,41127,41431,41735,42039,42343,42647,42951,43255,43559,43863,44167,44471,44775,45079,45383,45687,45991,46295,46599,46903,47207,47511,47815,48119,48423,48727,49031,49335,49639,49943,50247,50551,50855,51159,51463,51767,52071,52375,52679,52983,53287,53591,53895,54199,54503,54807,55111,55415,55719,56023,56327,56631,56935,57239,57543,57847,58151,58455,58759,59063,59367,59671,59975,60279,60583,60887,61191,61495,61799,62103,62407,62711,63015,63319,63623,63927,64231,64535,64839,65143,65447,65751,66055,66359,66663,66967,67271,67575,67879,68183,68487,68791,69095,69399,69703,70007,70311,70615,70919,71223,71527,71831,72135,72439,72743,73047,73351,73655,73959,74263,74567,74871,75175,75479,75783,76087,76391,76695,76999,77303,77607'/>
+  </group>
+  <group name='87'>
+    <ids val='88,392,696,1000,1304,1608,1912,2216,2520,2824,3128,3432,3736,4040,4344,4648,4952,5256,5560,5864,6168,6472,6776,7080,7384,7688,7992,8296,8600,8904,9208,9512,9816,10120,10424,10728,11032,11336,11640,11944,12248,12552,12856,13160,13464,13768,14072,14376,14680,14984,15288,15592,15896,16200,16504,16808,17112,17416,17720,18024,18328,18632,18936,19240,19544,19848,20152,20456,20760,21064,21368,21672,21976,22280,22584,22888,23192,23496,23800,24104,24408,24712,25016,25320,25624,25928,26232,26536,26840,27144,27448,27752,28056,28360,28664,28968,29272,29576,29880,30184,30488,30792,31096,31400,31704,32008,32312,32616,32920,33224,33528,33832,34136,34440,34744,35048,35352,35656,35960,36264,36568,36872,37176,37480,37784,38088,38392,38696,39000,39304,39608,39912,40216,40520,40824,41128,41432,41736,42040,42344,42648,42952,43256,43560,43864,44168,44472,44776,45080,45384,45688,45992,46296,46600,46904,47208,47512,47816,48120,48424,48728,49032,49336,49640,49944,50248,50552,50856,51160,51464,51768,52072,52376,52680,52984,53288,53592,53896,54200,54504,54808,55112,55416,55720,56024,56328,56632,56936,57240,57544,57848,58152,58456,58760,59064,59368,59672,59976,60280,60584,60888,61192,61496,61800,62104,62408,62712,63016,63320,63624,63928,64232,64536,64840,65144,65448,65752,66056,66360,66664,66968,67272,67576,67880,68184,68488,68792,69096,69400,69704,70008,70312,70616,70920,71224,71528,71832,72136,72440,72744,73048,73352,73656,73960,74264,74568,74872,75176,75480,75784,76088,76392,76696,77000,77304,77608'/>
+  </group>
+  <group name='88'>
+    <ids val='89,393,697,1001,1305,1609,1913,2217,2521,2825,3129,3433,3737,4041,4345,4649,4953,5257,5561,5865,6169,6473,6777,7081,7385,7689,7993,8297,8601,8905,9209,9513,9817,10121,10425,10729,11033,11337,11641,11945,12249,12553,12857,13161,13465,13769,14073,14377,14681,14985,15289,15593,15897,16201,16505,16809,17113,17417,17721,18025,18329,18633,18937,19241,19545,19849,20153,20457,20761,21065,21369,21673,21977,22281,22585,22889,23193,23497,23801,24105,24409,24713,25017,25321,25625,25929,26233,26537,26841,27145,27449,27753,28057,28361,28665,28969,29273,29577,29881,30185,30489,30793,31097,31401,31705,32009,32313,32617,32921,33225,33529,33833,34137,34441,34745,35049,35353,35657,35961,36265,36569,36873,37177,37481,37785,38089,38393,38697,39001,39305,39609,39913,40217,40521,40825,41129,41433,41737,42041,42345,42649,42953,43257,43561,43865,44169,44473,44777,45081,45385,45689,45993,46297,46601,46905,47209,47513,47817,48121,48425,48729,49033,49337,49641,49945,50249,50553,50857,51161,51465,51769,52073,52377,52681,52985,53289,53593,53897,54201,54505,54809,55113,55417,55721,56025,56329,56633,56937,57241,57545,57849,58153,58457,58761,59065,59369,59673,59977,60281,60585,60889,61193,61497,61801,62105,62409,62713,63017,63321,63625,63929,64233,64537,64841,65145,65449,65753,66057,66361,66665,66969,67273,67577,67881,68185,68489,68793,69097,69401,69705,70009,70313,70617,70921,71225,71529,71833,72137,72441,72745,73049,73353,73657,73961,74265,74569,74873,75177,75481,75785,76089,76393,76697,77001,77305,77609'/>
+  </group>
+  <group name='89'>
+    <ids val='90,394,698,1002,1306,1610,1914,2218,2522,2826,3130,3434,3738,4042,4346,4650,4954,5258,5562,5866,6170,6474,6778,7082,7386,7690,7994,8298,8602,8906,9210,9514,9818,10122,10426,10730,11034,11338,11642,11946,12250,12554,12858,13162,13466,13770,14074,14378,14682,14986,15290,15594,15898,16202,16506,16810,17114,17418,17722,18026,18330,18634,18938,19242,19546,19850,20154,20458,20762,21066,21370,21674,21978,22282,22586,22890,23194,23498,23802,24106,24410,24714,25018,25322,25626,25930,26234,26538,26842,27146,27450,27754,28058,28362,28666,28970,29274,29578,29882,30186,30490,30794,31098,31402,31706,32010,32314,32618,32922,33226,33530,33834,34138,34442,34746,35050,35354,35658,35962,36266,36570,36874,37178,37482,37786,38090,38394,38698,39002,39306,39610,39914,40218,40522,40826,41130,41434,41738,42042,42346,42650,42954,43258,43562,43866,44170,44474,44778,45082,45386,45690,45994,46298,46602,46906,47210,47514,47818,48122,48426,48730,49034,49338,49642,49946,50250,50554,50858,51162,51466,51770,52074,52378,52682,52986,53290,53594,53898,54202,54506,54810,55114,55418,55722,56026,56330,56634,56938,57242,57546,57850,58154,58458,58762,59066,59370,59674,59978,60282,60586,60890,61194,61498,61802,62106,62410,62714,63018,63322,63626,63930,64234,64538,64842,65146,65450,65754,66058,66362,66666,66970,67274,67578,67882,68186,68490,68794,69098,69402,69706,70010,70314,70618,70922,71226,71530,71834,72138,72442,72746,73050,73354,73658,73962,74266,74570,74874,75178,75482,75786,76090,76394,76698,77002,77306,77610'/>
+  </group>
+  <group name='90'>
+    <ids val='91,395,699,1003,1307,1611,1915,2219,2523,2827,3131,3435,3739,4043,4347,4651,4955,5259,5563,5867,6171,6475,6779,7083,7387,7691,7995,8299,8603,8907,9211,9515,9819,10123,10427,10731,11035,11339,11643,11947,12251,12555,12859,13163,13467,13771,14075,14379,14683,14987,15291,15595,15899,16203,16507,16811,17115,17419,17723,18027,18331,18635,18939,19243,19547,19851,20155,20459,20763,21067,21371,21675,21979,22283,22587,22891,23195,23499,23803,24107,24411,24715,25019,25323,25627,25931,26235,26539,26843,27147,27451,27755,28059,28363,28667,28971,29275,29579,29883,30187,30491,30795,31099,31403,31707,32011,32315,32619,32923,33227,33531,33835,34139,34443,34747,35051,35355,35659,35963,36267,36571,36875,37179,37483,37787,38091,38395,38699,39003,39307,39611,39915,40219,40523,40827,41131,41435,41739,42043,42347,42651,42955,43259,43563,43867,44171,44475,44779,45083,45387,45691,45995,46299,46603,46907,47211,47515,47819,48123,48427,48731,49035,49339,49643,49947,50251,50555,50859,51163,51467,51771,52075,52379,52683,52987,53291,53595,53899,54203,54507,54811,55115,55419,55723,56027,56331,56635,56939,57243,57547,57851,58155,58459,58763,59067,59371,59675,59979,60283,60587,60891,61195,61499,61803,62107,62411,62715,63019,63323,63627,63931,64235,64539,64843,65147,65451,65755,66059,66363,66667,66971,67275,67579,67883,68187,68491,68795,69099,69403,69707,70011,70315,70619,70923,71227,71531,71835,72139,72443,72747,73051,73355,73659,73963,74267,74571,74875,75179,75483,75787,76091,76395,76699,77003,77307,77611'/>
+  </group>
+  <group name='91'>
+    <ids val='92,396,700,1004,1308,1612,1916,2220,2524,2828,3132,3436,3740,4044,4348,4652,4956,5260,5564,5868,6172,6476,6780,7084,7388,7692,7996,8300,8604,8908,9212,9516,9820,10124,10428,10732,11036,11340,11644,11948,12252,12556,12860,13164,13468,13772,14076,14380,14684,14988,15292,15596,15900,16204,16508,16812,17116,17420,17724,18028,18332,18636,18940,19244,19548,19852,20156,20460,20764,21068,21372,21676,21980,22284,22588,22892,23196,23500,23804,24108,24412,24716,25020,25324,25628,25932,26236,26540,26844,27148,27452,27756,28060,28364,28668,28972,29276,29580,29884,30188,30492,30796,31100,31404,31708,32012,32316,32620,32924,33228,33532,33836,34140,34444,34748,35052,35356,35660,35964,36268,36572,36876,37180,37484,37788,38092,38396,38700,39004,39308,39612,39916,40220,40524,40828,41132,41436,41740,42044,42348,42652,42956,43260,43564,43868,44172,44476,44780,45084,45388,45692,45996,46300,46604,46908,47212,47516,47820,48124,48428,48732,49036,49340,49644,49948,50252,50556,50860,51164,51468,51772,52076,52380,52684,52988,53292,53596,53900,54204,54508,54812,55116,55420,55724,56028,56332,56636,56940,57244,57548,57852,58156,58460,58764,59068,59372,59676,59980,60284,60588,60892,61196,61500,61804,62108,62412,62716,63020,63324,63628,63932,64236,64540,64844,65148,65452,65756,66060,66364,66668,66972,67276,67580,67884,68188,68492,68796,69100,69404,69708,70012,70316,70620,70924,71228,71532,71836,72140,72444,72748,73052,73356,73660,73964,74268,74572,74876,75180,75484,75788,76092,76396,76700,77004,77308,77612'/>
+  </group>
+  <group name='92'>
+    <ids val='93,397,701,1005,1309,1613,1917,2221,2525,2829,3133,3437,3741,4045,4349,4653,4957,5261,5565,5869,6173,6477,6781,7085,7389,7693,7997,8301,8605,8909,9213,9517,9821,10125,10429,10733,11037,11341,11645,11949,12253,12557,12861,13165,13469,13773,14077,14381,14685,14989,15293,15597,15901,16205,16509,16813,17117,17421,17725,18029,18333,18637,18941,19245,19549,19853,20157,20461,20765,21069,21373,21677,21981,22285,22589,22893,23197,23501,23805,24109,24413,24717,25021,25325,25629,25933,26237,26541,26845,27149,27453,27757,28061,28365,28669,28973,29277,29581,29885,30189,30493,30797,31101,31405,31709,32013,32317,32621,32925,33229,33533,33837,34141,34445,34749,35053,35357,35661,35965,36269,36573,36877,37181,37485,37789,38093,38397,38701,39005,39309,39613,39917,40221,40525,40829,41133,41437,41741,42045,42349,42653,42957,43261,43565,43869,44173,44477,44781,45085,45389,45693,45997,46301,46605,46909,47213,47517,47821,48125,48429,48733,49037,49341,49645,49949,50253,50557,50861,51165,51469,51773,52077,52381,52685,52989,53293,53597,53901,54205,54509,54813,55117,55421,55725,56029,56333,56637,56941,57245,57549,57853,58157,58461,58765,59069,59373,59677,59981,60285,60589,60893,61197,61501,61805,62109,62413,62717,63021,63325,63629,63933,64237,64541,64845,65149,65453,65757,66061,66365,66669,66973,67277,67581,67885,68189,68493,68797,69101,69405,69709,70013,70317,70621,70925,71229,71533,71837,72141,72445,72749,73053,73357,73661,73965,74269,74573,74877,75181,75485,75789,76093,76397,76701,77005,77309,77613'/>
+  </group>
+  <group name='93'>
+    <ids val='94,398,702,1006,1310,1614,1918,2222,2526,2830,3134,3438,3742,4046,4350,4654,4958,5262,5566,5870,6174,6478,6782,7086,7390,7694,7998,8302,8606,8910,9214,9518,9822,10126,10430,10734,11038,11342,11646,11950,12254,12558,12862,13166,13470,13774,14078,14382,14686,14990,15294,15598,15902,16206,16510,16814,17118,17422,17726,18030,18334,18638,18942,19246,19550,19854,20158,20462,20766,21070,21374,21678,21982,22286,22590,22894,23198,23502,23806,24110,24414,24718,25022,25326,25630,25934,26238,26542,26846,27150,27454,27758,28062,28366,28670,28974,29278,29582,29886,30190,30494,30798,31102,31406,31710,32014,32318,32622,32926,33230,33534,33838,34142,34446,34750,35054,35358,35662,35966,36270,36574,36878,37182,37486,37790,38094,38398,38702,39006,39310,39614,39918,40222,40526,40830,41134,41438,41742,42046,42350,42654,42958,43262,43566,43870,44174,44478,44782,45086,45390,45694,45998,46302,46606,46910,47214,47518,47822,48126,48430,48734,49038,49342,49646,49950,50254,50558,50862,51166,51470,51774,52078,52382,52686,52990,53294,53598,53902,54206,54510,54814,55118,55422,55726,56030,56334,56638,56942,57246,57550,57854,58158,58462,58766,59070,59374,59678,59982,60286,60590,60894,61198,61502,61806,62110,62414,62718,63022,63326,63630,63934,64238,64542,64846,65150,65454,65758,66062,66366,66670,66974,67278,67582,67886,68190,68494,68798,69102,69406,69710,70014,70318,70622,70926,71230,71534,71838,72142,72446,72750,73054,73358,73662,73966,74270,74574,74878,75182,75486,75790,76094,76398,76702,77006,77310,77614'/>
+  </group>
+  <group name='94'>
+    <ids val='95,399,703,1007,1311,1615,1919,2223,2527,2831,3135,3439,3743,4047,4351,4655,4959,5263,5567,5871,6175,6479,6783,7087,7391,7695,7999,8303,8607,8911,9215,9519,9823,10127,10431,10735,11039,11343,11647,11951,12255,12559,12863,13167,13471,13775,14079,14383,14687,14991,15295,15599,15903,16207,16511,16815,17119,17423,17727,18031,18335,18639,18943,19247,19551,19855,20159,20463,20767,21071,21375,21679,21983,22287,22591,22895,23199,23503,23807,24111,24415,24719,25023,25327,25631,25935,26239,26543,26847,27151,27455,27759,28063,28367,28671,28975,29279,29583,29887,30191,30495,30799,31103,31407,31711,32015,32319,32623,32927,33231,33535,33839,34143,34447,34751,35055,35359,35663,35967,36271,36575,36879,37183,37487,37791,38095,38399,38703,39007,39311,39615,39919,40223,40527,40831,41135,41439,41743,42047,42351,42655,42959,43263,43567,43871,44175,44479,44783,45087,45391,45695,45999,46303,46607,46911,47215,47519,47823,48127,48431,48735,49039,49343,49647,49951,50255,50559,50863,51167,51471,51775,52079,52383,52687,52991,53295,53599,53903,54207,54511,54815,55119,55423,55727,56031,56335,56639,56943,57247,57551,57855,58159,58463,58767,59071,59375,59679,59983,60287,60591,60895,61199,61503,61807,62111,62415,62719,63023,63327,63631,63935,64239,64543,64847,65151,65455,65759,66063,66367,66671,66975,67279,67583,67887,68191,68495,68799,69103,69407,69711,70015,70319,70623,70927,71231,71535,71839,72143,72447,72751,73055,73359,73663,73967,74271,74575,74879,75183,75487,75791,76095,76399,76703,77007,77311,77615'/>
+  </group>
+  <group name='95'>
+    <ids val='96,400,704,1008,1312,1616,1920,2224,2528,2832,3136,3440,3744,4048,4352,4656,4960,5264,5568,5872,6176,6480,6784,7088,7392,7696,8000,8304,8608,8912,9216,9520,9824,10128,10432,10736,11040,11344,11648,11952,12256,12560,12864,13168,13472,13776,14080,14384,14688,14992,15296,15600,15904,16208,16512,16816,17120,17424,17728,18032,18336,18640,18944,19248,19552,19856,20160,20464,20768,21072,21376,21680,21984,22288,22592,22896,23200,23504,23808,24112,24416,24720,25024,25328,25632,25936,26240,26544,26848,27152,27456,27760,28064,28368,28672,28976,29280,29584,29888,30192,30496,30800,31104,31408,31712,32016,32320,32624,32928,33232,33536,33840,34144,34448,34752,35056,35360,35664,35968,36272,36576,36880,37184,37488,37792,38096,38400,38704,39008,39312,39616,39920,40224,40528,40832,41136,41440,41744,42048,42352,42656,42960,43264,43568,43872,44176,44480,44784,45088,45392,45696,46000,46304,46608,46912,47216,47520,47824,48128,48432,48736,49040,49344,49648,49952,50256,50560,50864,51168,51472,51776,52080,52384,52688,52992,53296,53600,53904,54208,54512,54816,55120,55424,55728,56032,56336,56640,56944,57248,57552,57856,58160,58464,58768,59072,59376,59680,59984,60288,60592,60896,61200,61504,61808,62112,62416,62720,63024,63328,63632,63936,64240,64544,64848,65152,65456,65760,66064,66368,66672,66976,67280,67584,67888,68192,68496,68800,69104,69408,69712,70016,70320,70624,70928,71232,71536,71840,72144,72448,72752,73056,73360,73664,73968,74272,74576,74880,75184,75488,75792,76096,76400,76704,77008,77312,77616'/>
+  </group>
+  <group name='96'>
+    <ids val='97,401,705,1009,1313,1617,1921,2225,2529,2833,3137,3441,3745,4049,4353,4657,4961,5265,5569,5873,6177,6481,6785,7089,7393,7697,8001,8305,8609,8913,9217,9521,9825,10129,10433,10737,11041,11345,11649,11953,12257,12561,12865,13169,13473,13777,14081,14385,14689,14993,15297,15601,15905,16209,16513,16817,17121,17425,17729,18033,18337,18641,18945,19249,19553,19857,20161,20465,20769,21073,21377,21681,21985,22289,22593,22897,23201,23505,23809,24113,24417,24721,25025,25329,25633,25937,26241,26545,26849,27153,27457,27761,28065,28369,28673,28977,29281,29585,29889,30193,30497,30801,31105,31409,31713,32017,32321,32625,32929,33233,33537,33841,34145,34449,34753,35057,35361,35665,35969,36273,36577,36881,37185,37489,37793,38097,38401,38705,39009,39313,39617,39921,40225,40529,40833,41137,41441,41745,42049,42353,42657,42961,43265,43569,43873,44177,44481,44785,45089,45393,45697,46001,46305,46609,46913,47217,47521,47825,48129,48433,48737,49041,49345,49649,49953,50257,50561,50865,51169,51473,51777,52081,52385,52689,52993,53297,53601,53905,54209,54513,54817,55121,55425,55729,56033,56337,56641,56945,57249,57553,57857,58161,58465,58769,59073,59377,59681,59985,60289,60593,60897,61201,61505,61809,62113,62417,62721,63025,63329,63633,63937,64241,64545,64849,65153,65457,65761,66065,66369,66673,66977,67281,67585,67889,68193,68497,68801,69105,69409,69713,70017,70321,70625,70929,71233,71537,71841,72145,72449,72753,73057,73361,73665,73969,74273,74577,74881,75185,75489,75793,76097,76401,76705,77009,77313,77617'/>
+  </group>
+  <group name='97'>
+    <ids val='98,402,706,1010,1314,1618,1922,2226,2530,2834,3138,3442,3746,4050,4354,4658,4962,5266,5570,5874,6178,6482,6786,7090,7394,7698,8002,8306,8610,8914,9218,9522,9826,10130,10434,10738,11042,11346,11650,11954,12258,12562,12866,13170,13474,13778,14082,14386,14690,14994,15298,15602,15906,16210,16514,16818,17122,17426,17730,18034,18338,18642,18946,19250,19554,19858,20162,20466,20770,21074,21378,21682,21986,22290,22594,22898,23202,23506,23810,24114,24418,24722,25026,25330,25634,25938,26242,26546,26850,27154,27458,27762,28066,28370,28674,28978,29282,29586,29890,30194,30498,30802,31106,31410,31714,32018,32322,32626,32930,33234,33538,33842,34146,34450,34754,35058,35362,35666,35970,36274,36578,36882,37186,37490,37794,38098,38402,38706,39010,39314,39618,39922,40226,40530,40834,41138,41442,41746,42050,42354,42658,42962,43266,43570,43874,44178,44482,44786,45090,45394,45698,46002,46306,46610,46914,47218,47522,47826,48130,48434,48738,49042,49346,49650,49954,50258,50562,50866,51170,51474,51778,52082,52386,52690,52994,53298,53602,53906,54210,54514,54818,55122,55426,55730,56034,56338,56642,56946,57250,57554,57858,58162,58466,58770,59074,59378,59682,59986,60290,60594,60898,61202,61506,61810,62114,62418,62722,63026,63330,63634,63938,64242,64546,64850,65154,65458,65762,66066,66370,66674,66978,67282,67586,67890,68194,68498,68802,69106,69410,69714,70018,70322,70626,70930,71234,71538,71842,72146,72450,72754,73058,73362,73666,73970,74274,74578,74882,75186,75490,75794,76098,76402,76706,77010,77314,77618'/>
+  </group>
+  <group name='98'>
+    <ids val='99,403,707,1011,1315,1619,1923,2227,2531,2835,3139,3443,3747,4051,4355,4659,4963,5267,5571,5875,6179,6483,6787,7091,7395,7699,8003,8307,8611,8915,9219,9523,9827,10131,10435,10739,11043,11347,11651,11955,12259,12563,12867,13171,13475,13779,14083,14387,14691,14995,15299,15603,15907,16211,16515,16819,17123,17427,17731,18035,18339,18643,18947,19251,19555,19859,20163,20467,20771,21075,21379,21683,21987,22291,22595,22899,23203,23507,23811,24115,24419,24723,25027,25331,25635,25939,26243,26547,26851,27155,27459,27763,28067,28371,28675,28979,29283,29587,29891,30195,30499,30803,31107,31411,31715,32019,32323,32627,32931,33235,33539,33843,34147,34451,34755,35059,35363,35667,35971,36275,36579,36883,37187,37491,37795,38099,38403,38707,39011,39315,39619,39923,40227,40531,40835,41139,41443,41747,42051,42355,42659,42963,43267,43571,43875,44179,44483,44787,45091,45395,45699,46003,46307,46611,46915,47219,47523,47827,48131,48435,48739,49043,49347,49651,49955,50259,50563,50867,51171,51475,51779,52083,52387,52691,52995,53299,53603,53907,54211,54515,54819,55123,55427,55731,56035,56339,56643,56947,57251,57555,57859,58163,58467,58771,59075,59379,59683,59987,60291,60595,60899,61203,61507,61811,62115,62419,62723,63027,63331,63635,63939,64243,64547,64851,65155,65459,65763,66067,66371,66675,66979,67283,67587,67891,68195,68499,68803,69107,69411,69715,70019,70323,70627,70931,71235,71539,71843,72147,72451,72755,73059,73363,73667,73971,74275,74579,74883,75187,75491,75795,76099,76403,76707,77011,77315,77619'/>
+  </group>
+  <group name='99'>
+    <ids val='100,404,708,1012,1316,1620,1924,2228,2532,2836,3140,3444,3748,4052,4356,4660,4964,5268,5572,5876,6180,6484,6788,7092,7396,7700,8004,8308,8612,8916,9220,9524,9828,10132,10436,10740,11044,11348,11652,11956,12260,12564,12868,13172,13476,13780,14084,14388,14692,14996,15300,15604,15908,16212,16516,16820,17124,17428,17732,18036,18340,18644,18948,19252,19556,19860,20164,20468,20772,21076,21380,21684,21988,22292,22596,22900,23204,23508,23812,24116,24420,24724,25028,25332,25636,25940,26244,26548,26852,27156,27460,27764,28068,28372,28676,28980,29284,29588,29892,30196,30500,30804,31108,31412,31716,32020,32324,32628,32932,33236,33540,33844,34148,34452,34756,35060,35364,35668,35972,36276,36580,36884,37188,37492,37796,38100,38404,38708,39012,39316,39620,39924,40228,40532,40836,41140,41444,41748,42052,42356,42660,42964,43268,43572,43876,44180,44484,44788,45092,45396,45700,46004,46308,46612,46916,47220,47524,47828,48132,48436,48740,49044,49348,49652,49956,50260,50564,50868,51172,51476,51780,52084,52388,52692,52996,53300,53604,53908,54212,54516,54820,55124,55428,55732,56036,56340,56644,56948,57252,57556,57860,58164,58468,58772,59076,59380,59684,59988,60292,60596,60900,61204,61508,61812,62116,62420,62724,63028,63332,63636,63940,64244,64548,64852,65156,65460,65764,66068,66372,66676,66980,67284,67588,67892,68196,68500,68804,69108,69412,69716,70020,70324,70628,70932,71236,71540,71844,72148,72452,72756,73060,73364,73668,73972,74276,74580,74884,75188,75492,75796,76100,76404,76708,77012,77316,77620'/>
+  </group>
+  <group name='100'>
+    <ids val='101,405,709,1013,1317,1621,1925,2229,2533,2837,3141,3445,3749,4053,4357,4661,4965,5269,5573,5877,6181,6485,6789,7093,7397,7701,8005,8309,8613,8917,9221,9525,9829,10133,10437,10741,11045,11349,11653,11957,12261,12565,12869,13173,13477,13781,14085,14389,14693,14997,15301,15605,15909,16213,16517,16821,17125,17429,17733,18037,18341,18645,18949,19253,19557,19861,20165,20469,20773,21077,21381,21685,21989,22293,22597,22901,23205,23509,23813,24117,24421,24725,25029,25333,25637,25941,26245,26549,26853,27157,27461,27765,28069,28373,28677,28981,29285,29589,29893,30197,30501,30805,31109,31413,31717,32021,32325,32629,32933,33237,33541,33845,34149,34453,34757,35061,35365,35669,35973,36277,36581,36885,37189,37493,37797,38101,38405,38709,39013,39317,39621,39925,40229,40533,40837,41141,41445,41749,42053,42357,42661,42965,43269,43573,43877,44181,44485,44789,45093,45397,45701,46005,46309,46613,46917,47221,47525,47829,48133,48437,48741,49045,49349,49653,49957,50261,50565,50869,51173,51477,51781,52085,52389,52693,52997,53301,53605,53909,54213,54517,54821,55125,55429,55733,56037,56341,56645,56949,57253,57557,57861,58165,58469,58773,59077,59381,59685,59989,60293,60597,60901,61205,61509,61813,62117,62421,62725,63029,63333,63637,63941,64245,64549,64853,65157,65461,65765,66069,66373,66677,66981,67285,67589,67893,68197,68501,68805,69109,69413,69717,70021,70325,70629,70933,71237,71541,71845,72149,72453,72757,73061,73365,73669,73973,74277,74581,74885,75189,75493,75797,76101,76405,76709,77013,77317,77621'/>
+  </group>
+  <group name='101'>
+    <ids val='102,406,710,1014,1318,1622,1926,2230,2534,2838,3142,3446,3750,4054,4358,4662,4966,5270,5574,5878,6182,6486,6790,7094,7398,7702,8006,8310,8614,8918,9222,9526,9830,10134,10438,10742,11046,11350,11654,11958,12262,12566,12870,13174,13478,13782,14086,14390,14694,14998,15302,15606,15910,16214,16518,16822,17126,17430,17734,18038,18342,18646,18950,19254,19558,19862,20166,20470,20774,21078,21382,21686,21990,22294,22598,22902,23206,23510,23814,24118,24422,24726,25030,25334,25638,25942,26246,26550,26854,27158,27462,27766,28070,28374,28678,28982,29286,29590,29894,30198,30502,30806,31110,31414,31718,32022,32326,32630,32934,33238,33542,33846,34150,34454,34758,35062,35366,35670,35974,36278,36582,36886,37190,37494,37798,38102,38406,38710,39014,39318,39622,39926,40230,40534,40838,41142,41446,41750,42054,42358,42662,42966,43270,43574,43878,44182,44486,44790,45094,45398,45702,46006,46310,46614,46918,47222,47526,47830,48134,48438,48742,49046,49350,49654,49958,50262,50566,50870,51174,51478,51782,52086,52390,52694,52998,53302,53606,53910,54214,54518,54822,55126,55430,55734,56038,56342,56646,56950,57254,57558,57862,58166,58470,58774,59078,59382,59686,59990,60294,60598,60902,61206,61510,61814,62118,62422,62726,63030,63334,63638,63942,64246,64550,64854,65158,65462,65766,66070,66374,66678,66982,67286,67590,67894,68198,68502,68806,69110,69414,69718,70022,70326,70630,70934,71238,71542,71846,72150,72454,72758,73062,73366,73670,73974,74278,74582,74886,75190,75494,75798,76102,76406,76710,77014,77318,77622'/>
+  </group>
+  <group name='102'>
+    <ids val='103,407,711,1015,1319,1623,1927,2231,2535,2839,3143,3447,3751,4055,4359,4663,4967,5271,5575,5879,6183,6487,6791,7095,7399,7703,8007,8311,8615,8919,9223,9527,9831,10135,10439,10743,11047,11351,11655,11959,12263,12567,12871,13175,13479,13783,14087,14391,14695,14999,15303,15607,15911,16215,16519,16823,17127,17431,17735,18039,18343,18647,18951,19255,19559,19863,20167,20471,20775,21079,21383,21687,21991,22295,22599,22903,23207,23511,23815,24119,24423,24727,25031,25335,25639,25943,26247,26551,26855,27159,27463,27767,28071,28375,28679,28983,29287,29591,29895,30199,30503,30807,31111,31415,31719,32023,32327,32631,32935,33239,33543,33847,34151,34455,34759,35063,35367,35671,35975,36279,36583,36887,37191,37495,37799,38103,38407,38711,39015,39319,39623,39927,40231,40535,40839,41143,41447,41751,42055,42359,42663,42967,43271,43575,43879,44183,44487,44791,45095,45399,45703,46007,46311,46615,46919,47223,47527,47831,48135,48439,48743,49047,49351,49655,49959,50263,50567,50871,51175,51479,51783,52087,52391,52695,52999,53303,53607,53911,54215,54519,54823,55127,55431,55735,56039,56343,56647,56951,57255,57559,57863,58167,58471,58775,59079,59383,59687,59991,60295,60599,60903,61207,61511,61815,62119,62423,62727,63031,63335,63639,63943,64247,64551,64855,65159,65463,65767,66071,66375,66679,66983,67287,67591,67895,68199,68503,68807,69111,69415,69719,70023,70327,70631,70935,71239,71543,71847,72151,72455,72759,73063,73367,73671,73975,74279,74583,74887,75191,75495,75799,76103,76407,76711,77015,77319,77623'/>
+  </group>
+  <group name='103'>
+    <ids val='104,408,712,1016,1320,1624,1928,2232,2536,2840,3144,3448,3752,4056,4360,4664,4968,5272,5576,5880,6184,6488,6792,7096,7400,7704,8008,8312,8616,8920,9224,9528,9832,10136,10440,10744,11048,11352,11656,11960,12264,12568,12872,13176,13480,13784,14088,14392,14696,15000,15304,15608,15912,16216,16520,16824,17128,17432,17736,18040,18344,18648,18952,19256,19560,19864,20168,20472,20776,21080,21384,21688,21992,22296,22600,22904,23208,23512,23816,24120,24424,24728,25032,25336,25640,25944,26248,26552,26856,27160,27464,27768,28072,28376,28680,28984,29288,29592,29896,30200,30504,30808,31112,31416,31720,32024,32328,32632,32936,33240,33544,33848,34152,34456,34760,35064,35368,35672,35976,36280,36584,36888,37192,37496,37800,38104,38408,38712,39016,39320,39624,39928,40232,40536,40840,41144,41448,41752,42056,42360,42664,42968,43272,43576,43880,44184,44488,44792,45096,45400,45704,46008,46312,46616,46920,47224,47528,47832,48136,48440,48744,49048,49352,49656,49960,50264,50568,50872,51176,51480,51784,52088,52392,52696,53000,53304,53608,53912,54216,54520,54824,55128,55432,55736,56040,56344,56648,56952,57256,57560,57864,58168,58472,58776,59080,59384,59688,59992,60296,60600,60904,61208,61512,61816,62120,62424,62728,63032,63336,63640,63944,64248,64552,64856,65160,65464,65768,66072,66376,66680,66984,67288,67592,67896,68200,68504,68808,69112,69416,69720,70024,70328,70632,70936,71240,71544,71848,72152,72456,72760,73064,73368,73672,73976,74280,74584,74888,75192,75496,75800,76104,76408,76712,77016,77320,77624'/>
+  </group>
+  <group name='104'>
+    <ids val='105,409,713,1017,1321,1625,1929,2233,2537,2841,3145,3449,3753,4057,4361,4665,4969,5273,5577,5881,6185,6489,6793,7097,7401,7705,8009,8313,8617,8921,9225,9529,9833,10137,10441,10745,11049,11353,11657,11961,12265,12569,12873,13177,13481,13785,14089,14393,14697,15001,15305,15609,15913,16217,16521,16825,17129,17433,17737,18041,18345,18649,18953,19257,19561,19865,20169,20473,20777,21081,21385,21689,21993,22297,22601,22905,23209,23513,23817,24121,24425,24729,25033,25337,25641,25945,26249,26553,26857,27161,27465,27769,28073,28377,28681,28985,29289,29593,29897,30201,30505,30809,31113,31417,31721,32025,32329,32633,32937,33241,33545,33849,34153,34457,34761,35065,35369,35673,35977,36281,36585,36889,37193,37497,37801,38105,38409,38713,39017,39321,39625,39929,40233,40537,40841,41145,41449,41753,42057,42361,42665,42969,43273,43577,43881,44185,44489,44793,45097,45401,45705,46009,46313,46617,46921,47225,47529,47833,48137,48441,48745,49049,49353,49657,49961,50265,50569,50873,51177,51481,51785,52089,52393,52697,53001,53305,53609,53913,54217,54521,54825,55129,55433,55737,56041,56345,56649,56953,57257,57561,57865,58169,58473,58777,59081,59385,59689,59993,60297,60601,60905,61209,61513,61817,62121,62425,62729,63033,63337,63641,63945,64249,64553,64857,65161,65465,65769,66073,66377,66681,66985,67289,67593,67897,68201,68505,68809,69113,69417,69721,70025,70329,70633,70937,71241,71545,71849,72153,72457,72761,73065,73369,73673,73977,74281,74585,74889,75193,75497,75801,76105,76409,76713,77017,77321,77625'/>
+  </group>
+  <group name='105'>
+    <ids val='106,410,714,1018,1322,1626,1930,2234,2538,2842,3146,3450,3754,4058,4362,4666,4970,5274,5578,5882,6186,6490,6794,7098,7402,7706,8010,8314,8618,8922,9226,9530,9834,10138,10442,10746,11050,11354,11658,11962,12266,12570,12874,13178,13482,13786,14090,14394,14698,15002,15306,15610,15914,16218,16522,16826,17130,17434,17738,18042,18346,18650,18954,19258,19562,19866,20170,20474,20778,21082,21386,21690,21994,22298,22602,22906,23210,23514,23818,24122,24426,24730,25034,25338,25642,25946,26250,26554,26858,27162,27466,27770,28074,28378,28682,28986,29290,29594,29898,30202,30506,30810,31114,31418,31722,32026,32330,32634,32938,33242,33546,33850,34154,34458,34762,35066,35370,35674,35978,36282,36586,36890,37194,37498,37802,38106,38410,38714,39018,39322,39626,39930,40234,40538,40842,41146,41450,41754,42058,42362,42666,42970,43274,43578,43882,44186,44490,44794,45098,45402,45706,46010,46314,46618,46922,47226,47530,47834,48138,48442,48746,49050,49354,49658,49962,50266,50570,50874,51178,51482,51786,52090,52394,52698,53002,53306,53610,53914,54218,54522,54826,55130,55434,55738,56042,56346,56650,56954,57258,57562,57866,58170,58474,58778,59082,59386,59690,59994,60298,60602,60906,61210,61514,61818,62122,62426,62730,63034,63338,63642,63946,64250,64554,64858,65162,65466,65770,66074,66378,66682,66986,67290,67594,67898,68202,68506,68810,69114,69418,69722,70026,70330,70634,70938,71242,71546,71850,72154,72458,72762,73066,73370,73674,73978,74282,74586,74890,75194,75498,75802,76106,76410,76714,77018,77322,77626'/>
+  </group>
+  <group name='106'>
+    <ids val='107,411,715,1019,1323,1627,1931,2235,2539,2843,3147,3451,3755,4059,4363,4667,4971,5275,5579,5883,6187,6491,6795,7099,7403,7707,8011,8315,8619,8923,9227,9531,9835,10139,10443,10747,11051,11355,11659,11963,12267,12571,12875,13179,13483,13787,14091,14395,14699,15003,15307,15611,15915,16219,16523,16827,17131,17435,17739,18043,18347,18651,18955,19259,19563,19867,20171,20475,20779,21083,21387,21691,21995,22299,22603,22907,23211,23515,23819,24123,24427,24731,25035,25339,25643,25947,26251,26555,26859,27163,27467,27771,28075,28379,28683,28987,29291,29595,29899,30203,30507,30811,31115,31419,31723,32027,32331,32635,32939,33243,33547,33851,34155,34459,34763,35067,35371,35675,35979,36283,36587,36891,37195,37499,37803,38107,38411,38715,39019,39323,39627,39931,40235,40539,40843,41147,41451,41755,42059,42363,42667,42971,43275,43579,43883,44187,44491,44795,45099,45403,45707,46011,46315,46619,46923,47227,47531,47835,48139,48443,48747,49051,49355,49659,49963,50267,50571,50875,51179,51483,51787,52091,52395,52699,53003,53307,53611,53915,54219,54523,54827,55131,55435,55739,56043,56347,56651,56955,57259,57563,57867,58171,58475,58779,59083,59387,59691,59995,60299,60603,60907,61211,61515,61819,62123,62427,62731,63035,63339,63643,63947,64251,64555,64859,65163,65467,65771,66075,66379,66683,66987,67291,67595,67899,68203,68507,68811,69115,69419,69723,70027,70331,70635,70939,71243,71547,71851,72155,72459,72763,73067,73371,73675,73979,74283,74587,74891,75195,75499,75803,76107,76411,76715,77019,77323,77627'/>
+  </group>
+  <group name='107'>
+    <ids val='108,412,716,1020,1324,1628,1932,2236,2540,2844,3148,3452,3756,4060,4364,4668,4972,5276,5580,5884,6188,6492,6796,7100,7404,7708,8012,8316,8620,8924,9228,9532,9836,10140,10444,10748,11052,11356,11660,11964,12268,12572,12876,13180,13484,13788,14092,14396,14700,15004,15308,15612,15916,16220,16524,16828,17132,17436,17740,18044,18348,18652,18956,19260,19564,19868,20172,20476,20780,21084,21388,21692,21996,22300,22604,22908,23212,23516,23820,24124,24428,24732,25036,25340,25644,25948,26252,26556,26860,27164,27468,27772,28076,28380,28684,28988,29292,29596,29900,30204,30508,30812,31116,31420,31724,32028,32332,32636,32940,33244,33548,33852,34156,34460,34764,35068,35372,35676,35980,36284,36588,36892,37196,37500,37804,38108,38412,38716,39020,39324,39628,39932,40236,40540,40844,41148,41452,41756,42060,42364,42668,42972,43276,43580,43884,44188,44492,44796,45100,45404,45708,46012,46316,46620,46924,47228,47532,47836,48140,48444,48748,49052,49356,49660,49964,50268,50572,50876,51180,51484,51788,52092,52396,52700,53004,53308,53612,53916,54220,54524,54828,55132,55436,55740,56044,56348,56652,56956,57260,57564,57868,58172,58476,58780,59084,59388,59692,59996,60300,60604,60908,61212,61516,61820,62124,62428,62732,63036,63340,63644,63948,64252,64556,64860,65164,65468,65772,66076,66380,66684,66988,67292,67596,67900,68204,68508,68812,69116,69420,69724,70028,70332,70636,70940,71244,71548,71852,72156,72460,72764,73068,73372,73676,73980,74284,74588,74892,75196,75500,75804,76108,76412,76716,77020,77324,77628'/>
+  </group>
+  <group name='108'>
+    <ids val='109,413,717,1021,1325,1629,1933,2237,2541,2845,3149,3453,3757,4061,4365,4669,4973,5277,5581,5885,6189,6493,6797,7101,7405,7709,8013,8317,8621,8925,9229,9533,9837,10141,10445,10749,11053,11357,11661,11965,12269,12573,12877,13181,13485,13789,14093,14397,14701,15005,15309,15613,15917,16221,16525,16829,17133,17437,17741,18045,18349,18653,18957,19261,19565,19869,20173,20477,20781,21085,21389,21693,21997,22301,22605,22909,23213,23517,23821,24125,24429,24733,25037,25341,25645,25949,26253,26557,26861,27165,27469,27773,28077,28381,28685,28989,29293,29597,29901,30205,30509,30813,31117,31421,31725,32029,32333,32637,32941,33245,33549,33853,34157,34461,34765,35069,35373,35677,35981,36285,36589,36893,37197,37501,37805,38109,38413,38717,39021,39325,39629,39933,40237,40541,40845,41149,41453,41757,42061,42365,42669,42973,43277,43581,43885,44189,44493,44797,45101,45405,45709,46013,46317,46621,46925,47229,47533,47837,48141,48445,48749,49053,49357,49661,49965,50269,50573,50877,51181,51485,51789,52093,52397,52701,53005,53309,53613,53917,54221,54525,54829,55133,55437,55741,56045,56349,56653,56957,57261,57565,57869,58173,58477,58781,59085,59389,59693,59997,60301,60605,60909,61213,61517,61821,62125,62429,62733,63037,63341,63645,63949,64253,64557,64861,65165,65469,65773,66077,66381,66685,66989,67293,67597,67901,68205,68509,68813,69117,69421,69725,70029,70333,70637,70941,71245,71549,71853,72157,72461,72765,73069,73373,73677,73981,74285,74589,74893,75197,75501,75805,76109,76413,76717,77021,77325,77629'/>
+  </group>
+  <group name='109'>
+    <ids val='110,414,718,1022,1326,1630,1934,2238,2542,2846,3150,3454,3758,4062,4366,4670,4974,5278,5582,5886,6190,6494,6798,7102,7406,7710,8014,8318,8622,8926,9230,9534,9838,10142,10446,10750,11054,11358,11662,11966,12270,12574,12878,13182,13486,13790,14094,14398,14702,15006,15310,15614,15918,16222,16526,16830,17134,17438,17742,18046,18350,18654,18958,19262,19566,19870,20174,20478,20782,21086,21390,21694,21998,22302,22606,22910,23214,23518,23822,24126,24430,24734,25038,25342,25646,25950,26254,26558,26862,27166,27470,27774,28078,28382,28686,28990,29294,29598,29902,30206,30510,30814,31118,31422,31726,32030,32334,32638,32942,33246,33550,33854,34158,34462,34766,35070,35374,35678,35982,36286,36590,36894,37198,37502,37806,38110,38414,38718,39022,39326,39630,39934,40238,40542,40846,41150,41454,41758,42062,42366,42670,42974,43278,43582,43886,44190,44494,44798,45102,45406,45710,46014,46318,46622,46926,47230,47534,47838,48142,48446,48750,49054,49358,49662,49966,50270,50574,50878,51182,51486,51790,52094,52398,52702,53006,53310,53614,53918,54222,54526,54830,55134,55438,55742,56046,56350,56654,56958,57262,57566,57870,58174,58478,58782,59086,59390,59694,59998,60302,60606,60910,61214,61518,61822,62126,62430,62734,63038,63342,63646,63950,64254,64558,64862,65166,65470,65774,66078,66382,66686,66990,67294,67598,67902,68206,68510,68814,69118,69422,69726,70030,70334,70638,70942,71246,71550,71854,72158,72462,72766,73070,73374,73678,73982,74286,74590,74894,75198,75502,75806,76110,76414,76718,77022,77326,77630'/>
+  </group>
+  <group name='110'>
+    <ids val='111,415,719,1023,1327,1631,1935,2239,2543,2847,3151,3455,3759,4063,4367,4671,4975,5279,5583,5887,6191,6495,6799,7103,7407,7711,8015,8319,8623,8927,9231,9535,9839,10143,10447,10751,11055,11359,11663,11967,12271,12575,12879,13183,13487,13791,14095,14399,14703,15007,15311,15615,15919,16223,16527,16831,17135,17439,17743,18047,18351,18655,18959,19263,19567,19871,20175,20479,20783,21087,21391,21695,21999,22303,22607,22911,23215,23519,23823,24127,24431,24735,25039,25343,25647,25951,26255,26559,26863,27167,27471,27775,28079,28383,28687,28991,29295,29599,29903,30207,30511,30815,31119,31423,31727,32031,32335,32639,32943,33247,33551,33855,34159,34463,34767,35071,35375,35679,35983,36287,36591,36895,37199,37503,37807,38111,38415,38719,39023,39327,39631,39935,40239,40543,40847,41151,41455,41759,42063,42367,42671,42975,43279,43583,43887,44191,44495,44799,45103,45407,45711,46015,46319,46623,46927,47231,47535,47839,48143,48447,48751,49055,49359,49663,49967,50271,50575,50879,51183,51487,51791,52095,52399,52703,53007,53311,53615,53919,54223,54527,54831,55135,55439,55743,56047,56351,56655,56959,57263,57567,57871,58175,58479,58783,59087,59391,59695,59999,60303,60607,60911,61215,61519,61823,62127,62431,62735,63039,63343,63647,63951,64255,64559,64863,65167,65471,65775,66079,66383,66687,66991,67295,67599,67903,68207,68511,68815,69119,69423,69727,70031,70335,70639,70943,71247,71551,71855,72159,72463,72767,73071,73375,73679,73983,74287,74591,74895,75199,75503,75807,76111,76415,76719,77023,77327,77631'/>
+  </group>
+  <group name='111'>
+    <ids val='112,416,720,1024,1328,1632,1936,2240,2544,2848,3152,3456,3760,4064,4368,4672,4976,5280,5584,5888,6192,6496,6800,7104,7408,7712,8016,8320,8624,8928,9232,9536,9840,10144,10448,10752,11056,11360,11664,11968,12272,12576,12880,13184,13488,13792,14096,14400,14704,15008,15312,15616,15920,16224,16528,16832,17136,17440,17744,18048,18352,18656,18960,19264,19568,19872,20176,20480,20784,21088,21392,21696,22000,22304,22608,22912,23216,23520,23824,24128,24432,24736,25040,25344,25648,25952,26256,26560,26864,27168,27472,27776,28080,28384,28688,28992,29296,29600,29904,30208,30512,30816,31120,31424,31728,32032,32336,32640,32944,33248,33552,33856,34160,34464,34768,35072,35376,35680,35984,36288,36592,36896,37200,37504,37808,38112,38416,38720,39024,39328,39632,39936,40240,40544,40848,41152,41456,41760,42064,42368,42672,42976,43280,43584,43888,44192,44496,44800,45104,45408,45712,46016,46320,46624,46928,47232,47536,47840,48144,48448,48752,49056,49360,49664,49968,50272,50576,50880,51184,51488,51792,52096,52400,52704,53008,53312,53616,53920,54224,54528,54832,55136,55440,55744,56048,56352,56656,56960,57264,57568,57872,58176,58480,58784,59088,59392,59696,60000,60304,60608,60912,61216,61520,61824,62128,62432,62736,63040,63344,63648,63952,64256,64560,64864,65168,65472,65776,66080,66384,66688,66992,67296,67600,67904,68208,68512,68816,69120,69424,69728,70032,70336,70640,70944,71248,71552,71856,72160,72464,72768,73072,73376,73680,73984,74288,74592,74896,75200,75504,75808,76112,76416,76720,77024,77328,77632'/>
+  </group>
+  <group name='112'>
+    <ids val='113,417,721,1025,1329,1633,1937,2241,2545,2849,3153,3457,3761,4065,4369,4673,4977,5281,5585,5889,6193,6497,6801,7105,7409,7713,8017,8321,8625,8929,9233,9537,9841,10145,10449,10753,11057,11361,11665,11969,12273,12577,12881,13185,13489,13793,14097,14401,14705,15009,15313,15617,15921,16225,16529,16833,17137,17441,17745,18049,18353,18657,18961,19265,19569,19873,20177,20481,20785,21089,21393,21697,22001,22305,22609,22913,23217,23521,23825,24129,24433,24737,25041,25345,25649,25953,26257,26561,26865,27169,27473,27777,28081,28385,28689,28993,29297,29601,29905,30209,30513,30817,31121,31425,31729,32033,32337,32641,32945,33249,33553,33857,34161,34465,34769,35073,35377,35681,35985,36289,36593,36897,37201,37505,37809,38113,38417,38721,39025,39329,39633,39937,40241,40545,40849,41153,41457,41761,42065,42369,42673,42977,43281,43585,43889,44193,44497,44801,45105,45409,45713,46017,46321,46625,46929,47233,47537,47841,48145,48449,48753,49057,49361,49665,49969,50273,50577,50881,51185,51489,51793,52097,52401,52705,53009,53313,53617,53921,54225,54529,54833,55137,55441,55745,56049,56353,56657,56961,57265,57569,57873,58177,58481,58785,59089,59393,59697,60001,60305,60609,60913,61217,61521,61825,62129,62433,62737,63041,63345,63649,63953,64257,64561,64865,65169,65473,65777,66081,66385,66689,66993,67297,67601,67905,68209,68513,68817,69121,69425,69729,70033,70337,70641,70945,71249,71553,71857,72161,72465,72769,73073,73377,73681,73985,74289,74593,74897,75201,75505,75809,76113,76417,76721,77025,77329,77633'/>
+  </group>
+  <group name='113'>
+    <ids val='114,418,722,1026,1330,1634,1938,2242,2546,2850,3154,3458,3762,4066,4370,4674,4978,5282,5586,5890,6194,6498,6802,7106,7410,7714,8018,8322,8626,8930,9234,9538,9842,10146,10450,10754,11058,11362,11666,11970,12274,12578,12882,13186,13490,13794,14098,14402,14706,15010,15314,15618,15922,16226,16530,16834,17138,17442,17746,18050,18354,18658,18962,19266,19570,19874,20178,20482,20786,21090,21394,21698,22002,22306,22610,22914,23218,23522,23826,24130,24434,24738,25042,25346,25650,25954,26258,26562,26866,27170,27474,27778,28082,28386,28690,28994,29298,29602,29906,30210,30514,30818,31122,31426,31730,32034,32338,32642,32946,33250,33554,33858,34162,34466,34770,35074,35378,35682,35986,36290,36594,36898,37202,37506,37810,38114,38418,38722,39026,39330,39634,39938,40242,40546,40850,41154,41458,41762,42066,42370,42674,42978,43282,43586,43890,44194,44498,44802,45106,45410,45714,46018,46322,46626,46930,47234,47538,47842,48146,48450,48754,49058,49362,49666,49970,50274,50578,50882,51186,51490,51794,52098,52402,52706,53010,53314,53618,53922,54226,54530,54834,55138,55442,55746,56050,56354,56658,56962,57266,57570,57874,58178,58482,58786,59090,59394,59698,60002,60306,60610,60914,61218,61522,61826,62130,62434,62738,63042,63346,63650,63954,64258,64562,64866,65170,65474,65778,66082,66386,66690,66994,67298,67602,67906,68210,68514,68818,69122,69426,69730,70034,70338,70642,70946,71250,71554,71858,72162,72466,72770,73074,73378,73682,73986,74290,74594,74898,75202,75506,75810,76114,76418,76722,77026,77330,77634'/>
+  </group>
+  <group name='114'>
+    <ids val='115,419,723,1027,1331,1635,1939,2243,2547,2851,3155,3459,3763,4067,4371,4675,4979,5283,5587,5891,6195,6499,6803,7107,7411,7715,8019,8323,8627,8931,9235,9539,9843,10147,10451,10755,11059,11363,11667,11971,12275,12579,12883,13187,13491,13795,14099,14403,14707,15011,15315,15619,15923,16227,16531,16835,17139,17443,17747,18051,18355,18659,18963,19267,19571,19875,20179,20483,20787,21091,21395,21699,22003,22307,22611,22915,23219,23523,23827,24131,24435,24739,25043,25347,25651,25955,26259,26563,26867,27171,27475,27779,28083,28387,28691,28995,29299,29603,29907,30211,30515,30819,31123,31427,31731,32035,32339,32643,32947,33251,33555,33859,34163,34467,34771,35075,35379,35683,35987,36291,36595,36899,37203,37507,37811,38115,38419,38723,39027,39331,39635,39939,40243,40547,40851,41155,41459,41763,42067,42371,42675,42979,43283,43587,43891,44195,44499,44803,45107,45411,45715,46019,46323,46627,46931,47235,47539,47843,48147,48451,48755,49059,49363,49667,49971,50275,50579,50883,51187,51491,51795,52099,52403,52707,53011,53315,53619,53923,54227,54531,54835,55139,55443,55747,56051,56355,56659,56963,57267,57571,57875,58179,58483,58787,59091,59395,59699,60003,60307,60611,60915,61219,61523,61827,62131,62435,62739,63043,63347,63651,63955,64259,64563,64867,65171,65475,65779,66083,66387,66691,66995,67299,67603,67907,68211,68515,68819,69123,69427,69731,70035,70339,70643,70947,71251,71555,71859,72163,72467,72771,73075,73379,73683,73987,74291,74595,74899,75203,75507,75811,76115,76419,76723,77027,77331,77635'/>
+  </group>
+  <group name='115'>
+    <ids val='116,420,724,1028,1332,1636,1940,2244,2548,2852,3156,3460,3764,4068,4372,4676,4980,5284,5588,5892,6196,6500,6804,7108,7412,7716,8020,8324,8628,8932,9236,9540,9844,10148,10452,10756,11060,11364,11668,11972,12276,12580,12884,13188,13492,13796,14100,14404,14708,15012,15316,15620,15924,16228,16532,16836,17140,17444,17748,18052,18356,18660,18964,19268,19572,19876,20180,20484,20788,21092,21396,21700,22004,22308,22612,22916,23220,23524,23828,24132,24436,24740,25044,25348,25652,25956,26260,26564,26868,27172,27476,27780,28084,28388,28692,28996,29300,29604,29908,30212,30516,30820,31124,31428,31732,32036,32340,32644,32948,33252,33556,33860,34164,34468,34772,35076,35380,35684,35988,36292,36596,36900,37204,37508,37812,38116,38420,38724,39028,39332,39636,39940,40244,40548,40852,41156,41460,41764,42068,42372,42676,42980,43284,43588,43892,44196,44500,44804,45108,45412,45716,46020,46324,46628,46932,47236,47540,47844,48148,48452,48756,49060,49364,49668,49972,50276,50580,50884,51188,51492,51796,52100,52404,52708,53012,53316,53620,53924,54228,54532,54836,55140,55444,55748,56052,56356,56660,56964,57268,57572,57876,58180,58484,58788,59092,59396,59700,60004,60308,60612,60916,61220,61524,61828,62132,62436,62740,63044,63348,63652,63956,64260,64564,64868,65172,65476,65780,66084,66388,66692,66996,67300,67604,67908,68212,68516,68820,69124,69428,69732,70036,70340,70644,70948,71252,71556,71860,72164,72468,72772,73076,73380,73684,73988,74292,74596,74900,75204,75508,75812,76116,76420,76724,77028,77332,77636'/>
+  </group>
+  <group name='116'>
+    <ids val='117,421,725,1029,1333,1637,1941,2245,2549,2853,3157,3461,3765,4069,4373,4677,4981,5285,5589,5893,6197,6501,6805,7109,7413,7717,8021,8325,8629,8933,9237,9541,9845,10149,10453,10757,11061,11365,11669,11973,12277,12581,12885,13189,13493,13797,14101,14405,14709,15013,15317,15621,15925,16229,16533,16837,17141,17445,17749,18053,18357,18661,18965,19269,19573,19877,20181,20485,20789,21093,21397,21701,22005,22309,22613,22917,23221,23525,23829,24133,24437,24741,25045,25349,25653,25957,26261,26565,26869,27173,27477,27781,28085,28389,28693,28997,29301,29605,29909,30213,30517,30821,31125,31429,31733,32037,32341,32645,32949,33253,33557,33861,34165,34469,34773,35077,35381,35685,35989,36293,36597,36901,37205,37509,37813,38117,38421,38725,39029,39333,39637,39941,40245,40549,40853,41157,41461,41765,42069,42373,42677,42981,43285,43589,43893,44197,44501,44805,45109,45413,45717,46021,46325,46629,46933,47237,47541,47845,48149,48453,48757,49061,49365,49669,49973,50277,50581,50885,51189,51493,51797,52101,52405,52709,53013,53317,53621,53925,54229,54533,54837,55141,55445,55749,56053,56357,56661,56965,57269,57573,57877,58181,58485,58789,59093,59397,59701,60005,60309,60613,60917,61221,61525,61829,62133,62437,62741,63045,63349,63653,63957,64261,64565,64869,65173,65477,65781,66085,66389,66693,66997,67301,67605,67909,68213,68517,68821,69125,69429,69733,70037,70341,70645,70949,71253,71557,71861,72165,72469,72773,73077,73381,73685,73989,74293,74597,74901,75205,75509,75813,76117,76421,76725,77029,77333,77637'/>
+  </group>
+  <group name='117'>
+    <ids val='118,422,726,1030,1334,1638,1942,2246,2550,2854,3158,3462,3766,4070,4374,4678,4982,5286,5590,5894,6198,6502,6806,7110,7414,7718,8022,8326,8630,8934,9238,9542,9846,10150,10454,10758,11062,11366,11670,11974,12278,12582,12886,13190,13494,13798,14102,14406,14710,15014,15318,15622,15926,16230,16534,16838,17142,17446,17750,18054,18358,18662,18966,19270,19574,19878,20182,20486,20790,21094,21398,21702,22006,22310,22614,22918,23222,23526,23830,24134,24438,24742,25046,25350,25654,25958,26262,26566,26870,27174,27478,27782,28086,28390,28694,28998,29302,29606,29910,30214,30518,30822,31126,31430,31734,32038,32342,32646,32950,33254,33558,33862,34166,34470,34774,35078,35382,35686,35990,36294,36598,36902,37206,37510,37814,38118,38422,38726,39030,39334,39638,39942,40246,40550,40854,41158,41462,41766,42070,42374,42678,42982,43286,43590,43894,44198,44502,44806,45110,45414,45718,46022,46326,46630,46934,47238,47542,47846,48150,48454,48758,49062,49366,49670,49974,50278,50582,50886,51190,51494,51798,52102,52406,52710,53014,53318,53622,53926,54230,54534,54838,55142,55446,55750,56054,56358,56662,56966,57270,57574,57878,58182,58486,58790,59094,59398,59702,60006,60310,60614,60918,61222,61526,61830,62134,62438,62742,63046,63350,63654,63958,64262,64566,64870,65174,65478,65782,66086,66390,66694,66998,67302,67606,67910,68214,68518,68822,69126,69430,69734,70038,70342,70646,70950,71254,71558,71862,72166,72470,72774,73078,73382,73686,73990,74294,74598,74902,75206,75510,75814,76118,76422,76726,77030,77334,77638'/>
+  </group>
+  <group name='118'>
+    <ids val='119,423,727,1031,1335,1639,1943,2247,2551,2855,3159,3463,3767,4071,4375,4679,4983,5287,5591,5895,6199,6503,6807,7111,7415,7719,8023,8327,8631,8935,9239,9543,9847,10151,10455,10759,11063,11367,11671,11975,12279,12583,12887,13191,13495,13799,14103,14407,14711,15015,15319,15623,15927,16231,16535,16839,17143,17447,17751,18055,18359,18663,18967,19271,19575,19879,20183,20487,20791,21095,21399,21703,22007,22311,22615,22919,23223,23527,23831,24135,24439,24743,25047,25351,25655,25959,26263,26567,26871,27175,27479,27783,28087,28391,28695,28999,29303,29607,29911,30215,30519,30823,31127,31431,31735,32039,32343,32647,32951,33255,33559,33863,34167,34471,34775,35079,35383,35687,35991,36295,36599,36903,37207,37511,37815,38119,38423,38727,39031,39335,39639,39943,40247,40551,40855,41159,41463,41767,42071,42375,42679,42983,43287,43591,43895,44199,44503,44807,45111,45415,45719,46023,46327,46631,46935,47239,47543,47847,48151,48455,48759,49063,49367,49671,49975,50279,50583,50887,51191,51495,51799,52103,52407,52711,53015,53319,53623,53927,54231,54535,54839,55143,55447,55751,56055,56359,56663,56967,57271,57575,57879,58183,58487,58791,59095,59399,59703,60007,60311,60615,60919,61223,61527,61831,62135,62439,62743,63047,63351,63655,63959,64263,64567,64871,65175,65479,65783,66087,66391,66695,66999,67303,67607,67911,68215,68519,68823,69127,69431,69735,70039,70343,70647,70951,71255,71559,71863,72167,72471,72775,73079,73383,73687,73991,74295,74599,74903,75207,75511,75815,76119,76423,76727,77031,77335,77639'/>
+  </group>
+  <group name='119'>
+    <ids val='120,424,728,1032,1336,1640,1944,2248,2552,2856,3160,3464,3768,4072,4376,4680,4984,5288,5592,5896,6200,6504,6808,7112,7416,7720,8024,8328,8632,8936,9240,9544,9848,10152,10456,10760,11064,11368,11672,11976,12280,12584,12888,13192,13496,13800,14104,14408,14712,15016,15320,15624,15928,16232,16536,16840,17144,17448,17752,18056,18360,18664,18968,19272,19576,19880,20184,20488,20792,21096,21400,21704,22008,22312,22616,22920,23224,23528,23832,24136,24440,24744,25048,25352,25656,25960,26264,26568,26872,27176,27480,27784,28088,28392,28696,29000,29304,29608,29912,30216,30520,30824,31128,31432,31736,32040,32344,32648,32952,33256,33560,33864,34168,34472,34776,35080,35384,35688,35992,36296,36600,36904,37208,37512,37816,38120,38424,38728,39032,39336,39640,39944,40248,40552,40856,41160,41464,41768,42072,42376,42680,42984,43288,43592,43896,44200,44504,44808,45112,45416,45720,46024,46328,46632,46936,47240,47544,47848,48152,48456,48760,49064,49368,49672,49976,50280,50584,50888,51192,51496,51800,52104,52408,52712,53016,53320,53624,53928,54232,54536,54840,55144,55448,55752,56056,56360,56664,56968,57272,57576,57880,58184,58488,58792,59096,59400,59704,60008,60312,60616,60920,61224,61528,61832,62136,62440,62744,63048,63352,63656,63960,64264,64568,64872,65176,65480,65784,66088,66392,66696,67000,67304,67608,67912,68216,68520,68824,69128,69432,69736,70040,70344,70648,70952,71256,71560,71864,72168,72472,72776,73080,73384,73688,73992,74296,74600,74904,75208,75512,75816,76120,76424,76728,77032,77336,77640'/>
+  </group>
+  <group name='120'>
+    <ids val='121,425,729,1033,1337,1641,1945,2249,2553,2857,3161,3465,3769,4073,4377,4681,4985,5289,5593,5897,6201,6505,6809,7113,7417,7721,8025,8329,8633,8937,9241,9545,9849,10153,10457,10761,11065,11369,11673,11977,12281,12585,12889,13193,13497,13801,14105,14409,14713,15017,15321,15625,15929,16233,16537,16841,17145,17449,17753,18057,18361,18665,18969,19273,19577,19881,20185,20489,20793,21097,21401,21705,22009,22313,22617,22921,23225,23529,23833,24137,24441,24745,25049,25353,25657,25961,26265,26569,26873,27177,27481,27785,28089,28393,28697,29001,29305,29609,29913,30217,30521,30825,31129,31433,31737,32041,32345,32649,32953,33257,33561,33865,34169,34473,34777,35081,35385,35689,35993,36297,36601,36905,37209,37513,37817,38121,38425,38729,39033,39337,39641,39945,40249,40553,40857,41161,41465,41769,42073,42377,42681,42985,43289,43593,43897,44201,44505,44809,45113,45417,45721,46025,46329,46633,46937,47241,47545,47849,48153,48457,48761,49065,49369,49673,49977,50281,50585,50889,51193,51497,51801,52105,52409,52713,53017,53321,53625,53929,54233,54537,54841,55145,55449,55753,56057,56361,56665,56969,57273,57577,57881,58185,58489,58793,59097,59401,59705,60009,60313,60617,60921,61225,61529,61833,62137,62441,62745,63049,63353,63657,63961,64265,64569,64873,65177,65481,65785,66089,66393,66697,67001,67305,67609,67913,68217,68521,68825,69129,69433,69737,70041,70345,70649,70953,71257,71561,71865,72169,72473,72777,73081,73385,73689,73993,74297,74601,74905,75209,75513,75817,76121,76425,76729,77033,77337,77641'/>
+  </group>
+  <group name='121'>
+    <ids val='122,426,730,1034,1338,1642,1946,2250,2554,2858,3162,3466,3770,4074,4378,4682,4986,5290,5594,5898,6202,6506,6810,7114,7418,7722,8026,8330,8634,8938,9242,9546,9850,10154,10458,10762,11066,11370,11674,11978,12282,12586,12890,13194,13498,13802,14106,14410,14714,15018,15322,15626,15930,16234,16538,16842,17146,17450,17754,18058,18362,18666,18970,19274,19578,19882,20186,20490,20794,21098,21402,21706,22010,22314,22618,22922,23226,23530,23834,24138,24442,24746,25050,25354,25658,25962,26266,26570,26874,27178,27482,27786,28090,28394,28698,29002,29306,29610,29914,30218,30522,30826,31130,31434,31738,32042,32346,32650,32954,33258,33562,33866,34170,34474,34778,35082,35386,35690,35994,36298,36602,36906,37210,37514,37818,38122,38426,38730,39034,39338,39642,39946,40250,40554,40858,41162,41466,41770,42074,42378,42682,42986,43290,43594,43898,44202,44506,44810,45114,45418,45722,46026,46330,46634,46938,47242,47546,47850,48154,48458,48762,49066,49370,49674,49978,50282,50586,50890,51194,51498,51802,52106,52410,52714,53018,53322,53626,53930,54234,54538,54842,55146,55450,55754,56058,56362,56666,56970,57274,57578,57882,58186,58490,58794,59098,59402,59706,60010,60314,60618,60922,61226,61530,61834,62138,62442,62746,63050,63354,63658,63962,64266,64570,64874,65178,65482,65786,66090,66394,66698,67002,67306,67610,67914,68218,68522,68826,69130,69434,69738,70042,70346,70650,70954,71258,71562,71866,72170,72474,72778,73082,73386,73690,73994,74298,74602,74906,75210,75514,75818,76122,76426,76730,77034,77338,77642'/>
+  </group>
+  <group name='122'>
+    <ids val='123,427,731,1035,1339,1643,1947,2251,2555,2859,3163,3467,3771,4075,4379,4683,4987,5291,5595,5899,6203,6507,6811,7115,7419,7723,8027,8331,8635,8939,9243,9547,9851,10155,10459,10763,11067,11371,11675,11979,12283,12587,12891,13195,13499,13803,14107,14411,14715,15019,15323,15627,15931,16235,16539,16843,17147,17451,17755,18059,18363,18667,18971,19275,19579,19883,20187,20491,20795,21099,21403,21707,22011,22315,22619,22923,23227,23531,23835,24139,24443,24747,25051,25355,25659,25963,26267,26571,26875,27179,27483,27787,28091,28395,28699,29003,29307,29611,29915,30219,30523,30827,31131,31435,31739,32043,32347,32651,32955,33259,33563,33867,34171,34475,34779,35083,35387,35691,35995,36299,36603,36907,37211,37515,37819,38123,38427,38731,39035,39339,39643,39947,40251,40555,40859,41163,41467,41771,42075,42379,42683,42987,43291,43595,43899,44203,44507,44811,45115,45419,45723,46027,46331,46635,46939,47243,47547,47851,48155,48459,48763,49067,49371,49675,49979,50283,50587,50891,51195,51499,51803,52107,52411,52715,53019,53323,53627,53931,54235,54539,54843,55147,55451,55755,56059,56363,56667,56971,57275,57579,57883,58187,58491,58795,59099,59403,59707,60011,60315,60619,60923,61227,61531,61835,62139,62443,62747,63051,63355,63659,63963,64267,64571,64875,65179,65483,65787,66091,66395,66699,67003,67307,67611,67915,68219,68523,68827,69131,69435,69739,70043,70347,70651,70955,71259,71563,71867,72171,72475,72779,73083,73387,73691,73995,74299,74603,74907,75211,75515,75819,76123,76427,76731,77035,77339,77643'/>
+  </group>
+  <group name='123'>
+    <ids val='124,428,732,1036,1340,1644,1948,2252,2556,2860,3164,3468,3772,4076,4380,4684,4988,5292,5596,5900,6204,6508,6812,7116,7420,7724,8028,8332,8636,8940,9244,9548,9852,10156,10460,10764,11068,11372,11676,11980,12284,12588,12892,13196,13500,13804,14108,14412,14716,15020,15324,15628,15932,16236,16540,16844,17148,17452,17756,18060,18364,18668,18972,19276,19580,19884,20188,20492,20796,21100,21404,21708,22012,22316,22620,22924,23228,23532,23836,24140,24444,24748,25052,25356,25660,25964,26268,26572,26876,27180,27484,27788,28092,28396,28700,29004,29308,29612,29916,30220,30524,30828,31132,31436,31740,32044,32348,32652,32956,33260,33564,33868,34172,34476,34780,35084,35388,35692,35996,36300,36604,36908,37212,37516,37820,38124,38428,38732,39036,39340,39644,39948,40252,40556,40860,41164,41468,41772,42076,42380,42684,42988,43292,43596,43900,44204,44508,44812,45116,45420,45724,46028,46332,46636,46940,47244,47548,47852,48156,48460,48764,49068,49372,49676,49980,50284,50588,50892,51196,51500,51804,52108,52412,52716,53020,53324,53628,53932,54236,54540,54844,55148,55452,55756,56060,56364,56668,56972,57276,57580,57884,58188,58492,58796,59100,59404,59708,60012,60316,60620,60924,61228,61532,61836,62140,62444,62748,63052,63356,63660,63964,64268,64572,64876,65180,65484,65788,66092,66396,66700,67004,67308,67612,67916,68220,68524,68828,69132,69436,69740,70044,70348,70652,70956,71260,71564,71868,72172,72476,72780,73084,73388,73692,73996,74300,74604,74908,75212,75516,75820,76124,76428,76732,77036,77340,77644'/>
+  </group>
+  <group name='124'>
+    <ids val='125,429,733,1037,1341,1645,1949,2253,2557,2861,3165,3469,3773,4077,4381,4685,4989,5293,5597,5901,6205,6509,6813,7117,7421,7725,8029,8333,8637,8941,9245,9549,9853,10157,10461,10765,11069,11373,11677,11981,12285,12589,12893,13197,13501,13805,14109,14413,14717,15021,15325,15629,15933,16237,16541,16845,17149,17453,17757,18061,18365,18669,18973,19277,19581,19885,20189,20493,20797,21101,21405,21709,22013,22317,22621,22925,23229,23533,23837,24141,24445,24749,25053,25357,25661,25965,26269,26573,26877,27181,27485,27789,28093,28397,28701,29005,29309,29613,29917,30221,30525,30829,31133,31437,31741,32045,32349,32653,32957,33261,33565,33869,34173,34477,34781,35085,35389,35693,35997,36301,36605,36909,37213,37517,37821,38125,38429,38733,39037,39341,39645,39949,40253,40557,40861,41165,41469,41773,42077,42381,42685,42989,43293,43597,43901,44205,44509,44813,45117,45421,45725,46029,46333,46637,46941,47245,47549,47853,48157,48461,48765,49069,49373,49677,49981,50285,50589,50893,51197,51501,51805,52109,52413,52717,53021,53325,53629,53933,54237,54541,54845,55149,55453,55757,56061,56365,56669,56973,57277,57581,57885,58189,58493,58797,59101,59405,59709,60013,60317,60621,60925,61229,61533,61837,62141,62445,62749,63053,63357,63661,63965,64269,64573,64877,65181,65485,65789,66093,66397,66701,67005,67309,67613,67917,68221,68525,68829,69133,69437,69741,70045,70349,70653,70957,71261,71565,71869,72173,72477,72781,73085,73389,73693,73997,74301,74605,74909,75213,75517,75821,76125,76429,76733,77037,77341,77645'/>
+  </group>
+  <group name='125'>
+    <ids val='126,430,734,1038,1342,1646,1950,2254,2558,2862,3166,3470,3774,4078,4382,4686,4990,5294,5598,5902,6206,6510,6814,7118,7422,7726,8030,8334,8638,8942,9246,9550,9854,10158,10462,10766,11070,11374,11678,11982,12286,12590,12894,13198,13502,13806,14110,14414,14718,15022,15326,15630,15934,16238,16542,16846,17150,17454,17758,18062,18366,18670,18974,19278,19582,19886,20190,20494,20798,21102,21406,21710,22014,22318,22622,22926,23230,23534,23838,24142,24446,24750,25054,25358,25662,25966,26270,26574,26878,27182,27486,27790,28094,28398,28702,29006,29310,29614,29918,30222,30526,30830,31134,31438,31742,32046,32350,32654,32958,33262,33566,33870,34174,34478,34782,35086,35390,35694,35998,36302,36606,36910,37214,37518,37822,38126,38430,38734,39038,39342,39646,39950,40254,40558,40862,41166,41470,41774,42078,42382,42686,42990,43294,43598,43902,44206,44510,44814,45118,45422,45726,46030,46334,46638,46942,47246,47550,47854,48158,48462,48766,49070,49374,49678,49982,50286,50590,50894,51198,51502,51806,52110,52414,52718,53022,53326,53630,53934,54238,54542,54846,55150,55454,55758,56062,56366,56670,56974,57278,57582,57886,58190,58494,58798,59102,59406,59710,60014,60318,60622,60926,61230,61534,61838,62142,62446,62750,63054,63358,63662,63966,64270,64574,64878,65182,65486,65790,66094,66398,66702,67006,67310,67614,67918,68222,68526,68830,69134,69438,69742,70046,70350,70654,70958,71262,71566,71870,72174,72478,72782,73086,73390,73694,73998,74302,74606,74910,75214,75518,75822,76126,76430,76734,77038,77342,77646'/>
+  </group>
+  <group name='126'>
+    <ids val='127,431,735,1039,1343,1647,1951,2255,2559,2863,3167,3471,3775,4079,4383,4687,4991,5295,5599,5903,6207,6511,6815,7119,7423,7727,8031,8335,8639,8943,9247,9551,9855,10159,10463,10767,11071,11375,11679,11983,12287,12591,12895,13199,13503,13807,14111,14415,14719,15023,15327,15631,15935,16239,16543,16847,17151,17455,17759,18063,18367,18671,18975,19279,19583,19887,20191,20495,20799,21103,21407,21711,22015,22319,22623,22927,23231,23535,23839,24143,24447,24751,25055,25359,25663,25967,26271,26575,26879,27183,27487,27791,28095,28399,28703,29007,29311,29615,29919,30223,30527,30831,31135,31439,31743,32047,32351,32655,32959,33263,33567,33871,34175,34479,34783,35087,35391,35695,35999,36303,36607,36911,37215,37519,37823,38127,38431,38735,39039,39343,39647,39951,40255,40559,40863,41167,41471,41775,42079,42383,42687,42991,43295,43599,43903,44207,44511,44815,45119,45423,45727,46031,46335,46639,46943,47247,47551,47855,48159,48463,48767,49071,49375,49679,49983,50287,50591,50895,51199,51503,51807,52111,52415,52719,53023,53327,53631,53935,54239,54543,54847,55151,55455,55759,56063,56367,56671,56975,57279,57583,57887,58191,58495,58799,59103,59407,59711,60015,60319,60623,60927,61231,61535,61839,62143,62447,62751,63055,63359,63663,63967,64271,64575,64879,65183,65487,65791,66095,66399,66703,67007,67311,67615,67919,68223,68527,68831,69135,69439,69743,70047,70351,70655,70959,71263,71567,71871,72175,72479,72783,73087,73391,73695,73999,74303,74607,74911,75215,75519,75823,76127,76431,76735,77039,77343,77647'/>
+  </group>
+  <group name='127'>
+    <ids val='128,432,736,1040,1344,1648,1952,2256,2560,2864,3168,3472,3776,4080,4384,4688,4992,5296,5600,5904,6208,6512,6816,7120,7424,7728,8032,8336,8640,8944,9248,9552,9856,10160,10464,10768,11072,11376,11680,11984,12288,12592,12896,13200,13504,13808,14112,14416,14720,15024,15328,15632,15936,16240,16544,16848,17152,17456,17760,18064,18368,18672,18976,19280,19584,19888,20192,20496,20800,21104,21408,21712,22016,22320,22624,22928,23232,23536,23840,24144,24448,24752,25056,25360,25664,25968,26272,26576,26880,27184,27488,27792,28096,28400,28704,29008,29312,29616,29920,30224,30528,30832,31136,31440,31744,32048,32352,32656,32960,33264,33568,33872,34176,34480,34784,35088,35392,35696,36000,36304,36608,36912,37216,37520,37824,38128,38432,38736,39040,39344,39648,39952,40256,40560,40864,41168,41472,41776,42080,42384,42688,42992,43296,43600,43904,44208,44512,44816,45120,45424,45728,46032,46336,46640,46944,47248,47552,47856,48160,48464,48768,49072,49376,49680,49984,50288,50592,50896,51200,51504,51808,52112,52416,52720,53024,53328,53632,53936,54240,54544,54848,55152,55456,55760,56064,56368,56672,56976,57280,57584,57888,58192,58496,58800,59104,59408,59712,60016,60320,60624,60928,61232,61536,61840,62144,62448,62752,63056,63360,63664,63968,64272,64576,64880,65184,65488,65792,66096,66400,66704,67008,67312,67616,67920,68224,68528,68832,69136,69440,69744,70048,70352,70656,70960,71264,71568,71872,72176,72480,72784,73088,73392,73696,74000,74304,74608,74912,75216,75520,75824,76128,76432,76736,77040,77344,77648'/>
+  </group>
+  <group name='128'>
+    <ids val='129,433,737,1041,1345,1649,1953,2257,2561,2865,3169,3473,3777,4081,4385,4689,4993,5297,5601,5905,6209,6513,6817,7121,7425,7729,8033,8337,8641,8945,9249,9553,9857,10161,10465,10769,11073,11377,11681,11985,12289,12593,12897,13201,13505,13809,14113,14417,14721,15025,15329,15633,15937,16241,16545,16849,17153,17457,17761,18065,18369,18673,18977,19281,19585,19889,20193,20497,20801,21105,21409,21713,22017,22321,22625,22929,23233,23537,23841,24145,24449,24753,25057,25361,25665,25969,26273,26577,26881,27185,27489,27793,28097,28401,28705,29009,29313,29617,29921,30225,30529,30833,31137,31441,31745,32049,32353,32657,32961,33265,33569,33873,34177,34481,34785,35089,35393,35697,36001,36305,36609,36913,37217,37521,37825,38129,38433,38737,39041,39345,39649,39953,40257,40561,40865,41169,41473,41777,42081,42385,42689,42993,43297,43601,43905,44209,44513,44817,45121,45425,45729,46033,46337,46641,46945,47249,47553,47857,48161,48465,48769,49073,49377,49681,49985,50289,50593,50897,51201,51505,51809,52113,52417,52721,53025,53329,53633,53937,54241,54545,54849,55153,55457,55761,56065,56369,56673,56977,57281,57585,57889,58193,58497,58801,59105,59409,59713,60017,60321,60625,60929,61233,61537,61841,62145,62449,62753,63057,63361,63665,63969,64273,64577,64881,65185,65489,65793,66097,66401,66705,67009,67313,67617,67921,68225,68529,68833,69137,69441,69745,70049,70353,70657,70961,71265,71569,71873,72177,72481,72785,73089,73393,73697,74001,74305,74609,74913,75217,75521,75825,76129,76433,76737,77041,77345,77649'/>
+  </group>
+  <group name='129'>
+    <ids val='130,434,738,1042,1346,1650,1954,2258,2562,2866,3170,3474,3778,4082,4386,4690,4994,5298,5602,5906,6210,6514,6818,7122,7426,7730,8034,8338,8642,8946,9250,9554,9858,10162,10466,10770,11074,11378,11682,11986,12290,12594,12898,13202,13506,13810,14114,14418,14722,15026,15330,15634,15938,16242,16546,16850,17154,17458,17762,18066,18370,18674,18978,19282,19586,19890,20194,20498,20802,21106,21410,21714,22018,22322,22626,22930,23234,23538,23842,24146,24450,24754,25058,25362,25666,25970,26274,26578,26882,27186,27490,27794,28098,28402,28706,29010,29314,29618,29922,30226,30530,30834,31138,31442,31746,32050,32354,32658,32962,33266,33570,33874,34178,34482,34786,35090,35394,35698,36002,36306,36610,36914,37218,37522,37826,38130,38434,38738,39042,39346,39650,39954,40258,40562,40866,41170,41474,41778,42082,42386,42690,42994,43298,43602,43906,44210,44514,44818,45122,45426,45730,46034,46338,46642,46946,47250,47554,47858,48162,48466,48770,49074,49378,49682,49986,50290,50594,50898,51202,51506,51810,52114,52418,52722,53026,53330,53634,53938,54242,54546,54850,55154,55458,55762,56066,56370,56674,56978,57282,57586,57890,58194,58498,58802,59106,59410,59714,60018,60322,60626,60930,61234,61538,61842,62146,62450,62754,63058,63362,63666,63970,64274,64578,64882,65186,65490,65794,66098,66402,66706,67010,67314,67618,67922,68226,68530,68834,69138,69442,69746,70050,70354,70658,70962,71266,71570,71874,72178,72482,72786,73090,73394,73698,74002,74306,74610,74914,75218,75522,75826,76130,76434,76738,77042,77346,77650'/>
+  </group>
+  <group name='130'>
+    <ids val='131,435,739,1043,1347,1651,1955,2259,2563,2867,3171,3475,3779,4083,4387,4691,4995,5299,5603,5907,6211,6515,6819,7123,7427,7731,8035,8339,8643,8947,9251,9555,9859,10163,10467,10771,11075,11379,11683,11987,12291,12595,12899,13203,13507,13811,14115,14419,14723,15027,15331,15635,15939,16243,16547,16851,17155,17459,17763,18067,18371,18675,18979,19283,19587,19891,20195,20499,20803,21107,21411,21715,22019,22323,22627,22931,23235,23539,23843,24147,24451,24755,25059,25363,25667,25971,26275,26579,26883,27187,27491,27795,28099,28403,28707,29011,29315,29619,29923,30227,30531,30835,31139,31443,31747,32051,32355,32659,32963,33267,33571,33875,34179,34483,34787,35091,35395,35699,36003,36307,36611,36915,37219,37523,37827,38131,38435,38739,39043,39347,39651,39955,40259,40563,40867,41171,41475,41779,42083,42387,42691,42995,43299,43603,43907,44211,44515,44819,45123,45427,45731,46035,46339,46643,46947,47251,47555,47859,48163,48467,48771,49075,49379,49683,49987,50291,50595,50899,51203,51507,51811,52115,52419,52723,53027,53331,53635,53939,54243,54547,54851,55155,55459,55763,56067,56371,56675,56979,57283,57587,57891,58195,58499,58803,59107,59411,59715,60019,60323,60627,60931,61235,61539,61843,62147,62451,62755,63059,63363,63667,63971,64275,64579,64883,65187,65491,65795,66099,66403,66707,67011,67315,67619,67923,68227,68531,68835,69139,69443,69747,70051,70355,70659,70963,71267,71571,71875,72179,72483,72787,73091,73395,73699,74003,74307,74611,74915,75219,75523,75827,76131,76435,76739,77043,77347,77651'/>
+  </group>
+  <group name='131'>
+    <ids val='132,436,740,1044,1348,1652,1956,2260,2564,2868,3172,3476,3780,4084,4388,4692,4996,5300,5604,5908,6212,6516,6820,7124,7428,7732,8036,8340,8644,8948,9252,9556,9860,10164,10468,10772,11076,11380,11684,11988,12292,12596,12900,13204,13508,13812,14116,14420,14724,15028,15332,15636,15940,16244,16548,16852,17156,17460,17764,18068,18372,18676,18980,19284,19588,19892,20196,20500,20804,21108,21412,21716,22020,22324,22628,22932,23236,23540,23844,24148,24452,24756,25060,25364,25668,25972,26276,26580,26884,27188,27492,27796,28100,28404,28708,29012,29316,29620,29924,30228,30532,30836,31140,31444,31748,32052,32356,32660,32964,33268,33572,33876,34180,34484,34788,35092,35396,35700,36004,36308,36612,36916,37220,37524,37828,38132,38436,38740,39044,39348,39652,39956,40260,40564,40868,41172,41476,41780,42084,42388,42692,42996,43300,43604,43908,44212,44516,44820,45124,45428,45732,46036,46340,46644,46948,47252,47556,47860,48164,48468,48772,49076,49380,49684,49988,50292,50596,50900,51204,51508,51812,52116,52420,52724,53028,53332,53636,53940,54244,54548,54852,55156,55460,55764,56068,56372,56676,56980,57284,57588,57892,58196,58500,58804,59108,59412,59716,60020,60324,60628,60932,61236,61540,61844,62148,62452,62756,63060,63364,63668,63972,64276,64580,64884,65188,65492,65796,66100,66404,66708,67012,67316,67620,67924,68228,68532,68836,69140,69444,69748,70052,70356,70660,70964,71268,71572,71876,72180,72484,72788,73092,73396,73700,74004,74308,74612,74916,75220,75524,75828,76132,76436,76740,77044,77348,77652'/>
+  </group>
+  <group name='132'>
+    <ids val='133,437,741,1045,1349,1653,1957,2261,2565,2869,3173,3477,3781,4085,4389,4693,4997,5301,5605,5909,6213,6517,6821,7125,7429,7733,8037,8341,8645,8949,9253,9557,9861,10165,10469,10773,11077,11381,11685,11989,12293,12597,12901,13205,13509,13813,14117,14421,14725,15029,15333,15637,15941,16245,16549,16853,17157,17461,17765,18069,18373,18677,18981,19285,19589,19893,20197,20501,20805,21109,21413,21717,22021,22325,22629,22933,23237,23541,23845,24149,24453,24757,25061,25365,25669,25973,26277,26581,26885,27189,27493,27797,28101,28405,28709,29013,29317,29621,29925,30229,30533,30837,31141,31445,31749,32053,32357,32661,32965,33269,33573,33877,34181,34485,34789,35093,35397,35701,36005,36309,36613,36917,37221,37525,37829,38133,38437,38741,39045,39349,39653,39957,40261,40565,40869,41173,41477,41781,42085,42389,42693,42997,43301,43605,43909,44213,44517,44821,45125,45429,45733,46037,46341,46645,46949,47253,47557,47861,48165,48469,48773,49077,49381,49685,49989,50293,50597,50901,51205,51509,51813,52117,52421,52725,53029,53333,53637,53941,54245,54549,54853,55157,55461,55765,56069,56373,56677,56981,57285,57589,57893,58197,58501,58805,59109,59413,59717,60021,60325,60629,60933,61237,61541,61845,62149,62453,62757,63061,63365,63669,63973,64277,64581,64885,65189,65493,65797,66101,66405,66709,67013,67317,67621,67925,68229,68533,68837,69141,69445,69749,70053,70357,70661,70965,71269,71573,71877,72181,72485,72789,73093,73397,73701,74005,74309,74613,74917,75221,75525,75829,76133,76437,76741,77045,77349,77653'/>
+  </group>
+  <group name='133'>
+    <ids val='134,438,742,1046,1350,1654,1958,2262,2566,2870,3174,3478,3782,4086,4390,4694,4998,5302,5606,5910,6214,6518,6822,7126,7430,7734,8038,8342,8646,8950,9254,9558,9862,10166,10470,10774,11078,11382,11686,11990,12294,12598,12902,13206,13510,13814,14118,14422,14726,15030,15334,15638,15942,16246,16550,16854,17158,17462,17766,18070,18374,18678,18982,19286,19590,19894,20198,20502,20806,21110,21414,21718,22022,22326,22630,22934,23238,23542,23846,24150,24454,24758,25062,25366,25670,25974,26278,26582,26886,27190,27494,27798,28102,28406,28710,29014,29318,29622,29926,30230,30534,30838,31142,31446,31750,32054,32358,32662,32966,33270,33574,33878,34182,34486,34790,35094,35398,35702,36006,36310,36614,36918,37222,37526,37830,38134,38438,38742,39046,39350,39654,39958,40262,40566,40870,41174,41478,41782,42086,42390,42694,42998,43302,43606,43910,44214,44518,44822,45126,45430,45734,46038,46342,46646,46950,47254,47558,47862,48166,48470,48774,49078,49382,49686,49990,50294,50598,50902,51206,51510,51814,52118,52422,52726,53030,53334,53638,53942,54246,54550,54854,55158,55462,55766,56070,56374,56678,56982,57286,57590,57894,58198,58502,58806,59110,59414,59718,60022,60326,60630,60934,61238,61542,61846,62150,62454,62758,63062,63366,63670,63974,64278,64582,64886,65190,65494,65798,66102,66406,66710,67014,67318,67622,67926,68230,68534,68838,69142,69446,69750,70054,70358,70662,70966,71270,71574,71878,72182,72486,72790,73094,73398,73702,74006,74310,74614,74918,75222,75526,75830,76134,76438,76742,77046,77350,77654'/>
+  </group>
+  <group name='134'>
+    <ids val='135,439,743,1047,1351,1655,1959,2263,2567,2871,3175,3479,3783,4087,4391,4695,4999,5303,5607,5911,6215,6519,6823,7127,7431,7735,8039,8343,8647,8951,9255,9559,9863,10167,10471,10775,11079,11383,11687,11991,12295,12599,12903,13207,13511,13815,14119,14423,14727,15031,15335,15639,15943,16247,16551,16855,17159,17463,17767,18071,18375,18679,18983,19287,19591,19895,20199,20503,20807,21111,21415,21719,22023,22327,22631,22935,23239,23543,23847,24151,24455,24759,25063,25367,25671,25975,26279,26583,26887,27191,27495,27799,28103,28407,28711,29015,29319,29623,29927,30231,30535,30839,31143,31447,31751,32055,32359,32663,32967,33271,33575,33879,34183,34487,34791,35095,35399,35703,36007,36311,36615,36919,37223,37527,37831,38135,38439,38743,39047,39351,39655,39959,40263,40567,40871,41175,41479,41783,42087,42391,42695,42999,43303,43607,43911,44215,44519,44823,45127,45431,45735,46039,46343,46647,46951,47255,47559,47863,48167,48471,48775,49079,49383,49687,49991,50295,50599,50903,51207,51511,51815,52119,52423,52727,53031,53335,53639,53943,54247,54551,54855,55159,55463,55767,56071,56375,56679,56983,57287,57591,57895,58199,58503,58807,59111,59415,59719,60023,60327,60631,60935,61239,61543,61847,62151,62455,62759,63063,63367,63671,63975,64279,64583,64887,65191,65495,65799,66103,66407,66711,67015,67319,67623,67927,68231,68535,68839,69143,69447,69751,70055,70359,70663,70967,71271,71575,71879,72183,72487,72791,73095,73399,73703,74007,74311,74615,74919,75223,75527,75831,76135,76439,76743,77047,77351,77655'/>
+  </group>
+  <group name='135'>
+    <ids val='136,440,744,1048,1352,1656,1960,2264,2568,2872,3176,3480,3784,4088,4392,4696,5000,5304,5608,5912,6216,6520,6824,7128,7432,7736,8040,8344,8648,8952,9256,9560,9864,10168,10472,10776,11080,11384,11688,11992,12296,12600,12904,13208,13512,13816,14120,14424,14728,15032,15336,15640,15944,16248,16552,16856,17160,17464,17768,18072,18376,18680,18984,19288,19592,19896,20200,20504,20808,21112,21416,21720,22024,22328,22632,22936,23240,23544,23848,24152,24456,24760,25064,25368,25672,25976,26280,26584,26888,27192,27496,27800,28104,28408,28712,29016,29320,29624,29928,30232,30536,30840,31144,31448,31752,32056,32360,32664,32968,33272,33576,33880,34184,34488,34792,35096,35400,35704,36008,36312,36616,36920,37224,37528,37832,38136,38440,38744,39048,39352,39656,39960,40264,40568,40872,41176,41480,41784,42088,42392,42696,43000,43304,43608,43912,44216,44520,44824,45128,45432,45736,46040,46344,46648,46952,47256,47560,47864,48168,48472,48776,49080,49384,49688,49992,50296,50600,50904,51208,51512,51816,52120,52424,52728,53032,53336,53640,53944,54248,54552,54856,55160,55464,55768,56072,56376,56680,56984,57288,57592,57896,58200,58504,58808,59112,59416,59720,60024,60328,60632,60936,61240,61544,61848,62152,62456,62760,63064,63368,63672,63976,64280,64584,64888,65192,65496,65800,66104,66408,66712,67016,67320,67624,67928,68232,68536,68840,69144,69448,69752,70056,70360,70664,70968,71272,71576,71880,72184,72488,72792,73096,73400,73704,74008,74312,74616,74920,75224,75528,75832,76136,76440,76744,77048,77352,77656'/>
+  </group>
+  <group name='136'>
+    <ids val='137,441,745,1049,1353,1657,1961,2265,2569,2873,3177,3481,3785,4089,4393,4697,5001,5305,5609,5913,6217,6521,6825,7129,7433,7737,8041,8345,8649,8953,9257,9561,9865,10169,10473,10777,11081,11385,11689,11993,12297,12601,12905,13209,13513,13817,14121,14425,14729,15033,15337,15641,15945,16249,16553,16857,17161,17465,17769,18073,18377,18681,18985,19289,19593,19897,20201,20505,20809,21113,21417,21721,22025,22329,22633,22937,23241,23545,23849,24153,24457,24761,25065,25369,25673,25977,26281,26585,26889,27193,27497,27801,28105,28409,28713,29017,29321,29625,29929,30233,30537,30841,31145,31449,31753,32057,32361,32665,32969,33273,33577,33881,34185,34489,34793,35097,35401,35705,36009,36313,36617,36921,37225,37529,37833,38137,38441,38745,39049,39353,39657,39961,40265,40569,40873,41177,41481,41785,42089,42393,42697,43001,43305,43609,43913,44217,44521,44825,45129,45433,45737,46041,46345,46649,46953,47257,47561,47865,48169,48473,48777,49081,49385,49689,49993,50297,50601,50905,51209,51513,51817,52121,52425,52729,53033,53337,53641,53945,54249,54553,54857,55161,55465,55769,56073,56377,56681,56985,57289,57593,57897,58201,58505,58809,59113,59417,59721,60025,60329,60633,60937,61241,61545,61849,62153,62457,62761,63065,63369,63673,63977,64281,64585,64889,65193,65497,65801,66105,66409,66713,67017,67321,67625,67929,68233,68537,68841,69145,69449,69753,70057,70361,70665,70969,71273,71577,71881,72185,72489,72793,73097,73401,73705,74009,74313,74617,74921,75225,75529,75833,76137,76441,76745,77049,77353,77657'/>
+  </group>
+  <group name='137'>
+    <ids val='138,442,746,1050,1354,1658,1962,2266,2570,2874,3178,3482,3786,4090,4394,4698,5002,5306,5610,5914,6218,6522,6826,7130,7434,7738,8042,8346,8650,8954,9258,9562,9866,10170,10474,10778,11082,11386,11690,11994,12298,12602,12906,13210,13514,13818,14122,14426,14730,15034,15338,15642,15946,16250,16554,16858,17162,17466,17770,18074,18378,18682,18986,19290,19594,19898,20202,20506,20810,21114,21418,21722,22026,22330,22634,22938,23242,23546,23850,24154,24458,24762,25066,25370,25674,25978,26282,26586,26890,27194,27498,27802,28106,28410,28714,29018,29322,29626,29930,30234,30538,30842,31146,31450,31754,32058,32362,32666,32970,33274,33578,33882,34186,34490,34794,35098,35402,35706,36010,36314,36618,36922,37226,37530,37834,38138,38442,38746,39050,39354,39658,39962,40266,40570,40874,41178,41482,41786,42090,42394,42698,43002,43306,43610,43914,44218,44522,44826,45130,45434,45738,46042,46346,46650,46954,47258,47562,47866,48170,48474,48778,49082,49386,49690,49994,50298,50602,50906,51210,51514,51818,52122,52426,52730,53034,53338,53642,53946,54250,54554,54858,55162,55466,55770,56074,56378,56682,56986,57290,57594,57898,58202,58506,58810,59114,59418,59722,60026,60330,60634,60938,61242,61546,61850,62154,62458,62762,63066,63370,63674,63978,64282,64586,64890,65194,65498,65802,66106,66410,66714,67018,67322,67626,67930,68234,68538,68842,69146,69450,69754,70058,70362,70666,70970,71274,71578,71882,72186,72490,72794,73098,73402,73706,74010,74314,74618,74922,75226,75530,75834,76138,76442,76746,77050,77354,77658'/>
+  </group>
+  <group name='138'>
+    <ids val='139,443,747,1051,1355,1659,1963,2267,2571,2875,3179,3483,3787,4091,4395,4699,5003,5307,5611,5915,6219,6523,6827,7131,7435,7739,8043,8347,8651,8955,9259,9563,9867,10171,10475,10779,11083,11387,11691,11995,12299,12603,12907,13211,13515,13819,14123,14427,14731,15035,15339,15643,15947,16251,16555,16859,17163,17467,17771,18075,18379,18683,18987,19291,19595,19899,20203,20507,20811,21115,21419,21723,22027,22331,22635,22939,23243,23547,23851,24155,24459,24763,25067,25371,25675,25979,26283,26587,26891,27195,27499,27803,28107,28411,28715,29019,29323,29627,29931,30235,30539,30843,31147,31451,31755,32059,32363,32667,32971,33275,33579,33883,34187,34491,34795,35099,35403,35707,36011,36315,36619,36923,37227,37531,37835,38139,38443,38747,39051,39355,39659,39963,40267,40571,40875,41179,41483,41787,42091,42395,42699,43003,43307,43611,43915,44219,44523,44827,45131,45435,45739,46043,46347,46651,46955,47259,47563,47867,48171,48475,48779,49083,49387,49691,49995,50299,50603,50907,51211,51515,51819,52123,52427,52731,53035,53339,53643,53947,54251,54555,54859,55163,55467,55771,56075,56379,56683,56987,57291,57595,57899,58203,58507,58811,59115,59419,59723,60027,60331,60635,60939,61243,61547,61851,62155,62459,62763,63067,63371,63675,63979,64283,64587,64891,65195,65499,65803,66107,66411,66715,67019,67323,67627,67931,68235,68539,68843,69147,69451,69755,70059,70363,70667,70971,71275,71579,71883,72187,72491,72795,73099,73403,73707,74011,74315,74619,74923,75227,75531,75835,76139,76443,76747,77051,77355,77659'/>
+  </group>
+  <group name='139'>
+    <ids val='140,444,748,1052,1356,1660,1964,2268,2572,2876,3180,3484,3788,4092,4396,4700,5004,5308,5612,5916,6220,6524,6828,7132,7436,7740,8044,8348,8652,8956,9260,9564,9868,10172,10476,10780,11084,11388,11692,11996,12300,12604,12908,13212,13516,13820,14124,14428,14732,15036,15340,15644,15948,16252,16556,16860,17164,17468,17772,18076,18380,18684,18988,19292,19596,19900,20204,20508,20812,21116,21420,21724,22028,22332,22636,22940,23244,23548,23852,24156,24460,24764,25068,25372,25676,25980,26284,26588,26892,27196,27500,27804,28108,28412,28716,29020,29324,29628,29932,30236,30540,30844,31148,31452,31756,32060,32364,32668,32972,33276,33580,33884,34188,34492,34796,35100,35404,35708,36012,36316,36620,36924,37228,37532,37836,38140,38444,38748,39052,39356,39660,39964,40268,40572,40876,41180,41484,41788,42092,42396,42700,43004,43308,43612,43916,44220,44524,44828,45132,45436,45740,46044,46348,46652,46956,47260,47564,47868,48172,48476,48780,49084,49388,49692,49996,50300,50604,50908,51212,51516,51820,52124,52428,52732,53036,53340,53644,53948,54252,54556,54860,55164,55468,55772,56076,56380,56684,56988,57292,57596,57900,58204,58508,58812,59116,59420,59724,60028,60332,60636,60940,61244,61548,61852,62156,62460,62764,63068,63372,63676,63980,64284,64588,64892,65196,65500,65804,66108,66412,66716,67020,67324,67628,67932,68236,68540,68844,69148,69452,69756,70060,70364,70668,70972,71276,71580,71884,72188,72492,72796,73100,73404,73708,74012,74316,74620,74924,75228,75532,75836,76140,76444,76748,77052,77356,77660'/>
+  </group>
+  <group name='140'>
+    <ids val='141,445,749,1053,1357,1661,1965,2269,2573,2877,3181,3485,3789,4093,4397,4701,5005,5309,5613,5917,6221,6525,6829,7133,7437,7741,8045,8349,8653,8957,9261,9565,9869,10173,10477,10781,11085,11389,11693,11997,12301,12605,12909,13213,13517,13821,14125,14429,14733,15037,15341,15645,15949,16253,16557,16861,17165,17469,17773,18077,18381,18685,18989,19293,19597,19901,20205,20509,20813,21117,21421,21725,22029,22333,22637,22941,23245,23549,23853,24157,24461,24765,25069,25373,25677,25981,26285,26589,26893,27197,27501,27805,28109,28413,28717,29021,29325,29629,29933,30237,30541,30845,31149,31453,31757,32061,32365,32669,32973,33277,33581,33885,34189,34493,34797,35101,35405,35709,36013,36317,36621,36925,37229,37533,37837,38141,38445,38749,39053,39357,39661,39965,40269,40573,40877,41181,41485,41789,42093,42397,42701,43005,43309,43613,43917,44221,44525,44829,45133,45437,45741,46045,46349,46653,46957,47261,47565,47869,48173,48477,48781,49085,49389,49693,49997,50301,50605,50909,51213,51517,51821,52125,52429,52733,53037,53341,53645,53949,54253,54557,54861,55165,55469,55773,56077,56381,56685,56989,57293,57597,57901,58205,58509,58813,59117,59421,59725,60029,60333,60637,60941,61245,61549,61853,62157,62461,62765,63069,63373,63677,63981,64285,64589,64893,65197,65501,65805,66109,66413,66717,67021,67325,67629,67933,68237,68541,68845,69149,69453,69757,70061,70365,70669,70973,71277,71581,71885,72189,72493,72797,73101,73405,73709,74013,74317,74621,74925,75229,75533,75837,76141,76445,76749,77053,77357,77661'/>
+  </group>
+  <group name='141'>
+    <ids val='142,446,750,1054,1358,1662,1966,2270,2574,2878,3182,3486,3790,4094,4398,4702,5006,5310,5614,5918,6222,6526,6830,7134,7438,7742,8046,8350,8654,8958,9262,9566,9870,10174,10478,10782,11086,11390,11694,11998,12302,12606,12910,13214,13518,13822,14126,14430,14734,15038,15342,15646,15950,16254,16558,16862,17166,17470,17774,18078,18382,18686,18990,19294,19598,19902,20206,20510,20814,21118,21422,21726,22030,22334,22638,22942,23246,23550,23854,24158,24462,24766,25070,25374,25678,25982,26286,26590,26894,27198,27502,27806,28110,28414,28718,29022,29326,29630,29934,30238,30542,30846,31150,31454,31758,32062,32366,32670,32974,33278,33582,33886,34190,34494,34798,35102,35406,35710,36014,36318,36622,36926,37230,37534,37838,38142,38446,38750,39054,39358,39662,39966,40270,40574,40878,41182,41486,41790,42094,42398,42702,43006,43310,43614,43918,44222,44526,44830,45134,45438,45742,46046,46350,46654,46958,47262,47566,47870,48174,48478,48782,49086,49390,49694,49998,50302,50606,50910,51214,51518,51822,52126,52430,52734,53038,53342,53646,53950,54254,54558,54862,55166,55470,55774,56078,56382,56686,56990,57294,57598,57902,58206,58510,58814,59118,59422,59726,60030,60334,60638,60942,61246,61550,61854,62158,62462,62766,63070,63374,63678,63982,64286,64590,64894,65198,65502,65806,66110,66414,66718,67022,67326,67630,67934,68238,68542,68846,69150,69454,69758,70062,70366,70670,70974,71278,71582,71886,72190,72494,72798,73102,73406,73710,74014,74318,74622,74926,75230,75534,75838,76142,76446,76750,77054,77358,77662'/>
+  </group>
+  <group name='142'>
+    <ids val='143,447,751,1055,1359,1663,1967,2271,2575,2879,3183,3487,3791,4095,4399,4703,5007,5311,5615,5919,6223,6527,6831,7135,7439,7743,8047,8351,8655,8959,9263,9567,9871,10175,10479,10783,11087,11391,11695,11999,12303,12607,12911,13215,13519,13823,14127,14431,14735,15039,15343,15647,15951,16255,16559,16863,17167,17471,17775,18079,18383,18687,18991,19295,19599,19903,20207,20511,20815,21119,21423,21727,22031,22335,22639,22943,23247,23551,23855,24159,24463,24767,25071,25375,25679,25983,26287,26591,26895,27199,27503,27807,28111,28415,28719,29023,29327,29631,29935,30239,30543,30847,31151,31455,31759,32063,32367,32671,32975,33279,33583,33887,34191,34495,34799,35103,35407,35711,36015,36319,36623,36927,37231,37535,37839,38143,38447,38751,39055,39359,39663,39967,40271,40575,40879,41183,41487,41791,42095,42399,42703,43007,43311,43615,43919,44223,44527,44831,45135,45439,45743,46047,46351,46655,46959,47263,47567,47871,48175,48479,48783,49087,49391,49695,49999,50303,50607,50911,51215,51519,51823,52127,52431,52735,53039,53343,53647,53951,54255,54559,54863,55167,55471,55775,56079,56383,56687,56991,57295,57599,57903,58207,58511,58815,59119,59423,59727,60031,60335,60639,60943,61247,61551,61855,62159,62463,62767,63071,63375,63679,63983,64287,64591,64895,65199,65503,65807,66111,66415,66719,67023,67327,67631,67935,68239,68543,68847,69151,69455,69759,70063,70367,70671,70975,71279,71583,71887,72191,72495,72799,73103,73407,73711,74015,74319,74623,74927,75231,75535,75839,76143,76447,76751,77055,77359,77663'/>
+  </group>
+  <group name='143'>
+    <ids val='144,448,752,1056,1360,1664,1968,2272,2576,2880,3184,3488,3792,4096,4400,4704,5008,5312,5616,5920,6224,6528,6832,7136,7440,7744,8048,8352,8656,8960,9264,9568,9872,10176,10480,10784,11088,11392,11696,12000,12304,12608,12912,13216,13520,13824,14128,14432,14736,15040,15344,15648,15952,16256,16560,16864,17168,17472,17776,18080,18384,18688,18992,19296,19600,19904,20208,20512,20816,21120,21424,21728,22032,22336,22640,22944,23248,23552,23856,24160,24464,24768,25072,25376,25680,25984,26288,26592,26896,27200,27504,27808,28112,28416,28720,29024,29328,29632,29936,30240,30544,30848,31152,31456,31760,32064,32368,32672,32976,33280,33584,33888,34192,34496,34800,35104,35408,35712,36016,36320,36624,36928,37232,37536,37840,38144,38448,38752,39056,39360,39664,39968,40272,40576,40880,41184,41488,41792,42096,42400,42704,43008,43312,43616,43920,44224,44528,44832,45136,45440,45744,46048,46352,46656,46960,47264,47568,47872,48176,48480,48784,49088,49392,49696,50000,50304,50608,50912,51216,51520,51824,52128,52432,52736,53040,53344,53648,53952,54256,54560,54864,55168,55472,55776,56080,56384,56688,56992,57296,57600,57904,58208,58512,58816,59120,59424,59728,60032,60336,60640,60944,61248,61552,61856,62160,62464,62768,63072,63376,63680,63984,64288,64592,64896,65200,65504,65808,66112,66416,66720,67024,67328,67632,67936,68240,68544,68848,69152,69456,69760,70064,70368,70672,70976,71280,71584,71888,72192,72496,72800,73104,73408,73712,74016,74320,74624,74928,75232,75536,75840,76144,76448,76752,77056,77360,77664'/>
+  </group>
+  <group name='144'>
+    <ids val='145,449,753,1057,1361,1665,1969,2273,2577,2881,3185,3489,3793,4097,4401,4705,5009,5313,5617,5921,6225,6529,6833,7137,7441,7745,8049,8353,8657,8961,9265,9569,9873,10177,10481,10785,11089,11393,11697,12001,12305,12609,12913,13217,13521,13825,14129,14433,14737,15041,15345,15649,15953,16257,16561,16865,17169,17473,17777,18081,18385,18689,18993,19297,19601,19905,20209,20513,20817,21121,21425,21729,22033,22337,22641,22945,23249,23553,23857,24161,24465,24769,25073,25377,25681,25985,26289,26593,26897,27201,27505,27809,28113,28417,28721,29025,29329,29633,29937,30241,30545,30849,31153,31457,31761,32065,32369,32673,32977,33281,33585,33889,34193,34497,34801,35105,35409,35713,36017,36321,36625,36929,37233,37537,37841,38145,38449,38753,39057,39361,39665,39969,40273,40577,40881,41185,41489,41793,42097,42401,42705,43009,43313,43617,43921,44225,44529,44833,45137,45441,45745,46049,46353,46657,46961,47265,47569,47873,48177,48481,48785,49089,49393,49697,50001,50305,50609,50913,51217,51521,51825,52129,52433,52737,53041,53345,53649,53953,54257,54561,54865,55169,55473,55777,56081,56385,56689,56993,57297,57601,57905,58209,58513,58817,59121,59425,59729,60033,60337,60641,60945,61249,61553,61857,62161,62465,62769,63073,63377,63681,63985,64289,64593,64897,65201,65505,65809,66113,66417,66721,67025,67329,67633,67937,68241,68545,68849,69153,69457,69761,70065,70369,70673,70977,71281,71585,71889,72193,72497,72801,73105,73409,73713,74017,74321,74625,74929,75233,75537,75841,76145,76449,76753,77057,77361,77665'/>
+  </group>
+  <group name='145'>
+    <ids val='146,450,754,1058,1362,1666,1970,2274,2578,2882,3186,3490,3794,4098,4402,4706,5010,5314,5618,5922,6226,6530,6834,7138,7442,7746,8050,8354,8658,8962,9266,9570,9874,10178,10482,10786,11090,11394,11698,12002,12306,12610,12914,13218,13522,13826,14130,14434,14738,15042,15346,15650,15954,16258,16562,16866,17170,17474,17778,18082,18386,18690,18994,19298,19602,19906,20210,20514,20818,21122,21426,21730,22034,22338,22642,22946,23250,23554,23858,24162,24466,24770,25074,25378,25682,25986,26290,26594,26898,27202,27506,27810,28114,28418,28722,29026,29330,29634,29938,30242,30546,30850,31154,31458,31762,32066,32370,32674,32978,33282,33586,33890,34194,34498,34802,35106,35410,35714,36018,36322,36626,36930,37234,37538,37842,38146,38450,38754,39058,39362,39666,39970,40274,40578,40882,41186,41490,41794,42098,42402,42706,43010,43314,43618,43922,44226,44530,44834,45138,45442,45746,46050,46354,46658,46962,47266,47570,47874,48178,48482,48786,49090,49394,49698,50002,50306,50610,50914,51218,51522,51826,52130,52434,52738,53042,53346,53650,53954,54258,54562,54866,55170,55474,55778,56082,56386,56690,56994,57298,57602,57906,58210,58514,58818,59122,59426,59730,60034,60338,60642,60946,61250,61554,61858,62162,62466,62770,63074,63378,63682,63986,64290,64594,64898,65202,65506,65810,66114,66418,66722,67026,67330,67634,67938,68242,68546,68850,69154,69458,69762,70066,70370,70674,70978,71282,71586,71890,72194,72498,72802,73106,73410,73714,74018,74322,74626,74930,75234,75538,75842,76146,76450,76754,77058,77362,77666'/>
+  </group>
+  <group name='146'>
+    <ids val='147,451,755,1059,1363,1667,1971,2275,2579,2883,3187,3491,3795,4099,4403,4707,5011,5315,5619,5923,6227,6531,6835,7139,7443,7747,8051,8355,8659,8963,9267,9571,9875,10179,10483,10787,11091,11395,11699,12003,12307,12611,12915,13219,13523,13827,14131,14435,14739,15043,15347,15651,15955,16259,16563,16867,17171,17475,17779,18083,18387,18691,18995,19299,19603,19907,20211,20515,20819,21123,21427,21731,22035,22339,22643,22947,23251,23555,23859,24163,24467,24771,25075,25379,25683,25987,26291,26595,26899,27203,27507,27811,28115,28419,28723,29027,29331,29635,29939,30243,30547,30851,31155,31459,31763,32067,32371,32675,32979,33283,33587,33891,34195,34499,34803,35107,35411,35715,36019,36323,36627,36931,37235,37539,37843,38147,38451,38755,39059,39363,39667,39971,40275,40579,40883,41187,41491,41795,42099,42403,42707,43011,43315,43619,43923,44227,44531,44835,45139,45443,45747,46051,46355,46659,46963,47267,47571,47875,48179,48483,48787,49091,49395,49699,50003,50307,50611,50915,51219,51523,51827,52131,52435,52739,53043,53347,53651,53955,54259,54563,54867,55171,55475,55779,56083,56387,56691,56995,57299,57603,57907,58211,58515,58819,59123,59427,59731,60035,60339,60643,60947,61251,61555,61859,62163,62467,62771,63075,63379,63683,63987,64291,64595,64899,65203,65507,65811,66115,66419,66723,67027,67331,67635,67939,68243,68547,68851,69155,69459,69763,70067,70371,70675,70979,71283,71587,71891,72195,72499,72803,73107,73411,73715,74019,74323,74627,74931,75235,75539,75843,76147,76451,76755,77059,77363,77667'/>
+  </group>
+  <group name='147'>
+    <ids val='148,452,756,1060,1364,1668,1972,2276,2580,2884,3188,3492,3796,4100,4404,4708,5012,5316,5620,5924,6228,6532,6836,7140,7444,7748,8052,8356,8660,8964,9268,9572,9876,10180,10484,10788,11092,11396,11700,12004,12308,12612,12916,13220,13524,13828,14132,14436,14740,15044,15348,15652,15956,16260,16564,16868,17172,17476,17780,18084,18388,18692,18996,19300,19604,19908,20212,20516,20820,21124,21428,21732,22036,22340,22644,22948,23252,23556,23860,24164,24468,24772,25076,25380,25684,25988,26292,26596,26900,27204,27508,27812,28116,28420,28724,29028,29332,29636,29940,30244,30548,30852,31156,31460,31764,32068,32372,32676,32980,33284,33588,33892,34196,34500,34804,35108,35412,35716,36020,36324,36628,36932,37236,37540,37844,38148,38452,38756,39060,39364,39668,39972,40276,40580,40884,41188,41492,41796,42100,42404,42708,43012,43316,43620,43924,44228,44532,44836,45140,45444,45748,46052,46356,46660,46964,47268,47572,47876,48180,48484,48788,49092,49396,49700,50004,50308,50612,50916,51220,51524,51828,52132,52436,52740,53044,53348,53652,53956,54260,54564,54868,55172,55476,55780,56084,56388,56692,56996,57300,57604,57908,58212,58516,58820,59124,59428,59732,60036,60340,60644,60948,61252,61556,61860,62164,62468,62772,63076,63380,63684,63988,64292,64596,64900,65204,65508,65812,66116,66420,66724,67028,67332,67636,67940,68244,68548,68852,69156,69460,69764,70068,70372,70676,70980,71284,71588,71892,72196,72500,72804,73108,73412,73716,74020,74324,74628,74932,75236,75540,75844,76148,76452,76756,77060,77364,77668'/>
+  </group>
+  <group name='148'>
+    <ids val='149,453,757,1061,1365,1669,1973,2277,2581,2885,3189,3493,3797,4101,4405,4709,5013,5317,5621,5925,6229,6533,6837,7141,7445,7749,8053,8357,8661,8965,9269,9573,9877,10181,10485,10789,11093,11397,11701,12005,12309,12613,12917,13221,13525,13829,14133,14437,14741,15045,15349,15653,15957,16261,16565,16869,17173,17477,17781,18085,18389,18693,18997,19301,19605,19909,20213,20517,20821,21125,21429,21733,22037,22341,22645,22949,23253,23557,23861,24165,24469,24773,25077,25381,25685,25989,26293,26597,26901,27205,27509,27813,28117,28421,28725,29029,29333,29637,29941,30245,30549,30853,31157,31461,31765,32069,32373,32677,32981,33285,33589,33893,34197,34501,34805,35109,35413,35717,36021,36325,36629,36933,37237,37541,37845,38149,38453,38757,39061,39365,39669,39973,40277,40581,40885,41189,41493,41797,42101,42405,42709,43013,43317,43621,43925,44229,44533,44837,45141,45445,45749,46053,46357,46661,46965,47269,47573,47877,48181,48485,48789,49093,49397,49701,50005,50309,50613,50917,51221,51525,51829,52133,52437,52741,53045,53349,53653,53957,54261,54565,54869,55173,55477,55781,56085,56389,56693,56997,57301,57605,57909,58213,58517,58821,59125,59429,59733,60037,60341,60645,60949,61253,61557,61861,62165,62469,62773,63077,63381,63685,63989,64293,64597,64901,65205,65509,65813,66117,66421,66725,67029,67333,67637,67941,68245,68549,68853,69157,69461,69765,70069,70373,70677,70981,71285,71589,71893,72197,72501,72805,73109,73413,73717,74021,74325,74629,74933,75237,75541,75845,76149,76453,76757,77061,77365,77669'/>
+  </group>
+  <group name='149'>
+    <ids val='150,454,758,1062,1366,1670,1974,2278,2582,2886,3190,3494,3798,4102,4406,4710,5014,5318,5622,5926,6230,6534,6838,7142,7446,7750,8054,8358,8662,8966,9270,9574,9878,10182,10486,10790,11094,11398,11702,12006,12310,12614,12918,13222,13526,13830,14134,14438,14742,15046,15350,15654,15958,16262,16566,16870,17174,17478,17782,18086,18390,18694,18998,19302,19606,19910,20214,20518,20822,21126,21430,21734,22038,22342,22646,22950,23254,23558,23862,24166,24470,24774,25078,25382,25686,25990,26294,26598,26902,27206,27510,27814,28118,28422,28726,29030,29334,29638,29942,30246,30550,30854,31158,31462,31766,32070,32374,32678,32982,33286,33590,33894,34198,34502,34806,35110,35414,35718,36022,36326,36630,36934,37238,37542,37846,38150,38454,38758,39062,39366,39670,39974,40278,40582,40886,41190,41494,41798,42102,42406,42710,43014,43318,43622,43926,44230,44534,44838,45142,45446,45750,46054,46358,46662,46966,47270,47574,47878,48182,48486,48790,49094,49398,49702,50006,50310,50614,50918,51222,51526,51830,52134,52438,52742,53046,53350,53654,53958,54262,54566,54870,55174,55478,55782,56086,56390,56694,56998,57302,57606,57910,58214,58518,58822,59126,59430,59734,60038,60342,60646,60950,61254,61558,61862,62166,62470,62774,63078,63382,63686,63990,64294,64598,64902,65206,65510,65814,66118,66422,66726,67030,67334,67638,67942,68246,68550,68854,69158,69462,69766,70070,70374,70678,70982,71286,71590,71894,72198,72502,72806,73110,73414,73718,74022,74326,74630,74934,75238,75542,75846,76150,76454,76758,77062,77366,77670'/>
+  </group>
+  <group name='150'>
+    <ids val='151,455,759,1063,1367,1671,1975,2279,2583,2887,3191,3495,3799,4103,4407,4711,5015,5319,5623,5927,6231,6535,6839,7143,7447,7751,8055,8359,8663,8967,9271,9575,9879,10183,10487,10791,11095,11399,11703,12007,12311,12615,12919,13223,13527,13831,14135,14439,14743,15047,15351,15655,15959,16263,16567,16871,17175,17479,17783,18087,18391,18695,18999,19303,19607,19911,20215,20519,20823,21127,21431,21735,22039,22343,22647,22951,23255,23559,23863,24167,24471,24775,25079,25383,25687,25991,26295,26599,26903,27207,27511,27815,28119,28423,28727,29031,29335,29639,29943,30247,30551,30855,31159,31463,31767,32071,32375,32679,32983,33287,33591,33895,34199,34503,34807,35111,35415,35719,36023,36327,36631,36935,37239,37543,37847,38151,38455,38759,39063,39367,39671,39975,40279,40583,40887,41191,41495,41799,42103,42407,42711,43015,43319,43623,43927,44231,44535,44839,45143,45447,45751,46055,46359,46663,46967,47271,47575,47879,48183,48487,48791,49095,49399,49703,50007,50311,50615,50919,51223,51527,51831,52135,52439,52743,53047,53351,53655,53959,54263,54567,54871,55175,55479,55783,56087,56391,56695,56999,57303,57607,57911,58215,58519,58823,59127,59431,59735,60039,60343,60647,60951,61255,61559,61863,62167,62471,62775,63079,63383,63687,63991,64295,64599,64903,65207,65511,65815,66119,66423,66727,67031,67335,67639,67943,68247,68551,68855,69159,69463,69767,70071,70375,70679,70983,71287,71591,71895,72199,72503,72807,73111,73415,73719,74023,74327,74631,74935,75239,75543,75847,76151,76455,76759,77063,77367,77671'/>
+  </group>
+  <group name='151'>
+    <ids val='152,456,760,1064,1368,1672,1976,2280,2584,2888,3192,3496,3800,4104,4408,4712,5016,5320,5624,5928,6232,6536,6840,7144,7448,7752,8056,8360,8664,8968,9272,9576,9880,10184,10488,10792,11096,11400,11704,12008,12312,12616,12920,13224,13528,13832,14136,14440,14744,15048,15352,15656,15960,16264,16568,16872,17176,17480,17784,18088,18392,18696,19000,19304,19608,19912,20216,20520,20824,21128,21432,21736,22040,22344,22648,22952,23256,23560,23864,24168,24472,24776,25080,25384,25688,25992,26296,26600,26904,27208,27512,27816,28120,28424,28728,29032,29336,29640,29944,30248,30552,30856,31160,31464,31768,32072,32376,32680,32984,33288,33592,33896,34200,34504,34808,35112,35416,35720,36024,36328,36632,36936,37240,37544,37848,38152,38456,38760,39064,39368,39672,39976,40280,40584,40888,41192,41496,41800,42104,42408,42712,43016,43320,43624,43928,44232,44536,44840,45144,45448,45752,46056,46360,46664,46968,47272,47576,47880,48184,48488,48792,49096,49400,49704,50008,50312,50616,50920,51224,51528,51832,52136,52440,52744,53048,53352,53656,53960,54264,54568,54872,55176,55480,55784,56088,56392,56696,57000,57304,57608,57912,58216,58520,58824,59128,59432,59736,60040,60344,60648,60952,61256,61560,61864,62168,62472,62776,63080,63384,63688,63992,64296,64600,64904,65208,65512,65816,66120,66424,66728,67032,67336,67640,67944,68248,68552,68856,69160,69464,69768,70072,70376,70680,70984,71288,71592,71896,72200,72504,72808,73112,73416,73720,74024,74328,74632,74936,75240,75544,75848,76152,76456,76760,77064,77368,77672'/>
+  </group>
+  <group name='152'>
+    <ids val='153,457,761,1065,1369,1673,1977,2281,2585,2889,3193,3497,3801,4105,4409,4713,5017,5321,5625,5929,6233,6537,6841,7145,7449,7753,8057,8361,8665,8969,9273,9577,9881,10185,10489,10793,11097,11401,11705,12009,12313,12617,12921,13225,13529,13833,14137,14441,14745,15049,15353,15657,15961,16265,16569,16873,17177,17481,17785,18089,18393,18697,19001,19305,19609,19913,20217,20521,20825,21129,21433,21737,22041,22345,22649,22953,23257,23561,23865,24169,24473,24777,25081,25385,25689,25993,26297,26601,26905,27209,27513,27817,28121,28425,28729,29033,29337,29641,29945,30249,30553,30857,31161,31465,31769,32073,32377,32681,32985,33289,33593,33897,34201,34505,34809,35113,35417,35721,36025,36329,36633,36937,37241,37545,37849,38153,38457,38761,39065,39369,39673,39977,40281,40585,40889,41193,41497,41801,42105,42409,42713,43017,43321,43625,43929,44233,44537,44841,45145,45449,45753,46057,46361,46665,46969,47273,47577,47881,48185,48489,48793,49097,49401,49705,50009,50313,50617,50921,51225,51529,51833,52137,52441,52745,53049,53353,53657,53961,54265,54569,54873,55177,55481,55785,56089,56393,56697,57001,57305,57609,57913,58217,58521,58825,59129,59433,59737,60041,60345,60649,60953,61257,61561,61865,62169,62473,62777,63081,63385,63689,63993,64297,64601,64905,65209,65513,65817,66121,66425,66729,67033,67337,67641,67945,68249,68553,68857,69161,69465,69769,70073,70377,70681,70985,71289,71593,71897,72201,72505,72809,73113,73417,73721,74025,74329,74633,74937,75241,75545,75849,76153,76457,76761,77065,77369,77673'/>
+  </group>
+  <group name='153'>
+    <ids val='154,458,762,1066,1370,1674,1978,2282,2586,2890,3194,3498,3802,4106,4410,4714,5018,5322,5626,5930,6234,6538,6842,7146,7450,7754,8058,8362,8666,8970,9274,9578,9882,10186,10490,10794,11098,11402,11706,12010,12314,12618,12922,13226,13530,13834,14138,14442,14746,15050,15354,15658,15962,16266,16570,16874,17178,17482,17786,18090,18394,18698,19002,19306,19610,19914,20218,20522,20826,21130,21434,21738,22042,22346,22650,22954,23258,23562,23866,24170,24474,24778,25082,25386,25690,25994,26298,26602,26906,27210,27514,27818,28122,28426,28730,29034,29338,29642,29946,30250,30554,30858,31162,31466,31770,32074,32378,32682,32986,33290,33594,33898,34202,34506,34810,35114,35418,35722,36026,36330,36634,36938,37242,37546,37850,38154,38458,38762,39066,39370,39674,39978,40282,40586,40890,41194,41498,41802,42106,42410,42714,43018,43322,43626,43930,44234,44538,44842,45146,45450,45754,46058,46362,46666,46970,47274,47578,47882,48186,48490,48794,49098,49402,49706,50010,50314,50618,50922,51226,51530,51834,52138,52442,52746,53050,53354,53658,53962,54266,54570,54874,55178,55482,55786,56090,56394,56698,57002,57306,57610,57914,58218,58522,58826,59130,59434,59738,60042,60346,60650,60954,61258,61562,61866,62170,62474,62778,63082,63386,63690,63994,64298,64602,64906,65210,65514,65818,66122,66426,66730,67034,67338,67642,67946,68250,68554,68858,69162,69466,69770,70074,70378,70682,70986,71290,71594,71898,72202,72506,72810,73114,73418,73722,74026,74330,74634,74938,75242,75546,75850,76154,76458,76762,77066,77370,77674'/>
+  </group>
+  <group name='154'>
+    <ids val='155,459,763,1067,1371,1675,1979,2283,2587,2891,3195,3499,3803,4107,4411,4715,5019,5323,5627,5931,6235,6539,6843,7147,7451,7755,8059,8363,8667,8971,9275,9579,9883,10187,10491,10795,11099,11403,11707,12011,12315,12619,12923,13227,13531,13835,14139,14443,14747,15051,15355,15659,15963,16267,16571,16875,17179,17483,17787,18091,18395,18699,19003,19307,19611,19915,20219,20523,20827,21131,21435,21739,22043,22347,22651,22955,23259,23563,23867,24171,24475,24779,25083,25387,25691,25995,26299,26603,26907,27211,27515,27819,28123,28427,28731,29035,29339,29643,29947,30251,30555,30859,31163,31467,31771,32075,32379,32683,32987,33291,33595,33899,34203,34507,34811,35115,35419,35723,36027,36331,36635,36939,37243,37547,37851,38155,38459,38763,39067,39371,39675,39979,40283,40587,40891,41195,41499,41803,42107,42411,42715,43019,43323,43627,43931,44235,44539,44843,45147,45451,45755,46059,46363,46667,46971,47275,47579,47883,48187,48491,48795,49099,49403,49707,50011,50315,50619,50923,51227,51531,51835,52139,52443,52747,53051,53355,53659,53963,54267,54571,54875,55179,55483,55787,56091,56395,56699,57003,57307,57611,57915,58219,58523,58827,59131,59435,59739,60043,60347,60651,60955,61259,61563,61867,62171,62475,62779,63083,63387,63691,63995,64299,64603,64907,65211,65515,65819,66123,66427,66731,67035,67339,67643,67947,68251,68555,68859,69163,69467,69771,70075,70379,70683,70987,71291,71595,71899,72203,72507,72811,73115,73419,73723,74027,74331,74635,74939,75243,75547,75851,76155,76459,76763,77067,77371,77675'/>
+  </group>
+  <group name='155'>
+    <ids val='156,460,764,1068,1372,1676,1980,2284,2588,2892,3196,3500,3804,4108,4412,4716,5020,5324,5628,5932,6236,6540,6844,7148,7452,7756,8060,8364,8668,8972,9276,9580,9884,10188,10492,10796,11100,11404,11708,12012,12316,12620,12924,13228,13532,13836,14140,14444,14748,15052,15356,15660,15964,16268,16572,16876,17180,17484,17788,18092,18396,18700,19004,19308,19612,19916,20220,20524,20828,21132,21436,21740,22044,22348,22652,22956,23260,23564,23868,24172,24476,24780,25084,25388,25692,25996,26300,26604,26908,27212,27516,27820,28124,28428,28732,29036,29340,29644,29948,30252,30556,30860,31164,31468,31772,32076,32380,32684,32988,33292,33596,33900,34204,34508,34812,35116,35420,35724,36028,36332,36636,36940,37244,37548,37852,38156,38460,38764,39068,39372,39676,39980,40284,40588,40892,41196,41500,41804,42108,42412,42716,43020,43324,43628,43932,44236,44540,44844,45148,45452,45756,46060,46364,46668,46972,47276,47580,47884,48188,48492,48796,49100,49404,49708,50012,50316,50620,50924,51228,51532,51836,52140,52444,52748,53052,53356,53660,53964,54268,54572,54876,55180,55484,55788,56092,56396,56700,57004,57308,57612,57916,58220,58524,58828,59132,59436,59740,60044,60348,60652,60956,61260,61564,61868,62172,62476,62780,63084,63388,63692,63996,64300,64604,64908,65212,65516,65820,66124,66428,66732,67036,67340,67644,67948,68252,68556,68860,69164,69468,69772,70076,70380,70684,70988,71292,71596,71900,72204,72508,72812,73116,73420,73724,74028,74332,74636,74940,75244,75548,75852,76156,76460,76764,77068,77372,77676'/>
+  </group>
+  <group name='156'>
+    <ids val='157,461,765,1069,1373,1677,1981,2285,2589,2893,3197,3501,3805,4109,4413,4717,5021,5325,5629,5933,6237,6541,6845,7149,7453,7757,8061,8365,8669,8973,9277,9581,9885,10189,10493,10797,11101,11405,11709,12013,12317,12621,12925,13229,13533,13837,14141,14445,14749,15053,15357,15661,15965,16269,16573,16877,17181,17485,17789,18093,18397,18701,19005,19309,19613,19917,20221,20525,20829,21133,21437,21741,22045,22349,22653,22957,23261,23565,23869,24173,24477,24781,25085,25389,25693,25997,26301,26605,26909,27213,27517,27821,28125,28429,28733,29037,29341,29645,29949,30253,30557,30861,31165,31469,31773,32077,32381,32685,32989,33293,33597,33901,34205,34509,34813,35117,35421,35725,36029,36333,36637,36941,37245,37549,37853,38157,38461,38765,39069,39373,39677,39981,40285,40589,40893,41197,41501,41805,42109,42413,42717,43021,43325,43629,43933,44237,44541,44845,45149,45453,45757,46061,46365,46669,46973,47277,47581,47885,48189,48493,48797,49101,49405,49709,50013,50317,50621,50925,51229,51533,51837,52141,52445,52749,53053,53357,53661,53965,54269,54573,54877,55181,55485,55789,56093,56397,56701,57005,57309,57613,57917,58221,58525,58829,59133,59437,59741,60045,60349,60653,60957,61261,61565,61869,62173,62477,62781,63085,63389,63693,63997,64301,64605,64909,65213,65517,65821,66125,66429,66733,67037,67341,67645,67949,68253,68557,68861,69165,69469,69773,70077,70381,70685,70989,71293,71597,71901,72205,72509,72813,73117,73421,73725,74029,74333,74637,74941,75245,75549,75853,76157,76461,76765,77069,77373,77677'/>
+  </group>
+  <group name='157'>
+    <ids val='158,462,766,1070,1374,1678,1982,2286,2590,2894,3198,3502,3806,4110,4414,4718,5022,5326,5630,5934,6238,6542,6846,7150,7454,7758,8062,8366,8670,8974,9278,9582,9886,10190,10494,10798,11102,11406,11710,12014,12318,12622,12926,13230,13534,13838,14142,14446,14750,15054,15358,15662,15966,16270,16574,16878,17182,17486,17790,18094,18398,18702,19006,19310,19614,19918,20222,20526,20830,21134,21438,21742,22046,22350,22654,22958,23262,23566,23870,24174,24478,24782,25086,25390,25694,25998,26302,26606,26910,27214,27518,27822,28126,28430,28734,29038,29342,29646,29950,30254,30558,30862,31166,31470,31774,32078,32382,32686,32990,33294,33598,33902,34206,34510,34814,35118,35422,35726,36030,36334,36638,36942,37246,37550,37854,38158,38462,38766,39070,39374,39678,39982,40286,40590,40894,41198,41502,41806,42110,42414,42718,43022,43326,43630,43934,44238,44542,44846,45150,45454,45758,46062,46366,46670,46974,47278,47582,47886,48190,48494,48798,49102,49406,49710,50014,50318,50622,50926,51230,51534,51838,52142,52446,52750,53054,53358,53662,53966,54270,54574,54878,55182,55486,55790,56094,56398,56702,57006,57310,57614,57918,58222,58526,58830,59134,59438,59742,60046,60350,60654,60958,61262,61566,61870,62174,62478,62782,63086,63390,63694,63998,64302,64606,64910,65214,65518,65822,66126,66430,66734,67038,67342,67646,67950,68254,68558,68862,69166,69470,69774,70078,70382,70686,70990,71294,71598,71902,72206,72510,72814,73118,73422,73726,74030,74334,74638,74942,75246,75550,75854,76158,76462,76766,77070,77374,77678'/>
+  </group>
+  <group name='158'>
+    <ids val='159,463,767,1071,1375,1679,1983,2287,2591,2895,3199,3503,3807,4111,4415,4719,5023,5327,5631,5935,6239,6543,6847,7151,7455,7759,8063,8367,8671,8975,9279,9583,9887,10191,10495,10799,11103,11407,11711,12015,12319,12623,12927,13231,13535,13839,14143,14447,14751,15055,15359,15663,15967,16271,16575,16879,17183,17487,17791,18095,18399,18703,19007,19311,19615,19919,20223,20527,20831,21135,21439,21743,22047,22351,22655,22959,23263,23567,23871,24175,24479,24783,25087,25391,25695,25999,26303,26607,26911,27215,27519,27823,28127,28431,28735,29039,29343,29647,29951,30255,30559,30863,31167,31471,31775,32079,32383,32687,32991,33295,33599,33903,34207,34511,34815,35119,35423,35727,36031,36335,36639,36943,37247,37551,37855,38159,38463,38767,39071,39375,39679,39983,40287,40591,40895,41199,41503,41807,42111,42415,42719,43023,43327,43631,43935,44239,44543,44847,45151,45455,45759,46063,46367,46671,46975,47279,47583,47887,48191,48495,48799,49103,49407,49711,50015,50319,50623,50927,51231,51535,51839,52143,52447,52751,53055,53359,53663,53967,54271,54575,54879,55183,55487,55791,56095,56399,56703,57007,57311,57615,57919,58223,58527,58831,59135,59439,59743,60047,60351,60655,60959,61263,61567,61871,62175,62479,62783,63087,63391,63695,63999,64303,64607,64911,65215,65519,65823,66127,66431,66735,67039,67343,67647,67951,68255,68559,68863,69167,69471,69775,70079,70383,70687,70991,71295,71599,71903,72207,72511,72815,73119,73423,73727,74031,74335,74639,74943,75247,75551,75855,76159,76463,76767,77071,77375,77679'/>
+  </group>
+  <group name='159'>
+    <ids val='160,464,768,1072,1376,1680,1984,2288,2592,2896,3200,3504,3808,4112,4416,4720,5024,5328,5632,5936,6240,6544,6848,7152,7456,7760,8064,8368,8672,8976,9280,9584,9888,10192,10496,10800,11104,11408,11712,12016,12320,12624,12928,13232,13536,13840,14144,14448,14752,15056,15360,15664,15968,16272,16576,16880,17184,17488,17792,18096,18400,18704,19008,19312,19616,19920,20224,20528,20832,21136,21440,21744,22048,22352,22656,22960,23264,23568,23872,24176,24480,24784,25088,25392,25696,26000,26304,26608,26912,27216,27520,27824,28128,28432,28736,29040,29344,29648,29952,30256,30560,30864,31168,31472,31776,32080,32384,32688,32992,33296,33600,33904,34208,34512,34816,35120,35424,35728,36032,36336,36640,36944,37248,37552,37856,38160,38464,38768,39072,39376,39680,39984,40288,40592,40896,41200,41504,41808,42112,42416,42720,43024,43328,43632,43936,44240,44544,44848,45152,45456,45760,46064,46368,46672,46976,47280,47584,47888,48192,48496,48800,49104,49408,49712,50016,50320,50624,50928,51232,51536,51840,52144,52448,52752,53056,53360,53664,53968,54272,54576,54880,55184,55488,55792,56096,56400,56704,57008,57312,57616,57920,58224,58528,58832,59136,59440,59744,60048,60352,60656,60960,61264,61568,61872,62176,62480,62784,63088,63392,63696,64000,64304,64608,64912,65216,65520,65824,66128,66432,66736,67040,67344,67648,67952,68256,68560,68864,69168,69472,69776,70080,70384,70688,70992,71296,71600,71904,72208,72512,72816,73120,73424,73728,74032,74336,74640,74944,75248,75552,75856,76160,76464,76768,77072,77376,77680'/>
+  </group>
+  <group name='160'>
+    <ids val='161,465,769,1073,1377,1681,1985,2289,2593,2897,3201,3505,3809,4113,4417,4721,5025,5329,5633,5937,6241,6545,6849,7153,7457,7761,8065,8369,8673,8977,9281,9585,9889,10193,10497,10801,11105,11409,11713,12017,12321,12625,12929,13233,13537,13841,14145,14449,14753,15057,15361,15665,15969,16273,16577,16881,17185,17489,17793,18097,18401,18705,19009,19313,19617,19921,20225,20529,20833,21137,21441,21745,22049,22353,22657,22961,23265,23569,23873,24177,24481,24785,25089,25393,25697,26001,26305,26609,26913,27217,27521,27825,28129,28433,28737,29041,29345,29649,29953,30257,30561,30865,31169,31473,31777,32081,32385,32689,32993,33297,33601,33905,34209,34513,34817,35121,35425,35729,36033,36337,36641,36945,37249,37553,37857,38161,38465,38769,39073,39377,39681,39985,40289,40593,40897,41201,41505,41809,42113,42417,42721,43025,43329,43633,43937,44241,44545,44849,45153,45457,45761,46065,46369,46673,46977,47281,47585,47889,48193,48497,48801,49105,49409,49713,50017,50321,50625,50929,51233,51537,51841,52145,52449,52753,53057,53361,53665,53969,54273,54577,54881,55185,55489,55793,56097,56401,56705,57009,57313,57617,57921,58225,58529,58833,59137,59441,59745,60049,60353,60657,60961,61265,61569,61873,62177,62481,62785,63089,63393,63697,64001,64305,64609,64913,65217,65521,65825,66129,66433,66737,67041,67345,67649,67953,68257,68561,68865,69169,69473,69777,70081,70385,70689,70993,71297,71601,71905,72209,72513,72817,73121,73425,73729,74033,74337,74641,74945,75249,75553,75857,76161,76465,76769,77073,77377,77681'/>
+  </group>
+  <group name='161'>
+    <ids val='162,466,770,1074,1378,1682,1986,2290,2594,2898,3202,3506,3810,4114,4418,4722,5026,5330,5634,5938,6242,6546,6850,7154,7458,7762,8066,8370,8674,8978,9282,9586,9890,10194,10498,10802,11106,11410,11714,12018,12322,12626,12930,13234,13538,13842,14146,14450,14754,15058,15362,15666,15970,16274,16578,16882,17186,17490,17794,18098,18402,18706,19010,19314,19618,19922,20226,20530,20834,21138,21442,21746,22050,22354,22658,22962,23266,23570,23874,24178,24482,24786,25090,25394,25698,26002,26306,26610,26914,27218,27522,27826,28130,28434,28738,29042,29346,29650,29954,30258,30562,30866,31170,31474,31778,32082,32386,32690,32994,33298,33602,33906,34210,34514,34818,35122,35426,35730,36034,36338,36642,36946,37250,37554,37858,38162,38466,38770,39074,39378,39682,39986,40290,40594,40898,41202,41506,41810,42114,42418,42722,43026,43330,43634,43938,44242,44546,44850,45154,45458,45762,46066,46370,46674,46978,47282,47586,47890,48194,48498,48802,49106,49410,49714,50018,50322,50626,50930,51234,51538,51842,52146,52450,52754,53058,53362,53666,53970,54274,54578,54882,55186,55490,55794,56098,56402,56706,57010,57314,57618,57922,58226,58530,58834,59138,59442,59746,60050,60354,60658,60962,61266,61570,61874,62178,62482,62786,63090,63394,63698,64002,64306,64610,64914,65218,65522,65826,66130,66434,66738,67042,67346,67650,67954,68258,68562,68866,69170,69474,69778,70082,70386,70690,70994,71298,71602,71906,72210,72514,72818,73122,73426,73730,74034,74338,74642,74946,75250,75554,75858,76162,76466,76770,77074,77378,77682'/>
+  </group>
+  <group name='162'>
+    <ids val='163,467,771,1075,1379,1683,1987,2291,2595,2899,3203,3507,3811,4115,4419,4723,5027,5331,5635,5939,6243,6547,6851,7155,7459,7763,8067,8371,8675,8979,9283,9587,9891,10195,10499,10803,11107,11411,11715,12019,12323,12627,12931,13235,13539,13843,14147,14451,14755,15059,15363,15667,15971,16275,16579,16883,17187,17491,17795,18099,18403,18707,19011,19315,19619,19923,20227,20531,20835,21139,21443,21747,22051,22355,22659,22963,23267,23571,23875,24179,24483,24787,25091,25395,25699,26003,26307,26611,26915,27219,27523,27827,28131,28435,28739,29043,29347,29651,29955,30259,30563,30867,31171,31475,31779,32083,32387,32691,32995,33299,33603,33907,34211,34515,34819,35123,35427,35731,36035,36339,36643,36947,37251,37555,37859,38163,38467,38771,39075,39379,39683,39987,40291,40595,40899,41203,41507,41811,42115,42419,42723,43027,43331,43635,43939,44243,44547,44851,45155,45459,45763,46067,46371,46675,46979,47283,47587,47891,48195,48499,48803,49107,49411,49715,50019,50323,50627,50931,51235,51539,51843,52147,52451,52755,53059,53363,53667,53971,54275,54579,54883,55187,55491,55795,56099,56403,56707,57011,57315,57619,57923,58227,58531,58835,59139,59443,59747,60051,60355,60659,60963,61267,61571,61875,62179,62483,62787,63091,63395,63699,64003,64307,64611,64915,65219,65523,65827,66131,66435,66739,67043,67347,67651,67955,68259,68563,68867,69171,69475,69779,70083,70387,70691,70995,71299,71603,71907,72211,72515,72819,73123,73427,73731,74035,74339,74643,74947,75251,75555,75859,76163,76467,76771,77075,77379,77683'/>
+  </group>
+  <group name='163'>
+    <ids val='164,468,772,1076,1380,1684,1988,2292,2596,2900,3204,3508,3812,4116,4420,4724,5028,5332,5636,5940,6244,6548,6852,7156,7460,7764,8068,8372,8676,8980,9284,9588,9892,10196,10500,10804,11108,11412,11716,12020,12324,12628,12932,13236,13540,13844,14148,14452,14756,15060,15364,15668,15972,16276,16580,16884,17188,17492,17796,18100,18404,18708,19012,19316,19620,19924,20228,20532,20836,21140,21444,21748,22052,22356,22660,22964,23268,23572,23876,24180,24484,24788,25092,25396,25700,26004,26308,26612,26916,27220,27524,27828,28132,28436,28740,29044,29348,29652,29956,30260,30564,30868,31172,31476,31780,32084,32388,32692,32996,33300,33604,33908,34212,34516,34820,35124,35428,35732,36036,36340,36644,36948,37252,37556,37860,38164,38468,38772,39076,39380,39684,39988,40292,40596,40900,41204,41508,41812,42116,42420,42724,43028,43332,43636,43940,44244,44548,44852,45156,45460,45764,46068,46372,46676,46980,47284,47588,47892,48196,48500,48804,49108,49412,49716,50020,50324,50628,50932,51236,51540,51844,52148,52452,52756,53060,53364,53668,53972,54276,54580,54884,55188,55492,55796,56100,56404,56708,57012,57316,57620,57924,58228,58532,58836,59140,59444,59748,60052,60356,60660,60964,61268,61572,61876,62180,62484,62788,63092,63396,63700,64004,64308,64612,64916,65220,65524,65828,66132,66436,66740,67044,67348,67652,67956,68260,68564,68868,69172,69476,69780,70084,70388,70692,70996,71300,71604,71908,72212,72516,72820,73124,73428,73732,74036,74340,74644,74948,75252,75556,75860,76164,76468,76772,77076,77380,77684'/>
+  </group>
+  <group name='164'>
+    <ids val='165,469,773,1077,1381,1685,1989,2293,2597,2901,3205,3509,3813,4117,4421,4725,5029,5333,5637,5941,6245,6549,6853,7157,7461,7765,8069,8373,8677,8981,9285,9589,9893,10197,10501,10805,11109,11413,11717,12021,12325,12629,12933,13237,13541,13845,14149,14453,14757,15061,15365,15669,15973,16277,16581,16885,17189,17493,17797,18101,18405,18709,19013,19317,19621,19925,20229,20533,20837,21141,21445,21749,22053,22357,22661,22965,23269,23573,23877,24181,24485,24789,25093,25397,25701,26005,26309,26613,26917,27221,27525,27829,28133,28437,28741,29045,29349,29653,29957,30261,30565,30869,31173,31477,31781,32085,32389,32693,32997,33301,33605,33909,34213,34517,34821,35125,35429,35733,36037,36341,36645,36949,37253,37557,37861,38165,38469,38773,39077,39381,39685,39989,40293,40597,40901,41205,41509,41813,42117,42421,42725,43029,43333,43637,43941,44245,44549,44853,45157,45461,45765,46069,46373,46677,46981,47285,47589,47893,48197,48501,48805,49109,49413,49717,50021,50325,50629,50933,51237,51541,51845,52149,52453,52757,53061,53365,53669,53973,54277,54581,54885,55189,55493,55797,56101,56405,56709,57013,57317,57621,57925,58229,58533,58837,59141,59445,59749,60053,60357,60661,60965,61269,61573,61877,62181,62485,62789,63093,63397,63701,64005,64309,64613,64917,65221,65525,65829,66133,66437,66741,67045,67349,67653,67957,68261,68565,68869,69173,69477,69781,70085,70389,70693,70997,71301,71605,71909,72213,72517,72821,73125,73429,73733,74037,74341,74645,74949,75253,75557,75861,76165,76469,76773,77077,77381,77685'/>
+  </group>
+  <group name='165'>
+    <ids val='166,470,774,1078,1382,1686,1990,2294,2598,2902,3206,3510,3814,4118,4422,4726,5030,5334,5638,5942,6246,6550,6854,7158,7462,7766,8070,8374,8678,8982,9286,9590,9894,10198,10502,10806,11110,11414,11718,12022,12326,12630,12934,13238,13542,13846,14150,14454,14758,15062,15366,15670,15974,16278,16582,16886,17190,17494,17798,18102,18406,18710,19014,19318,19622,19926,20230,20534,20838,21142,21446,21750,22054,22358,22662,22966,23270,23574,23878,24182,24486,24790,25094,25398,25702,26006,26310,26614,26918,27222,27526,27830,28134,28438,28742,29046,29350,29654,29958,30262,30566,30870,31174,31478,31782,32086,32390,32694,32998,33302,33606,33910,34214,34518,34822,35126,35430,35734,36038,36342,36646,36950,37254,37558,37862,38166,38470,38774,39078,39382,39686,39990,40294,40598,40902,41206,41510,41814,42118,42422,42726,43030,43334,43638,43942,44246,44550,44854,45158,45462,45766,46070,46374,46678,46982,47286,47590,47894,48198,48502,48806,49110,49414,49718,50022,50326,50630,50934,51238,51542,51846,52150,52454,52758,53062,53366,53670,53974,54278,54582,54886,55190,55494,55798,56102,56406,56710,57014,57318,57622,57926,58230,58534,58838,59142,59446,59750,60054,60358,60662,60966,61270,61574,61878,62182,62486,62790,63094,63398,63702,64006,64310,64614,64918,65222,65526,65830,66134,66438,66742,67046,67350,67654,67958,68262,68566,68870,69174,69478,69782,70086,70390,70694,70998,71302,71606,71910,72214,72518,72822,73126,73430,73734,74038,74342,74646,74950,75254,75558,75862,76166,76470,76774,77078,77382,77686'/>
+  </group>
+  <group name='166'>
+    <ids val='167,471,775,1079,1383,1687,1991,2295,2599,2903,3207,3511,3815,4119,4423,4727,5031,5335,5639,5943,6247,6551,6855,7159,7463,7767,8071,8375,8679,8983,9287,9591,9895,10199,10503,10807,11111,11415,11719,12023,12327,12631,12935,13239,13543,13847,14151,14455,14759,15063,15367,15671,15975,16279,16583,16887,17191,17495,17799,18103,18407,18711,19015,19319,19623,19927,20231,20535,20839,21143,21447,21751,22055,22359,22663,22967,23271,23575,23879,24183,24487,24791,25095,25399,25703,26007,26311,26615,26919,27223,27527,27831,28135,28439,28743,29047,29351,29655,29959,30263,30567,30871,31175,31479,31783,32087,32391,32695,32999,33303,33607,33911,34215,34519,34823,35127,35431,35735,36039,36343,36647,36951,37255,37559,37863,38167,38471,38775,39079,39383,39687,39991,40295,40599,40903,41207,41511,41815,42119,42423,42727,43031,43335,43639,43943,44247,44551,44855,45159,45463,45767,46071,46375,46679,46983,47287,47591,47895,48199,48503,48807,49111,49415,49719,50023,50327,50631,50935,51239,51543,51847,52151,52455,52759,53063,53367,53671,53975,54279,54583,54887,55191,55495,55799,56103,56407,56711,57015,57319,57623,57927,58231,58535,58839,59143,59447,59751,60055,60359,60663,60967,61271,61575,61879,62183,62487,62791,63095,63399,63703,64007,64311,64615,64919,65223,65527,65831,66135,66439,66743,67047,67351,67655,67959,68263,68567,68871,69175,69479,69783,70087,70391,70695,70999,71303,71607,71911,72215,72519,72823,73127,73431,73735,74039,74343,74647,74951,75255,75559,75863,76167,76471,76775,77079,77383,77687'/>
+  </group>
+  <group name='167'>
+    <ids val='168,472,776,1080,1384,1688,1992,2296,2600,2904,3208,3512,3816,4120,4424,4728,5032,5336,5640,5944,6248,6552,6856,7160,7464,7768,8072,8376,8680,8984,9288,9592,9896,10200,10504,10808,11112,11416,11720,12024,12328,12632,12936,13240,13544,13848,14152,14456,14760,15064,15368,15672,15976,16280,16584,16888,17192,17496,17800,18104,18408,18712,19016,19320,19624,19928,20232,20536,20840,21144,21448,21752,22056,22360,22664,22968,23272,23576,23880,24184,24488,24792,25096,25400,25704,26008,26312,26616,26920,27224,27528,27832,28136,28440,28744,29048,29352,29656,29960,30264,30568,30872,31176,31480,31784,32088,32392,32696,33000,33304,33608,33912,34216,34520,34824,35128,35432,35736,36040,36344,36648,36952,37256,37560,37864,38168,38472,38776,39080,39384,39688,39992,40296,40600,40904,41208,41512,41816,42120,42424,42728,43032,43336,43640,43944,44248,44552,44856,45160,45464,45768,46072,46376,46680,46984,47288,47592,47896,48200,48504,48808,49112,49416,49720,50024,50328,50632,50936,51240,51544,51848,52152,52456,52760,53064,53368,53672,53976,54280,54584,54888,55192,55496,55800,56104,56408,56712,57016,57320,57624,57928,58232,58536,58840,59144,59448,59752,60056,60360,60664,60968,61272,61576,61880,62184,62488,62792,63096,63400,63704,64008,64312,64616,64920,65224,65528,65832,66136,66440,66744,67048,67352,67656,67960,68264,68568,68872,69176,69480,69784,70088,70392,70696,71000,71304,71608,71912,72216,72520,72824,73128,73432,73736,74040,74344,74648,74952,75256,75560,75864,76168,76472,76776,77080,77384,77688'/>
+  </group>
+  <group name='168'>
+    <ids val='169,473,777,1081,1385,1689,1993,2297,2601,2905,3209,3513,3817,4121,4425,4729,5033,5337,5641,5945,6249,6553,6857,7161,7465,7769,8073,8377,8681,8985,9289,9593,9897,10201,10505,10809,11113,11417,11721,12025,12329,12633,12937,13241,13545,13849,14153,14457,14761,15065,15369,15673,15977,16281,16585,16889,17193,17497,17801,18105,18409,18713,19017,19321,19625,19929,20233,20537,20841,21145,21449,21753,22057,22361,22665,22969,23273,23577,23881,24185,24489,24793,25097,25401,25705,26009,26313,26617,26921,27225,27529,27833,28137,28441,28745,29049,29353,29657,29961,30265,30569,30873,31177,31481,31785,32089,32393,32697,33001,33305,33609,33913,34217,34521,34825,35129,35433,35737,36041,36345,36649,36953,37257,37561,37865,38169,38473,38777,39081,39385,39689,39993,40297,40601,40905,41209,41513,41817,42121,42425,42729,43033,43337,43641,43945,44249,44553,44857,45161,45465,45769,46073,46377,46681,46985,47289,47593,47897,48201,48505,48809,49113,49417,49721,50025,50329,50633,50937,51241,51545,51849,52153,52457,52761,53065,53369,53673,53977,54281,54585,54889,55193,55497,55801,56105,56409,56713,57017,57321,57625,57929,58233,58537,58841,59145,59449,59753,60057,60361,60665,60969,61273,61577,61881,62185,62489,62793,63097,63401,63705,64009,64313,64617,64921,65225,65529,65833,66137,66441,66745,67049,67353,67657,67961,68265,68569,68873,69177,69481,69785,70089,70393,70697,71001,71305,71609,71913,72217,72521,72825,73129,73433,73737,74041,74345,74649,74953,75257,75561,75865,76169,76473,76777,77081,77385,77689'/>
+  </group>
+  <group name='169'>
+    <ids val='170,474,778,1082,1386,1690,1994,2298,2602,2906,3210,3514,3818,4122,4426,4730,5034,5338,5642,5946,6250,6554,6858,7162,7466,7770,8074,8378,8682,8986,9290,9594,9898,10202,10506,10810,11114,11418,11722,12026,12330,12634,12938,13242,13546,13850,14154,14458,14762,15066,15370,15674,15978,16282,16586,16890,17194,17498,17802,18106,18410,18714,19018,19322,19626,19930,20234,20538,20842,21146,21450,21754,22058,22362,22666,22970,23274,23578,23882,24186,24490,24794,25098,25402,25706,26010,26314,26618,26922,27226,27530,27834,28138,28442,28746,29050,29354,29658,29962,30266,30570,30874,31178,31482,31786,32090,32394,32698,33002,33306,33610,33914,34218,34522,34826,35130,35434,35738,36042,36346,36650,36954,37258,37562,37866,38170,38474,38778,39082,39386,39690,39994,40298,40602,40906,41210,41514,41818,42122,42426,42730,43034,43338,43642,43946,44250,44554,44858,45162,45466,45770,46074,46378,46682,46986,47290,47594,47898,48202,48506,48810,49114,49418,49722,50026,50330,50634,50938,51242,51546,51850,52154,52458,52762,53066,53370,53674,53978,54282,54586,54890,55194,55498,55802,56106,56410,56714,57018,57322,57626,57930,58234,58538,58842,59146,59450,59754,60058,60362,60666,60970,61274,61578,61882,62186,62490,62794,63098,63402,63706,64010,64314,64618,64922,65226,65530,65834,66138,66442,66746,67050,67354,67658,67962,68266,68570,68874,69178,69482,69786,70090,70394,70698,71002,71306,71610,71914,72218,72522,72826,73130,73434,73738,74042,74346,74650,74954,75258,75562,75866,76170,76474,76778,77082,77386,77690'/>
+  </group>
+  <group name='170'>
+    <ids val='171,475,779,1083,1387,1691,1995,2299,2603,2907,3211,3515,3819,4123,4427,4731,5035,5339,5643,5947,6251,6555,6859,7163,7467,7771,8075,8379,8683,8987,9291,9595,9899,10203,10507,10811,11115,11419,11723,12027,12331,12635,12939,13243,13547,13851,14155,14459,14763,15067,15371,15675,15979,16283,16587,16891,17195,17499,17803,18107,18411,18715,19019,19323,19627,19931,20235,20539,20843,21147,21451,21755,22059,22363,22667,22971,23275,23579,23883,24187,24491,24795,25099,25403,25707,26011,26315,26619,26923,27227,27531,27835,28139,28443,28747,29051,29355,29659,29963,30267,30571,30875,31179,31483,31787,32091,32395,32699,33003,33307,33611,33915,34219,34523,34827,35131,35435,35739,36043,36347,36651,36955,37259,37563,37867,38171,38475,38779,39083,39387,39691,39995,40299,40603,40907,41211,41515,41819,42123,42427,42731,43035,43339,43643,43947,44251,44555,44859,45163,45467,45771,46075,46379,46683,46987,47291,47595,47899,48203,48507,48811,49115,49419,49723,50027,50331,50635,50939,51243,51547,51851,52155,52459,52763,53067,53371,53675,53979,54283,54587,54891,55195,55499,55803,56107,56411,56715,57019,57323,57627,57931,58235,58539,58843,59147,59451,59755,60059,60363,60667,60971,61275,61579,61883,62187,62491,62795,63099,63403,63707,64011,64315,64619,64923,65227,65531,65835,66139,66443,66747,67051,67355,67659,67963,68267,68571,68875,69179,69483,69787,70091,70395,70699,71003,71307,71611,71915,72219,72523,72827,73131,73435,73739,74043,74347,74651,74955,75259,75563,75867,76171,76475,76779,77083,77387,77691'/>
+  </group>
+  <group name='171'>
+    <ids val='172,476,780,1084,1388,1692,1996,2300,2604,2908,3212,3516,3820,4124,4428,4732,5036,5340,5644,5948,6252,6556,6860,7164,7468,7772,8076,8380,8684,8988,9292,9596,9900,10204,10508,10812,11116,11420,11724,12028,12332,12636,12940,13244,13548,13852,14156,14460,14764,15068,15372,15676,15980,16284,16588,16892,17196,17500,17804,18108,18412,18716,19020,19324,19628,19932,20236,20540,20844,21148,21452,21756,22060,22364,22668,22972,23276,23580,23884,24188,24492,24796,25100,25404,25708,26012,26316,26620,26924,27228,27532,27836,28140,28444,28748,29052,29356,29660,29964,30268,30572,30876,31180,31484,31788,32092,32396,32700,33004,33308,33612,33916,34220,34524,34828,35132,35436,35740,36044,36348,36652,36956,37260,37564,37868,38172,38476,38780,39084,39388,39692,39996,40300,40604,40908,41212,41516,41820,42124,42428,42732,43036,43340,43644,43948,44252,44556,44860,45164,45468,45772,46076,46380,46684,46988,47292,47596,47900,48204,48508,48812,49116,49420,49724,50028,50332,50636,50940,51244,51548,51852,52156,52460,52764,53068,53372,53676,53980,54284,54588,54892,55196,55500,55804,56108,56412,56716,57020,57324,57628,57932,58236,58540,58844,59148,59452,59756,60060,60364,60668,60972,61276,61580,61884,62188,62492,62796,63100,63404,63708,64012,64316,64620,64924,65228,65532,65836,66140,66444,66748,67052,67356,67660,67964,68268,68572,68876,69180,69484,69788,70092,70396,70700,71004,71308,71612,71916,72220,72524,72828,73132,73436,73740,74044,74348,74652,74956,75260,75564,75868,76172,76476,76780,77084,77388,77692'/>
+  </group>
+  <group name='172'>
+    <ids val='173,477,781,1085,1389,1693,1997,2301,2605,2909,3213,3517,3821,4125,4429,4733,5037,5341,5645,5949,6253,6557,6861,7165,7469,7773,8077,8381,8685,8989,9293,9597,9901,10205,10509,10813,11117,11421,11725,12029,12333,12637,12941,13245,13549,13853,14157,14461,14765,15069,15373,15677,15981,16285,16589,16893,17197,17501,17805,18109,18413,18717,19021,19325,19629,19933,20237,20541,20845,21149,21453,21757,22061,22365,22669,22973,23277,23581,23885,24189,24493,24797,25101,25405,25709,26013,26317,26621,26925,27229,27533,27837,28141,28445,28749,29053,29357,29661,29965,30269,30573,30877,31181,31485,31789,32093,32397,32701,33005,33309,33613,33917,34221,34525,34829,35133,35437,35741,36045,36349,36653,36957,37261,37565,37869,38173,38477,38781,39085,39389,39693,39997,40301,40605,40909,41213,41517,41821,42125,42429,42733,43037,43341,43645,43949,44253,44557,44861,45165,45469,45773,46077,46381,46685,46989,47293,47597,47901,48205,48509,48813,49117,49421,49725,50029,50333,50637,50941,51245,51549,51853,52157,52461,52765,53069,53373,53677,53981,54285,54589,54893,55197,55501,55805,56109,56413,56717,57021,57325,57629,57933,58237,58541,58845,59149,59453,59757,60061,60365,60669,60973,61277,61581,61885,62189,62493,62797,63101,63405,63709,64013,64317,64621,64925,65229,65533,65837,66141,66445,66749,67053,67357,67661,67965,68269,68573,68877,69181,69485,69789,70093,70397,70701,71005,71309,71613,71917,72221,72525,72829,73133,73437,73741,74045,74349,74653,74957,75261,75565,75869,76173,76477,76781,77085,77389,77693'/>
+  </group>
+  <group name='173'>
+    <ids val='174,478,782,1086,1390,1694,1998,2302,2606,2910,3214,3518,3822,4126,4430,4734,5038,5342,5646,5950,6254,6558,6862,7166,7470,7774,8078,8382,8686,8990,9294,9598,9902,10206,10510,10814,11118,11422,11726,12030,12334,12638,12942,13246,13550,13854,14158,14462,14766,15070,15374,15678,15982,16286,16590,16894,17198,17502,17806,18110,18414,18718,19022,19326,19630,19934,20238,20542,20846,21150,21454,21758,22062,22366,22670,22974,23278,23582,23886,24190,24494,24798,25102,25406,25710,26014,26318,26622,26926,27230,27534,27838,28142,28446,28750,29054,29358,29662,29966,30270,30574,30878,31182,31486,31790,32094,32398,32702,33006,33310,33614,33918,34222,34526,34830,35134,35438,35742,36046,36350,36654,36958,37262,37566,37870,38174,38478,38782,39086,39390,39694,39998,40302,40606,40910,41214,41518,41822,42126,42430,42734,43038,43342,43646,43950,44254,44558,44862,45166,45470,45774,46078,46382,46686,46990,47294,47598,47902,48206,48510,48814,49118,49422,49726,50030,50334,50638,50942,51246,51550,51854,52158,52462,52766,53070,53374,53678,53982,54286,54590,54894,55198,55502,55806,56110,56414,56718,57022,57326,57630,57934,58238,58542,58846,59150,59454,59758,60062,60366,60670,60974,61278,61582,61886,62190,62494,62798,63102,63406,63710,64014,64318,64622,64926,65230,65534,65838,66142,66446,66750,67054,67358,67662,67966,68270,68574,68878,69182,69486,69790,70094,70398,70702,71006,71310,71614,71918,72222,72526,72830,73134,73438,73742,74046,74350,74654,74958,75262,75566,75870,76174,76478,76782,77086,77390,77694'/>
+  </group>
+  <group name='174'>
+    <ids val='175,479,783,1087,1391,1695,1999,2303,2607,2911,3215,3519,3823,4127,4431,4735,5039,5343,5647,5951,6255,6559,6863,7167,7471,7775,8079,8383,8687,8991,9295,9599,9903,10207,10511,10815,11119,11423,11727,12031,12335,12639,12943,13247,13551,13855,14159,14463,14767,15071,15375,15679,15983,16287,16591,16895,17199,17503,17807,18111,18415,18719,19023,19327,19631,19935,20239,20543,20847,21151,21455,21759,22063,22367,22671,22975,23279,23583,23887,24191,24495,24799,25103,25407,25711,26015,26319,26623,26927,27231,27535,27839,28143,28447,28751,29055,29359,29663,29967,30271,30575,30879,31183,31487,31791,32095,32399,32703,33007,33311,33615,33919,34223,34527,34831,35135,35439,35743,36047,36351,36655,36959,37263,37567,37871,38175,38479,38783,39087,39391,39695,39999,40303,40607,40911,41215,41519,41823,42127,42431,42735,43039,43343,43647,43951,44255,44559,44863,45167,45471,45775,46079,46383,46687,46991,47295,47599,47903,48207,48511,48815,49119,49423,49727,50031,50335,50639,50943,51247,51551,51855,52159,52463,52767,53071,53375,53679,53983,54287,54591,54895,55199,55503,55807,56111,56415,56719,57023,57327,57631,57935,58239,58543,58847,59151,59455,59759,60063,60367,60671,60975,61279,61583,61887,62191,62495,62799,63103,63407,63711,64015,64319,64623,64927,65231,65535,65839,66143,66447,66751,67055,67359,67663,67967,68271,68575,68879,69183,69487,69791,70095,70399,70703,71007,71311,71615,71919,72223,72527,72831,73135,73439,73743,74047,74351,74655,74959,75263,75567,75871,76175,76479,76783,77087,77391,77695'/>
+  </group>
+  <group name='175'>
+    <ids val='176,480,784,1088,1392,1696,2000,2304,2608,2912,3216,3520,3824,4128,4432,4736,5040,5344,5648,5952,6256,6560,6864,7168,7472,7776,8080,8384,8688,8992,9296,9600,9904,10208,10512,10816,11120,11424,11728,12032,12336,12640,12944,13248,13552,13856,14160,14464,14768,15072,15376,15680,15984,16288,16592,16896,17200,17504,17808,18112,18416,18720,19024,19328,19632,19936,20240,20544,20848,21152,21456,21760,22064,22368,22672,22976,23280,23584,23888,24192,24496,24800,25104,25408,25712,26016,26320,26624,26928,27232,27536,27840,28144,28448,28752,29056,29360,29664,29968,30272,30576,30880,31184,31488,31792,32096,32400,32704,33008,33312,33616,33920,34224,34528,34832,35136,35440,35744,36048,36352,36656,36960,37264,37568,37872,38176,38480,38784,39088,39392,39696,40000,40304,40608,40912,41216,41520,41824,42128,42432,42736,43040,43344,43648,43952,44256,44560,44864,45168,45472,45776,46080,46384,46688,46992,47296,47600,47904,48208,48512,48816,49120,49424,49728,50032,50336,50640,50944,51248,51552,51856,52160,52464,52768,53072,53376,53680,53984,54288,54592,54896,55200,55504,55808,56112,56416,56720,57024,57328,57632,57936,58240,58544,58848,59152,59456,59760,60064,60368,60672,60976,61280,61584,61888,62192,62496,62800,63104,63408,63712,64016,64320,64624,64928,65232,65536,65840,66144,66448,66752,67056,67360,67664,67968,68272,68576,68880,69184,69488,69792,70096,70400,70704,71008,71312,71616,71920,72224,72528,72832,73136,73440,73744,74048,74352,74656,74960,75264,75568,75872,76176,76480,76784,77088,77392,77696'/>
+  </group>
+  <group name='176'>
+    <ids val='177,481,785,1089,1393,1697,2001,2305,2609,2913,3217,3521,3825,4129,4433,4737,5041,5345,5649,5953,6257,6561,6865,7169,7473,7777,8081,8385,8689,8993,9297,9601,9905,10209,10513,10817,11121,11425,11729,12033,12337,12641,12945,13249,13553,13857,14161,14465,14769,15073,15377,15681,15985,16289,16593,16897,17201,17505,17809,18113,18417,18721,19025,19329,19633,19937,20241,20545,20849,21153,21457,21761,22065,22369,22673,22977,23281,23585,23889,24193,24497,24801,25105,25409,25713,26017,26321,26625,26929,27233,27537,27841,28145,28449,28753,29057,29361,29665,29969,30273,30577,30881,31185,31489,31793,32097,32401,32705,33009,33313,33617,33921,34225,34529,34833,35137,35441,35745,36049,36353,36657,36961,37265,37569,37873,38177,38481,38785,39089,39393,39697,40001,40305,40609,40913,41217,41521,41825,42129,42433,42737,43041,43345,43649,43953,44257,44561,44865,45169,45473,45777,46081,46385,46689,46993,47297,47601,47905,48209,48513,48817,49121,49425,49729,50033,50337,50641,50945,51249,51553,51857,52161,52465,52769,53073,53377,53681,53985,54289,54593,54897,55201,55505,55809,56113,56417,56721,57025,57329,57633,57937,58241,58545,58849,59153,59457,59761,60065,60369,60673,60977,61281,61585,61889,62193,62497,62801,63105,63409,63713,64017,64321,64625,64929,65233,65537,65841,66145,66449,66753,67057,67361,67665,67969,68273,68577,68881,69185,69489,69793,70097,70401,70705,71009,71313,71617,71921,72225,72529,72833,73137,73441,73745,74049,74353,74657,74961,75265,75569,75873,76177,76481,76785,77089,77393,77697'/>
+  </group>
+  <group name='177'>
+    <ids val='178,482,786,1090,1394,1698,2002,2306,2610,2914,3218,3522,3826,4130,4434,4738,5042,5346,5650,5954,6258,6562,6866,7170,7474,7778,8082,8386,8690,8994,9298,9602,9906,10210,10514,10818,11122,11426,11730,12034,12338,12642,12946,13250,13554,13858,14162,14466,14770,15074,15378,15682,15986,16290,16594,16898,17202,17506,17810,18114,18418,18722,19026,19330,19634,19938,20242,20546,20850,21154,21458,21762,22066,22370,22674,22978,23282,23586,23890,24194,24498,24802,25106,25410,25714,26018,26322,26626,26930,27234,27538,27842,28146,28450,28754,29058,29362,29666,29970,30274,30578,30882,31186,31490,31794,32098,32402,32706,33010,33314,33618,33922,34226,34530,34834,35138,35442,35746,36050,36354,36658,36962,37266,37570,37874,38178,38482,38786,39090,39394,39698,40002,40306,40610,40914,41218,41522,41826,42130,42434,42738,43042,43346,43650,43954,44258,44562,44866,45170,45474,45778,46082,46386,46690,46994,47298,47602,47906,48210,48514,48818,49122,49426,49730,50034,50338,50642,50946,51250,51554,51858,52162,52466,52770,53074,53378,53682,53986,54290,54594,54898,55202,55506,55810,56114,56418,56722,57026,57330,57634,57938,58242,58546,58850,59154,59458,59762,60066,60370,60674,60978,61282,61586,61890,62194,62498,62802,63106,63410,63714,64018,64322,64626,64930,65234,65538,65842,66146,66450,66754,67058,67362,67666,67970,68274,68578,68882,69186,69490,69794,70098,70402,70706,71010,71314,71618,71922,72226,72530,72834,73138,73442,73746,74050,74354,74658,74962,75266,75570,75874,76178,76482,76786,77090,77394,77698'/>
+  </group>
+  <group name='178'>
+    <ids val='179,483,787,1091,1395,1699,2003,2307,2611,2915,3219,3523,3827,4131,4435,4739,5043,5347,5651,5955,6259,6563,6867,7171,7475,7779,8083,8387,8691,8995,9299,9603,9907,10211,10515,10819,11123,11427,11731,12035,12339,12643,12947,13251,13555,13859,14163,14467,14771,15075,15379,15683,15987,16291,16595,16899,17203,17507,17811,18115,18419,18723,19027,19331,19635,19939,20243,20547,20851,21155,21459,21763,22067,22371,22675,22979,23283,23587,23891,24195,24499,24803,25107,25411,25715,26019,26323,26627,26931,27235,27539,27843,28147,28451,28755,29059,29363,29667,29971,30275,30579,30883,31187,31491,31795,32099,32403,32707,33011,33315,33619,33923,34227,34531,34835,35139,35443,35747,36051,36355,36659,36963,37267,37571,37875,38179,38483,38787,39091,39395,39699,40003,40307,40611,40915,41219,41523,41827,42131,42435,42739,43043,43347,43651,43955,44259,44563,44867,45171,45475,45779,46083,46387,46691,46995,47299,47603,47907,48211,48515,48819,49123,49427,49731,50035,50339,50643,50947,51251,51555,51859,52163,52467,52771,53075,53379,53683,53987,54291,54595,54899,55203,55507,55811,56115,56419,56723,57027,57331,57635,57939,58243,58547,58851,59155,59459,59763,60067,60371,60675,60979,61283,61587,61891,62195,62499,62803,63107,63411,63715,64019,64323,64627,64931,65235,65539,65843,66147,66451,66755,67059,67363,67667,67971,68275,68579,68883,69187,69491,69795,70099,70403,70707,71011,71315,71619,71923,72227,72531,72835,73139,73443,73747,74051,74355,74659,74963,75267,75571,75875,76179,76483,76787,77091,77395,77699'/>
+  </group>
+  <group name='179'>
+    <ids val='180,484,788,1092,1396,1700,2004,2308,2612,2916,3220,3524,3828,4132,4436,4740,5044,5348,5652,5956,6260,6564,6868,7172,7476,7780,8084,8388,8692,8996,9300,9604,9908,10212,10516,10820,11124,11428,11732,12036,12340,12644,12948,13252,13556,13860,14164,14468,14772,15076,15380,15684,15988,16292,16596,16900,17204,17508,17812,18116,18420,18724,19028,19332,19636,19940,20244,20548,20852,21156,21460,21764,22068,22372,22676,22980,23284,23588,23892,24196,24500,24804,25108,25412,25716,26020,26324,26628,26932,27236,27540,27844,28148,28452,28756,29060,29364,29668,29972,30276,30580,30884,31188,31492,31796,32100,32404,32708,33012,33316,33620,33924,34228,34532,34836,35140,35444,35748,36052,36356,36660,36964,37268,37572,37876,38180,38484,38788,39092,39396,39700,40004,40308,40612,40916,41220,41524,41828,42132,42436,42740,43044,43348,43652,43956,44260,44564,44868,45172,45476,45780,46084,46388,46692,46996,47300,47604,47908,48212,48516,48820,49124,49428,49732,50036,50340,50644,50948,51252,51556,51860,52164,52468,52772,53076,53380,53684,53988,54292,54596,54900,55204,55508,55812,56116,56420,56724,57028,57332,57636,57940,58244,58548,58852,59156,59460,59764,60068,60372,60676,60980,61284,61588,61892,62196,62500,62804,63108,63412,63716,64020,64324,64628,64932,65236,65540,65844,66148,66452,66756,67060,67364,67668,67972,68276,68580,68884,69188,69492,69796,70100,70404,70708,71012,71316,71620,71924,72228,72532,72836,73140,73444,73748,74052,74356,74660,74964,75268,75572,75876,76180,76484,76788,77092,77396,77700'/>
+  </group>
+  <group name='180'>
+    <ids val='181,485,789,1093,1397,1701,2005,2309,2613,2917,3221,3525,3829,4133,4437,4741,5045,5349,5653,5957,6261,6565,6869,7173,7477,7781,8085,8389,8693,8997,9301,9605,9909,10213,10517,10821,11125,11429,11733,12037,12341,12645,12949,13253,13557,13861,14165,14469,14773,15077,15381,15685,15989,16293,16597,16901,17205,17509,17813,18117,18421,18725,19029,19333,19637,19941,20245,20549,20853,21157,21461,21765,22069,22373,22677,22981,23285,23589,23893,24197,24501,24805,25109,25413,25717,26021,26325,26629,26933,27237,27541,27845,28149,28453,28757,29061,29365,29669,29973,30277,30581,30885,31189,31493,31797,32101,32405,32709,33013,33317,33621,33925,34229,34533,34837,35141,35445,35749,36053,36357,36661,36965,37269,37573,37877,38181,38485,38789,39093,39397,39701,40005,40309,40613,40917,41221,41525,41829,42133,42437,42741,43045,43349,43653,43957,44261,44565,44869,45173,45477,45781,46085,46389,46693,46997,47301,47605,47909,48213,48517,48821,49125,49429,49733,50037,50341,50645,50949,51253,51557,51861,52165,52469,52773,53077,53381,53685,53989,54293,54597,54901,55205,55509,55813,56117,56421,56725,57029,57333,57637,57941,58245,58549,58853,59157,59461,59765,60069,60373,60677,60981,61285,61589,61893,62197,62501,62805,63109,63413,63717,64021,64325,64629,64933,65237,65541,65845,66149,66453,66757,67061,67365,67669,67973,68277,68581,68885,69189,69493,69797,70101,70405,70709,71013,71317,71621,71925,72229,72533,72837,73141,73445,73749,74053,74357,74661,74965,75269,75573,75877,76181,76485,76789,77093,77397,77701'/>
+  </group>
+  <group name='181'>
+    <ids val='182,486,790,1094,1398,1702,2006,2310,2614,2918,3222,3526,3830,4134,4438,4742,5046,5350,5654,5958,6262,6566,6870,7174,7478,7782,8086,8390,8694,8998,9302,9606,9910,10214,10518,10822,11126,11430,11734,12038,12342,12646,12950,13254,13558,13862,14166,14470,14774,15078,15382,15686,15990,16294,16598,16902,17206,17510,17814,18118,18422,18726,19030,19334,19638,19942,20246,20550,20854,21158,21462,21766,22070,22374,22678,22982,23286,23590,23894,24198,24502,24806,25110,25414,25718,26022,26326,26630,26934,27238,27542,27846,28150,28454,28758,29062,29366,29670,29974,30278,30582,30886,31190,31494,31798,32102,32406,32710,33014,33318,33622,33926,34230,34534,34838,35142,35446,35750,36054,36358,36662,36966,37270,37574,37878,38182,38486,38790,39094,39398,39702,40006,40310,40614,40918,41222,41526,41830,42134,42438,42742,43046,43350,43654,43958,44262,44566,44870,45174,45478,45782,46086,46390,46694,46998,47302,47606,47910,48214,48518,48822,49126,49430,49734,50038,50342,50646,50950,51254,51558,51862,52166,52470,52774,53078,53382,53686,53990,54294,54598,54902,55206,55510,55814,56118,56422,56726,57030,57334,57638,57942,58246,58550,58854,59158,59462,59766,60070,60374,60678,60982,61286,61590,61894,62198,62502,62806,63110,63414,63718,64022,64326,64630,64934,65238,65542,65846,66150,66454,66758,67062,67366,67670,67974,68278,68582,68886,69190,69494,69798,70102,70406,70710,71014,71318,71622,71926,72230,72534,72838,73142,73446,73750,74054,74358,74662,74966,75270,75574,75878,76182,76486,76790,77094,77398,77702'/>
+  </group>
+  <group name='182'>
+    <ids val='183,487,791,1095,1399,1703,2007,2311,2615,2919,3223,3527,3831,4135,4439,4743,5047,5351,5655,5959,6263,6567,6871,7175,7479,7783,8087,8391,8695,8999,9303,9607,9911,10215,10519,10823,11127,11431,11735,12039,12343,12647,12951,13255,13559,13863,14167,14471,14775,15079,15383,15687,15991,16295,16599,16903,17207,17511,17815,18119,18423,18727,19031,19335,19639,19943,20247,20551,20855,21159,21463,21767,22071,22375,22679,22983,23287,23591,23895,24199,24503,24807,25111,25415,25719,26023,26327,26631,26935,27239,27543,27847,28151,28455,28759,29063,29367,29671,29975,30279,30583,30887,31191,31495,31799,32103,32407,32711,33015,33319,33623,33927,34231,34535,34839,35143,35447,35751,36055,36359,36663,36967,37271,37575,37879,38183,38487,38791,39095,39399,39703,40007,40311,40615,40919,41223,41527,41831,42135,42439,42743,43047,43351,43655,43959,44263,44567,44871,45175,45479,45783,46087,46391,46695,46999,47303,47607,47911,48215,48519,48823,49127,49431,49735,50039,50343,50647,50951,51255,51559,51863,52167,52471,52775,53079,53383,53687,53991,54295,54599,54903,55207,55511,55815,56119,56423,56727,57031,57335,57639,57943,58247,58551,58855,59159,59463,59767,60071,60375,60679,60983,61287,61591,61895,62199,62503,62807,63111,63415,63719,64023,64327,64631,64935,65239,65543,65847,66151,66455,66759,67063,67367,67671,67975,68279,68583,68887,69191,69495,69799,70103,70407,70711,71015,71319,71623,71927,72231,72535,72839,73143,73447,73751,74055,74359,74663,74967,75271,75575,75879,76183,76487,76791,77095,77399,77703'/>
+  </group>
+  <group name='183'>
+    <ids val='184,488,792,1096,1400,1704,2008,2312,2616,2920,3224,3528,3832,4136,4440,4744,5048,5352,5656,5960,6264,6568,6872,7176,7480,7784,8088,8392,8696,9000,9304,9608,9912,10216,10520,10824,11128,11432,11736,12040,12344,12648,12952,13256,13560,13864,14168,14472,14776,15080,15384,15688,15992,16296,16600,16904,17208,17512,17816,18120,18424,18728,19032,19336,19640,19944,20248,20552,20856,21160,21464,21768,22072,22376,22680,22984,23288,23592,23896,24200,24504,24808,25112,25416,25720,26024,26328,26632,26936,27240,27544,27848,28152,28456,28760,29064,29368,29672,29976,30280,30584,30888,31192,31496,31800,32104,32408,32712,33016,33320,33624,33928,34232,34536,34840,35144,35448,35752,36056,36360,36664,36968,37272,37576,37880,38184,38488,38792,39096,39400,39704,40008,40312,40616,40920,41224,41528,41832,42136,42440,42744,43048,43352,43656,43960,44264,44568,44872,45176,45480,45784,46088,46392,46696,47000,47304,47608,47912,48216,48520,48824,49128,49432,49736,50040,50344,50648,50952,51256,51560,51864,52168,52472,52776,53080,53384,53688,53992,54296,54600,54904,55208,55512,55816,56120,56424,56728,57032,57336,57640,57944,58248,58552,58856,59160,59464,59768,60072,60376,60680,60984,61288,61592,61896,62200,62504,62808,63112,63416,63720,64024,64328,64632,64936,65240,65544,65848,66152,66456,66760,67064,67368,67672,67976,68280,68584,68888,69192,69496,69800,70104,70408,70712,71016,71320,71624,71928,72232,72536,72840,73144,73448,73752,74056,74360,74664,74968,75272,75576,75880,76184,76488,76792,77096,77400,77704'/>
+  </group>
+  <group name='184'>
+    <ids val='185,489,793,1097,1401,1705,2009,2313,2617,2921,3225,3529,3833,4137,4441,4745,5049,5353,5657,5961,6265,6569,6873,7177,7481,7785,8089,8393,8697,9001,9305,9609,9913,10217,10521,10825,11129,11433,11737,12041,12345,12649,12953,13257,13561,13865,14169,14473,14777,15081,15385,15689,15993,16297,16601,16905,17209,17513,17817,18121,18425,18729,19033,19337,19641,19945,20249,20553,20857,21161,21465,21769,22073,22377,22681,22985,23289,23593,23897,24201,24505,24809,25113,25417,25721,26025,26329,26633,26937,27241,27545,27849,28153,28457,28761,29065,29369,29673,29977,30281,30585,30889,31193,31497,31801,32105,32409,32713,33017,33321,33625,33929,34233,34537,34841,35145,35449,35753,36057,36361,36665,36969,37273,37577,37881,38185,38489,38793,39097,39401,39705,40009,40313,40617,40921,41225,41529,41833,42137,42441,42745,43049,43353,43657,43961,44265,44569,44873,45177,45481,45785,46089,46393,46697,47001,47305,47609,47913,48217,48521,48825,49129,49433,49737,50041,50345,50649,50953,51257,51561,51865,52169,52473,52777,53081,53385,53689,53993,54297,54601,54905,55209,55513,55817,56121,56425,56729,57033,57337,57641,57945,58249,58553,58857,59161,59465,59769,60073,60377,60681,60985,61289,61593,61897,62201,62505,62809,63113,63417,63721,64025,64329,64633,64937,65241,65545,65849,66153,66457,66761,67065,67369,67673,67977,68281,68585,68889,69193,69497,69801,70105,70409,70713,71017,71321,71625,71929,72233,72537,72841,73145,73449,73753,74057,74361,74665,74969,75273,75577,75881,76185,76489,76793,77097,77401,77705'/>
+  </group>
+  <group name='185'>
+    <ids val='186,490,794,1098,1402,1706,2010,2314,2618,2922,3226,3530,3834,4138,4442,4746,5050,5354,5658,5962,6266,6570,6874,7178,7482,7786,8090,8394,8698,9002,9306,9610,9914,10218,10522,10826,11130,11434,11738,12042,12346,12650,12954,13258,13562,13866,14170,14474,14778,15082,15386,15690,15994,16298,16602,16906,17210,17514,17818,18122,18426,18730,19034,19338,19642,19946,20250,20554,20858,21162,21466,21770,22074,22378,22682,22986,23290,23594,23898,24202,24506,24810,25114,25418,25722,26026,26330,26634,26938,27242,27546,27850,28154,28458,28762,29066,29370,29674,29978,30282,30586,30890,31194,31498,31802,32106,32410,32714,33018,33322,33626,33930,34234,34538,34842,35146,35450,35754,36058,36362,36666,36970,37274,37578,37882,38186,38490,38794,39098,39402,39706,40010,40314,40618,40922,41226,41530,41834,42138,42442,42746,43050,43354,43658,43962,44266,44570,44874,45178,45482,45786,46090,46394,46698,47002,47306,47610,47914,48218,48522,48826,49130,49434,49738,50042,50346,50650,50954,51258,51562,51866,52170,52474,52778,53082,53386,53690,53994,54298,54602,54906,55210,55514,55818,56122,56426,56730,57034,57338,57642,57946,58250,58554,58858,59162,59466,59770,60074,60378,60682,60986,61290,61594,61898,62202,62506,62810,63114,63418,63722,64026,64330,64634,64938,65242,65546,65850,66154,66458,66762,67066,67370,67674,67978,68282,68586,68890,69194,69498,69802,70106,70410,70714,71018,71322,71626,71930,72234,72538,72842,73146,73450,73754,74058,74362,74666,74970,75274,75578,75882,76186,76490,76794,77098,77402,77706'/>
+  </group>
+  <group name='186'>
+    <ids val='187,491,795,1099,1403,1707,2011,2315,2619,2923,3227,3531,3835,4139,4443,4747,5051,5355,5659,5963,6267,6571,6875,7179,7483,7787,8091,8395,8699,9003,9307,9611,9915,10219,10523,10827,11131,11435,11739,12043,12347,12651,12955,13259,13563,13867,14171,14475,14779,15083,15387,15691,15995,16299,16603,16907,17211,17515,17819,18123,18427,18731,19035,19339,19643,19947,20251,20555,20859,21163,21467,21771,22075,22379,22683,22987,23291,23595,23899,24203,24507,24811,25115,25419,25723,26027,26331,26635,26939,27243,27547,27851,28155,28459,28763,29067,29371,29675,29979,30283,30587,30891,31195,31499,31803,32107,32411,32715,33019,33323,33627,33931,34235,34539,34843,35147,35451,35755,36059,36363,36667,36971,37275,37579,37883,38187,38491,38795,39099,39403,39707,40011,40315,40619,40923,41227,41531,41835,42139,42443,42747,43051,43355,43659,43963,44267,44571,44875,45179,45483,45787,46091,46395,46699,47003,47307,47611,47915,48219,48523,48827,49131,49435,49739,50043,50347,50651,50955,51259,51563,51867,52171,52475,52779,53083,53387,53691,53995,54299,54603,54907,55211,55515,55819,56123,56427,56731,57035,57339,57643,57947,58251,58555,58859,59163,59467,59771,60075,60379,60683,60987,61291,61595,61899,62203,62507,62811,63115,63419,63723,64027,64331,64635,64939,65243,65547,65851,66155,66459,66763,67067,67371,67675,67979,68283,68587,68891,69195,69499,69803,70107,70411,70715,71019,71323,71627,71931,72235,72539,72843,73147,73451,73755,74059,74363,74667,74971,75275,75579,75883,76187,76491,76795,77099,77403,77707'/>
+  </group>
+  <group name='187'>
+    <ids val='188,492,796,1100,1404,1708,2012,2316,2620,2924,3228,3532,3836,4140,4444,4748,5052,5356,5660,5964,6268,6572,6876,7180,7484,7788,8092,8396,8700,9004,9308,9612,9916,10220,10524,10828,11132,11436,11740,12044,12348,12652,12956,13260,13564,13868,14172,14476,14780,15084,15388,15692,15996,16300,16604,16908,17212,17516,17820,18124,18428,18732,19036,19340,19644,19948,20252,20556,20860,21164,21468,21772,22076,22380,22684,22988,23292,23596,23900,24204,24508,24812,25116,25420,25724,26028,26332,26636,26940,27244,27548,27852,28156,28460,28764,29068,29372,29676,29980,30284,30588,30892,31196,31500,31804,32108,32412,32716,33020,33324,33628,33932,34236,34540,34844,35148,35452,35756,36060,36364,36668,36972,37276,37580,37884,38188,38492,38796,39100,39404,39708,40012,40316,40620,40924,41228,41532,41836,42140,42444,42748,43052,43356,43660,43964,44268,44572,44876,45180,45484,45788,46092,46396,46700,47004,47308,47612,47916,48220,48524,48828,49132,49436,49740,50044,50348,50652,50956,51260,51564,51868,52172,52476,52780,53084,53388,53692,53996,54300,54604,54908,55212,55516,55820,56124,56428,56732,57036,57340,57644,57948,58252,58556,58860,59164,59468,59772,60076,60380,60684,60988,61292,61596,61900,62204,62508,62812,63116,63420,63724,64028,64332,64636,64940,65244,65548,65852,66156,66460,66764,67068,67372,67676,67980,68284,68588,68892,69196,69500,69804,70108,70412,70716,71020,71324,71628,71932,72236,72540,72844,73148,73452,73756,74060,74364,74668,74972,75276,75580,75884,76188,76492,76796,77100,77404,77708'/>
+  </group>
+  <group name='188'>
+    <ids val='189,493,797,1101,1405,1709,2013,2317,2621,2925,3229,3533,3837,4141,4445,4749,5053,5357,5661,5965,6269,6573,6877,7181,7485,7789,8093,8397,8701,9005,9309,9613,9917,10221,10525,10829,11133,11437,11741,12045,12349,12653,12957,13261,13565,13869,14173,14477,14781,15085,15389,15693,15997,16301,16605,16909,17213,17517,17821,18125,18429,18733,19037,19341,19645,19949,20253,20557,20861,21165,21469,21773,22077,22381,22685,22989,23293,23597,23901,24205,24509,24813,25117,25421,25725,26029,26333,26637,26941,27245,27549,27853,28157,28461,28765,29069,29373,29677,29981,30285,30589,30893,31197,31501,31805,32109,32413,32717,33021,33325,33629,33933,34237,34541,34845,35149,35453,35757,36061,36365,36669,36973,37277,37581,37885,38189,38493,38797,39101,39405,39709,40013,40317,40621,40925,41229,41533,41837,42141,42445,42749,43053,43357,43661,43965,44269,44573,44877,45181,45485,45789,46093,46397,46701,47005,47309,47613,47917,48221,48525,48829,49133,49437,49741,50045,50349,50653,50957,51261,51565,51869,52173,52477,52781,53085,53389,53693,53997,54301,54605,54909,55213,55517,55821,56125,56429,56733,57037,57341,57645,57949,58253,58557,58861,59165,59469,59773,60077,60381,60685,60989,61293,61597,61901,62205,62509,62813,63117,63421,63725,64029,64333,64637,64941,65245,65549,65853,66157,66461,66765,67069,67373,67677,67981,68285,68589,68893,69197,69501,69805,70109,70413,70717,71021,71325,71629,71933,72237,72541,72845,73149,73453,73757,74061,74365,74669,74973,75277,75581,75885,76189,76493,76797,77101,77405,77709'/>
+  </group>
+  <group name='189'>
+    <ids val='190,494,798,1102,1406,1710,2014,2318,2622,2926,3230,3534,3838,4142,4446,4750,5054,5358,5662,5966,6270,6574,6878,7182,7486,7790,8094,8398,8702,9006,9310,9614,9918,10222,10526,10830,11134,11438,11742,12046,12350,12654,12958,13262,13566,13870,14174,14478,14782,15086,15390,15694,15998,16302,16606,16910,17214,17518,17822,18126,18430,18734,19038,19342,19646,19950,20254,20558,20862,21166,21470,21774,22078,22382,22686,22990,23294,23598,23902,24206,24510,24814,25118,25422,25726,26030,26334,26638,26942,27246,27550,27854,28158,28462,28766,29070,29374,29678,29982,30286,30590,30894,31198,31502,31806,32110,32414,32718,33022,33326,33630,33934,34238,34542,34846,35150,35454,35758,36062,36366,36670,36974,37278,37582,37886,38190,38494,38798,39102,39406,39710,40014,40318,40622,40926,41230,41534,41838,42142,42446,42750,43054,43358,43662,43966,44270,44574,44878,45182,45486,45790,46094,46398,46702,47006,47310,47614,47918,48222,48526,48830,49134,49438,49742,50046,50350,50654,50958,51262,51566,51870,52174,52478,52782,53086,53390,53694,53998,54302,54606,54910,55214,55518,55822,56126,56430,56734,57038,57342,57646,57950,58254,58558,58862,59166,59470,59774,60078,60382,60686,60990,61294,61598,61902,62206,62510,62814,63118,63422,63726,64030,64334,64638,64942,65246,65550,65854,66158,66462,66766,67070,67374,67678,67982,68286,68590,68894,69198,69502,69806,70110,70414,70718,71022,71326,71630,71934,72238,72542,72846,73150,73454,73758,74062,74366,74670,74974,75278,75582,75886,76190,76494,76798,77102,77406,77710'/>
+  </group>
+  <group name='190'>
+    <ids val='191,495,799,1103,1407,1711,2015,2319,2623,2927,3231,3535,3839,4143,4447,4751,5055,5359,5663,5967,6271,6575,6879,7183,7487,7791,8095,8399,8703,9007,9311,9615,9919,10223,10527,10831,11135,11439,11743,12047,12351,12655,12959,13263,13567,13871,14175,14479,14783,15087,15391,15695,15999,16303,16607,16911,17215,17519,17823,18127,18431,18735,19039,19343,19647,19951,20255,20559,20863,21167,21471,21775,22079,22383,22687,22991,23295,23599,23903,24207,24511,24815,25119,25423,25727,26031,26335,26639,26943,27247,27551,27855,28159,28463,28767,29071,29375,29679,29983,30287,30591,30895,31199,31503,31807,32111,32415,32719,33023,33327,33631,33935,34239,34543,34847,35151,35455,35759,36063,36367,36671,36975,37279,37583,37887,38191,38495,38799,39103,39407,39711,40015,40319,40623,40927,41231,41535,41839,42143,42447,42751,43055,43359,43663,43967,44271,44575,44879,45183,45487,45791,46095,46399,46703,47007,47311,47615,47919,48223,48527,48831,49135,49439,49743,50047,50351,50655,50959,51263,51567,51871,52175,52479,52783,53087,53391,53695,53999,54303,54607,54911,55215,55519,55823,56127,56431,56735,57039,57343,57647,57951,58255,58559,58863,59167,59471,59775,60079,60383,60687,60991,61295,61599,61903,62207,62511,62815,63119,63423,63727,64031,64335,64639,64943,65247,65551,65855,66159,66463,66767,67071,67375,67679,67983,68287,68591,68895,69199,69503,69807,70111,70415,70719,71023,71327,71631,71935,72239,72543,72847,73151,73455,73759,74063,74367,74671,74975,75279,75583,75887,76191,76495,76799,77103,77407,77711'/>
+  </group>
+  <group name='191'>
+    <ids val='192,496,800,1104,1408,1712,2016,2320,2624,2928,3232,3536,3840,4144,4448,4752,5056,5360,5664,5968,6272,6576,6880,7184,7488,7792,8096,8400,8704,9008,9312,9616,9920,10224,10528,10832,11136,11440,11744,12048,12352,12656,12960,13264,13568,13872,14176,14480,14784,15088,15392,15696,16000,16304,16608,16912,17216,17520,17824,18128,18432,18736,19040,19344,19648,19952,20256,20560,20864,21168,21472,21776,22080,22384,22688,22992,23296,23600,23904,24208,24512,24816,25120,25424,25728,26032,26336,26640,26944,27248,27552,27856,28160,28464,28768,29072,29376,29680,29984,30288,30592,30896,31200,31504,31808,32112,32416,32720,33024,33328,33632,33936,34240,34544,34848,35152,35456,35760,36064,36368,36672,36976,37280,37584,37888,38192,38496,38800,39104,39408,39712,40016,40320,40624,40928,41232,41536,41840,42144,42448,42752,43056,43360,43664,43968,44272,44576,44880,45184,45488,45792,46096,46400,46704,47008,47312,47616,47920,48224,48528,48832,49136,49440,49744,50048,50352,50656,50960,51264,51568,51872,52176,52480,52784,53088,53392,53696,54000,54304,54608,54912,55216,55520,55824,56128,56432,56736,57040,57344,57648,57952,58256,58560,58864,59168,59472,59776,60080,60384,60688,60992,61296,61600,61904,62208,62512,62816,63120,63424,63728,64032,64336,64640,64944,65248,65552,65856,66160,66464,66768,67072,67376,67680,67984,68288,68592,68896,69200,69504,69808,70112,70416,70720,71024,71328,71632,71936,72240,72544,72848,73152,73456,73760,74064,74368,74672,74976,75280,75584,75888,76192,76496,76800,77104,77408,77712'/>
+  </group>
+  <group name='192'>
+    <ids val='193,497,801,1105,1409,1713,2017,2321,2625,2929,3233,3537,3841,4145,4449,4753,5057,5361,5665,5969,6273,6577,6881,7185,7489,7793,8097,8401,8705,9009,9313,9617,9921,10225,10529,10833,11137,11441,11745,12049,12353,12657,12961,13265,13569,13873,14177,14481,14785,15089,15393,15697,16001,16305,16609,16913,17217,17521,17825,18129,18433,18737,19041,19345,19649,19953,20257,20561,20865,21169,21473,21777,22081,22385,22689,22993,23297,23601,23905,24209,24513,24817,25121,25425,25729,26033,26337,26641,26945,27249,27553,27857,28161,28465,28769,29073,29377,29681,29985,30289,30593,30897,31201,31505,31809,32113,32417,32721,33025,33329,33633,33937,34241,34545,34849,35153,35457,35761,36065,36369,36673,36977,37281,37585,37889,38193,38497,38801,39105,39409,39713,40017,40321,40625,40929,41233,41537,41841,42145,42449,42753,43057,43361,43665,43969,44273,44577,44881,45185,45489,45793,46097,46401,46705,47009,47313,47617,47921,48225,48529,48833,49137,49441,49745,50049,50353,50657,50961,51265,51569,51873,52177,52481,52785,53089,53393,53697,54001,54305,54609,54913,55217,55521,55825,56129,56433,56737,57041,57345,57649,57953,58257,58561,58865,59169,59473,59777,60081,60385,60689,60993,61297,61601,61905,62209,62513,62817,63121,63425,63729,64033,64337,64641,64945,65249,65553,65857,66161,66465,66769,67073,67377,67681,67985,68289,68593,68897,69201,69505,69809,70113,70417,70721,71025,71329,71633,71937,72241,72545,72849,73153,73457,73761,74065,74369,74673,74977,75281,75585,75889,76193,76497,76801,77105,77409,77713'/>
+  </group>
+  <group name='193'>
+    <ids val='194,498,802,1106,1410,1714,2018,2322,2626,2930,3234,3538,3842,4146,4450,4754,5058,5362,5666,5970,6274,6578,6882,7186,7490,7794,8098,8402,8706,9010,9314,9618,9922,10226,10530,10834,11138,11442,11746,12050,12354,12658,12962,13266,13570,13874,14178,14482,14786,15090,15394,15698,16002,16306,16610,16914,17218,17522,17826,18130,18434,18738,19042,19346,19650,19954,20258,20562,20866,21170,21474,21778,22082,22386,22690,22994,23298,23602,23906,24210,24514,24818,25122,25426,25730,26034,26338,26642,26946,27250,27554,27858,28162,28466,28770,29074,29378,29682,29986,30290,30594,30898,31202,31506,31810,32114,32418,32722,33026,33330,33634,33938,34242,34546,34850,35154,35458,35762,36066,36370,36674,36978,37282,37586,37890,38194,38498,38802,39106,39410,39714,40018,40322,40626,40930,41234,41538,41842,42146,42450,42754,43058,43362,43666,43970,44274,44578,44882,45186,45490,45794,46098,46402,46706,47010,47314,47618,47922,48226,48530,48834,49138,49442,49746,50050,50354,50658,50962,51266,51570,51874,52178,52482,52786,53090,53394,53698,54002,54306,54610,54914,55218,55522,55826,56130,56434,56738,57042,57346,57650,57954,58258,58562,58866,59170,59474,59778,60082,60386,60690,60994,61298,61602,61906,62210,62514,62818,63122,63426,63730,64034,64338,64642,64946,65250,65554,65858,66162,66466,66770,67074,67378,67682,67986,68290,68594,68898,69202,69506,69810,70114,70418,70722,71026,71330,71634,71938,72242,72546,72850,73154,73458,73762,74066,74370,74674,74978,75282,75586,75890,76194,76498,76802,77106,77410,77714'/>
+  </group>
+  <group name='194'>
+    <ids val='195,499,803,1107,1411,1715,2019,2323,2627,2931,3235,3539,3843,4147,4451,4755,5059,5363,5667,5971,6275,6579,6883,7187,7491,7795,8099,8403,8707,9011,9315,9619,9923,10227,10531,10835,11139,11443,11747,12051,12355,12659,12963,13267,13571,13875,14179,14483,14787,15091,15395,15699,16003,16307,16611,16915,17219,17523,17827,18131,18435,18739,19043,19347,19651,19955,20259,20563,20867,21171,21475,21779,22083,22387,22691,22995,23299,23603,23907,24211,24515,24819,25123,25427,25731,26035,26339,26643,26947,27251,27555,27859,28163,28467,28771,29075,29379,29683,29987,30291,30595,30899,31203,31507,31811,32115,32419,32723,33027,33331,33635,33939,34243,34547,34851,35155,35459,35763,36067,36371,36675,36979,37283,37587,37891,38195,38499,38803,39107,39411,39715,40019,40323,40627,40931,41235,41539,41843,42147,42451,42755,43059,43363,43667,43971,44275,44579,44883,45187,45491,45795,46099,46403,46707,47011,47315,47619,47923,48227,48531,48835,49139,49443,49747,50051,50355,50659,50963,51267,51571,51875,52179,52483,52787,53091,53395,53699,54003,54307,54611,54915,55219,55523,55827,56131,56435,56739,57043,57347,57651,57955,58259,58563,58867,59171,59475,59779,60083,60387,60691,60995,61299,61603,61907,62211,62515,62819,63123,63427,63731,64035,64339,64643,64947,65251,65555,65859,66163,66467,66771,67075,67379,67683,67987,68291,68595,68899,69203,69507,69811,70115,70419,70723,71027,71331,71635,71939,72243,72547,72851,73155,73459,73763,74067,74371,74675,74979,75283,75587,75891,76195,76499,76803,77107,77411,77715'/>
+  </group>
+  <group name='195'>
+    <ids val='196,500,804,1108,1412,1716,2020,2324,2628,2932,3236,3540,3844,4148,4452,4756,5060,5364,5668,5972,6276,6580,6884,7188,7492,7796,8100,8404,8708,9012,9316,9620,9924,10228,10532,10836,11140,11444,11748,12052,12356,12660,12964,13268,13572,13876,14180,14484,14788,15092,15396,15700,16004,16308,16612,16916,17220,17524,17828,18132,18436,18740,19044,19348,19652,19956,20260,20564,20868,21172,21476,21780,22084,22388,22692,22996,23300,23604,23908,24212,24516,24820,25124,25428,25732,26036,26340,26644,26948,27252,27556,27860,28164,28468,28772,29076,29380,29684,29988,30292,30596,30900,31204,31508,31812,32116,32420,32724,33028,33332,33636,33940,34244,34548,34852,35156,35460,35764,36068,36372,36676,36980,37284,37588,37892,38196,38500,38804,39108,39412,39716,40020,40324,40628,40932,41236,41540,41844,42148,42452,42756,43060,43364,43668,43972,44276,44580,44884,45188,45492,45796,46100,46404,46708,47012,47316,47620,47924,48228,48532,48836,49140,49444,49748,50052,50356,50660,50964,51268,51572,51876,52180,52484,52788,53092,53396,53700,54004,54308,54612,54916,55220,55524,55828,56132,56436,56740,57044,57348,57652,57956,58260,58564,58868,59172,59476,59780,60084,60388,60692,60996,61300,61604,61908,62212,62516,62820,63124,63428,63732,64036,64340,64644,64948,65252,65556,65860,66164,66468,66772,67076,67380,67684,67988,68292,68596,68900,69204,69508,69812,70116,70420,70724,71028,71332,71636,71940,72244,72548,72852,73156,73460,73764,74068,74372,74676,74980,75284,75588,75892,76196,76500,76804,77108,77412,77716'/>
+  </group>
+  <group name='196'>
+    <ids val='197,501,805,1109,1413,1717,2021,2325,2629,2933,3237,3541,3845,4149,4453,4757,5061,5365,5669,5973,6277,6581,6885,7189,7493,7797,8101,8405,8709,9013,9317,9621,9925,10229,10533,10837,11141,11445,11749,12053,12357,12661,12965,13269,13573,13877,14181,14485,14789,15093,15397,15701,16005,16309,16613,16917,17221,17525,17829,18133,18437,18741,19045,19349,19653,19957,20261,20565,20869,21173,21477,21781,22085,22389,22693,22997,23301,23605,23909,24213,24517,24821,25125,25429,25733,26037,26341,26645,26949,27253,27557,27861,28165,28469,28773,29077,29381,29685,29989,30293,30597,30901,31205,31509,31813,32117,32421,32725,33029,33333,33637,33941,34245,34549,34853,35157,35461,35765,36069,36373,36677,36981,37285,37589,37893,38197,38501,38805,39109,39413,39717,40021,40325,40629,40933,41237,41541,41845,42149,42453,42757,43061,43365,43669,43973,44277,44581,44885,45189,45493,45797,46101,46405,46709,47013,47317,47621,47925,48229,48533,48837,49141,49445,49749,50053,50357,50661,50965,51269,51573,51877,52181,52485,52789,53093,53397,53701,54005,54309,54613,54917,55221,55525,55829,56133,56437,56741,57045,57349,57653,57957,58261,58565,58869,59173,59477,59781,60085,60389,60693,60997,61301,61605,61909,62213,62517,62821,63125,63429,63733,64037,64341,64645,64949,65253,65557,65861,66165,66469,66773,67077,67381,67685,67989,68293,68597,68901,69205,69509,69813,70117,70421,70725,71029,71333,71637,71941,72245,72549,72853,73157,73461,73765,74069,74373,74677,74981,75285,75589,75893,76197,76501,76805,77109,77413,77717'/>
+  </group>
+  <group name='197'>
+    <ids val='198,502,806,1110,1414,1718,2022,2326,2630,2934,3238,3542,3846,4150,4454,4758,5062,5366,5670,5974,6278,6582,6886,7190,7494,7798,8102,8406,8710,9014,9318,9622,9926,10230,10534,10838,11142,11446,11750,12054,12358,12662,12966,13270,13574,13878,14182,14486,14790,15094,15398,15702,16006,16310,16614,16918,17222,17526,17830,18134,18438,18742,19046,19350,19654,19958,20262,20566,20870,21174,21478,21782,22086,22390,22694,22998,23302,23606,23910,24214,24518,24822,25126,25430,25734,26038,26342,26646,26950,27254,27558,27862,28166,28470,28774,29078,29382,29686,29990,30294,30598,30902,31206,31510,31814,32118,32422,32726,33030,33334,33638,33942,34246,34550,34854,35158,35462,35766,36070,36374,36678,36982,37286,37590,37894,38198,38502,38806,39110,39414,39718,40022,40326,40630,40934,41238,41542,41846,42150,42454,42758,43062,43366,43670,43974,44278,44582,44886,45190,45494,45798,46102,46406,46710,47014,47318,47622,47926,48230,48534,48838,49142,49446,49750,50054,50358,50662,50966,51270,51574,51878,52182,52486,52790,53094,53398,53702,54006,54310,54614,54918,55222,55526,55830,56134,56438,56742,57046,57350,57654,57958,58262,58566,58870,59174,59478,59782,60086,60390,60694,60998,61302,61606,61910,62214,62518,62822,63126,63430,63734,64038,64342,64646,64950,65254,65558,65862,66166,66470,66774,67078,67382,67686,67990,68294,68598,68902,69206,69510,69814,70118,70422,70726,71030,71334,71638,71942,72246,72550,72854,73158,73462,73766,74070,74374,74678,74982,75286,75590,75894,76198,76502,76806,77110,77414,77718'/>
+  </group>
+  <group name='198'>
+    <ids val='199,503,807,1111,1415,1719,2023,2327,2631,2935,3239,3543,3847,4151,4455,4759,5063,5367,5671,5975,6279,6583,6887,7191,7495,7799,8103,8407,8711,9015,9319,9623,9927,10231,10535,10839,11143,11447,11751,12055,12359,12663,12967,13271,13575,13879,14183,14487,14791,15095,15399,15703,16007,16311,16615,16919,17223,17527,17831,18135,18439,18743,19047,19351,19655,19959,20263,20567,20871,21175,21479,21783,22087,22391,22695,22999,23303,23607,23911,24215,24519,24823,25127,25431,25735,26039,26343,26647,26951,27255,27559,27863,28167,28471,28775,29079,29383,29687,29991,30295,30599,30903,31207,31511,31815,32119,32423,32727,33031,33335,33639,33943,34247,34551,34855,35159,35463,35767,36071,36375,36679,36983,37287,37591,37895,38199,38503,38807,39111,39415,39719,40023,40327,40631,40935,41239,41543,41847,42151,42455,42759,43063,43367,43671,43975,44279,44583,44887,45191,45495,45799,46103,46407,46711,47015,47319,47623,47927,48231,48535,48839,49143,49447,49751,50055,50359,50663,50967,51271,51575,51879,52183,52487,52791,53095,53399,53703,54007,54311,54615,54919,55223,55527,55831,56135,56439,56743,57047,57351,57655,57959,58263,58567,58871,59175,59479,59783,60087,60391,60695,60999,61303,61607,61911,62215,62519,62823,63127,63431,63735,64039,64343,64647,64951,65255,65559,65863,66167,66471,66775,67079,67383,67687,67991,68295,68599,68903,69207,69511,69815,70119,70423,70727,71031,71335,71639,71943,72247,72551,72855,73159,73463,73767,74071,74375,74679,74983,75287,75591,75895,76199,76503,76807,77111,77415,77719'/>
+  </group>
+  <group name='199'>
+    <ids val='200,504,808,1112,1416,1720,2024,2328,2632,2936,3240,3544,3848,4152,4456,4760,5064,5368,5672,5976,6280,6584,6888,7192,7496,7800,8104,8408,8712,9016,9320,9624,9928,10232,10536,10840,11144,11448,11752,12056,12360,12664,12968,13272,13576,13880,14184,14488,14792,15096,15400,15704,16008,16312,16616,16920,17224,17528,17832,18136,18440,18744,19048,19352,19656,19960,20264,20568,20872,21176,21480,21784,22088,22392,22696,23000,23304,23608,23912,24216,24520,24824,25128,25432,25736,26040,26344,26648,26952,27256,27560,27864,28168,28472,28776,29080,29384,29688,29992,30296,30600,30904,31208,31512,31816,32120,32424,32728,33032,33336,33640,33944,34248,34552,34856,35160,35464,35768,36072,36376,36680,36984,37288,37592,37896,38200,38504,38808,39112,39416,39720,40024,40328,40632,40936,41240,41544,41848,42152,42456,42760,43064,43368,43672,43976,44280,44584,44888,45192,45496,45800,46104,46408,46712,47016,47320,47624,47928,48232,48536,48840,49144,49448,49752,50056,50360,50664,50968,51272,51576,51880,52184,52488,52792,53096,53400,53704,54008,54312,54616,54920,55224,55528,55832,56136,56440,56744,57048,57352,57656,57960,58264,58568,58872,59176,59480,59784,60088,60392,60696,61000,61304,61608,61912,62216,62520,62824,63128,63432,63736,64040,64344,64648,64952,65256,65560,65864,66168,66472,66776,67080,67384,67688,67992,68296,68600,68904,69208,69512,69816,70120,70424,70728,71032,71336,71640,71944,72248,72552,72856,73160,73464,73768,74072,74376,74680,74984,75288,75592,75896,76200,76504,76808,77112,77416,77720'/>
+  </group>
+  <group name='200'>
+    <ids val='201,505,809,1113,1417,1721,2025,2329,2633,2937,3241,3545,3849,4153,4457,4761,5065,5369,5673,5977,6281,6585,6889,7193,7497,7801,8105,8409,8713,9017,9321,9625,9929,10233,10537,10841,11145,11449,11753,12057,12361,12665,12969,13273,13577,13881,14185,14489,14793,15097,15401,15705,16009,16313,16617,16921,17225,17529,17833,18137,18441,18745,19049,19353,19657,19961,20265,20569,20873,21177,21481,21785,22089,22393,22697,23001,23305,23609,23913,24217,24521,24825,25129,25433,25737,26041,26345,26649,26953,27257,27561,27865,28169,28473,28777,29081,29385,29689,29993,30297,30601,30905,31209,31513,31817,32121,32425,32729,33033,33337,33641,33945,34249,34553,34857,35161,35465,35769,36073,36377,36681,36985,37289,37593,37897,38201,38505,38809,39113,39417,39721,40025,40329,40633,40937,41241,41545,41849,42153,42457,42761,43065,43369,43673,43977,44281,44585,44889,45193,45497,45801,46105,46409,46713,47017,47321,47625,47929,48233,48537,48841,49145,49449,49753,50057,50361,50665,50969,51273,51577,51881,52185,52489,52793,53097,53401,53705,54009,54313,54617,54921,55225,55529,55833,56137,56441,56745,57049,57353,57657,57961,58265,58569,58873,59177,59481,59785,60089,60393,60697,61001,61305,61609,61913,62217,62521,62825,63129,63433,63737,64041,64345,64649,64953,65257,65561,65865,66169,66473,66777,67081,67385,67689,67993,68297,68601,68905,69209,69513,69817,70121,70425,70729,71033,71337,71641,71945,72249,72553,72857,73161,73465,73769,74073,74377,74681,74985,75289,75593,75897,76201,76505,76809,77113,77417,77721'/>
+  </group>
+  <group name='201'>
+    <ids val='202,506,810,1114,1418,1722,2026,2330,2634,2938,3242,3546,3850,4154,4458,4762,5066,5370,5674,5978,6282,6586,6890,7194,7498,7802,8106,8410,8714,9018,9322,9626,9930,10234,10538,10842,11146,11450,11754,12058,12362,12666,12970,13274,13578,13882,14186,14490,14794,15098,15402,15706,16010,16314,16618,16922,17226,17530,17834,18138,18442,18746,19050,19354,19658,19962,20266,20570,20874,21178,21482,21786,22090,22394,22698,23002,23306,23610,23914,24218,24522,24826,25130,25434,25738,26042,26346,26650,26954,27258,27562,27866,28170,28474,28778,29082,29386,29690,29994,30298,30602,30906,31210,31514,31818,32122,32426,32730,33034,33338,33642,33946,34250,34554,34858,35162,35466,35770,36074,36378,36682,36986,37290,37594,37898,38202,38506,38810,39114,39418,39722,40026,40330,40634,40938,41242,41546,41850,42154,42458,42762,43066,43370,43674,43978,44282,44586,44890,45194,45498,45802,46106,46410,46714,47018,47322,47626,47930,48234,48538,48842,49146,49450,49754,50058,50362,50666,50970,51274,51578,51882,52186,52490,52794,53098,53402,53706,54010,54314,54618,54922,55226,55530,55834,56138,56442,56746,57050,57354,57658,57962,58266,58570,58874,59178,59482,59786,60090,60394,60698,61002,61306,61610,61914,62218,62522,62826,63130,63434,63738,64042,64346,64650,64954,65258,65562,65866,66170,66474,66778,67082,67386,67690,67994,68298,68602,68906,69210,69514,69818,70122,70426,70730,71034,71338,71642,71946,72250,72554,72858,73162,73466,73770,74074,74378,74682,74986,75290,75594,75898,76202,76506,76810,77114,77418,77722'/>
+  </group>
+  <group name='202'>
+    <ids val='203,507,811,1115,1419,1723,2027,2331,2635,2939,3243,3547,3851,4155,4459,4763,5067,5371,5675,5979,6283,6587,6891,7195,7499,7803,8107,8411,8715,9019,9323,9627,9931,10235,10539,10843,11147,11451,11755,12059,12363,12667,12971,13275,13579,13883,14187,14491,14795,15099,15403,15707,16011,16315,16619,16923,17227,17531,17835,18139,18443,18747,19051,19355,19659,19963,20267,20571,20875,21179,21483,21787,22091,22395,22699,23003,23307,23611,23915,24219,24523,24827,25131,25435,25739,26043,26347,26651,26955,27259,27563,27867,28171,28475,28779,29083,29387,29691,29995,30299,30603,30907,31211,31515,31819,32123,32427,32731,33035,33339,33643,33947,34251,34555,34859,35163,35467,35771,36075,36379,36683,36987,37291,37595,37899,38203,38507,38811,39115,39419,39723,40027,40331,40635,40939,41243,41547,41851,42155,42459,42763,43067,43371,43675,43979,44283,44587,44891,45195,45499,45803,46107,46411,46715,47019,47323,47627,47931,48235,48539,48843,49147,49451,49755,50059,50363,50667,50971,51275,51579,51883,52187,52491,52795,53099,53403,53707,54011,54315,54619,54923,55227,55531,55835,56139,56443,56747,57051,57355,57659,57963,58267,58571,58875,59179,59483,59787,60091,60395,60699,61003,61307,61611,61915,62219,62523,62827,63131,63435,63739,64043,64347,64651,64955,65259,65563,65867,66171,66475,66779,67083,67387,67691,67995,68299,68603,68907,69211,69515,69819,70123,70427,70731,71035,71339,71643,71947,72251,72555,72859,73163,73467,73771,74075,74379,74683,74987,75291,75595,75899,76203,76507,76811,77115,77419,77723'/>
+  </group>
+  <group name='203'>
+    <ids val='204,508,812,1116,1420,1724,2028,2332,2636,2940,3244,3548,3852,4156,4460,4764,5068,5372,5676,5980,6284,6588,6892,7196,7500,7804,8108,8412,8716,9020,9324,9628,9932,10236,10540,10844,11148,11452,11756,12060,12364,12668,12972,13276,13580,13884,14188,14492,14796,15100,15404,15708,16012,16316,16620,16924,17228,17532,17836,18140,18444,18748,19052,19356,19660,19964,20268,20572,20876,21180,21484,21788,22092,22396,22700,23004,23308,23612,23916,24220,24524,24828,25132,25436,25740,26044,26348,26652,26956,27260,27564,27868,28172,28476,28780,29084,29388,29692,29996,30300,30604,30908,31212,31516,31820,32124,32428,32732,33036,33340,33644,33948,34252,34556,34860,35164,35468,35772,36076,36380,36684,36988,37292,37596,37900,38204,38508,38812,39116,39420,39724,40028,40332,40636,40940,41244,41548,41852,42156,42460,42764,43068,43372,43676,43980,44284,44588,44892,45196,45500,45804,46108,46412,46716,47020,47324,47628,47932,48236,48540,48844,49148,49452,49756,50060,50364,50668,50972,51276,51580,51884,52188,52492,52796,53100,53404,53708,54012,54316,54620,54924,55228,55532,55836,56140,56444,56748,57052,57356,57660,57964,58268,58572,58876,59180,59484,59788,60092,60396,60700,61004,61308,61612,61916,62220,62524,62828,63132,63436,63740,64044,64348,64652,64956,65260,65564,65868,66172,66476,66780,67084,67388,67692,67996,68300,68604,68908,69212,69516,69820,70124,70428,70732,71036,71340,71644,71948,72252,72556,72860,73164,73468,73772,74076,74380,74684,74988,75292,75596,75900,76204,76508,76812,77116,77420,77724'/>
+  </group>
+  <group name='204'>
+    <ids val='205,509,813,1117,1421,1725,2029,2333,2637,2941,3245,3549,3853,4157,4461,4765,5069,5373,5677,5981,6285,6589,6893,7197,7501,7805,8109,8413,8717,9021,9325,9629,9933,10237,10541,10845,11149,11453,11757,12061,12365,12669,12973,13277,13581,13885,14189,14493,14797,15101,15405,15709,16013,16317,16621,16925,17229,17533,17837,18141,18445,18749,19053,19357,19661,19965,20269,20573,20877,21181,21485,21789,22093,22397,22701,23005,23309,23613,23917,24221,24525,24829,25133,25437,25741,26045,26349,26653,26957,27261,27565,27869,28173,28477,28781,29085,29389,29693,29997,30301,30605,30909,31213,31517,31821,32125,32429,32733,33037,33341,33645,33949,34253,34557,34861,35165,35469,35773,36077,36381,36685,36989,37293,37597,37901,38205,38509,38813,39117,39421,39725,40029,40333,40637,40941,41245,41549,41853,42157,42461,42765,43069,43373,43677,43981,44285,44589,44893,45197,45501,45805,46109,46413,46717,47021,47325,47629,47933,48237,48541,48845,49149,49453,49757,50061,50365,50669,50973,51277,51581,51885,52189,52493,52797,53101,53405,53709,54013,54317,54621,54925,55229,55533,55837,56141,56445,56749,57053,57357,57661,57965,58269,58573,58877,59181,59485,59789,60093,60397,60701,61005,61309,61613,61917,62221,62525,62829,63133,63437,63741,64045,64349,64653,64957,65261,65565,65869,66173,66477,66781,67085,67389,67693,67997,68301,68605,68909,69213,69517,69821,70125,70429,70733,71037,71341,71645,71949,72253,72557,72861,73165,73469,73773,74077,74381,74685,74989,75293,75597,75901,76205,76509,76813,77117,77421,77725'/>
+  </group>
+  <group name='205'>
+    <ids val='206,510,814,1118,1422,1726,2030,2334,2638,2942,3246,3550,3854,4158,4462,4766,5070,5374,5678,5982,6286,6590,6894,7198,7502,7806,8110,8414,8718,9022,9326,9630,9934,10238,10542,10846,11150,11454,11758,12062,12366,12670,12974,13278,13582,13886,14190,14494,14798,15102,15406,15710,16014,16318,16622,16926,17230,17534,17838,18142,18446,18750,19054,19358,19662,19966,20270,20574,20878,21182,21486,21790,22094,22398,22702,23006,23310,23614,23918,24222,24526,24830,25134,25438,25742,26046,26350,26654,26958,27262,27566,27870,28174,28478,28782,29086,29390,29694,29998,30302,30606,30910,31214,31518,31822,32126,32430,32734,33038,33342,33646,33950,34254,34558,34862,35166,35470,35774,36078,36382,36686,36990,37294,37598,37902,38206,38510,38814,39118,39422,39726,40030,40334,40638,40942,41246,41550,41854,42158,42462,42766,43070,43374,43678,43982,44286,44590,44894,45198,45502,45806,46110,46414,46718,47022,47326,47630,47934,48238,48542,48846,49150,49454,49758,50062,50366,50670,50974,51278,51582,51886,52190,52494,52798,53102,53406,53710,54014,54318,54622,54926,55230,55534,55838,56142,56446,56750,57054,57358,57662,57966,58270,58574,58878,59182,59486,59790,60094,60398,60702,61006,61310,61614,61918,62222,62526,62830,63134,63438,63742,64046,64350,64654,64958,65262,65566,65870,66174,66478,66782,67086,67390,67694,67998,68302,68606,68910,69214,69518,69822,70126,70430,70734,71038,71342,71646,71950,72254,72558,72862,73166,73470,73774,74078,74382,74686,74990,75294,75598,75902,76206,76510,76814,77118,77422,77726'/>
+  </group>
+  <group name='206'>
+    <ids val='207,511,815,1119,1423,1727,2031,2335,2639,2943,3247,3551,3855,4159,4463,4767,5071,5375,5679,5983,6287,6591,6895,7199,7503,7807,8111,8415,8719,9023,9327,9631,9935,10239,10543,10847,11151,11455,11759,12063,12367,12671,12975,13279,13583,13887,14191,14495,14799,15103,15407,15711,16015,16319,16623,16927,17231,17535,17839,18143,18447,18751,19055,19359,19663,19967,20271,20575,20879,21183,21487,21791,22095,22399,22703,23007,23311,23615,23919,24223,24527,24831,25135,25439,25743,26047,26351,26655,26959,27263,27567,27871,28175,28479,28783,29087,29391,29695,29999,30303,30607,30911,31215,31519,31823,32127,32431,32735,33039,33343,33647,33951,34255,34559,34863,35167,35471,35775,36079,36383,36687,36991,37295,37599,37903,38207,38511,38815,39119,39423,39727,40031,40335,40639,40943,41247,41551,41855,42159,42463,42767,43071,43375,43679,43983,44287,44591,44895,45199,45503,45807,46111,46415,46719,47023,47327,47631,47935,48239,48543,48847,49151,49455,49759,50063,50367,50671,50975,51279,51583,51887,52191,52495,52799,53103,53407,53711,54015,54319,54623,54927,55231,55535,55839,56143,56447,56751,57055,57359,57663,57967,58271,58575,58879,59183,59487,59791,60095,60399,60703,61007,61311,61615,61919,62223,62527,62831,63135,63439,63743,64047,64351,64655,64959,65263,65567,65871,66175,66479,66783,67087,67391,67695,67999,68303,68607,68911,69215,69519,69823,70127,70431,70735,71039,71343,71647,71951,72255,72559,72863,73167,73471,73775,74079,74383,74687,74991,75295,75599,75903,76207,76511,76815,77119,77423,77727'/>
+  </group>
+  <group name='207'>
+    <ids val='208,512,816,1120,1424,1728,2032,2336,2640,2944,3248,3552,3856,4160,4464,4768,5072,5376,5680,5984,6288,6592,6896,7200,7504,7808,8112,8416,8720,9024,9328,9632,9936,10240,10544,10848,11152,11456,11760,12064,12368,12672,12976,13280,13584,13888,14192,14496,14800,15104,15408,15712,16016,16320,16624,16928,17232,17536,17840,18144,18448,18752,19056,19360,19664,19968,20272,20576,20880,21184,21488,21792,22096,22400,22704,23008,23312,23616,23920,24224,24528,24832,25136,25440,25744,26048,26352,26656,26960,27264,27568,27872,28176,28480,28784,29088,29392,29696,30000,30304,30608,30912,31216,31520,31824,32128,32432,32736,33040,33344,33648,33952,34256,34560,34864,35168,35472,35776,36080,36384,36688,36992,37296,37600,37904,38208,38512,38816,39120,39424,39728,40032,40336,40640,40944,41248,41552,41856,42160,42464,42768,43072,43376,43680,43984,44288,44592,44896,45200,45504,45808,46112,46416,46720,47024,47328,47632,47936,48240,48544,48848,49152,49456,49760,50064,50368,50672,50976,51280,51584,51888,52192,52496,52800,53104,53408,53712,54016,54320,54624,54928,55232,55536,55840,56144,56448,56752,57056,57360,57664,57968,58272,58576,58880,59184,59488,59792,60096,60400,60704,61008,61312,61616,61920,62224,62528,62832,63136,63440,63744,64048,64352,64656,64960,65264,65568,65872,66176,66480,66784,67088,67392,67696,68000,68304,68608,68912,69216,69520,69824,70128,70432,70736,71040,71344,71648,71952,72256,72560,72864,73168,73472,73776,74080,74384,74688,74992,75296,75600,75904,76208,76512,76816,77120,77424,77728'/>
+  </group>
+  <group name='208'>
+    <ids val='209,513,817,1121,1425,1729,2033,2337,2641,2945,3249,3553,3857,4161,4465,4769,5073,5377,5681,5985,6289,6593,6897,7201,7505,7809,8113,8417,8721,9025,9329,9633,9937,10241,10545,10849,11153,11457,11761,12065,12369,12673,12977,13281,13585,13889,14193,14497,14801,15105,15409,15713,16017,16321,16625,16929,17233,17537,17841,18145,18449,18753,19057,19361,19665,19969,20273,20577,20881,21185,21489,21793,22097,22401,22705,23009,23313,23617,23921,24225,24529,24833,25137,25441,25745,26049,26353,26657,26961,27265,27569,27873,28177,28481,28785,29089,29393,29697,30001,30305,30609,30913,31217,31521,31825,32129,32433,32737,33041,33345,33649,33953,34257,34561,34865,35169,35473,35777,36081,36385,36689,36993,37297,37601,37905,38209,38513,38817,39121,39425,39729,40033,40337,40641,40945,41249,41553,41857,42161,42465,42769,43073,43377,43681,43985,44289,44593,44897,45201,45505,45809,46113,46417,46721,47025,47329,47633,47937,48241,48545,48849,49153,49457,49761,50065,50369,50673,50977,51281,51585,51889,52193,52497,52801,53105,53409,53713,54017,54321,54625,54929,55233,55537,55841,56145,56449,56753,57057,57361,57665,57969,58273,58577,58881,59185,59489,59793,60097,60401,60705,61009,61313,61617,61921,62225,62529,62833,63137,63441,63745,64049,64353,64657,64961,65265,65569,65873,66177,66481,66785,67089,67393,67697,68001,68305,68609,68913,69217,69521,69825,70129,70433,70737,71041,71345,71649,71953,72257,72561,72865,73169,73473,73777,74081,74385,74689,74993,75297,75601,75905,76209,76513,76817,77121,77425,77729'/>
+  </group>
+  <group name='209'>
+    <ids val='210,514,818,1122,1426,1730,2034,2338,2642,2946,3250,3554,3858,4162,4466,4770,5074,5378,5682,5986,6290,6594,6898,7202,7506,7810,8114,8418,8722,9026,9330,9634,9938,10242,10546,10850,11154,11458,11762,12066,12370,12674,12978,13282,13586,13890,14194,14498,14802,15106,15410,15714,16018,16322,16626,16930,17234,17538,17842,18146,18450,18754,19058,19362,19666,19970,20274,20578,20882,21186,21490,21794,22098,22402,22706,23010,23314,23618,23922,24226,24530,24834,25138,25442,25746,26050,26354,26658,26962,27266,27570,27874,28178,28482,28786,29090,29394,29698,30002,30306,30610,30914,31218,31522,31826,32130,32434,32738,33042,33346,33650,33954,34258,34562,34866,35170,35474,35778,36082,36386,36690,36994,37298,37602,37906,38210,38514,38818,39122,39426,39730,40034,40338,40642,40946,41250,41554,41858,42162,42466,42770,43074,43378,43682,43986,44290,44594,44898,45202,45506,45810,46114,46418,46722,47026,47330,47634,47938,48242,48546,48850,49154,49458,49762,50066,50370,50674,50978,51282,51586,51890,52194,52498,52802,53106,53410,53714,54018,54322,54626,54930,55234,55538,55842,56146,56450,56754,57058,57362,57666,57970,58274,58578,58882,59186,59490,59794,60098,60402,60706,61010,61314,61618,61922,62226,62530,62834,63138,63442,63746,64050,64354,64658,64962,65266,65570,65874,66178,66482,66786,67090,67394,67698,68002,68306,68610,68914,69218,69522,69826,70130,70434,70738,71042,71346,71650,71954,72258,72562,72866,73170,73474,73778,74082,74386,74690,74994,75298,75602,75906,76210,76514,76818,77122,77426,77730'/>
+  </group>
+  <group name='210'>
+    <ids val='211,515,819,1123,1427,1731,2035,2339,2643,2947,3251,3555,3859,4163,4467,4771,5075,5379,5683,5987,6291,6595,6899,7203,7507,7811,8115,8419,8723,9027,9331,9635,9939,10243,10547,10851,11155,11459,11763,12067,12371,12675,12979,13283,13587,13891,14195,14499,14803,15107,15411,15715,16019,16323,16627,16931,17235,17539,17843,18147,18451,18755,19059,19363,19667,19971,20275,20579,20883,21187,21491,21795,22099,22403,22707,23011,23315,23619,23923,24227,24531,24835,25139,25443,25747,26051,26355,26659,26963,27267,27571,27875,28179,28483,28787,29091,29395,29699,30003,30307,30611,30915,31219,31523,31827,32131,32435,32739,33043,33347,33651,33955,34259,34563,34867,35171,35475,35779,36083,36387,36691,36995,37299,37603,37907,38211,38515,38819,39123,39427,39731,40035,40339,40643,40947,41251,41555,41859,42163,42467,42771,43075,43379,43683,43987,44291,44595,44899,45203,45507,45811,46115,46419,46723,47027,47331,47635,47939,48243,48547,48851,49155,49459,49763,50067,50371,50675,50979,51283,51587,51891,52195,52499,52803,53107,53411,53715,54019,54323,54627,54931,55235,55539,55843,56147,56451,56755,57059,57363,57667,57971,58275,58579,58883,59187,59491,59795,60099,60403,60707,61011,61315,61619,61923,62227,62531,62835,63139,63443,63747,64051,64355,64659,64963,65267,65571,65875,66179,66483,66787,67091,67395,67699,68003,68307,68611,68915,69219,69523,69827,70131,70435,70739,71043,71347,71651,71955,72259,72563,72867,73171,73475,73779,74083,74387,74691,74995,75299,75603,75907,76211,76515,76819,77123,77427,77731'/>
+  </group>
+  <group name='211'>
+    <ids val='212,516,820,1124,1428,1732,2036,2340,2644,2948,3252,3556,3860,4164,4468,4772,5076,5380,5684,5988,6292,6596,6900,7204,7508,7812,8116,8420,8724,9028,9332,9636,9940,10244,10548,10852,11156,11460,11764,12068,12372,12676,12980,13284,13588,13892,14196,14500,14804,15108,15412,15716,16020,16324,16628,16932,17236,17540,17844,18148,18452,18756,19060,19364,19668,19972,20276,20580,20884,21188,21492,21796,22100,22404,22708,23012,23316,23620,23924,24228,24532,24836,25140,25444,25748,26052,26356,26660,26964,27268,27572,27876,28180,28484,28788,29092,29396,29700,30004,30308,30612,30916,31220,31524,31828,32132,32436,32740,33044,33348,33652,33956,34260,34564,34868,35172,35476,35780,36084,36388,36692,36996,37300,37604,37908,38212,38516,38820,39124,39428,39732,40036,40340,40644,40948,41252,41556,41860,42164,42468,42772,43076,43380,43684,43988,44292,44596,44900,45204,45508,45812,46116,46420,46724,47028,47332,47636,47940,48244,48548,48852,49156,49460,49764,50068,50372,50676,50980,51284,51588,51892,52196,52500,52804,53108,53412,53716,54020,54324,54628,54932,55236,55540,55844,56148,56452,56756,57060,57364,57668,57972,58276,58580,58884,59188,59492,59796,60100,60404,60708,61012,61316,61620,61924,62228,62532,62836,63140,63444,63748,64052,64356,64660,64964,65268,65572,65876,66180,66484,66788,67092,67396,67700,68004,68308,68612,68916,69220,69524,69828,70132,70436,70740,71044,71348,71652,71956,72260,72564,72868,73172,73476,73780,74084,74388,74692,74996,75300,75604,75908,76212,76516,76820,77124,77428,77732'/>
+  </group>
+  <group name='212'>
+    <ids val='213,517,821,1125,1429,1733,2037,2341,2645,2949,3253,3557,3861,4165,4469,4773,5077,5381,5685,5989,6293,6597,6901,7205,7509,7813,8117,8421,8725,9029,9333,9637,9941,10245,10549,10853,11157,11461,11765,12069,12373,12677,12981,13285,13589,13893,14197,14501,14805,15109,15413,15717,16021,16325,16629,16933,17237,17541,17845,18149,18453,18757,19061,19365,19669,19973,20277,20581,20885,21189,21493,21797,22101,22405,22709,23013,23317,23621,23925,24229,24533,24837,25141,25445,25749,26053,26357,26661,26965,27269,27573,27877,28181,28485,28789,29093,29397,29701,30005,30309,30613,30917,31221,31525,31829,32133,32437,32741,33045,33349,33653,33957,34261,34565,34869,35173,35477,35781,36085,36389,36693,36997,37301,37605,37909,38213,38517,38821,39125,39429,39733,40037,40341,40645,40949,41253,41557,41861,42165,42469,42773,43077,43381,43685,43989,44293,44597,44901,45205,45509,45813,46117,46421,46725,47029,47333,47637,47941,48245,48549,48853,49157,49461,49765,50069,50373,50677,50981,51285,51589,51893,52197,52501,52805,53109,53413,53717,54021,54325,54629,54933,55237,55541,55845,56149,56453,56757,57061,57365,57669,57973,58277,58581,58885,59189,59493,59797,60101,60405,60709,61013,61317,61621,61925,62229,62533,62837,63141,63445,63749,64053,64357,64661,64965,65269,65573,65877,66181,66485,66789,67093,67397,67701,68005,68309,68613,68917,69221,69525,69829,70133,70437,70741,71045,71349,71653,71957,72261,72565,72869,73173,73477,73781,74085,74389,74693,74997,75301,75605,75909,76213,76517,76821,77125,77429,77733'/>
+  </group>
+  <group name='213'>
+    <ids val='214,518,822,1126,1430,1734,2038,2342,2646,2950,3254,3558,3862,4166,4470,4774,5078,5382,5686,5990,6294,6598,6902,7206,7510,7814,8118,8422,8726,9030,9334,9638,9942,10246,10550,10854,11158,11462,11766,12070,12374,12678,12982,13286,13590,13894,14198,14502,14806,15110,15414,15718,16022,16326,16630,16934,17238,17542,17846,18150,18454,18758,19062,19366,19670,19974,20278,20582,20886,21190,21494,21798,22102,22406,22710,23014,23318,23622,23926,24230,24534,24838,25142,25446,25750,26054,26358,26662,26966,27270,27574,27878,28182,28486,28790,29094,29398,29702,30006,30310,30614,30918,31222,31526,31830,32134,32438,32742,33046,33350,33654,33958,34262,34566,34870,35174,35478,35782,36086,36390,36694,36998,37302,37606,37910,38214,38518,38822,39126,39430,39734,40038,40342,40646,40950,41254,41558,41862,42166,42470,42774,43078,43382,43686,43990,44294,44598,44902,45206,45510,45814,46118,46422,46726,47030,47334,47638,47942,48246,48550,48854,49158,49462,49766,50070,50374,50678,50982,51286,51590,51894,52198,52502,52806,53110,53414,53718,54022,54326,54630,54934,55238,55542,55846,56150,56454,56758,57062,57366,57670,57974,58278,58582,58886,59190,59494,59798,60102,60406,60710,61014,61318,61622,61926,62230,62534,62838,63142,63446,63750,64054,64358,64662,64966,65270,65574,65878,66182,66486,66790,67094,67398,67702,68006,68310,68614,68918,69222,69526,69830,70134,70438,70742,71046,71350,71654,71958,72262,72566,72870,73174,73478,73782,74086,74390,74694,74998,75302,75606,75910,76214,76518,76822,77126,77430,77734'/>
+  </group>
+  <group name='214'>
+    <ids val='215,519,823,1127,1431,1735,2039,2343,2647,2951,3255,3559,3863,4167,4471,4775,5079,5383,5687,5991,6295,6599,6903,7207,7511,7815,8119,8423,8727,9031,9335,9639,9943,10247,10551,10855,11159,11463,11767,12071,12375,12679,12983,13287,13591,13895,14199,14503,14807,15111,15415,15719,16023,16327,16631,16935,17239,17543,17847,18151,18455,18759,19063,19367,19671,19975,20279,20583,20887,21191,21495,21799,22103,22407,22711,23015,23319,23623,23927,24231,24535,24839,25143,25447,25751,26055,26359,26663,26967,27271,27575,27879,28183,28487,28791,29095,29399,29703,30007,30311,30615,30919,31223,31527,31831,32135,32439,32743,33047,33351,33655,33959,34263,34567,34871,35175,35479,35783,36087,36391,36695,36999,37303,37607,37911,38215,38519,38823,39127,39431,39735,40039,40343,40647,40951,41255,41559,41863,42167,42471,42775,43079,43383,43687,43991,44295,44599,44903,45207,45511,45815,46119,46423,46727,47031,47335,47639,47943,48247,48551,48855,49159,49463,49767,50071,50375,50679,50983,51287,51591,51895,52199,52503,52807,53111,53415,53719,54023,54327,54631,54935,55239,55543,55847,56151,56455,56759,57063,57367,57671,57975,58279,58583,58887,59191,59495,59799,60103,60407,60711,61015,61319,61623,61927,62231,62535,62839,63143,63447,63751,64055,64359,64663,64967,65271,65575,65879,66183,66487,66791,67095,67399,67703,68007,68311,68615,68919,69223,69527,69831,70135,70439,70743,71047,71351,71655,71959,72263,72567,72871,73175,73479,73783,74087,74391,74695,74999,75303,75607,75911,76215,76519,76823,77127,77431,77735'/>
+  </group>
+  <group name='215'>
+    <ids val='216,520,824,1128,1432,1736,2040,2344,2648,2952,3256,3560,3864,4168,4472,4776,5080,5384,5688,5992,6296,6600,6904,7208,7512,7816,8120,8424,8728,9032,9336,9640,9944,10248,10552,10856,11160,11464,11768,12072,12376,12680,12984,13288,13592,13896,14200,14504,14808,15112,15416,15720,16024,16328,16632,16936,17240,17544,17848,18152,18456,18760,19064,19368,19672,19976,20280,20584,20888,21192,21496,21800,22104,22408,22712,23016,23320,23624,23928,24232,24536,24840,25144,25448,25752,26056,26360,26664,26968,27272,27576,27880,28184,28488,28792,29096,29400,29704,30008,30312,30616,30920,31224,31528,31832,32136,32440,32744,33048,33352,33656,33960,34264,34568,34872,35176,35480,35784,36088,36392,36696,37000,37304,37608,37912,38216,38520,38824,39128,39432,39736,40040,40344,40648,40952,41256,41560,41864,42168,42472,42776,43080,43384,43688,43992,44296,44600,44904,45208,45512,45816,46120,46424,46728,47032,47336,47640,47944,48248,48552,48856,49160,49464,49768,50072,50376,50680,50984,51288,51592,51896,52200,52504,52808,53112,53416,53720,54024,54328,54632,54936,55240,55544,55848,56152,56456,56760,57064,57368,57672,57976,58280,58584,58888,59192,59496,59800,60104,60408,60712,61016,61320,61624,61928,62232,62536,62840,63144,63448,63752,64056,64360,64664,64968,65272,65576,65880,66184,66488,66792,67096,67400,67704,68008,68312,68616,68920,69224,69528,69832,70136,70440,70744,71048,71352,71656,71960,72264,72568,72872,73176,73480,73784,74088,74392,74696,75000,75304,75608,75912,76216,76520,76824,77128,77432,77736'/>
+  </group>
+  <group name='216'>
+    <ids val='217,521,825,1129,1433,1737,2041,2345,2649,2953,3257,3561,3865,4169,4473,4777,5081,5385,5689,5993,6297,6601,6905,7209,7513,7817,8121,8425,8729,9033,9337,9641,9945,10249,10553,10857,11161,11465,11769,12073,12377,12681,12985,13289,13593,13897,14201,14505,14809,15113,15417,15721,16025,16329,16633,16937,17241,17545,17849,18153,18457,18761,19065,19369,19673,19977,20281,20585,20889,21193,21497,21801,22105,22409,22713,23017,23321,23625,23929,24233,24537,24841,25145,25449,25753,26057,26361,26665,26969,27273,27577,27881,28185,28489,28793,29097,29401,29705,30009,30313,30617,30921,31225,31529,31833,32137,32441,32745,33049,33353,33657,33961,34265,34569,34873,35177,35481,35785,36089,36393,36697,37001,37305,37609,37913,38217,38521,38825,39129,39433,39737,40041,40345,40649,40953,41257,41561,41865,42169,42473,42777,43081,43385,43689,43993,44297,44601,44905,45209,45513,45817,46121,46425,46729,47033,47337,47641,47945,48249,48553,48857,49161,49465,49769,50073,50377,50681,50985,51289,51593,51897,52201,52505,52809,53113,53417,53721,54025,54329,54633,54937,55241,55545,55849,56153,56457,56761,57065,57369,57673,57977,58281,58585,58889,59193,59497,59801,60105,60409,60713,61017,61321,61625,61929,62233,62537,62841,63145,63449,63753,64057,64361,64665,64969,65273,65577,65881,66185,66489,66793,67097,67401,67705,68009,68313,68617,68921,69225,69529,69833,70137,70441,70745,71049,71353,71657,71961,72265,72569,72873,73177,73481,73785,74089,74393,74697,75001,75305,75609,75913,76217,76521,76825,77129,77433,77737'/>
+  </group>
+  <group name='217'>
+    <ids val='218,522,826,1130,1434,1738,2042,2346,2650,2954,3258,3562,3866,4170,4474,4778,5082,5386,5690,5994,6298,6602,6906,7210,7514,7818,8122,8426,8730,9034,9338,9642,9946,10250,10554,10858,11162,11466,11770,12074,12378,12682,12986,13290,13594,13898,14202,14506,14810,15114,15418,15722,16026,16330,16634,16938,17242,17546,17850,18154,18458,18762,19066,19370,19674,19978,20282,20586,20890,21194,21498,21802,22106,22410,22714,23018,23322,23626,23930,24234,24538,24842,25146,25450,25754,26058,26362,26666,26970,27274,27578,27882,28186,28490,28794,29098,29402,29706,30010,30314,30618,30922,31226,31530,31834,32138,32442,32746,33050,33354,33658,33962,34266,34570,34874,35178,35482,35786,36090,36394,36698,37002,37306,37610,37914,38218,38522,38826,39130,39434,39738,40042,40346,40650,40954,41258,41562,41866,42170,42474,42778,43082,43386,43690,43994,44298,44602,44906,45210,45514,45818,46122,46426,46730,47034,47338,47642,47946,48250,48554,48858,49162,49466,49770,50074,50378,50682,50986,51290,51594,51898,52202,52506,52810,53114,53418,53722,54026,54330,54634,54938,55242,55546,55850,56154,56458,56762,57066,57370,57674,57978,58282,58586,58890,59194,59498,59802,60106,60410,60714,61018,61322,61626,61930,62234,62538,62842,63146,63450,63754,64058,64362,64666,64970,65274,65578,65882,66186,66490,66794,67098,67402,67706,68010,68314,68618,68922,69226,69530,69834,70138,70442,70746,71050,71354,71658,71962,72266,72570,72874,73178,73482,73786,74090,74394,74698,75002,75306,75610,75914,76218,76522,76826,77130,77434,77738'/>
+  </group>
+  <group name='218'>
+    <ids val='219,523,827,1131,1435,1739,2043,2347,2651,2955,3259,3563,3867,4171,4475,4779,5083,5387,5691,5995,6299,6603,6907,7211,7515,7819,8123,8427,8731,9035,9339,9643,9947,10251,10555,10859,11163,11467,11771,12075,12379,12683,12987,13291,13595,13899,14203,14507,14811,15115,15419,15723,16027,16331,16635,16939,17243,17547,17851,18155,18459,18763,19067,19371,19675,19979,20283,20587,20891,21195,21499,21803,22107,22411,22715,23019,23323,23627,23931,24235,24539,24843,25147,25451,25755,26059,26363,26667,26971,27275,27579,27883,28187,28491,28795,29099,29403,29707,30011,30315,30619,30923,31227,31531,31835,32139,32443,32747,33051,33355,33659,33963,34267,34571,34875,35179,35483,35787,36091,36395,36699,37003,37307,37611,37915,38219,38523,38827,39131,39435,39739,40043,40347,40651,40955,41259,41563,41867,42171,42475,42779,43083,43387,43691,43995,44299,44603,44907,45211,45515,45819,46123,46427,46731,47035,47339,47643,47947,48251,48555,48859,49163,49467,49771,50075,50379,50683,50987,51291,51595,51899,52203,52507,52811,53115,53419,53723,54027,54331,54635,54939,55243,55547,55851,56155,56459,56763,57067,57371,57675,57979,58283,58587,58891,59195,59499,59803,60107,60411,60715,61019,61323,61627,61931,62235,62539,62843,63147,63451,63755,64059,64363,64667,64971,65275,65579,65883,66187,66491,66795,67099,67403,67707,68011,68315,68619,68923,69227,69531,69835,70139,70443,70747,71051,71355,71659,71963,72267,72571,72875,73179,73483,73787,74091,74395,74699,75003,75307,75611,75915,76219,76523,76827,77131,77435,77739'/>
+  </group>
+  <group name='219'>
+    <ids val='220,524,828,1132,1436,1740,2044,2348,2652,2956,3260,3564,3868,4172,4476,4780,5084,5388,5692,5996,6300,6604,6908,7212,7516,7820,8124,8428,8732,9036,9340,9644,9948,10252,10556,10860,11164,11468,11772,12076,12380,12684,12988,13292,13596,13900,14204,14508,14812,15116,15420,15724,16028,16332,16636,16940,17244,17548,17852,18156,18460,18764,19068,19372,19676,19980,20284,20588,20892,21196,21500,21804,22108,22412,22716,23020,23324,23628,23932,24236,24540,24844,25148,25452,25756,26060,26364,26668,26972,27276,27580,27884,28188,28492,28796,29100,29404,29708,30012,30316,30620,30924,31228,31532,31836,32140,32444,32748,33052,33356,33660,33964,34268,34572,34876,35180,35484,35788,36092,36396,36700,37004,37308,37612,37916,38220,38524,38828,39132,39436,39740,40044,40348,40652,40956,41260,41564,41868,42172,42476,42780,43084,43388,43692,43996,44300,44604,44908,45212,45516,45820,46124,46428,46732,47036,47340,47644,47948,48252,48556,48860,49164,49468,49772,50076,50380,50684,50988,51292,51596,51900,52204,52508,52812,53116,53420,53724,54028,54332,54636,54940,55244,55548,55852,56156,56460,56764,57068,57372,57676,57980,58284,58588,58892,59196,59500,59804,60108,60412,60716,61020,61324,61628,61932,62236,62540,62844,63148,63452,63756,64060,64364,64668,64972,65276,65580,65884,66188,66492,66796,67100,67404,67708,68012,68316,68620,68924,69228,69532,69836,70140,70444,70748,71052,71356,71660,71964,72268,72572,72876,73180,73484,73788,74092,74396,74700,75004,75308,75612,75916,76220,76524,76828,77132,77436,77740'/>
+  </group>
+  <group name='220'>
+    <ids val='221,525,829,1133,1437,1741,2045,2349,2653,2957,3261,3565,3869,4173,4477,4781,5085,5389,5693,5997,6301,6605,6909,7213,7517,7821,8125,8429,8733,9037,9341,9645,9949,10253,10557,10861,11165,11469,11773,12077,12381,12685,12989,13293,13597,13901,14205,14509,14813,15117,15421,15725,16029,16333,16637,16941,17245,17549,17853,18157,18461,18765,19069,19373,19677,19981,20285,20589,20893,21197,21501,21805,22109,22413,22717,23021,23325,23629,23933,24237,24541,24845,25149,25453,25757,26061,26365,26669,26973,27277,27581,27885,28189,28493,28797,29101,29405,29709,30013,30317,30621,30925,31229,31533,31837,32141,32445,32749,33053,33357,33661,33965,34269,34573,34877,35181,35485,35789,36093,36397,36701,37005,37309,37613,37917,38221,38525,38829,39133,39437,39741,40045,40349,40653,40957,41261,41565,41869,42173,42477,42781,43085,43389,43693,43997,44301,44605,44909,45213,45517,45821,46125,46429,46733,47037,47341,47645,47949,48253,48557,48861,49165,49469,49773,50077,50381,50685,50989,51293,51597,51901,52205,52509,52813,53117,53421,53725,54029,54333,54637,54941,55245,55549,55853,56157,56461,56765,57069,57373,57677,57981,58285,58589,58893,59197,59501,59805,60109,60413,60717,61021,61325,61629,61933,62237,62541,62845,63149,63453,63757,64061,64365,64669,64973,65277,65581,65885,66189,66493,66797,67101,67405,67709,68013,68317,68621,68925,69229,69533,69837,70141,70445,70749,71053,71357,71661,71965,72269,72573,72877,73181,73485,73789,74093,74397,74701,75005,75309,75613,75917,76221,76525,76829,77133,77437,77741'/>
+  </group>
+  <group name='221'>
+    <ids val='222,526,830,1134,1438,1742,2046,2350,2654,2958,3262,3566,3870,4174,4478,4782,5086,5390,5694,5998,6302,6606,6910,7214,7518,7822,8126,8430,8734,9038,9342,9646,9950,10254,10558,10862,11166,11470,11774,12078,12382,12686,12990,13294,13598,13902,14206,14510,14814,15118,15422,15726,16030,16334,16638,16942,17246,17550,17854,18158,18462,18766,19070,19374,19678,19982,20286,20590,20894,21198,21502,21806,22110,22414,22718,23022,23326,23630,23934,24238,24542,24846,25150,25454,25758,26062,26366,26670,26974,27278,27582,27886,28190,28494,28798,29102,29406,29710,30014,30318,30622,30926,31230,31534,31838,32142,32446,32750,33054,33358,33662,33966,34270,34574,34878,35182,35486,35790,36094,36398,36702,37006,37310,37614,37918,38222,38526,38830,39134,39438,39742,40046,40350,40654,40958,41262,41566,41870,42174,42478,42782,43086,43390,43694,43998,44302,44606,44910,45214,45518,45822,46126,46430,46734,47038,47342,47646,47950,48254,48558,48862,49166,49470,49774,50078,50382,50686,50990,51294,51598,51902,52206,52510,52814,53118,53422,53726,54030,54334,54638,54942,55246,55550,55854,56158,56462,56766,57070,57374,57678,57982,58286,58590,58894,59198,59502,59806,60110,60414,60718,61022,61326,61630,61934,62238,62542,62846,63150,63454,63758,64062,64366,64670,64974,65278,65582,65886,66190,66494,66798,67102,67406,67710,68014,68318,68622,68926,69230,69534,69838,70142,70446,70750,71054,71358,71662,71966,72270,72574,72878,73182,73486,73790,74094,74398,74702,75006,75310,75614,75918,76222,76526,76830,77134,77438,77742'/>
+  </group>
+  <group name='222'>
+    <ids val='223,527,831,1135,1439,1743,2047,2351,2655,2959,3263,3567,3871,4175,4479,4783,5087,5391,5695,5999,6303,6607,6911,7215,7519,7823,8127,8431,8735,9039,9343,9647,9951,10255,10559,10863,11167,11471,11775,12079,12383,12687,12991,13295,13599,13903,14207,14511,14815,15119,15423,15727,16031,16335,16639,16943,17247,17551,17855,18159,18463,18767,19071,19375,19679,19983,20287,20591,20895,21199,21503,21807,22111,22415,22719,23023,23327,23631,23935,24239,24543,24847,25151,25455,25759,26063,26367,26671,26975,27279,27583,27887,28191,28495,28799,29103,29407,29711,30015,30319,30623,30927,31231,31535,31839,32143,32447,32751,33055,33359,33663,33967,34271,34575,34879,35183,35487,35791,36095,36399,36703,37007,37311,37615,37919,38223,38527,38831,39135,39439,39743,40047,40351,40655,40959,41263,41567,41871,42175,42479,42783,43087,43391,43695,43999,44303,44607,44911,45215,45519,45823,46127,46431,46735,47039,47343,47647,47951,48255,48559,48863,49167,49471,49775,50079,50383,50687,50991,51295,51599,51903,52207,52511,52815,53119,53423,53727,54031,54335,54639,54943,55247,55551,55855,56159,56463,56767,57071,57375,57679,57983,58287,58591,58895,59199,59503,59807,60111,60415,60719,61023,61327,61631,61935,62239,62543,62847,63151,63455,63759,64063,64367,64671,64975,65279,65583,65887,66191,66495,66799,67103,67407,67711,68015,68319,68623,68927,69231,69535,69839,70143,70447,70751,71055,71359,71663,71967,72271,72575,72879,73183,73487,73791,74095,74399,74703,75007,75311,75615,75919,76223,76527,76831,77135,77439,77743'/>
+  </group>
+  <group name='223'>
+    <ids val='224,528,832,1136,1440,1744,2048,2352,2656,2960,3264,3568,3872,4176,4480,4784,5088,5392,5696,6000,6304,6608,6912,7216,7520,7824,8128,8432,8736,9040,9344,9648,9952,10256,10560,10864,11168,11472,11776,12080,12384,12688,12992,13296,13600,13904,14208,14512,14816,15120,15424,15728,16032,16336,16640,16944,17248,17552,17856,18160,18464,18768,19072,19376,19680,19984,20288,20592,20896,21200,21504,21808,22112,22416,22720,23024,23328,23632,23936,24240,24544,24848,25152,25456,25760,26064,26368,26672,26976,27280,27584,27888,28192,28496,28800,29104,29408,29712,30016,30320,30624,30928,31232,31536,31840,32144,32448,32752,33056,33360,33664,33968,34272,34576,34880,35184,35488,35792,36096,36400,36704,37008,37312,37616,37920,38224,38528,38832,39136,39440,39744,40048,40352,40656,40960,41264,41568,41872,42176,42480,42784,43088,43392,43696,44000,44304,44608,44912,45216,45520,45824,46128,46432,46736,47040,47344,47648,47952,48256,48560,48864,49168,49472,49776,50080,50384,50688,50992,51296,51600,51904,52208,52512,52816,53120,53424,53728,54032,54336,54640,54944,55248,55552,55856,56160,56464,56768,57072,57376,57680,57984,58288,58592,58896,59200,59504,59808,60112,60416,60720,61024,61328,61632,61936,62240,62544,62848,63152,63456,63760,64064,64368,64672,64976,65280,65584,65888,66192,66496,66800,67104,67408,67712,68016,68320,68624,68928,69232,69536,69840,70144,70448,70752,71056,71360,71664,71968,72272,72576,72880,73184,73488,73792,74096,74400,74704,75008,75312,75616,75920,76224,76528,76832,77136,77440,77744'/>
+  </group>
+  <group name='224'>
+    <ids val='225,529,833,1137,1441,1745,2049,2353,2657,2961,3265,3569,3873,4177,4481,4785,5089,5393,5697,6001,6305,6609,6913,7217,7521,7825,8129,8433,8737,9041,9345,9649,9953,10257,10561,10865,11169,11473,11777,12081,12385,12689,12993,13297,13601,13905,14209,14513,14817,15121,15425,15729,16033,16337,16641,16945,17249,17553,17857,18161,18465,18769,19073,19377,19681,19985,20289,20593,20897,21201,21505,21809,22113,22417,22721,23025,23329,23633,23937,24241,24545,24849,25153,25457,25761,26065,26369,26673,26977,27281,27585,27889,28193,28497,28801,29105,29409,29713,30017,30321,30625,30929,31233,31537,31841,32145,32449,32753,33057,33361,33665,33969,34273,34577,34881,35185,35489,35793,36097,36401,36705,37009,37313,37617,37921,38225,38529,38833,39137,39441,39745,40049,40353,40657,40961,41265,41569,41873,42177,42481,42785,43089,43393,43697,44001,44305,44609,44913,45217,45521,45825,46129,46433,46737,47041,47345,47649,47953,48257,48561,48865,49169,49473,49777,50081,50385,50689,50993,51297,51601,51905,52209,52513,52817,53121,53425,53729,54033,54337,54641,54945,55249,55553,55857,56161,56465,56769,57073,57377,57681,57985,58289,58593,58897,59201,59505,59809,60113,60417,60721,61025,61329,61633,61937,62241,62545,62849,63153,63457,63761,64065,64369,64673,64977,65281,65585,65889,66193,66497,66801,67105,67409,67713,68017,68321,68625,68929,69233,69537,69841,70145,70449,70753,71057,71361,71665,71969,72273,72577,72881,73185,73489,73793,74097,74401,74705,75009,75313,75617,75921,76225,76529,76833,77137,77441,77745'/>
+  </group>
+  <group name='225'>
+    <ids val='226,530,834,1138,1442,1746,2050,2354,2658,2962,3266,3570,3874,4178,4482,4786,5090,5394,5698,6002,6306,6610,6914,7218,7522,7826,8130,8434,8738,9042,9346,9650,9954,10258,10562,10866,11170,11474,11778,12082,12386,12690,12994,13298,13602,13906,14210,14514,14818,15122,15426,15730,16034,16338,16642,16946,17250,17554,17858,18162,18466,18770,19074,19378,19682,19986,20290,20594,20898,21202,21506,21810,22114,22418,22722,23026,23330,23634,23938,24242,24546,24850,25154,25458,25762,26066,26370,26674,26978,27282,27586,27890,28194,28498,28802,29106,29410,29714,30018,30322,30626,30930,31234,31538,31842,32146,32450,32754,33058,33362,33666,33970,34274,34578,34882,35186,35490,35794,36098,36402,36706,37010,37314,37618,37922,38226,38530,38834,39138,39442,39746,40050,40354,40658,40962,41266,41570,41874,42178,42482,42786,43090,43394,43698,44002,44306,44610,44914,45218,45522,45826,46130,46434,46738,47042,47346,47650,47954,48258,48562,48866,49170,49474,49778,50082,50386,50690,50994,51298,51602,51906,52210,52514,52818,53122,53426,53730,54034,54338,54642,54946,55250,55554,55858,56162,56466,56770,57074,57378,57682,57986,58290,58594,58898,59202,59506,59810,60114,60418,60722,61026,61330,61634,61938,62242,62546,62850,63154,63458,63762,64066,64370,64674,64978,65282,65586,65890,66194,66498,66802,67106,67410,67714,68018,68322,68626,68930,69234,69538,69842,70146,70450,70754,71058,71362,71666,71970,72274,72578,72882,73186,73490,73794,74098,74402,74706,75010,75314,75618,75922,76226,76530,76834,77138,77442,77746'/>
+  </group>
+  <group name='226'>
+    <ids val='227,531,835,1139,1443,1747,2051,2355,2659,2963,3267,3571,3875,4179,4483,4787,5091,5395,5699,6003,6307,6611,6915,7219,7523,7827,8131,8435,8739,9043,9347,9651,9955,10259,10563,10867,11171,11475,11779,12083,12387,12691,12995,13299,13603,13907,14211,14515,14819,15123,15427,15731,16035,16339,16643,16947,17251,17555,17859,18163,18467,18771,19075,19379,19683,19987,20291,20595,20899,21203,21507,21811,22115,22419,22723,23027,23331,23635,23939,24243,24547,24851,25155,25459,25763,26067,26371,26675,26979,27283,27587,27891,28195,28499,28803,29107,29411,29715,30019,30323,30627,30931,31235,31539,31843,32147,32451,32755,33059,33363,33667,33971,34275,34579,34883,35187,35491,35795,36099,36403,36707,37011,37315,37619,37923,38227,38531,38835,39139,39443,39747,40051,40355,40659,40963,41267,41571,41875,42179,42483,42787,43091,43395,43699,44003,44307,44611,44915,45219,45523,45827,46131,46435,46739,47043,47347,47651,47955,48259,48563,48867,49171,49475,49779,50083,50387,50691,50995,51299,51603,51907,52211,52515,52819,53123,53427,53731,54035,54339,54643,54947,55251,55555,55859,56163,56467,56771,57075,57379,57683,57987,58291,58595,58899,59203,59507,59811,60115,60419,60723,61027,61331,61635,61939,62243,62547,62851,63155,63459,63763,64067,64371,64675,64979,65283,65587,65891,66195,66499,66803,67107,67411,67715,68019,68323,68627,68931,69235,69539,69843,70147,70451,70755,71059,71363,71667,71971,72275,72579,72883,73187,73491,73795,74099,74403,74707,75011,75315,75619,75923,76227,76531,76835,77139,77443,77747'/>
+  </group>
+  <group name='227'>
+    <ids val='228,532,836,1140,1444,1748,2052,2356,2660,2964,3268,3572,3876,4180,4484,4788,5092,5396,5700,6004,6308,6612,6916,7220,7524,7828,8132,8436,8740,9044,9348,9652,9956,10260,10564,10868,11172,11476,11780,12084,12388,12692,12996,13300,13604,13908,14212,14516,14820,15124,15428,15732,16036,16340,16644,16948,17252,17556,17860,18164,18468,18772,19076,19380,19684,19988,20292,20596,20900,21204,21508,21812,22116,22420,22724,23028,23332,23636,23940,24244,24548,24852,25156,25460,25764,26068,26372,26676,26980,27284,27588,27892,28196,28500,28804,29108,29412,29716,30020,30324,30628,30932,31236,31540,31844,32148,32452,32756,33060,33364,33668,33972,34276,34580,34884,35188,35492,35796,36100,36404,36708,37012,37316,37620,37924,38228,38532,38836,39140,39444,39748,40052,40356,40660,40964,41268,41572,41876,42180,42484,42788,43092,43396,43700,44004,44308,44612,44916,45220,45524,45828,46132,46436,46740,47044,47348,47652,47956,48260,48564,48868,49172,49476,49780,50084,50388,50692,50996,51300,51604,51908,52212,52516,52820,53124,53428,53732,54036,54340,54644,54948,55252,55556,55860,56164,56468,56772,57076,57380,57684,57988,58292,58596,58900,59204,59508,59812,60116,60420,60724,61028,61332,61636,61940,62244,62548,62852,63156,63460,63764,64068,64372,64676,64980,65284,65588,65892,66196,66500,66804,67108,67412,67716,68020,68324,68628,68932,69236,69540,69844,70148,70452,70756,71060,71364,71668,71972,72276,72580,72884,73188,73492,73796,74100,74404,74708,75012,75316,75620,75924,76228,76532,76836,77140,77444,77748'/>
+  </group>
+  <group name='228'>
+    <ids val='229,533,837,1141,1445,1749,2053,2357,2661,2965,3269,3573,3877,4181,4485,4789,5093,5397,5701,6005,6309,6613,6917,7221,7525,7829,8133,8437,8741,9045,9349,9653,9957,10261,10565,10869,11173,11477,11781,12085,12389,12693,12997,13301,13605,13909,14213,14517,14821,15125,15429,15733,16037,16341,16645,16949,17253,17557,17861,18165,18469,18773,19077,19381,19685,19989,20293,20597,20901,21205,21509,21813,22117,22421,22725,23029,23333,23637,23941,24245,24549,24853,25157,25461,25765,26069,26373,26677,26981,27285,27589,27893,28197,28501,28805,29109,29413,29717,30021,30325,30629,30933,31237,31541,31845,32149,32453,32757,33061,33365,33669,33973,34277,34581,34885,35189,35493,35797,36101,36405,36709,37013,37317,37621,37925,38229,38533,38837,39141,39445,39749,40053,40357,40661,40965,41269,41573,41877,42181,42485,42789,43093,43397,43701,44005,44309,44613,44917,45221,45525,45829,46133,46437,46741,47045,47349,47653,47957,48261,48565,48869,49173,49477,49781,50085,50389,50693,50997,51301,51605,51909,52213,52517,52821,53125,53429,53733,54037,54341,54645,54949,55253,55557,55861,56165,56469,56773,57077,57381,57685,57989,58293,58597,58901,59205,59509,59813,60117,60421,60725,61029,61333,61637,61941,62245,62549,62853,63157,63461,63765,64069,64373,64677,64981,65285,65589,65893,66197,66501,66805,67109,67413,67717,68021,68325,68629,68933,69237,69541,69845,70149,70453,70757,71061,71365,71669,71973,72277,72581,72885,73189,73493,73797,74101,74405,74709,75013,75317,75621,75925,76229,76533,76837,77141,77445,77749'/>
+  </group>
+  <group name='229'>
+    <ids val='230,534,838,1142,1446,1750,2054,2358,2662,2966,3270,3574,3878,4182,4486,4790,5094,5398,5702,6006,6310,6614,6918,7222,7526,7830,8134,8438,8742,9046,9350,9654,9958,10262,10566,10870,11174,11478,11782,12086,12390,12694,12998,13302,13606,13910,14214,14518,14822,15126,15430,15734,16038,16342,16646,16950,17254,17558,17862,18166,18470,18774,19078,19382,19686,19990,20294,20598,20902,21206,21510,21814,22118,22422,22726,23030,23334,23638,23942,24246,24550,24854,25158,25462,25766,26070,26374,26678,26982,27286,27590,27894,28198,28502,28806,29110,29414,29718,30022,30326,30630,30934,31238,31542,31846,32150,32454,32758,33062,33366,33670,33974,34278,34582,34886,35190,35494,35798,36102,36406,36710,37014,37318,37622,37926,38230,38534,38838,39142,39446,39750,40054,40358,40662,40966,41270,41574,41878,42182,42486,42790,43094,43398,43702,44006,44310,44614,44918,45222,45526,45830,46134,46438,46742,47046,47350,47654,47958,48262,48566,48870,49174,49478,49782,50086,50390,50694,50998,51302,51606,51910,52214,52518,52822,53126,53430,53734,54038,54342,54646,54950,55254,55558,55862,56166,56470,56774,57078,57382,57686,57990,58294,58598,58902,59206,59510,59814,60118,60422,60726,61030,61334,61638,61942,62246,62550,62854,63158,63462,63766,64070,64374,64678,64982,65286,65590,65894,66198,66502,66806,67110,67414,67718,68022,68326,68630,68934,69238,69542,69846,70150,70454,70758,71062,71366,71670,71974,72278,72582,72886,73190,73494,73798,74102,74406,74710,75014,75318,75622,75926,76230,76534,76838,77142,77446,77750'/>
+  </group>
+  <group name='230'>
+    <ids val='231,535,839,1143,1447,1751,2055,2359,2663,2967,3271,3575,3879,4183,4487,4791,5095,5399,5703,6007,6311,6615,6919,7223,7527,7831,8135,8439,8743,9047,9351,9655,9959,10263,10567,10871,11175,11479,11783,12087,12391,12695,12999,13303,13607,13911,14215,14519,14823,15127,15431,15735,16039,16343,16647,16951,17255,17559,17863,18167,18471,18775,19079,19383,19687,19991,20295,20599,20903,21207,21511,21815,22119,22423,22727,23031,23335,23639,23943,24247,24551,24855,25159,25463,25767,26071,26375,26679,26983,27287,27591,27895,28199,28503,28807,29111,29415,29719,30023,30327,30631,30935,31239,31543,31847,32151,32455,32759,33063,33367,33671,33975,34279,34583,34887,35191,35495,35799,36103,36407,36711,37015,37319,37623,37927,38231,38535,38839,39143,39447,39751,40055,40359,40663,40967,41271,41575,41879,42183,42487,42791,43095,43399,43703,44007,44311,44615,44919,45223,45527,45831,46135,46439,46743,47047,47351,47655,47959,48263,48567,48871,49175,49479,49783,50087,50391,50695,50999,51303,51607,51911,52215,52519,52823,53127,53431,53735,54039,54343,54647,54951,55255,55559,55863,56167,56471,56775,57079,57383,57687,57991,58295,58599,58903,59207,59511,59815,60119,60423,60727,61031,61335,61639,61943,62247,62551,62855,63159,63463,63767,64071,64375,64679,64983,65287,65591,65895,66199,66503,66807,67111,67415,67719,68023,68327,68631,68935,69239,69543,69847,70151,70455,70759,71063,71367,71671,71975,72279,72583,72887,73191,73495,73799,74103,74407,74711,75015,75319,75623,75927,76231,76535,76839,77143,77447,77751'/>
+  </group>
+  <group name='231'>
+    <ids val='232,536,840,1144,1448,1752,2056,2360,2664,2968,3272,3576,3880,4184,4488,4792,5096,5400,5704,6008,6312,6616,6920,7224,7528,7832,8136,8440,8744,9048,9352,9656,9960,10264,10568,10872,11176,11480,11784,12088,12392,12696,13000,13304,13608,13912,14216,14520,14824,15128,15432,15736,16040,16344,16648,16952,17256,17560,17864,18168,18472,18776,19080,19384,19688,19992,20296,20600,20904,21208,21512,21816,22120,22424,22728,23032,23336,23640,23944,24248,24552,24856,25160,25464,25768,26072,26376,26680,26984,27288,27592,27896,28200,28504,28808,29112,29416,29720,30024,30328,30632,30936,31240,31544,31848,32152,32456,32760,33064,33368,33672,33976,34280,34584,34888,35192,35496,35800,36104,36408,36712,37016,37320,37624,37928,38232,38536,38840,39144,39448,39752,40056,40360,40664,40968,41272,41576,41880,42184,42488,42792,43096,43400,43704,44008,44312,44616,44920,45224,45528,45832,46136,46440,46744,47048,47352,47656,47960,48264,48568,48872,49176,49480,49784,50088,50392,50696,51000,51304,51608,51912,52216,52520,52824,53128,53432,53736,54040,54344,54648,54952,55256,55560,55864,56168,56472,56776,57080,57384,57688,57992,58296,58600,58904,59208,59512,59816,60120,60424,60728,61032,61336,61640,61944,62248,62552,62856,63160,63464,63768,64072,64376,64680,64984,65288,65592,65896,66200,66504,66808,67112,67416,67720,68024,68328,68632,68936,69240,69544,69848,70152,70456,70760,71064,71368,71672,71976,72280,72584,72888,73192,73496,73800,74104,74408,74712,75016,75320,75624,75928,76232,76536,76840,77144,77448,77752'/>
+  </group>
+  <group name='232'>
+    <ids val='233,537,841,1145,1449,1753,2057,2361,2665,2969,3273,3577,3881,4185,4489,4793,5097,5401,5705,6009,6313,6617,6921,7225,7529,7833,8137,8441,8745,9049,9353,9657,9961,10265,10569,10873,11177,11481,11785,12089,12393,12697,13001,13305,13609,13913,14217,14521,14825,15129,15433,15737,16041,16345,16649,16953,17257,17561,17865,18169,18473,18777,19081,19385,19689,19993,20297,20601,20905,21209,21513,21817,22121,22425,22729,23033,23337,23641,23945,24249,24553,24857,25161,25465,25769,26073,26377,26681,26985,27289,27593,27897,28201,28505,28809,29113,29417,29721,30025,30329,30633,30937,31241,31545,31849,32153,32457,32761,33065,33369,33673,33977,34281,34585,34889,35193,35497,35801,36105,36409,36713,37017,37321,37625,37929,38233,38537,38841,39145,39449,39753,40057,40361,40665,40969,41273,41577,41881,42185,42489,42793,43097,43401,43705,44009,44313,44617,44921,45225,45529,45833,46137,46441,46745,47049,47353,47657,47961,48265,48569,48873,49177,49481,49785,50089,50393,50697,51001,51305,51609,51913,52217,52521,52825,53129,53433,53737,54041,54345,54649,54953,55257,55561,55865,56169,56473,56777,57081,57385,57689,57993,58297,58601,58905,59209,59513,59817,60121,60425,60729,61033,61337,61641,61945,62249,62553,62857,63161,63465,63769,64073,64377,64681,64985,65289,65593,65897,66201,66505,66809,67113,67417,67721,68025,68329,68633,68937,69241,69545,69849,70153,70457,70761,71065,71369,71673,71977,72281,72585,72889,73193,73497,73801,74105,74409,74713,75017,75321,75625,75929,76233,76537,76841,77145,77449,77753'/>
+  </group>
+  <group name='233'>
+    <ids val='234,538,842,1146,1450,1754,2058,2362,2666,2970,3274,3578,3882,4186,4490,4794,5098,5402,5706,6010,6314,6618,6922,7226,7530,7834,8138,8442,8746,9050,9354,9658,9962,10266,10570,10874,11178,11482,11786,12090,12394,12698,13002,13306,13610,13914,14218,14522,14826,15130,15434,15738,16042,16346,16650,16954,17258,17562,17866,18170,18474,18778,19082,19386,19690,19994,20298,20602,20906,21210,21514,21818,22122,22426,22730,23034,23338,23642,23946,24250,24554,24858,25162,25466,25770,26074,26378,26682,26986,27290,27594,27898,28202,28506,28810,29114,29418,29722,30026,30330,30634,30938,31242,31546,31850,32154,32458,32762,33066,33370,33674,33978,34282,34586,34890,35194,35498,35802,36106,36410,36714,37018,37322,37626,37930,38234,38538,38842,39146,39450,39754,40058,40362,40666,40970,41274,41578,41882,42186,42490,42794,43098,43402,43706,44010,44314,44618,44922,45226,45530,45834,46138,46442,46746,47050,47354,47658,47962,48266,48570,48874,49178,49482,49786,50090,50394,50698,51002,51306,51610,51914,52218,52522,52826,53130,53434,53738,54042,54346,54650,54954,55258,55562,55866,56170,56474,56778,57082,57386,57690,57994,58298,58602,58906,59210,59514,59818,60122,60426,60730,61034,61338,61642,61946,62250,62554,62858,63162,63466,63770,64074,64378,64682,64986,65290,65594,65898,66202,66506,66810,67114,67418,67722,68026,68330,68634,68938,69242,69546,69850,70154,70458,70762,71066,71370,71674,71978,72282,72586,72890,73194,73498,73802,74106,74410,74714,75018,75322,75626,75930,76234,76538,76842,77146,77450,77754'/>
+  </group>
+  <group name='234'>
+    <ids val='235,539,843,1147,1451,1755,2059,2363,2667,2971,3275,3579,3883,4187,4491,4795,5099,5403,5707,6011,6315,6619,6923,7227,7531,7835,8139,8443,8747,9051,9355,9659,9963,10267,10571,10875,11179,11483,11787,12091,12395,12699,13003,13307,13611,13915,14219,14523,14827,15131,15435,15739,16043,16347,16651,16955,17259,17563,17867,18171,18475,18779,19083,19387,19691,19995,20299,20603,20907,21211,21515,21819,22123,22427,22731,23035,23339,23643,23947,24251,24555,24859,25163,25467,25771,26075,26379,26683,26987,27291,27595,27899,28203,28507,28811,29115,29419,29723,30027,30331,30635,30939,31243,31547,31851,32155,32459,32763,33067,33371,33675,33979,34283,34587,34891,35195,35499,35803,36107,36411,36715,37019,37323,37627,37931,38235,38539,38843,39147,39451,39755,40059,40363,40667,40971,41275,41579,41883,42187,42491,42795,43099,43403,43707,44011,44315,44619,44923,45227,45531,45835,46139,46443,46747,47051,47355,47659,47963,48267,48571,48875,49179,49483,49787,50091,50395,50699,51003,51307,51611,51915,52219,52523,52827,53131,53435,53739,54043,54347,54651,54955,55259,55563,55867,56171,56475,56779,57083,57387,57691,57995,58299,58603,58907,59211,59515,59819,60123,60427,60731,61035,61339,61643,61947,62251,62555,62859,63163,63467,63771,64075,64379,64683,64987,65291,65595,65899,66203,66507,66811,67115,67419,67723,68027,68331,68635,68939,69243,69547,69851,70155,70459,70763,71067,71371,71675,71979,72283,72587,72891,73195,73499,73803,74107,74411,74715,75019,75323,75627,75931,76235,76539,76843,77147,77451,77755'/>
+  </group>
+  <group name='235'>
+    <ids val='236,540,844,1148,1452,1756,2060,2364,2668,2972,3276,3580,3884,4188,4492,4796,5100,5404,5708,6012,6316,6620,6924,7228,7532,7836,8140,8444,8748,9052,9356,9660,9964,10268,10572,10876,11180,11484,11788,12092,12396,12700,13004,13308,13612,13916,14220,14524,14828,15132,15436,15740,16044,16348,16652,16956,17260,17564,17868,18172,18476,18780,19084,19388,19692,19996,20300,20604,20908,21212,21516,21820,22124,22428,22732,23036,23340,23644,23948,24252,24556,24860,25164,25468,25772,26076,26380,26684,26988,27292,27596,27900,28204,28508,28812,29116,29420,29724,30028,30332,30636,30940,31244,31548,31852,32156,32460,32764,33068,33372,33676,33980,34284,34588,34892,35196,35500,35804,36108,36412,36716,37020,37324,37628,37932,38236,38540,38844,39148,39452,39756,40060,40364,40668,40972,41276,41580,41884,42188,42492,42796,43100,43404,43708,44012,44316,44620,44924,45228,45532,45836,46140,46444,46748,47052,47356,47660,47964,48268,48572,48876,49180,49484,49788,50092,50396,50700,51004,51308,51612,51916,52220,52524,52828,53132,53436,53740,54044,54348,54652,54956,55260,55564,55868,56172,56476,56780,57084,57388,57692,57996,58300,58604,58908,59212,59516,59820,60124,60428,60732,61036,61340,61644,61948,62252,62556,62860,63164,63468,63772,64076,64380,64684,64988,65292,65596,65900,66204,66508,66812,67116,67420,67724,68028,68332,68636,68940,69244,69548,69852,70156,70460,70764,71068,71372,71676,71980,72284,72588,72892,73196,73500,73804,74108,74412,74716,75020,75324,75628,75932,76236,76540,76844,77148,77452,77756'/>
+  </group>
+  <group name='236'>
+    <ids val='237,541,845,1149,1453,1757,2061,2365,2669,2973,3277,3581,3885,4189,4493,4797,5101,5405,5709,6013,6317,6621,6925,7229,7533,7837,8141,8445,8749,9053,9357,9661,9965,10269,10573,10877,11181,11485,11789,12093,12397,12701,13005,13309,13613,13917,14221,14525,14829,15133,15437,15741,16045,16349,16653,16957,17261,17565,17869,18173,18477,18781,19085,19389,19693,19997,20301,20605,20909,21213,21517,21821,22125,22429,22733,23037,23341,23645,23949,24253,24557,24861,25165,25469,25773,26077,26381,26685,26989,27293,27597,27901,28205,28509,28813,29117,29421,29725,30029,30333,30637,30941,31245,31549,31853,32157,32461,32765,33069,33373,33677,33981,34285,34589,34893,35197,35501,35805,36109,36413,36717,37021,37325,37629,37933,38237,38541,38845,39149,39453,39757,40061,40365,40669,40973,41277,41581,41885,42189,42493,42797,43101,43405,43709,44013,44317,44621,44925,45229,45533,45837,46141,46445,46749,47053,47357,47661,47965,48269,48573,48877,49181,49485,49789,50093,50397,50701,51005,51309,51613,51917,52221,52525,52829,53133,53437,53741,54045,54349,54653,54957,55261,55565,55869,56173,56477,56781,57085,57389,57693,57997,58301,58605,58909,59213,59517,59821,60125,60429,60733,61037,61341,61645,61949,62253,62557,62861,63165,63469,63773,64077,64381,64685,64989,65293,65597,65901,66205,66509,66813,67117,67421,67725,68029,68333,68637,68941,69245,69549,69853,70157,70461,70765,71069,71373,71677,71981,72285,72589,72893,73197,73501,73805,74109,74413,74717,75021,75325,75629,75933,76237,76541,76845,77149,77453,77757'/>
+  </group>
+  <group name='237'>
+    <ids val='238,542,846,1150,1454,1758,2062,2366,2670,2974,3278,3582,3886,4190,4494,4798,5102,5406,5710,6014,6318,6622,6926,7230,7534,7838,8142,8446,8750,9054,9358,9662,9966,10270,10574,10878,11182,11486,11790,12094,12398,12702,13006,13310,13614,13918,14222,14526,14830,15134,15438,15742,16046,16350,16654,16958,17262,17566,17870,18174,18478,18782,19086,19390,19694,19998,20302,20606,20910,21214,21518,21822,22126,22430,22734,23038,23342,23646,23950,24254,24558,24862,25166,25470,25774,26078,26382,26686,26990,27294,27598,27902,28206,28510,28814,29118,29422,29726,30030,30334,30638,30942,31246,31550,31854,32158,32462,32766,33070,33374,33678,33982,34286,34590,34894,35198,35502,35806,36110,36414,36718,37022,37326,37630,37934,38238,38542,38846,39150,39454,39758,40062,40366,40670,40974,41278,41582,41886,42190,42494,42798,43102,43406,43710,44014,44318,44622,44926,45230,45534,45838,46142,46446,46750,47054,47358,47662,47966,48270,48574,48878,49182,49486,49790,50094,50398,50702,51006,51310,51614,51918,52222,52526,52830,53134,53438,53742,54046,54350,54654,54958,55262,55566,55870,56174,56478,56782,57086,57390,57694,57998,58302,58606,58910,59214,59518,59822,60126,60430,60734,61038,61342,61646,61950,62254,62558,62862,63166,63470,63774,64078,64382,64686,64990,65294,65598,65902,66206,66510,66814,67118,67422,67726,68030,68334,68638,68942,69246,69550,69854,70158,70462,70766,71070,71374,71678,71982,72286,72590,72894,73198,73502,73806,74110,74414,74718,75022,75326,75630,75934,76238,76542,76846,77150,77454,77758'/>
+  </group>
+  <group name='238'>
+    <ids val='239,543,847,1151,1455,1759,2063,2367,2671,2975,3279,3583,3887,4191,4495,4799,5103,5407,5711,6015,6319,6623,6927,7231,7535,7839,8143,8447,8751,9055,9359,9663,9967,10271,10575,10879,11183,11487,11791,12095,12399,12703,13007,13311,13615,13919,14223,14527,14831,15135,15439,15743,16047,16351,16655,16959,17263,17567,17871,18175,18479,18783,19087,19391,19695,19999,20303,20607,20911,21215,21519,21823,22127,22431,22735,23039,23343,23647,23951,24255,24559,24863,25167,25471,25775,26079,26383,26687,26991,27295,27599,27903,28207,28511,28815,29119,29423,29727,30031,30335,30639,30943,31247,31551,31855,32159,32463,32767,33071,33375,33679,33983,34287,34591,34895,35199,35503,35807,36111,36415,36719,37023,37327,37631,37935,38239,38543,38847,39151,39455,39759,40063,40367,40671,40975,41279,41583,41887,42191,42495,42799,43103,43407,43711,44015,44319,44623,44927,45231,45535,45839,46143,46447,46751,47055,47359,47663,47967,48271,48575,48879,49183,49487,49791,50095,50399,50703,51007,51311,51615,51919,52223,52527,52831,53135,53439,53743,54047,54351,54655,54959,55263,55567,55871,56175,56479,56783,57087,57391,57695,57999,58303,58607,58911,59215,59519,59823,60127,60431,60735,61039,61343,61647,61951,62255,62559,62863,63167,63471,63775,64079,64383,64687,64991,65295,65599,65903,66207,66511,66815,67119,67423,67727,68031,68335,68639,68943,69247,69551,69855,70159,70463,70767,71071,71375,71679,71983,72287,72591,72895,73199,73503,73807,74111,74415,74719,75023,75327,75631,75935,76239,76543,76847,77151,77455,77759'/>
+  </group>
+  <group name='239'>
+    <ids val='240,544,848,1152,1456,1760,2064,2368,2672,2976,3280,3584,3888,4192,4496,4800,5104,5408,5712,6016,6320,6624,6928,7232,7536,7840,8144,8448,8752,9056,9360,9664,9968,10272,10576,10880,11184,11488,11792,12096,12400,12704,13008,13312,13616,13920,14224,14528,14832,15136,15440,15744,16048,16352,16656,16960,17264,17568,17872,18176,18480,18784,19088,19392,19696,20000,20304,20608,20912,21216,21520,21824,22128,22432,22736,23040,23344,23648,23952,24256,24560,24864,25168,25472,25776,26080,26384,26688,26992,27296,27600,27904,28208,28512,28816,29120,29424,29728,30032,30336,30640,30944,31248,31552,31856,32160,32464,32768,33072,33376,33680,33984,34288,34592,34896,35200,35504,35808,36112,36416,36720,37024,37328,37632,37936,38240,38544,38848,39152,39456,39760,40064,40368,40672,40976,41280,41584,41888,42192,42496,42800,43104,43408,43712,44016,44320,44624,44928,45232,45536,45840,46144,46448,46752,47056,47360,47664,47968,48272,48576,48880,49184,49488,49792,50096,50400,50704,51008,51312,51616,51920,52224,52528,52832,53136,53440,53744,54048,54352,54656,54960,55264,55568,55872,56176,56480,56784,57088,57392,57696,58000,58304,58608,58912,59216,59520,59824,60128,60432,60736,61040,61344,61648,61952,62256,62560,62864,63168,63472,63776,64080,64384,64688,64992,65296,65600,65904,66208,66512,66816,67120,67424,67728,68032,68336,68640,68944,69248,69552,69856,70160,70464,70768,71072,71376,71680,71984,72288,72592,72896,73200,73504,73808,74112,74416,74720,75024,75328,75632,75936,76240,76544,76848,77152,77456,77760'/>
+  </group>
+  <group name='240'>
+    <ids val='241,545,849,1153,1457,1761,2065,2369,2673,2977,3281,3585,3889,4193,4497,4801,5105,5409,5713,6017,6321,6625,6929,7233,7537,7841,8145,8449,8753,9057,9361,9665,9969,10273,10577,10881,11185,11489,11793,12097,12401,12705,13009,13313,13617,13921,14225,14529,14833,15137,15441,15745,16049,16353,16657,16961,17265,17569,17873,18177,18481,18785,19089,19393,19697,20001,20305,20609,20913,21217,21521,21825,22129,22433,22737,23041,23345,23649,23953,24257,24561,24865,25169,25473,25777,26081,26385,26689,26993,27297,27601,27905,28209,28513,28817,29121,29425,29729,30033,30337,30641,30945,31249,31553,31857,32161,32465,32769,33073,33377,33681,33985,34289,34593,34897,35201,35505,35809,36113,36417,36721,37025,37329,37633,37937,38241,38545,38849,39153,39457,39761,40065,40369,40673,40977,41281,41585,41889,42193,42497,42801,43105,43409,43713,44017,44321,44625,44929,45233,45537,45841,46145,46449,46753,47057,47361,47665,47969,48273,48577,48881,49185,49489,49793,50097,50401,50705,51009,51313,51617,51921,52225,52529,52833,53137,53441,53745,54049,54353,54657,54961,55265,55569,55873,56177,56481,56785,57089,57393,57697,58001,58305,58609,58913,59217,59521,59825,60129,60433,60737,61041,61345,61649,61953,62257,62561,62865,63169,63473,63777,64081,64385,64689,64993,65297,65601,65905,66209,66513,66817,67121,67425,67729,68033,68337,68641,68945,69249,69553,69857,70161,70465,70769,71073,71377,71681,71985,72289,72593,72897,73201,73505,73809,74113,74417,74721,75025,75329,75633,75937,76241,76545,76849,77153,77457,77761'/>
+  </group>
+  <group name='241'>
+    <ids val='242,546,850,1154,1458,1762,2066,2370,2674,2978,3282,3586,3890,4194,4498,4802,5106,5410,5714,6018,6322,6626,6930,7234,7538,7842,8146,8450,8754,9058,9362,9666,9970,10274,10578,10882,11186,11490,11794,12098,12402,12706,13010,13314,13618,13922,14226,14530,14834,15138,15442,15746,16050,16354,16658,16962,17266,17570,17874,18178,18482,18786,19090,19394,19698,20002,20306,20610,20914,21218,21522,21826,22130,22434,22738,23042,23346,23650,23954,24258,24562,24866,25170,25474,25778,26082,26386,26690,26994,27298,27602,27906,28210,28514,28818,29122,29426,29730,30034,30338,30642,30946,31250,31554,31858,32162,32466,32770,33074,33378,33682,33986,34290,34594,34898,35202,35506,35810,36114,36418,36722,37026,37330,37634,37938,38242,38546,38850,39154,39458,39762,40066,40370,40674,40978,41282,41586,41890,42194,42498,42802,43106,43410,43714,44018,44322,44626,44930,45234,45538,45842,46146,46450,46754,47058,47362,47666,47970,48274,48578,48882,49186,49490,49794,50098,50402,50706,51010,51314,51618,51922,52226,52530,52834,53138,53442,53746,54050,54354,54658,54962,55266,55570,55874,56178,56482,56786,57090,57394,57698,58002,58306,58610,58914,59218,59522,59826,60130,60434,60738,61042,61346,61650,61954,62258,62562,62866,63170,63474,63778,64082,64386,64690,64994,65298,65602,65906,66210,66514,66818,67122,67426,67730,68034,68338,68642,68946,69250,69554,69858,70162,70466,70770,71074,71378,71682,71986,72290,72594,72898,73202,73506,73810,74114,74418,74722,75026,75330,75634,75938,76242,76546,76850,77154,77458,77762'/>
+  </group>
+  <group name='242'>
+    <ids val='243,547,851,1155,1459,1763,2067,2371,2675,2979,3283,3587,3891,4195,4499,4803,5107,5411,5715,6019,6323,6627,6931,7235,7539,7843,8147,8451,8755,9059,9363,9667,9971,10275,10579,10883,11187,11491,11795,12099,12403,12707,13011,13315,13619,13923,14227,14531,14835,15139,15443,15747,16051,16355,16659,16963,17267,17571,17875,18179,18483,18787,19091,19395,19699,20003,20307,20611,20915,21219,21523,21827,22131,22435,22739,23043,23347,23651,23955,24259,24563,24867,25171,25475,25779,26083,26387,26691,26995,27299,27603,27907,28211,28515,28819,29123,29427,29731,30035,30339,30643,30947,31251,31555,31859,32163,32467,32771,33075,33379,33683,33987,34291,34595,34899,35203,35507,35811,36115,36419,36723,37027,37331,37635,37939,38243,38547,38851,39155,39459,39763,40067,40371,40675,40979,41283,41587,41891,42195,42499,42803,43107,43411,43715,44019,44323,44627,44931,45235,45539,45843,46147,46451,46755,47059,47363,47667,47971,48275,48579,48883,49187,49491,49795,50099,50403,50707,51011,51315,51619,51923,52227,52531,52835,53139,53443,53747,54051,54355,54659,54963,55267,55571,55875,56179,56483,56787,57091,57395,57699,58003,58307,58611,58915,59219,59523,59827,60131,60435,60739,61043,61347,61651,61955,62259,62563,62867,63171,63475,63779,64083,64387,64691,64995,65299,65603,65907,66211,66515,66819,67123,67427,67731,68035,68339,68643,68947,69251,69555,69859,70163,70467,70771,71075,71379,71683,71987,72291,72595,72899,73203,73507,73811,74115,74419,74723,75027,75331,75635,75939,76243,76547,76851,77155,77459,77763'/>
+  </group>
+  <group name='243'>
+    <ids val='244,548,852,1156,1460,1764,2068,2372,2676,2980,3284,3588,3892,4196,4500,4804,5108,5412,5716,6020,6324,6628,6932,7236,7540,7844,8148,8452,8756,9060,9364,9668,9972,10276,10580,10884,11188,11492,11796,12100,12404,12708,13012,13316,13620,13924,14228,14532,14836,15140,15444,15748,16052,16356,16660,16964,17268,17572,17876,18180,18484,18788,19092,19396,19700,20004,20308,20612,20916,21220,21524,21828,22132,22436,22740,23044,23348,23652,23956,24260,24564,24868,25172,25476,25780,26084,26388,26692,26996,27300,27604,27908,28212,28516,28820,29124,29428,29732,30036,30340,30644,30948,31252,31556,31860,32164,32468,32772,33076,33380,33684,33988,34292,34596,34900,35204,35508,35812,36116,36420,36724,37028,37332,37636,37940,38244,38548,38852,39156,39460,39764,40068,40372,40676,40980,41284,41588,41892,42196,42500,42804,43108,43412,43716,44020,44324,44628,44932,45236,45540,45844,46148,46452,46756,47060,47364,47668,47972,48276,48580,48884,49188,49492,49796,50100,50404,50708,51012,51316,51620,51924,52228,52532,52836,53140,53444,53748,54052,54356,54660,54964,55268,55572,55876,56180,56484,56788,57092,57396,57700,58004,58308,58612,58916,59220,59524,59828,60132,60436,60740,61044,61348,61652,61956,62260,62564,62868,63172,63476,63780,64084,64388,64692,64996,65300,65604,65908,66212,66516,66820,67124,67428,67732,68036,68340,68644,68948,69252,69556,69860,70164,70468,70772,71076,71380,71684,71988,72292,72596,72900,73204,73508,73812,74116,74420,74724,75028,75332,75636,75940,76244,76548,76852,77156,77460,77764'/>
+  </group>
+  <group name='244'>
+    <ids val='245,549,853,1157,1461,1765,2069,2373,2677,2981,3285,3589,3893,4197,4501,4805,5109,5413,5717,6021,6325,6629,6933,7237,7541,7845,8149,8453,8757,9061,9365,9669,9973,10277,10581,10885,11189,11493,11797,12101,12405,12709,13013,13317,13621,13925,14229,14533,14837,15141,15445,15749,16053,16357,16661,16965,17269,17573,17877,18181,18485,18789,19093,19397,19701,20005,20309,20613,20917,21221,21525,21829,22133,22437,22741,23045,23349,23653,23957,24261,24565,24869,25173,25477,25781,26085,26389,26693,26997,27301,27605,27909,28213,28517,28821,29125,29429,29733,30037,30341,30645,30949,31253,31557,31861,32165,32469,32773,33077,33381,33685,33989,34293,34597,34901,35205,35509,35813,36117,36421,36725,37029,37333,37637,37941,38245,38549,38853,39157,39461,39765,40069,40373,40677,40981,41285,41589,41893,42197,42501,42805,43109,43413,43717,44021,44325,44629,44933,45237,45541,45845,46149,46453,46757,47061,47365,47669,47973,48277,48581,48885,49189,49493,49797,50101,50405,50709,51013,51317,51621,51925,52229,52533,52837,53141,53445,53749,54053,54357,54661,54965,55269,55573,55877,56181,56485,56789,57093,57397,57701,58005,58309,58613,58917,59221,59525,59829,60133,60437,60741,61045,61349,61653,61957,62261,62565,62869,63173,63477,63781,64085,64389,64693,64997,65301,65605,65909,66213,66517,66821,67125,67429,67733,68037,68341,68645,68949,69253,69557,69861,70165,70469,70773,71077,71381,71685,71989,72293,72597,72901,73205,73509,73813,74117,74421,74725,75029,75333,75637,75941,76245,76549,76853,77157,77461,77765'/>
+  </group>
+  <group name='245'>
+    <ids val='246,550,854,1158,1462,1766,2070,2374,2678,2982,3286,3590,3894,4198,4502,4806,5110,5414,5718,6022,6326,6630,6934,7238,7542,7846,8150,8454,8758,9062,9366,9670,9974,10278,10582,10886,11190,11494,11798,12102,12406,12710,13014,13318,13622,13926,14230,14534,14838,15142,15446,15750,16054,16358,16662,16966,17270,17574,17878,18182,18486,18790,19094,19398,19702,20006,20310,20614,20918,21222,21526,21830,22134,22438,22742,23046,23350,23654,23958,24262,24566,24870,25174,25478,25782,26086,26390,26694,26998,27302,27606,27910,28214,28518,28822,29126,29430,29734,30038,30342,30646,30950,31254,31558,31862,32166,32470,32774,33078,33382,33686,33990,34294,34598,34902,35206,35510,35814,36118,36422,36726,37030,37334,37638,37942,38246,38550,38854,39158,39462,39766,40070,40374,40678,40982,41286,41590,41894,42198,42502,42806,43110,43414,43718,44022,44326,44630,44934,45238,45542,45846,46150,46454,46758,47062,47366,47670,47974,48278,48582,48886,49190,49494,49798,50102,50406,50710,51014,51318,51622,51926,52230,52534,52838,53142,53446,53750,54054,54358,54662,54966,55270,55574,55878,56182,56486,56790,57094,57398,57702,58006,58310,58614,58918,59222,59526,59830,60134,60438,60742,61046,61350,61654,61958,62262,62566,62870,63174,63478,63782,64086,64390,64694,64998,65302,65606,65910,66214,66518,66822,67126,67430,67734,68038,68342,68646,68950,69254,69558,69862,70166,70470,70774,71078,71382,71686,71990,72294,72598,72902,73206,73510,73814,74118,74422,74726,75030,75334,75638,75942,76246,76550,76854,77158,77462,77766'/>
+  </group>
+  <group name='246'>
+    <ids val='247,551,855,1159,1463,1767,2071,2375,2679,2983,3287,3591,3895,4199,4503,4807,5111,5415,5719,6023,6327,6631,6935,7239,7543,7847,8151,8455,8759,9063,9367,9671,9975,10279,10583,10887,11191,11495,11799,12103,12407,12711,13015,13319,13623,13927,14231,14535,14839,15143,15447,15751,16055,16359,16663,16967,17271,17575,17879,18183,18487,18791,19095,19399,19703,20007,20311,20615,20919,21223,21527,21831,22135,22439,22743,23047,23351,23655,23959,24263,24567,24871,25175,25479,25783,26087,26391,26695,26999,27303,27607,27911,28215,28519,28823,29127,29431,29735,30039,30343,30647,30951,31255,31559,31863,32167,32471,32775,33079,33383,33687,33991,34295,34599,34903,35207,35511,35815,36119,36423,36727,37031,37335,37639,37943,38247,38551,38855,39159,39463,39767,40071,40375,40679,40983,41287,41591,41895,42199,42503,42807,43111,43415,43719,44023,44327,44631,44935,45239,45543,45847,46151,46455,46759,47063,47367,47671,47975,48279,48583,48887,49191,49495,49799,50103,50407,50711,51015,51319,51623,51927,52231,52535,52839,53143,53447,53751,54055,54359,54663,54967,55271,55575,55879,56183,56487,56791,57095,57399,57703,58007,58311,58615,58919,59223,59527,59831,60135,60439,60743,61047,61351,61655,61959,62263,62567,62871,63175,63479,63783,64087,64391,64695,64999,65303,65607,65911,66215,66519,66823,67127,67431,67735,68039,68343,68647,68951,69255,69559,69863,70167,70471,70775,71079,71383,71687,71991,72295,72599,72903,73207,73511,73815,74119,74423,74727,75031,75335,75639,75943,76247,76551,76855,77159,77463,77767'/>
+  </group>
+  <group name='247'>
+    <ids val='248,552,856,1160,1464,1768,2072,2376,2680,2984,3288,3592,3896,4200,4504,4808,5112,5416,5720,6024,6328,6632,6936,7240,7544,7848,8152,8456,8760,9064,9368,9672,9976,10280,10584,10888,11192,11496,11800,12104,12408,12712,13016,13320,13624,13928,14232,14536,14840,15144,15448,15752,16056,16360,16664,16968,17272,17576,17880,18184,18488,18792,19096,19400,19704,20008,20312,20616,20920,21224,21528,21832,22136,22440,22744,23048,23352,23656,23960,24264,24568,24872,25176,25480,25784,26088,26392,26696,27000,27304,27608,27912,28216,28520,28824,29128,29432,29736,30040,30344,30648,30952,31256,31560,31864,32168,32472,32776,33080,33384,33688,33992,34296,34600,34904,35208,35512,35816,36120,36424,36728,37032,37336,37640,37944,38248,38552,38856,39160,39464,39768,40072,40376,40680,40984,41288,41592,41896,42200,42504,42808,43112,43416,43720,44024,44328,44632,44936,45240,45544,45848,46152,46456,46760,47064,47368,47672,47976,48280,48584,48888,49192,49496,49800,50104,50408,50712,51016,51320,51624,51928,52232,52536,52840,53144,53448,53752,54056,54360,54664,54968,55272,55576,55880,56184,56488,56792,57096,57400,57704,58008,58312,58616,58920,59224,59528,59832,60136,60440,60744,61048,61352,61656,61960,62264,62568,62872,63176,63480,63784,64088,64392,64696,65000,65304,65608,65912,66216,66520,66824,67128,67432,67736,68040,68344,68648,68952,69256,69560,69864,70168,70472,70776,71080,71384,71688,71992,72296,72600,72904,73208,73512,73816,74120,74424,74728,75032,75336,75640,75944,76248,76552,76856,77160,77464,77768'/>
+  </group>
+  <group name='248'>
+    <ids val='249,553,857,1161,1465,1769,2073,2377,2681,2985,3289,3593,3897,4201,4505,4809,5113,5417,5721,6025,6329,6633,6937,7241,7545,7849,8153,8457,8761,9065,9369,9673,9977,10281,10585,10889,11193,11497,11801,12105,12409,12713,13017,13321,13625,13929,14233,14537,14841,15145,15449,15753,16057,16361,16665,16969,17273,17577,17881,18185,18489,18793,19097,19401,19705,20009,20313,20617,20921,21225,21529,21833,22137,22441,22745,23049,23353,23657,23961,24265,24569,24873,25177,25481,25785,26089,26393,26697,27001,27305,27609,27913,28217,28521,28825,29129,29433,29737,30041,30345,30649,30953,31257,31561,31865,32169,32473,32777,33081,33385,33689,33993,34297,34601,34905,35209,35513,35817,36121,36425,36729,37033,37337,37641,37945,38249,38553,38857,39161,39465,39769,40073,40377,40681,40985,41289,41593,41897,42201,42505,42809,43113,43417,43721,44025,44329,44633,44937,45241,45545,45849,46153,46457,46761,47065,47369,47673,47977,48281,48585,48889,49193,49497,49801,50105,50409,50713,51017,51321,51625,51929,52233,52537,52841,53145,53449,53753,54057,54361,54665,54969,55273,55577,55881,56185,56489,56793,57097,57401,57705,58009,58313,58617,58921,59225,59529,59833,60137,60441,60745,61049,61353,61657,61961,62265,62569,62873,63177,63481,63785,64089,64393,64697,65001,65305,65609,65913,66217,66521,66825,67129,67433,67737,68041,68345,68649,68953,69257,69561,69865,70169,70473,70777,71081,71385,71689,71993,72297,72601,72905,73209,73513,73817,74121,74425,74729,75033,75337,75641,75945,76249,76553,76857,77161,77465,77769'/>
+  </group>
+  <group name='249'>
+    <ids val='250,554,858,1162,1466,1770,2074,2378,2682,2986,3290,3594,3898,4202,4506,4810,5114,5418,5722,6026,6330,6634,6938,7242,7546,7850,8154,8458,8762,9066,9370,9674,9978,10282,10586,10890,11194,11498,11802,12106,12410,12714,13018,13322,13626,13930,14234,14538,14842,15146,15450,15754,16058,16362,16666,16970,17274,17578,17882,18186,18490,18794,19098,19402,19706,20010,20314,20618,20922,21226,21530,21834,22138,22442,22746,23050,23354,23658,23962,24266,24570,24874,25178,25482,25786,26090,26394,26698,27002,27306,27610,27914,28218,28522,28826,29130,29434,29738,30042,30346,30650,30954,31258,31562,31866,32170,32474,32778,33082,33386,33690,33994,34298,34602,34906,35210,35514,35818,36122,36426,36730,37034,37338,37642,37946,38250,38554,38858,39162,39466,39770,40074,40378,40682,40986,41290,41594,41898,42202,42506,42810,43114,43418,43722,44026,44330,44634,44938,45242,45546,45850,46154,46458,46762,47066,47370,47674,47978,48282,48586,48890,49194,49498,49802,50106,50410,50714,51018,51322,51626,51930,52234,52538,52842,53146,53450,53754,54058,54362,54666,54970,55274,55578,55882,56186,56490,56794,57098,57402,57706,58010,58314,58618,58922,59226,59530,59834,60138,60442,60746,61050,61354,61658,61962,62266,62570,62874,63178,63482,63786,64090,64394,64698,65002,65306,65610,65914,66218,66522,66826,67130,67434,67738,68042,68346,68650,68954,69258,69562,69866,70170,70474,70778,71082,71386,71690,71994,72298,72602,72906,73210,73514,73818,74122,74426,74730,75034,75338,75642,75946,76250,76554,76858,77162,77466,77770'/>
+  </group>
+  <group name='250'>
+    <ids val='251,555,859,1163,1467,1771,2075,2379,2683,2987,3291,3595,3899,4203,4507,4811,5115,5419,5723,6027,6331,6635,6939,7243,7547,7851,8155,8459,8763,9067,9371,9675,9979,10283,10587,10891,11195,11499,11803,12107,12411,12715,13019,13323,13627,13931,14235,14539,14843,15147,15451,15755,16059,16363,16667,16971,17275,17579,17883,18187,18491,18795,19099,19403,19707,20011,20315,20619,20923,21227,21531,21835,22139,22443,22747,23051,23355,23659,23963,24267,24571,24875,25179,25483,25787,26091,26395,26699,27003,27307,27611,27915,28219,28523,28827,29131,29435,29739,30043,30347,30651,30955,31259,31563,31867,32171,32475,32779,33083,33387,33691,33995,34299,34603,34907,35211,35515,35819,36123,36427,36731,37035,37339,37643,37947,38251,38555,38859,39163,39467,39771,40075,40379,40683,40987,41291,41595,41899,42203,42507,42811,43115,43419,43723,44027,44331,44635,44939,45243,45547,45851,46155,46459,46763,47067,47371,47675,47979,48283,48587,48891,49195,49499,49803,50107,50411,50715,51019,51323,51627,51931,52235,52539,52843,53147,53451,53755,54059,54363,54667,54971,55275,55579,55883,56187,56491,56795,57099,57403,57707,58011,58315,58619,58923,59227,59531,59835,60139,60443,60747,61051,61355,61659,61963,62267,62571,62875,63179,63483,63787,64091,64395,64699,65003,65307,65611,65915,66219,66523,66827,67131,67435,67739,68043,68347,68651,68955,69259,69563,69867,70171,70475,70779,71083,71387,71691,71995,72299,72603,72907,73211,73515,73819,74123,74427,74731,75035,75339,75643,75947,76251,76555,76859,77163,77467,77771'/>
+  </group>
+  <group name='251'>
+    <ids val='252,556,860,1164,1468,1772,2076,2380,2684,2988,3292,3596,3900,4204,4508,4812,5116,5420,5724,6028,6332,6636,6940,7244,7548,7852,8156,8460,8764,9068,9372,9676,9980,10284,10588,10892,11196,11500,11804,12108,12412,12716,13020,13324,13628,13932,14236,14540,14844,15148,15452,15756,16060,16364,16668,16972,17276,17580,17884,18188,18492,18796,19100,19404,19708,20012,20316,20620,20924,21228,21532,21836,22140,22444,22748,23052,23356,23660,23964,24268,24572,24876,25180,25484,25788,26092,26396,26700,27004,27308,27612,27916,28220,28524,28828,29132,29436,29740,30044,30348,30652,30956,31260,31564,31868,32172,32476,32780,33084,33388,33692,33996,34300,34604,34908,35212,35516,35820,36124,36428,36732,37036,37340,37644,37948,38252,38556,38860,39164,39468,39772,40076,40380,40684,40988,41292,41596,41900,42204,42508,42812,43116,43420,43724,44028,44332,44636,44940,45244,45548,45852,46156,46460,46764,47068,47372,47676,47980,48284,48588,48892,49196,49500,49804,50108,50412,50716,51020,51324,51628,51932,52236,52540,52844,53148,53452,53756,54060,54364,54668,54972,55276,55580,55884,56188,56492,56796,57100,57404,57708,58012,58316,58620,58924,59228,59532,59836,60140,60444,60748,61052,61356,61660,61964,62268,62572,62876,63180,63484,63788,64092,64396,64700,65004,65308,65612,65916,66220,66524,66828,67132,67436,67740,68044,68348,68652,68956,69260,69564,69868,70172,70476,70780,71084,71388,71692,71996,72300,72604,72908,73212,73516,73820,74124,74428,74732,75036,75340,75644,75948,76252,76556,76860,77164,77468,77772'/>
+  </group>
+  <group name='252'>
+    <ids val='253,557,861,1165,1469,1773,2077,2381,2685,2989,3293,3597,3901,4205,4509,4813,5117,5421,5725,6029,6333,6637,6941,7245,7549,7853,8157,8461,8765,9069,9373,9677,9981,10285,10589,10893,11197,11501,11805,12109,12413,12717,13021,13325,13629,13933,14237,14541,14845,15149,15453,15757,16061,16365,16669,16973,17277,17581,17885,18189,18493,18797,19101,19405,19709,20013,20317,20621,20925,21229,21533,21837,22141,22445,22749,23053,23357,23661,23965,24269,24573,24877,25181,25485,25789,26093,26397,26701,27005,27309,27613,27917,28221,28525,28829,29133,29437,29741,30045,30349,30653,30957,31261,31565,31869,32173,32477,32781,33085,33389,33693,33997,34301,34605,34909,35213,35517,35821,36125,36429,36733,37037,37341,37645,37949,38253,38557,38861,39165,39469,39773,40077,40381,40685,40989,41293,41597,41901,42205,42509,42813,43117,43421,43725,44029,44333,44637,44941,45245,45549,45853,46157,46461,46765,47069,47373,47677,47981,48285,48589,48893,49197,49501,49805,50109,50413,50717,51021,51325,51629,51933,52237,52541,52845,53149,53453,53757,54061,54365,54669,54973,55277,55581,55885,56189,56493,56797,57101,57405,57709,58013,58317,58621,58925,59229,59533,59837,60141,60445,60749,61053,61357,61661,61965,62269,62573,62877,63181,63485,63789,64093,64397,64701,65005,65309,65613,65917,66221,66525,66829,67133,67437,67741,68045,68349,68653,68957,69261,69565,69869,70173,70477,70781,71085,71389,71693,71997,72301,72605,72909,73213,73517,73821,74125,74429,74733,75037,75341,75645,75949,76253,76557,76861,77165,77469,77773'/>
+  </group>
+  <group name='253'>
+    <ids val='254,558,862,1166,1470,1774,2078,2382,2686,2990,3294,3598,3902,4206,4510,4814,5118,5422,5726,6030,6334,6638,6942,7246,7550,7854,8158,8462,8766,9070,9374,9678,9982,10286,10590,10894,11198,11502,11806,12110,12414,12718,13022,13326,13630,13934,14238,14542,14846,15150,15454,15758,16062,16366,16670,16974,17278,17582,17886,18190,18494,18798,19102,19406,19710,20014,20318,20622,20926,21230,21534,21838,22142,22446,22750,23054,23358,23662,23966,24270,24574,24878,25182,25486,25790,26094,26398,26702,27006,27310,27614,27918,28222,28526,28830,29134,29438,29742,30046,30350,30654,30958,31262,31566,31870,32174,32478,32782,33086,33390,33694,33998,34302,34606,34910,35214,35518,35822,36126,36430,36734,37038,37342,37646,37950,38254,38558,38862,39166,39470,39774,40078,40382,40686,40990,41294,41598,41902,42206,42510,42814,43118,43422,43726,44030,44334,44638,44942,45246,45550,45854,46158,46462,46766,47070,47374,47678,47982,48286,48590,48894,49198,49502,49806,50110,50414,50718,51022,51326,51630,51934,52238,52542,52846,53150,53454,53758,54062,54366,54670,54974,55278,55582,55886,56190,56494,56798,57102,57406,57710,58014,58318,58622,58926,59230,59534,59838,60142,60446,60750,61054,61358,61662,61966,62270,62574,62878,63182,63486,63790,64094,64398,64702,65006,65310,65614,65918,66222,66526,66830,67134,67438,67742,68046,68350,68654,68958,69262,69566,69870,70174,70478,70782,71086,71390,71694,71998,72302,72606,72910,73214,73518,73822,74126,74430,74734,75038,75342,75646,75950,76254,76558,76862,77166,77470,77774'/>
+  </group>
+  <group name='254'>
+    <ids val='255,559,863,1167,1471,1775,2079,2383,2687,2991,3295,3599,3903,4207,4511,4815,5119,5423,5727,6031,6335,6639,6943,7247,7551,7855,8159,8463,8767,9071,9375,9679,9983,10287,10591,10895,11199,11503,11807,12111,12415,12719,13023,13327,13631,13935,14239,14543,14847,15151,15455,15759,16063,16367,16671,16975,17279,17583,17887,18191,18495,18799,19103,19407,19711,20015,20319,20623,20927,21231,21535,21839,22143,22447,22751,23055,23359,23663,23967,24271,24575,24879,25183,25487,25791,26095,26399,26703,27007,27311,27615,27919,28223,28527,28831,29135,29439,29743,30047,30351,30655,30959,31263,31567,31871,32175,32479,32783,33087,33391,33695,33999,34303,34607,34911,35215,35519,35823,36127,36431,36735,37039,37343,37647,37951,38255,38559,38863,39167,39471,39775,40079,40383,40687,40991,41295,41599,41903,42207,42511,42815,43119,43423,43727,44031,44335,44639,44943,45247,45551,45855,46159,46463,46767,47071,47375,47679,47983,48287,48591,48895,49199,49503,49807,50111,50415,50719,51023,51327,51631,51935,52239,52543,52847,53151,53455,53759,54063,54367,54671,54975,55279,55583,55887,56191,56495,56799,57103,57407,57711,58015,58319,58623,58927,59231,59535,59839,60143,60447,60751,61055,61359,61663,61967,62271,62575,62879,63183,63487,63791,64095,64399,64703,65007,65311,65615,65919,66223,66527,66831,67135,67439,67743,68047,68351,68655,68959,69263,69567,69871,70175,70479,70783,71087,71391,71695,71999,72303,72607,72911,73215,73519,73823,74127,74431,74735,75039,75343,75647,75951,76255,76559,76863,77167,77471,77775'/>
+  </group>
+  <group name='255'>
+    <ids val='256,560,864,1168,1472,1776,2080,2384,2688,2992,3296,3600,3904,4208,4512,4816,5120,5424,5728,6032,6336,6640,6944,7248,7552,7856,8160,8464,8768,9072,9376,9680,9984,10288,10592,10896,11200,11504,11808,12112,12416,12720,13024,13328,13632,13936,14240,14544,14848,15152,15456,15760,16064,16368,16672,16976,17280,17584,17888,18192,18496,18800,19104,19408,19712,20016,20320,20624,20928,21232,21536,21840,22144,22448,22752,23056,23360,23664,23968,24272,24576,24880,25184,25488,25792,26096,26400,26704,27008,27312,27616,27920,28224,28528,28832,29136,29440,29744,30048,30352,30656,30960,31264,31568,31872,32176,32480,32784,33088,33392,33696,34000,34304,34608,34912,35216,35520,35824,36128,36432,36736,37040,37344,37648,37952,38256,38560,38864,39168,39472,39776,40080,40384,40688,40992,41296,41600,41904,42208,42512,42816,43120,43424,43728,44032,44336,44640,44944,45248,45552,45856,46160,46464,46768,47072,47376,47680,47984,48288,48592,48896,49200,49504,49808,50112,50416,50720,51024,51328,51632,51936,52240,52544,52848,53152,53456,53760,54064,54368,54672,54976,55280,55584,55888,56192,56496,56800,57104,57408,57712,58016,58320,58624,58928,59232,59536,59840,60144,60448,60752,61056,61360,61664,61968,62272,62576,62880,63184,63488,63792,64096,64400,64704,65008,65312,65616,65920,66224,66528,66832,67136,67440,67744,68048,68352,68656,68960,69264,69568,69872,70176,70480,70784,71088,71392,71696,72000,72304,72608,72912,73216,73520,73824,74128,74432,74736,75040,75344,75648,75952,76256,76560,76864,77168,77472,77776'/>
+  </group>
+  <group name='256'>
+    <ids val='257,561,865,1169,1473,1777,2081,2385,2689,2993,3297,3601,3905,4209,4513,4817,5121,5425,5729,6033,6337,6641,6945,7249,7553,7857,8161,8465,8769,9073,9377,9681,9985,10289,10593,10897,11201,11505,11809,12113,12417,12721,13025,13329,13633,13937,14241,14545,14849,15153,15457,15761,16065,16369,16673,16977,17281,17585,17889,18193,18497,18801,19105,19409,19713,20017,20321,20625,20929,21233,21537,21841,22145,22449,22753,23057,23361,23665,23969,24273,24577,24881,25185,25489,25793,26097,26401,26705,27009,27313,27617,27921,28225,28529,28833,29137,29441,29745,30049,30353,30657,30961,31265,31569,31873,32177,32481,32785,33089,33393,33697,34001,34305,34609,34913,35217,35521,35825,36129,36433,36737,37041,37345,37649,37953,38257,38561,38865,39169,39473,39777,40081,40385,40689,40993,41297,41601,41905,42209,42513,42817,43121,43425,43729,44033,44337,44641,44945,45249,45553,45857,46161,46465,46769,47073,47377,47681,47985,48289,48593,48897,49201,49505,49809,50113,50417,50721,51025,51329,51633,51937,52241,52545,52849,53153,53457,53761,54065,54369,54673,54977,55281,55585,55889,56193,56497,56801,57105,57409,57713,58017,58321,58625,58929,59233,59537,59841,60145,60449,60753,61057,61361,61665,61969,62273,62577,62881,63185,63489,63793,64097,64401,64705,65009,65313,65617,65921,66225,66529,66833,67137,67441,67745,68049,68353,68657,68961,69265,69569,69873,70177,70481,70785,71089,71393,71697,72001,72305,72609,72913,73217,73521,73825,74129,74433,74737,75041,75345,75649,75953,76257,76561,76865,77169,77473,77777'/>
+  </group>
+  <group name='257'>
+    <ids val='258,562,866,1170,1474,1778,2082,2386,2690,2994,3298,3602,3906,4210,4514,4818,5122,5426,5730,6034,6338,6642,6946,7250,7554,7858,8162,8466,8770,9074,9378,9682,9986,10290,10594,10898,11202,11506,11810,12114,12418,12722,13026,13330,13634,13938,14242,14546,14850,15154,15458,15762,16066,16370,16674,16978,17282,17586,17890,18194,18498,18802,19106,19410,19714,20018,20322,20626,20930,21234,21538,21842,22146,22450,22754,23058,23362,23666,23970,24274,24578,24882,25186,25490,25794,26098,26402,26706,27010,27314,27618,27922,28226,28530,28834,29138,29442,29746,30050,30354,30658,30962,31266,31570,31874,32178,32482,32786,33090,33394,33698,34002,34306,34610,34914,35218,35522,35826,36130,36434,36738,37042,37346,37650,37954,38258,38562,38866,39170,39474,39778,40082,40386,40690,40994,41298,41602,41906,42210,42514,42818,43122,43426,43730,44034,44338,44642,44946,45250,45554,45858,46162,46466,46770,47074,47378,47682,47986,48290,48594,48898,49202,49506,49810,50114,50418,50722,51026,51330,51634,51938,52242,52546,52850,53154,53458,53762,54066,54370,54674,54978,55282,55586,55890,56194,56498,56802,57106,57410,57714,58018,58322,58626,58930,59234,59538,59842,60146,60450,60754,61058,61362,61666,61970,62274,62578,62882,63186,63490,63794,64098,64402,64706,65010,65314,65618,65922,66226,66530,66834,67138,67442,67746,68050,68354,68658,68962,69266,69570,69874,70178,70482,70786,71090,71394,71698,72002,72306,72610,72914,73218,73522,73826,74130,74434,74738,75042,75346,75650,75954,76258,76562,76866,77170,77474,77778'/>
+  </group>
+  <group name='258'>
+    <ids val='259,563,867,1171,1475,1779,2083,2387,2691,2995,3299,3603,3907,4211,4515,4819,5123,5427,5731,6035,6339,6643,6947,7251,7555,7859,8163,8467,8771,9075,9379,9683,9987,10291,10595,10899,11203,11507,11811,12115,12419,12723,13027,13331,13635,13939,14243,14547,14851,15155,15459,15763,16067,16371,16675,16979,17283,17587,17891,18195,18499,18803,19107,19411,19715,20019,20323,20627,20931,21235,21539,21843,22147,22451,22755,23059,23363,23667,23971,24275,24579,24883,25187,25491,25795,26099,26403,26707,27011,27315,27619,27923,28227,28531,28835,29139,29443,29747,30051,30355,30659,30963,31267,31571,31875,32179,32483,32787,33091,33395,33699,34003,34307,34611,34915,35219,35523,35827,36131,36435,36739,37043,37347,37651,37955,38259,38563,38867,39171,39475,39779,40083,40387,40691,40995,41299,41603,41907,42211,42515,42819,43123,43427,43731,44035,44339,44643,44947,45251,45555,45859,46163,46467,46771,47075,47379,47683,47987,48291,48595,48899,49203,49507,49811,50115,50419,50723,51027,51331,51635,51939,52243,52547,52851,53155,53459,53763,54067,54371,54675,54979,55283,55587,55891,56195,56499,56803,57107,57411,57715,58019,58323,58627,58931,59235,59539,59843,60147,60451,60755,61059,61363,61667,61971,62275,62579,62883,63187,63491,63795,64099,64403,64707,65011,65315,65619,65923,66227,66531,66835,67139,67443,67747,68051,68355,68659,68963,69267,69571,69875,70179,70483,70787,71091,71395,71699,72003,72307,72611,72915,73219,73523,73827,74131,74435,74739,75043,75347,75651,75955,76259,76563,76867,77171,77475,77779'/>
+  </group>
+  <group name='259'>
+    <ids val='260,564,868,1172,1476,1780,2084,2388,2692,2996,3300,3604,3908,4212,4516,4820,5124,5428,5732,6036,6340,6644,6948,7252,7556,7860,8164,8468,8772,9076,9380,9684,9988,10292,10596,10900,11204,11508,11812,12116,12420,12724,13028,13332,13636,13940,14244,14548,14852,15156,15460,15764,16068,16372,16676,16980,17284,17588,17892,18196,18500,18804,19108,19412,19716,20020,20324,20628,20932,21236,21540,21844,22148,22452,22756,23060,23364,23668,23972,24276,24580,24884,25188,25492,25796,26100,26404,26708,27012,27316,27620,27924,28228,28532,28836,29140,29444,29748,30052,30356,30660,30964,31268,31572,31876,32180,32484,32788,33092,33396,33700,34004,34308,34612,34916,35220,35524,35828,36132,36436,36740,37044,37348,37652,37956,38260,38564,38868,39172,39476,39780,40084,40388,40692,40996,41300,41604,41908,42212,42516,42820,43124,43428,43732,44036,44340,44644,44948,45252,45556,45860,46164,46468,46772,47076,47380,47684,47988,48292,48596,48900,49204,49508,49812,50116,50420,50724,51028,51332,51636,51940,52244,52548,52852,53156,53460,53764,54068,54372,54676,54980,55284,55588,55892,56196,56500,56804,57108,57412,57716,58020,58324,58628,58932,59236,59540,59844,60148,60452,60756,61060,61364,61668,61972,62276,62580,62884,63188,63492,63796,64100,64404,64708,65012,65316,65620,65924,66228,66532,66836,67140,67444,67748,68052,68356,68660,68964,69268,69572,69876,70180,70484,70788,71092,71396,71700,72004,72308,72612,72916,73220,73524,73828,74132,74436,74740,75044,75348,75652,75956,76260,76564,76868,77172,77476,77780'/>
+  </group>
+  <group name='260'>
+    <ids val='261,565,869,1173,1477,1781,2085,2389,2693,2997,3301,3605,3909,4213,4517,4821,5125,5429,5733,6037,6341,6645,6949,7253,7557,7861,8165,8469,8773,9077,9381,9685,9989,10293,10597,10901,11205,11509,11813,12117,12421,12725,13029,13333,13637,13941,14245,14549,14853,15157,15461,15765,16069,16373,16677,16981,17285,17589,17893,18197,18501,18805,19109,19413,19717,20021,20325,20629,20933,21237,21541,21845,22149,22453,22757,23061,23365,23669,23973,24277,24581,24885,25189,25493,25797,26101,26405,26709,27013,27317,27621,27925,28229,28533,28837,29141,29445,29749,30053,30357,30661,30965,31269,31573,31877,32181,32485,32789,33093,33397,33701,34005,34309,34613,34917,35221,35525,35829,36133,36437,36741,37045,37349,37653,37957,38261,38565,38869,39173,39477,39781,40085,40389,40693,40997,41301,41605,41909,42213,42517,42821,43125,43429,43733,44037,44341,44645,44949,45253,45557,45861,46165,46469,46773,47077,47381,47685,47989,48293,48597,48901,49205,49509,49813,50117,50421,50725,51029,51333,51637,51941,52245,52549,52853,53157,53461,53765,54069,54373,54677,54981,55285,55589,55893,56197,56501,56805,57109,57413,57717,58021,58325,58629,58933,59237,59541,59845,60149,60453,60757,61061,61365,61669,61973,62277,62581,62885,63189,63493,63797,64101,64405,64709,65013,65317,65621,65925,66229,66533,66837,67141,67445,67749,68053,68357,68661,68965,69269,69573,69877,70181,70485,70789,71093,71397,71701,72005,72309,72613,72917,73221,73525,73829,74133,74437,74741,75045,75349,75653,75957,76261,76565,76869,77173,77477,77781'/>
+  </group>
+  <group name='261'>
+    <ids val='262,566,870,1174,1478,1782,2086,2390,2694,2998,3302,3606,3910,4214,4518,4822,5126,5430,5734,6038,6342,6646,6950,7254,7558,7862,8166,8470,8774,9078,9382,9686,9990,10294,10598,10902,11206,11510,11814,12118,12422,12726,13030,13334,13638,13942,14246,14550,14854,15158,15462,15766,16070,16374,16678,16982,17286,17590,17894,18198,18502,18806,19110,19414,19718,20022,20326,20630,20934,21238,21542,21846,22150,22454,22758,23062,23366,23670,23974,24278,24582,24886,25190,25494,25798,26102,26406,26710,27014,27318,27622,27926,28230,28534,28838,29142,29446,29750,30054,30358,30662,30966,31270,31574,31878,32182,32486,32790,33094,33398,33702,34006,34310,34614,34918,35222,35526,35830,36134,36438,36742,37046,37350,37654,37958,38262,38566,38870,39174,39478,39782,40086,40390,40694,40998,41302,41606,41910,42214,42518,42822,43126,43430,43734,44038,44342,44646,44950,45254,45558,45862,46166,46470,46774,47078,47382,47686,47990,48294,48598,48902,49206,49510,49814,50118,50422,50726,51030,51334,51638,51942,52246,52550,52854,53158,53462,53766,54070,54374,54678,54982,55286,55590,55894,56198,56502,56806,57110,57414,57718,58022,58326,58630,58934,59238,59542,59846,60150,60454,60758,61062,61366,61670,61974,62278,62582,62886,63190,63494,63798,64102,64406,64710,65014,65318,65622,65926,66230,66534,66838,67142,67446,67750,68054,68358,68662,68966,69270,69574,69878,70182,70486,70790,71094,71398,71702,72006,72310,72614,72918,73222,73526,73830,74134,74438,74742,75046,75350,75654,75958,76262,76566,76870,77174,77478,77782'/>
+  </group>
+  <group name='262'>
+    <ids val='263,567,871,1175,1479,1783,2087,2391,2695,2999,3303,3607,3911,4215,4519,4823,5127,5431,5735,6039,6343,6647,6951,7255,7559,7863,8167,8471,8775,9079,9383,9687,9991,10295,10599,10903,11207,11511,11815,12119,12423,12727,13031,13335,13639,13943,14247,14551,14855,15159,15463,15767,16071,16375,16679,16983,17287,17591,17895,18199,18503,18807,19111,19415,19719,20023,20327,20631,20935,21239,21543,21847,22151,22455,22759,23063,23367,23671,23975,24279,24583,24887,25191,25495,25799,26103,26407,26711,27015,27319,27623,27927,28231,28535,28839,29143,29447,29751,30055,30359,30663,30967,31271,31575,31879,32183,32487,32791,33095,33399,33703,34007,34311,34615,34919,35223,35527,35831,36135,36439,36743,37047,37351,37655,37959,38263,38567,38871,39175,39479,39783,40087,40391,40695,40999,41303,41607,41911,42215,42519,42823,43127,43431,43735,44039,44343,44647,44951,45255,45559,45863,46167,46471,46775,47079,47383,47687,47991,48295,48599,48903,49207,49511,49815,50119,50423,50727,51031,51335,51639,51943,52247,52551,52855,53159,53463,53767,54071,54375,54679,54983,55287,55591,55895,56199,56503,56807,57111,57415,57719,58023,58327,58631,58935,59239,59543,59847,60151,60455,60759,61063,61367,61671,61975,62279,62583,62887,63191,63495,63799,64103,64407,64711,65015,65319,65623,65927,66231,66535,66839,67143,67447,67751,68055,68359,68663,68967,69271,69575,69879,70183,70487,70791,71095,71399,71703,72007,72311,72615,72919,73223,73527,73831,74135,74439,74743,75047,75351,75655,75959,76263,76567,76871,77175,77479,77783'/>
+  </group>
+  <group name='263'>
+    <ids val='264,568,872,1176,1480,1784,2088,2392,2696,3000,3304,3608,3912,4216,4520,4824,5128,5432,5736,6040,6344,6648,6952,7256,7560,7864,8168,8472,8776,9080,9384,9688,9992,10296,10600,10904,11208,11512,11816,12120,12424,12728,13032,13336,13640,13944,14248,14552,14856,15160,15464,15768,16072,16376,16680,16984,17288,17592,17896,18200,18504,18808,19112,19416,19720,20024,20328,20632,20936,21240,21544,21848,22152,22456,22760,23064,23368,23672,23976,24280,24584,24888,25192,25496,25800,26104,26408,26712,27016,27320,27624,27928,28232,28536,28840,29144,29448,29752,30056,30360,30664,30968,31272,31576,31880,32184,32488,32792,33096,33400,33704,34008,34312,34616,34920,35224,35528,35832,36136,36440,36744,37048,37352,37656,37960,38264,38568,38872,39176,39480,39784,40088,40392,40696,41000,41304,41608,41912,42216,42520,42824,43128,43432,43736,44040,44344,44648,44952,45256,45560,45864,46168,46472,46776,47080,47384,47688,47992,48296,48600,48904,49208,49512,49816,50120,50424,50728,51032,51336,51640,51944,52248,52552,52856,53160,53464,53768,54072,54376,54680,54984,55288,55592,55896,56200,56504,56808,57112,57416,57720,58024,58328,58632,58936,59240,59544,59848,60152,60456,60760,61064,61368,61672,61976,62280,62584,62888,63192,63496,63800,64104,64408,64712,65016,65320,65624,65928,66232,66536,66840,67144,67448,67752,68056,68360,68664,68968,69272,69576,69880,70184,70488,70792,71096,71400,71704,72008,72312,72616,72920,73224,73528,73832,74136,74440,74744,75048,75352,75656,75960,76264,76568,76872,77176,77480,77784'/>
+  </group>
+  <group name='264'>
+    <ids val='265,569,873,1177,1481,1785,2089,2393,2697,3001,3305,3609,3913,4217,4521,4825,5129,5433,5737,6041,6345,6649,6953,7257,7561,7865,8169,8473,8777,9081,9385,9689,9993,10297,10601,10905,11209,11513,11817,12121,12425,12729,13033,13337,13641,13945,14249,14553,14857,15161,15465,15769,16073,16377,16681,16985,17289,17593,17897,18201,18505,18809,19113,19417,19721,20025,20329,20633,20937,21241,21545,21849,22153,22457,22761,23065,23369,23673,23977,24281,24585,24889,25193,25497,25801,26105,26409,26713,27017,27321,27625,27929,28233,28537,28841,29145,29449,29753,30057,30361,30665,30969,31273,31577,31881,32185,32489,32793,33097,33401,33705,34009,34313,34617,34921,35225,35529,35833,36137,36441,36745,37049,37353,37657,37961,38265,38569,38873,39177,39481,39785,40089,40393,40697,41001,41305,41609,41913,42217,42521,42825,43129,43433,43737,44041,44345,44649,44953,45257,45561,45865,46169,46473,46777,47081,47385,47689,47993,48297,48601,48905,49209,49513,49817,50121,50425,50729,51033,51337,51641,51945,52249,52553,52857,53161,53465,53769,54073,54377,54681,54985,55289,55593,55897,56201,56505,56809,57113,57417,57721,58025,58329,58633,58937,59241,59545,59849,60153,60457,60761,61065,61369,61673,61977,62281,62585,62889,63193,63497,63801,64105,64409,64713,65017,65321,65625,65929,66233,66537,66841,67145,67449,67753,68057,68361,68665,68969,69273,69577,69881,70185,70489,70793,71097,71401,71705,72009,72313,72617,72921,73225,73529,73833,74137,74441,74745,75049,75353,75657,75961,76265,76569,76873,77177,77481,77785'/>
+  </group>
+  <group name='265'>
+    <ids val='266,570,874,1178,1482,1786,2090,2394,2698,3002,3306,3610,3914,4218,4522,4826,5130,5434,5738,6042,6346,6650,6954,7258,7562,7866,8170,8474,8778,9082,9386,9690,9994,10298,10602,10906,11210,11514,11818,12122,12426,12730,13034,13338,13642,13946,14250,14554,14858,15162,15466,15770,16074,16378,16682,16986,17290,17594,17898,18202,18506,18810,19114,19418,19722,20026,20330,20634,20938,21242,21546,21850,22154,22458,22762,23066,23370,23674,23978,24282,24586,24890,25194,25498,25802,26106,26410,26714,27018,27322,27626,27930,28234,28538,28842,29146,29450,29754,30058,30362,30666,30970,31274,31578,31882,32186,32490,32794,33098,33402,33706,34010,34314,34618,34922,35226,35530,35834,36138,36442,36746,37050,37354,37658,37962,38266,38570,38874,39178,39482,39786,40090,40394,40698,41002,41306,41610,41914,42218,42522,42826,43130,43434,43738,44042,44346,44650,44954,45258,45562,45866,46170,46474,46778,47082,47386,47690,47994,48298,48602,48906,49210,49514,49818,50122,50426,50730,51034,51338,51642,51946,52250,52554,52858,53162,53466,53770,54074,54378,54682,54986,55290,55594,55898,56202,56506,56810,57114,57418,57722,58026,58330,58634,58938,59242,59546,59850,60154,60458,60762,61066,61370,61674,61978,62282,62586,62890,63194,63498,63802,64106,64410,64714,65018,65322,65626,65930,66234,66538,66842,67146,67450,67754,68058,68362,68666,68970,69274,69578,69882,70186,70490,70794,71098,71402,71706,72010,72314,72618,72922,73226,73530,73834,74138,74442,74746,75050,75354,75658,75962,76266,76570,76874,77178,77482,77786'/>
+  </group>
+  <group name='266'>
+    <ids val='267,571,875,1179,1483,1787,2091,2395,2699,3003,3307,3611,3915,4219,4523,4827,5131,5435,5739,6043,6347,6651,6955,7259,7563,7867,8171,8475,8779,9083,9387,9691,9995,10299,10603,10907,11211,11515,11819,12123,12427,12731,13035,13339,13643,13947,14251,14555,14859,15163,15467,15771,16075,16379,16683,16987,17291,17595,17899,18203,18507,18811,19115,19419,19723,20027,20331,20635,20939,21243,21547,21851,22155,22459,22763,23067,23371,23675,23979,24283,24587,24891,25195,25499,25803,26107,26411,26715,27019,27323,27627,27931,28235,28539,28843,29147,29451,29755,30059,30363,30667,30971,31275,31579,31883,32187,32491,32795,33099,33403,33707,34011,34315,34619,34923,35227,35531,35835,36139,36443,36747,37051,37355,37659,37963,38267,38571,38875,39179,39483,39787,40091,40395,40699,41003,41307,41611,41915,42219,42523,42827,43131,43435,43739,44043,44347,44651,44955,45259,45563,45867,46171,46475,46779,47083,47387,47691,47995,48299,48603,48907,49211,49515,49819,50123,50427,50731,51035,51339,51643,51947,52251,52555,52859,53163,53467,53771,54075,54379,54683,54987,55291,55595,55899,56203,56507,56811,57115,57419,57723,58027,58331,58635,58939,59243,59547,59851,60155,60459,60763,61067,61371,61675,61979,62283,62587,62891,63195,63499,63803,64107,64411,64715,65019,65323,65627,65931,66235,66539,66843,67147,67451,67755,68059,68363,68667,68971,69275,69579,69883,70187,70491,70795,71099,71403,71707,72011,72315,72619,72923,73227,73531,73835,74139,74443,74747,75051,75355,75659,75963,76267,76571,76875,77179,77483,77787'/>
+  </group>
+  <group name='267'>
+    <ids val='268,572,876,1180,1484,1788,2092,2396,2700,3004,3308,3612,3916,4220,4524,4828,5132,5436,5740,6044,6348,6652,6956,7260,7564,7868,8172,8476,8780,9084,9388,9692,9996,10300,10604,10908,11212,11516,11820,12124,12428,12732,13036,13340,13644,13948,14252,14556,14860,15164,15468,15772,16076,16380,16684,16988,17292,17596,17900,18204,18508,18812,19116,19420,19724,20028,20332,20636,20940,21244,21548,21852,22156,22460,22764,23068,23372,23676,23980,24284,24588,24892,25196,25500,25804,26108,26412,26716,27020,27324,27628,27932,28236,28540,28844,29148,29452,29756,30060,30364,30668,30972,31276,31580,31884,32188,32492,32796,33100,33404,33708,34012,34316,34620,34924,35228,35532,35836,36140,36444,36748,37052,37356,37660,37964,38268,38572,38876,39180,39484,39788,40092,40396,40700,41004,41308,41612,41916,42220,42524,42828,43132,43436,43740,44044,44348,44652,44956,45260,45564,45868,46172,46476,46780,47084,47388,47692,47996,48300,48604,48908,49212,49516,49820,50124,50428,50732,51036,51340,51644,51948,52252,52556,52860,53164,53468,53772,54076,54380,54684,54988,55292,55596,55900,56204,56508,56812,57116,57420,57724,58028,58332,58636,58940,59244,59548,59852,60156,60460,60764,61068,61372,61676,61980,62284,62588,62892,63196,63500,63804,64108,64412,64716,65020,65324,65628,65932,66236,66540,66844,67148,67452,67756,68060,68364,68668,68972,69276,69580,69884,70188,70492,70796,71100,71404,71708,72012,72316,72620,72924,73228,73532,73836,74140,74444,74748,75052,75356,75660,75964,76268,76572,76876,77180,77484,77788'/>
+  </group>
+  <group name='268'>
+    <ids val='269,573,877,1181,1485,1789,2093,2397,2701,3005,3309,3613,3917,4221,4525,4829,5133,5437,5741,6045,6349,6653,6957,7261,7565,7869,8173,8477,8781,9085,9389,9693,9997,10301,10605,10909,11213,11517,11821,12125,12429,12733,13037,13341,13645,13949,14253,14557,14861,15165,15469,15773,16077,16381,16685,16989,17293,17597,17901,18205,18509,18813,19117,19421,19725,20029,20333,20637,20941,21245,21549,21853,22157,22461,22765,23069,23373,23677,23981,24285,24589,24893,25197,25501,25805,26109,26413,26717,27021,27325,27629,27933,28237,28541,28845,29149,29453,29757,30061,30365,30669,30973,31277,31581,31885,32189,32493,32797,33101,33405,33709,34013,34317,34621,34925,35229,35533,35837,36141,36445,36749,37053,37357,37661,37965,38269,38573,38877,39181,39485,39789,40093,40397,40701,41005,41309,41613,41917,42221,42525,42829,43133,43437,43741,44045,44349,44653,44957,45261,45565,45869,46173,46477,46781,47085,47389,47693,47997,48301,48605,48909,49213,49517,49821,50125,50429,50733,51037,51341,51645,51949,52253,52557,52861,53165,53469,53773,54077,54381,54685,54989,55293,55597,55901,56205,56509,56813,57117,57421,57725,58029,58333,58637,58941,59245,59549,59853,60157,60461,60765,61069,61373,61677,61981,62285,62589,62893,63197,63501,63805,64109,64413,64717,65021,65325,65629,65933,66237,66541,66845,67149,67453,67757,68061,68365,68669,68973,69277,69581,69885,70189,70493,70797,71101,71405,71709,72013,72317,72621,72925,73229,73533,73837,74141,74445,74749,75053,75357,75661,75965,76269,76573,76877,77181,77485,77789'/>
+  </group>
+  <group name='269'>
+    <ids val='270,574,878,1182,1486,1790,2094,2398,2702,3006,3310,3614,3918,4222,4526,4830,5134,5438,5742,6046,6350,6654,6958,7262,7566,7870,8174,8478,8782,9086,9390,9694,9998,10302,10606,10910,11214,11518,11822,12126,12430,12734,13038,13342,13646,13950,14254,14558,14862,15166,15470,15774,16078,16382,16686,16990,17294,17598,17902,18206,18510,18814,19118,19422,19726,20030,20334,20638,20942,21246,21550,21854,22158,22462,22766,23070,23374,23678,23982,24286,24590,24894,25198,25502,25806,26110,26414,26718,27022,27326,27630,27934,28238,28542,28846,29150,29454,29758,30062,30366,30670,30974,31278,31582,31886,32190,32494,32798,33102,33406,33710,34014,34318,34622,34926,35230,35534,35838,36142,36446,36750,37054,37358,37662,37966,38270,38574,38878,39182,39486,39790,40094,40398,40702,41006,41310,41614,41918,42222,42526,42830,43134,43438,43742,44046,44350,44654,44958,45262,45566,45870,46174,46478,46782,47086,47390,47694,47998,48302,48606,48910,49214,49518,49822,50126,50430,50734,51038,51342,51646,51950,52254,52558,52862,53166,53470,53774,54078,54382,54686,54990,55294,55598,55902,56206,56510,56814,57118,57422,57726,58030,58334,58638,58942,59246,59550,59854,60158,60462,60766,61070,61374,61678,61982,62286,62590,62894,63198,63502,63806,64110,64414,64718,65022,65326,65630,65934,66238,66542,66846,67150,67454,67758,68062,68366,68670,68974,69278,69582,69886,70190,70494,70798,71102,71406,71710,72014,72318,72622,72926,73230,73534,73838,74142,74446,74750,75054,75358,75662,75966,76270,76574,76878,77182,77486,77790'/>
+  </group>
+  <group name='270'>
+    <ids val='271,575,879,1183,1487,1791,2095,2399,2703,3007,3311,3615,3919,4223,4527,4831,5135,5439,5743,6047,6351,6655,6959,7263,7567,7871,8175,8479,8783,9087,9391,9695,9999,10303,10607,10911,11215,11519,11823,12127,12431,12735,13039,13343,13647,13951,14255,14559,14863,15167,15471,15775,16079,16383,16687,16991,17295,17599,17903,18207,18511,18815,19119,19423,19727,20031,20335,20639,20943,21247,21551,21855,22159,22463,22767,23071,23375,23679,23983,24287,24591,24895,25199,25503,25807,26111,26415,26719,27023,27327,27631,27935,28239,28543,28847,29151,29455,29759,30063,30367,30671,30975,31279,31583,31887,32191,32495,32799,33103,33407,33711,34015,34319,34623,34927,35231,35535,35839,36143,36447,36751,37055,37359,37663,37967,38271,38575,38879,39183,39487,39791,40095,40399,40703,41007,41311,41615,41919,42223,42527,42831,43135,43439,43743,44047,44351,44655,44959,45263,45567,45871,46175,46479,46783,47087,47391,47695,47999,48303,48607,48911,49215,49519,49823,50127,50431,50735,51039,51343,51647,51951,52255,52559,52863,53167,53471,53775,54079,54383,54687,54991,55295,55599,55903,56207,56511,56815,57119,57423,57727,58031,58335,58639,58943,59247,59551,59855,60159,60463,60767,61071,61375,61679,61983,62287,62591,62895,63199,63503,63807,64111,64415,64719,65023,65327,65631,65935,66239,66543,66847,67151,67455,67759,68063,68367,68671,68975,69279,69583,69887,70191,70495,70799,71103,71407,71711,72015,72319,72623,72927,73231,73535,73839,74143,74447,74751,75055,75359,75663,75967,76271,76575,76879,77183,77487,77791'/>
+  </group>
+  <group name='271'>
+    <ids val='272,576,880,1184,1488,1792,2096,2400,2704,3008,3312,3616,3920,4224,4528,4832,5136,5440,5744,6048,6352,6656,6960,7264,7568,7872,8176,8480,8784,9088,9392,9696,10000,10304,10608,10912,11216,11520,11824,12128,12432,12736,13040,13344,13648,13952,14256,14560,14864,15168,15472,15776,16080,16384,16688,16992,17296,17600,17904,18208,18512,18816,19120,19424,19728,20032,20336,20640,20944,21248,21552,21856,22160,22464,22768,23072,23376,23680,23984,24288,24592,24896,25200,25504,25808,26112,26416,26720,27024,27328,27632,27936,28240,28544,28848,29152,29456,29760,30064,30368,30672,30976,31280,31584,31888,32192,32496,32800,33104,33408,33712,34016,34320,34624,34928,35232,35536,35840,36144,36448,36752,37056,37360,37664,37968,38272,38576,38880,39184,39488,39792,40096,40400,40704,41008,41312,41616,41920,42224,42528,42832,43136,43440,43744,44048,44352,44656,44960,45264,45568,45872,46176,46480,46784,47088,47392,47696,48000,48304,48608,48912,49216,49520,49824,50128,50432,50736,51040,51344,51648,51952,52256,52560,52864,53168,53472,53776,54080,54384,54688,54992,55296,55600,55904,56208,56512,56816,57120,57424,57728,58032,58336,58640,58944,59248,59552,59856,60160,60464,60768,61072,61376,61680,61984,62288,62592,62896,63200,63504,63808,64112,64416,64720,65024,65328,65632,65936,66240,66544,66848,67152,67456,67760,68064,68368,68672,68976,69280,69584,69888,70192,70496,70800,71104,71408,71712,72016,72320,72624,72928,73232,73536,73840,74144,74448,74752,75056,75360,75664,75968,76272,76576,76880,77184,77488,77792'/>
+  </group>
+  <group name='272'>
+    <ids val='273,577,881,1185,1489,1793,2097,2401,2705,3009,3313,3617,3921,4225,4529,4833,5137,5441,5745,6049,6353,6657,6961,7265,7569,7873,8177,8481,8785,9089,9393,9697,10001,10305,10609,10913,11217,11521,11825,12129,12433,12737,13041,13345,13649,13953,14257,14561,14865,15169,15473,15777,16081,16385,16689,16993,17297,17601,17905,18209,18513,18817,19121,19425,19729,20033,20337,20641,20945,21249,21553,21857,22161,22465,22769,23073,23377,23681,23985,24289,24593,24897,25201,25505,25809,26113,26417,26721,27025,27329,27633,27937,28241,28545,28849,29153,29457,29761,30065,30369,30673,30977,31281,31585,31889,32193,32497,32801,33105,33409,33713,34017,34321,34625,34929,35233,35537,35841,36145,36449,36753,37057,37361,37665,37969,38273,38577,38881,39185,39489,39793,40097,40401,40705,41009,41313,41617,41921,42225,42529,42833,43137,43441,43745,44049,44353,44657,44961,45265,45569,45873,46177,46481,46785,47089,47393,47697,48001,48305,48609,48913,49217,49521,49825,50129,50433,50737,51041,51345,51649,51953,52257,52561,52865,53169,53473,53777,54081,54385,54689,54993,55297,55601,55905,56209,56513,56817,57121,57425,57729,58033,58337,58641,58945,59249,59553,59857,60161,60465,60769,61073,61377,61681,61985,62289,62593,62897,63201,63505,63809,64113,64417,64721,65025,65329,65633,65937,66241,66545,66849,67153,67457,67761,68065,68369,68673,68977,69281,69585,69889,70193,70497,70801,71105,71409,71713,72017,72321,72625,72929,73233,73537,73841,74145,74449,74753,75057,75361,75665,75969,76273,76577,76881,77185,77489,77793'/>
+  </group>
+  <group name='273'>
+    <ids val='274,578,882,1186,1490,1794,2098,2402,2706,3010,3314,3618,3922,4226,4530,4834,5138,5442,5746,6050,6354,6658,6962,7266,7570,7874,8178,8482,8786,9090,9394,9698,10002,10306,10610,10914,11218,11522,11826,12130,12434,12738,13042,13346,13650,13954,14258,14562,14866,15170,15474,15778,16082,16386,16690,16994,17298,17602,17906,18210,18514,18818,19122,19426,19730,20034,20338,20642,20946,21250,21554,21858,22162,22466,22770,23074,23378,23682,23986,24290,24594,24898,25202,25506,25810,26114,26418,26722,27026,27330,27634,27938,28242,28546,28850,29154,29458,29762,30066,30370,30674,30978,31282,31586,31890,32194,32498,32802,33106,33410,33714,34018,34322,34626,34930,35234,35538,35842,36146,36450,36754,37058,37362,37666,37970,38274,38578,38882,39186,39490,39794,40098,40402,40706,41010,41314,41618,41922,42226,42530,42834,43138,43442,43746,44050,44354,44658,44962,45266,45570,45874,46178,46482,46786,47090,47394,47698,48002,48306,48610,48914,49218,49522,49826,50130,50434,50738,51042,51346,51650,51954,52258,52562,52866,53170,53474,53778,54082,54386,54690,54994,55298,55602,55906,56210,56514,56818,57122,57426,57730,58034,58338,58642,58946,59250,59554,59858,60162,60466,60770,61074,61378,61682,61986,62290,62594,62898,63202,63506,63810,64114,64418,64722,65026,65330,65634,65938,66242,66546,66850,67154,67458,67762,68066,68370,68674,68978,69282,69586,69890,70194,70498,70802,71106,71410,71714,72018,72322,72626,72930,73234,73538,73842,74146,74450,74754,75058,75362,75666,75970,76274,76578,76882,77186,77490,77794'/>
+  </group>
+  <group name='274'>
+    <ids val='275,579,883,1187,1491,1795,2099,2403,2707,3011,3315,3619,3923,4227,4531,4835,5139,5443,5747,6051,6355,6659,6963,7267,7571,7875,8179,8483,8787,9091,9395,9699,10003,10307,10611,10915,11219,11523,11827,12131,12435,12739,13043,13347,13651,13955,14259,14563,14867,15171,15475,15779,16083,16387,16691,16995,17299,17603,17907,18211,18515,18819,19123,19427,19731,20035,20339,20643,20947,21251,21555,21859,22163,22467,22771,23075,23379,23683,23987,24291,24595,24899,25203,25507,25811,26115,26419,26723,27027,27331,27635,27939,28243,28547,28851,29155,29459,29763,30067,30371,30675,30979,31283,31587,31891,32195,32499,32803,33107,33411,33715,34019,34323,34627,34931,35235,35539,35843,36147,36451,36755,37059,37363,37667,37971,38275,38579,38883,39187,39491,39795,40099,40403,40707,41011,41315,41619,41923,42227,42531,42835,43139,43443,43747,44051,44355,44659,44963,45267,45571,45875,46179,46483,46787,47091,47395,47699,48003,48307,48611,48915,49219,49523,49827,50131,50435,50739,51043,51347,51651,51955,52259,52563,52867,53171,53475,53779,54083,54387,54691,54995,55299,55603,55907,56211,56515,56819,57123,57427,57731,58035,58339,58643,58947,59251,59555,59859,60163,60467,60771,61075,61379,61683,61987,62291,62595,62899,63203,63507,63811,64115,64419,64723,65027,65331,65635,65939,66243,66547,66851,67155,67459,67763,68067,68371,68675,68979,69283,69587,69891,70195,70499,70803,71107,71411,71715,72019,72323,72627,72931,73235,73539,73843,74147,74451,74755,75059,75363,75667,75971,76275,76579,76883,77187,77491,77795'/>
+  </group>
+  <group name='275'>
+    <ids val='276,580,884,1188,1492,1796,2100,2404,2708,3012,3316,3620,3924,4228,4532,4836,5140,5444,5748,6052,6356,6660,6964,7268,7572,7876,8180,8484,8788,9092,9396,9700,10004,10308,10612,10916,11220,11524,11828,12132,12436,12740,13044,13348,13652,13956,14260,14564,14868,15172,15476,15780,16084,16388,16692,16996,17300,17604,17908,18212,18516,18820,19124,19428,19732,20036,20340,20644,20948,21252,21556,21860,22164,22468,22772,23076,23380,23684,23988,24292,24596,24900,25204,25508,25812,26116,26420,26724,27028,27332,27636,27940,28244,28548,28852,29156,29460,29764,30068,30372,30676,30980,31284,31588,31892,32196,32500,32804,33108,33412,33716,34020,34324,34628,34932,35236,35540,35844,36148,36452,36756,37060,37364,37668,37972,38276,38580,38884,39188,39492,39796,40100,40404,40708,41012,41316,41620,41924,42228,42532,42836,43140,43444,43748,44052,44356,44660,44964,45268,45572,45876,46180,46484,46788,47092,47396,47700,48004,48308,48612,48916,49220,49524,49828,50132,50436,50740,51044,51348,51652,51956,52260,52564,52868,53172,53476,53780,54084,54388,54692,54996,55300,55604,55908,56212,56516,56820,57124,57428,57732,58036,58340,58644,58948,59252,59556,59860,60164,60468,60772,61076,61380,61684,61988,62292,62596,62900,63204,63508,63812,64116,64420,64724,65028,65332,65636,65940,66244,66548,66852,67156,67460,67764,68068,68372,68676,68980,69284,69588,69892,70196,70500,70804,71108,71412,71716,72020,72324,72628,72932,73236,73540,73844,74148,74452,74756,75060,75364,75668,75972,76276,76580,76884,77188,77492,77796'/>
+  </group>
+  <group name='276'>
+    <ids val='277,581,885,1189,1493,1797,2101,2405,2709,3013,3317,3621,3925,4229,4533,4837,5141,5445,5749,6053,6357,6661,6965,7269,7573,7877,8181,8485,8789,9093,9397,9701,10005,10309,10613,10917,11221,11525,11829,12133,12437,12741,13045,13349,13653,13957,14261,14565,14869,15173,15477,15781,16085,16389,16693,16997,17301,17605,17909,18213,18517,18821,19125,19429,19733,20037,20341,20645,20949,21253,21557,21861,22165,22469,22773,23077,23381,23685,23989,24293,24597,24901,25205,25509,25813,26117,26421,26725,27029,27333,27637,27941,28245,28549,28853,29157,29461,29765,30069,30373,30677,30981,31285,31589,31893,32197,32501,32805,33109,33413,33717,34021,34325,34629,34933,35237,35541,35845,36149,36453,36757,37061,37365,37669,37973,38277,38581,38885,39189,39493,39797,40101,40405,40709,41013,41317,41621,41925,42229,42533,42837,43141,43445,43749,44053,44357,44661,44965,45269,45573,45877,46181,46485,46789,47093,47397,47701,48005,48309,48613,48917,49221,49525,49829,50133,50437,50741,51045,51349,51653,51957,52261,52565,52869,53173,53477,53781,54085,54389,54693,54997,55301,55605,55909,56213,56517,56821,57125,57429,57733,58037,58341,58645,58949,59253,59557,59861,60165,60469,60773,61077,61381,61685,61989,62293,62597,62901,63205,63509,63813,64117,64421,64725,65029,65333,65637,65941,66245,66549,66853,67157,67461,67765,68069,68373,68677,68981,69285,69589,69893,70197,70501,70805,71109,71413,71717,72021,72325,72629,72933,73237,73541,73845,74149,74453,74757,75061,75365,75669,75973,76277,76581,76885,77189,77493,77797'/>
+  </group>
+  <group name='277'>
+    <ids val='278,582,886,1190,1494,1798,2102,2406,2710,3014,3318,3622,3926,4230,4534,4838,5142,5446,5750,6054,6358,6662,6966,7270,7574,7878,8182,8486,8790,9094,9398,9702,10006,10310,10614,10918,11222,11526,11830,12134,12438,12742,13046,13350,13654,13958,14262,14566,14870,15174,15478,15782,16086,16390,16694,16998,17302,17606,17910,18214,18518,18822,19126,19430,19734,20038,20342,20646,20950,21254,21558,21862,22166,22470,22774,23078,23382,23686,23990,24294,24598,24902,25206,25510,25814,26118,26422,26726,27030,27334,27638,27942,28246,28550,28854,29158,29462,29766,30070,30374,30678,30982,31286,31590,31894,32198,32502,32806,33110,33414,33718,34022,34326,34630,34934,35238,35542,35846,36150,36454,36758,37062,37366,37670,37974,38278,38582,38886,39190,39494,39798,40102,40406,40710,41014,41318,41622,41926,42230,42534,42838,43142,43446,43750,44054,44358,44662,44966,45270,45574,45878,46182,46486,46790,47094,47398,47702,48006,48310,48614,48918,49222,49526,49830,50134,50438,50742,51046,51350,51654,51958,52262,52566,52870,53174,53478,53782,54086,54390,54694,54998,55302,55606,55910,56214,56518,56822,57126,57430,57734,58038,58342,58646,58950,59254,59558,59862,60166,60470,60774,61078,61382,61686,61990,62294,62598,62902,63206,63510,63814,64118,64422,64726,65030,65334,65638,65942,66246,66550,66854,67158,67462,67766,68070,68374,68678,68982,69286,69590,69894,70198,70502,70806,71110,71414,71718,72022,72326,72630,72934,73238,73542,73846,74150,74454,74758,75062,75366,75670,75974,76278,76582,76886,77190,77494,77798'/>
+  </group>
+  <group name='278'>
+    <ids val='279,583,887,1191,1495,1799,2103,2407,2711,3015,3319,3623,3927,4231,4535,4839,5143,5447,5751,6055,6359,6663,6967,7271,7575,7879,8183,8487,8791,9095,9399,9703,10007,10311,10615,10919,11223,11527,11831,12135,12439,12743,13047,13351,13655,13959,14263,14567,14871,15175,15479,15783,16087,16391,16695,16999,17303,17607,17911,18215,18519,18823,19127,19431,19735,20039,20343,20647,20951,21255,21559,21863,22167,22471,22775,23079,23383,23687,23991,24295,24599,24903,25207,25511,25815,26119,26423,26727,27031,27335,27639,27943,28247,28551,28855,29159,29463,29767,30071,30375,30679,30983,31287,31591,31895,32199,32503,32807,33111,33415,33719,34023,34327,34631,34935,35239,35543,35847,36151,36455,36759,37063,37367,37671,37975,38279,38583,38887,39191,39495,39799,40103,40407,40711,41015,41319,41623,41927,42231,42535,42839,43143,43447,43751,44055,44359,44663,44967,45271,45575,45879,46183,46487,46791,47095,47399,47703,48007,48311,48615,48919,49223,49527,49831,50135,50439,50743,51047,51351,51655,51959,52263,52567,52871,53175,53479,53783,54087,54391,54695,54999,55303,55607,55911,56215,56519,56823,57127,57431,57735,58039,58343,58647,58951,59255,59559,59863,60167,60471,60775,61079,61383,61687,61991,62295,62599,62903,63207,63511,63815,64119,64423,64727,65031,65335,65639,65943,66247,66551,66855,67159,67463,67767,68071,68375,68679,68983,69287,69591,69895,70199,70503,70807,71111,71415,71719,72023,72327,72631,72935,73239,73543,73847,74151,74455,74759,75063,75367,75671,75975,76279,76583,76887,77191,77495,77799'/>
+  </group>
+  <group name='279'>
+    <ids val='280,584,888,1192,1496,1800,2104,2408,2712,3016,3320,3624,3928,4232,4536,4840,5144,5448,5752,6056,6360,6664,6968,7272,7576,7880,8184,8488,8792,9096,9400,9704,10008,10312,10616,10920,11224,11528,11832,12136,12440,12744,13048,13352,13656,13960,14264,14568,14872,15176,15480,15784,16088,16392,16696,17000,17304,17608,17912,18216,18520,18824,19128,19432,19736,20040,20344,20648,20952,21256,21560,21864,22168,22472,22776,23080,23384,23688,23992,24296,24600,24904,25208,25512,25816,26120,26424,26728,27032,27336,27640,27944,28248,28552,28856,29160,29464,29768,30072,30376,30680,30984,31288,31592,31896,32200,32504,32808,33112,33416,33720,34024,34328,34632,34936,35240,35544,35848,36152,36456,36760,37064,37368,37672,37976,38280,38584,38888,39192,39496,39800,40104,40408,40712,41016,41320,41624,41928,42232,42536,42840,43144,43448,43752,44056,44360,44664,44968,45272,45576,45880,46184,46488,46792,47096,47400,47704,48008,48312,48616,48920,49224,49528,49832,50136,50440,50744,51048,51352,51656,51960,52264,52568,52872,53176,53480,53784,54088,54392,54696,55000,55304,55608,55912,56216,56520,56824,57128,57432,57736,58040,58344,58648,58952,59256,59560,59864,60168,60472,60776,61080,61384,61688,61992,62296,62600,62904,63208,63512,63816,64120,64424,64728,65032,65336,65640,65944,66248,66552,66856,67160,67464,67768,68072,68376,68680,68984,69288,69592,69896,70200,70504,70808,71112,71416,71720,72024,72328,72632,72936,73240,73544,73848,74152,74456,74760,75064,75368,75672,75976,76280,76584,76888,77192,77496,77800'/>
+  </group>
+  <group name='280'>
+    <ids val='281,585,889,1193,1497,1801,2105,2409,2713,3017,3321,3625,3929,4233,4537,4841,5145,5449,5753,6057,6361,6665,6969,7273,7577,7881,8185,8489,8793,9097,9401,9705,10009,10313,10617,10921,11225,11529,11833,12137,12441,12745,13049,13353,13657,13961,14265,14569,14873,15177,15481,15785,16089,16393,16697,17001,17305,17609,17913,18217,18521,18825,19129,19433,19737,20041,20345,20649,20953,21257,21561,21865,22169,22473,22777,23081,23385,23689,23993,24297,24601,24905,25209,25513,25817,26121,26425,26729,27033,27337,27641,27945,28249,28553,28857,29161,29465,29769,30073,30377,30681,30985,31289,31593,31897,32201,32505,32809,33113,33417,33721,34025,34329,34633,34937,35241,35545,35849,36153,36457,36761,37065,37369,37673,37977,38281,38585,38889,39193,39497,39801,40105,40409,40713,41017,41321,41625,41929,42233,42537,42841,43145,43449,43753,44057,44361,44665,44969,45273,45577,45881,46185,46489,46793,47097,47401,47705,48009,48313,48617,48921,49225,49529,49833,50137,50441,50745,51049,51353,51657,51961,52265,52569,52873,53177,53481,53785,54089,54393,54697,55001,55305,55609,55913,56217,56521,56825,57129,57433,57737,58041,58345,58649,58953,59257,59561,59865,60169,60473,60777,61081,61385,61689,61993,62297,62601,62905,63209,63513,63817,64121,64425,64729,65033,65337,65641,65945,66249,66553,66857,67161,67465,67769,68073,68377,68681,68985,69289,69593,69897,70201,70505,70809,71113,71417,71721,72025,72329,72633,72937,73241,73545,73849,74153,74457,74761,75065,75369,75673,75977,76281,76585,76889,77193,77497,77801'/>
+  </group>
+  <group name='281'>
+    <ids val='282,586,890,1194,1498,1802,2106,2410,2714,3018,3322,3626,3930,4234,4538,4842,5146,5450,5754,6058,6362,6666,6970,7274,7578,7882,8186,8490,8794,9098,9402,9706,10010,10314,10618,10922,11226,11530,11834,12138,12442,12746,13050,13354,13658,13962,14266,14570,14874,15178,15482,15786,16090,16394,16698,17002,17306,17610,17914,18218,18522,18826,19130,19434,19738,20042,20346,20650,20954,21258,21562,21866,22170,22474,22778,23082,23386,23690,23994,24298,24602,24906,25210,25514,25818,26122,26426,26730,27034,27338,27642,27946,28250,28554,28858,29162,29466,29770,30074,30378,30682,30986,31290,31594,31898,32202,32506,32810,33114,33418,33722,34026,34330,34634,34938,35242,35546,35850,36154,36458,36762,37066,37370,37674,37978,38282,38586,38890,39194,39498,39802,40106,40410,40714,41018,41322,41626,41930,42234,42538,42842,43146,43450,43754,44058,44362,44666,44970,45274,45578,45882,46186,46490,46794,47098,47402,47706,48010,48314,48618,48922,49226,49530,49834,50138,50442,50746,51050,51354,51658,51962,52266,52570,52874,53178,53482,53786,54090,54394,54698,55002,55306,55610,55914,56218,56522,56826,57130,57434,57738,58042,58346,58650,58954,59258,59562,59866,60170,60474,60778,61082,61386,61690,61994,62298,62602,62906,63210,63514,63818,64122,64426,64730,65034,65338,65642,65946,66250,66554,66858,67162,67466,67770,68074,68378,68682,68986,69290,69594,69898,70202,70506,70810,71114,71418,71722,72026,72330,72634,72938,73242,73546,73850,74154,74458,74762,75066,75370,75674,75978,76282,76586,76890,77194,77498,77802'/>
+  </group>
+  <group name='282'>
+    <ids val='283,587,891,1195,1499,1803,2107,2411,2715,3019,3323,3627,3931,4235,4539,4843,5147,5451,5755,6059,6363,6667,6971,7275,7579,7883,8187,8491,8795,9099,9403,9707,10011,10315,10619,10923,11227,11531,11835,12139,12443,12747,13051,13355,13659,13963,14267,14571,14875,15179,15483,15787,16091,16395,16699,17003,17307,17611,17915,18219,18523,18827,19131,19435,19739,20043,20347,20651,20955,21259,21563,21867,22171,22475,22779,23083,23387,23691,23995,24299,24603,24907,25211,25515,25819,26123,26427,26731,27035,27339,27643,27947,28251,28555,28859,29163,29467,29771,30075,30379,30683,30987,31291,31595,31899,32203,32507,32811,33115,33419,33723,34027,34331,34635,34939,35243,35547,35851,36155,36459,36763,37067,37371,37675,37979,38283,38587,38891,39195,39499,39803,40107,40411,40715,41019,41323,41627,41931,42235,42539,42843,43147,43451,43755,44059,44363,44667,44971,45275,45579,45883,46187,46491,46795,47099,47403,47707,48011,48315,48619,48923,49227,49531,49835,50139,50443,50747,51051,51355,51659,51963,52267,52571,52875,53179,53483,53787,54091,54395,54699,55003,55307,55611,55915,56219,56523,56827,57131,57435,57739,58043,58347,58651,58955,59259,59563,59867,60171,60475,60779,61083,61387,61691,61995,62299,62603,62907,63211,63515,63819,64123,64427,64731,65035,65339,65643,65947,66251,66555,66859,67163,67467,67771,68075,68379,68683,68987,69291,69595,69899,70203,70507,70811,71115,71419,71723,72027,72331,72635,72939,73243,73547,73851,74155,74459,74763,75067,75371,75675,75979,76283,76587,76891,77195,77499,77803'/>
+  </group>
+  <group name='283'>
+    <ids val='284,588,892,1196,1500,1804,2108,2412,2716,3020,3324,3628,3932,4236,4540,4844,5148,5452,5756,6060,6364,6668,6972,7276,7580,7884,8188,8492,8796,9100,9404,9708,10012,10316,10620,10924,11228,11532,11836,12140,12444,12748,13052,13356,13660,13964,14268,14572,14876,15180,15484,15788,16092,16396,16700,17004,17308,17612,17916,18220,18524,18828,19132,19436,19740,20044,20348,20652,20956,21260,21564,21868,22172,22476,22780,23084,23388,23692,23996,24300,24604,24908,25212,25516,25820,26124,26428,26732,27036,27340,27644,27948,28252,28556,28860,29164,29468,29772,30076,30380,30684,30988,31292,31596,31900,32204,32508,32812,33116,33420,33724,34028,34332,34636,34940,35244,35548,35852,36156,36460,36764,37068,37372,37676,37980,38284,38588,38892,39196,39500,39804,40108,40412,40716,41020,41324,41628,41932,42236,42540,42844,43148,43452,43756,44060,44364,44668,44972,45276,45580,45884,46188,46492,46796,47100,47404,47708,48012,48316,48620,48924,49228,49532,49836,50140,50444,50748,51052,51356,51660,51964,52268,52572,52876,53180,53484,53788,54092,54396,54700,55004,55308,55612,55916,56220,56524,56828,57132,57436,57740,58044,58348,58652,58956,59260,59564,59868,60172,60476,60780,61084,61388,61692,61996,62300,62604,62908,63212,63516,63820,64124,64428,64732,65036,65340,65644,65948,66252,66556,66860,67164,67468,67772,68076,68380,68684,68988,69292,69596,69900,70204,70508,70812,71116,71420,71724,72028,72332,72636,72940,73244,73548,73852,74156,74460,74764,75068,75372,75676,75980,76284,76588,76892,77196,77500,77804'/>
+  </group>
+  <group name='284'>
+    <ids val='285,589,893,1197,1501,1805,2109,2413,2717,3021,3325,3629,3933,4237,4541,4845,5149,5453,5757,6061,6365,6669,6973,7277,7581,7885,8189,8493,8797,9101,9405,9709,10013,10317,10621,10925,11229,11533,11837,12141,12445,12749,13053,13357,13661,13965,14269,14573,14877,15181,15485,15789,16093,16397,16701,17005,17309,17613,17917,18221,18525,18829,19133,19437,19741,20045,20349,20653,20957,21261,21565,21869,22173,22477,22781,23085,23389,23693,23997,24301,24605,24909,25213,25517,25821,26125,26429,26733,27037,27341,27645,27949,28253,28557,28861,29165,29469,29773,30077,30381,30685,30989,31293,31597,31901,32205,32509,32813,33117,33421,33725,34029,34333,34637,34941,35245,35549,35853,36157,36461,36765,37069,37373,37677,37981,38285,38589,38893,39197,39501,39805,40109,40413,40717,41021,41325,41629,41933,42237,42541,42845,43149,43453,43757,44061,44365,44669,44973,45277,45581,45885,46189,46493,46797,47101,47405,47709,48013,48317,48621,48925,49229,49533,49837,50141,50445,50749,51053,51357,51661,51965,52269,52573,52877,53181,53485,53789,54093,54397,54701,55005,55309,55613,55917,56221,56525,56829,57133,57437,57741,58045,58349,58653,58957,59261,59565,59869,60173,60477,60781,61085,61389,61693,61997,62301,62605,62909,63213,63517,63821,64125,64429,64733,65037,65341,65645,65949,66253,66557,66861,67165,67469,67773,68077,68381,68685,68989,69293,69597,69901,70205,70509,70813,71117,71421,71725,72029,72333,72637,72941,73245,73549,73853,74157,74461,74765,75069,75373,75677,75981,76285,76589,76893,77197,77501,77805'/>
+  </group>
+  <group name='285'>
+    <ids val='286,590,894,1198,1502,1806,2110,2414,2718,3022,3326,3630,3934,4238,4542,4846,5150,5454,5758,6062,6366,6670,6974,7278,7582,7886,8190,8494,8798,9102,9406,9710,10014,10318,10622,10926,11230,11534,11838,12142,12446,12750,13054,13358,13662,13966,14270,14574,14878,15182,15486,15790,16094,16398,16702,17006,17310,17614,17918,18222,18526,18830,19134,19438,19742,20046,20350,20654,20958,21262,21566,21870,22174,22478,22782,23086,23390,23694,23998,24302,24606,24910,25214,25518,25822,26126,26430,26734,27038,27342,27646,27950,28254,28558,28862,29166,29470,29774,30078,30382,30686,30990,31294,31598,31902,32206,32510,32814,33118,33422,33726,34030,34334,34638,34942,35246,35550,35854,36158,36462,36766,37070,37374,37678,37982,38286,38590,38894,39198,39502,39806,40110,40414,40718,41022,41326,41630,41934,42238,42542,42846,43150,43454,43758,44062,44366,44670,44974,45278,45582,45886,46190,46494,46798,47102,47406,47710,48014,48318,48622,48926,49230,49534,49838,50142,50446,50750,51054,51358,51662,51966,52270,52574,52878,53182,53486,53790,54094,54398,54702,55006,55310,55614,55918,56222,56526,56830,57134,57438,57742,58046,58350,58654,58958,59262,59566,59870,60174,60478,60782,61086,61390,61694,61998,62302,62606,62910,63214,63518,63822,64126,64430,64734,65038,65342,65646,65950,66254,66558,66862,67166,67470,67774,68078,68382,68686,68990,69294,69598,69902,70206,70510,70814,71118,71422,71726,72030,72334,72638,72942,73246,73550,73854,74158,74462,74766,75070,75374,75678,75982,76286,76590,76894,77198,77502,77806'/>
+  </group>
+  <group name='286'>
+    <ids val='287,591,895,1199,1503,1807,2111,2415,2719,3023,3327,3631,3935,4239,4543,4847,5151,5455,5759,6063,6367,6671,6975,7279,7583,7887,8191,8495,8799,9103,9407,9711,10015,10319,10623,10927,11231,11535,11839,12143,12447,12751,13055,13359,13663,13967,14271,14575,14879,15183,15487,15791,16095,16399,16703,17007,17311,17615,17919,18223,18527,18831,19135,19439,19743,20047,20351,20655,20959,21263,21567,21871,22175,22479,22783,23087,23391,23695,23999,24303,24607,24911,25215,25519,25823,26127,26431,26735,27039,27343,27647,27951,28255,28559,28863,29167,29471,29775,30079,30383,30687,30991,31295,31599,31903,32207,32511,32815,33119,33423,33727,34031,34335,34639,34943,35247,35551,35855,36159,36463,36767,37071,37375,37679,37983,38287,38591,38895,39199,39503,39807,40111,40415,40719,41023,41327,41631,41935,42239,42543,42847,43151,43455,43759,44063,44367,44671,44975,45279,45583,45887,46191,46495,46799,47103,47407,47711,48015,48319,48623,48927,49231,49535,49839,50143,50447,50751,51055,51359,51663,51967,52271,52575,52879,53183,53487,53791,54095,54399,54703,55007,55311,55615,55919,56223,56527,56831,57135,57439,57743,58047,58351,58655,58959,59263,59567,59871,60175,60479,60783,61087,61391,61695,61999,62303,62607,62911,63215,63519,63823,64127,64431,64735,65039,65343,65647,65951,66255,66559,66863,67167,67471,67775,68079,68383,68687,68991,69295,69599,69903,70207,70511,70815,71119,71423,71727,72031,72335,72639,72943,73247,73551,73855,74159,74463,74767,75071,75375,75679,75983,76287,76591,76895,77199,77503,77807'/>
+  </group>
+  <group name='287'>
+    <ids val='288,592,896,1200,1504,1808,2112,2416,2720,3024,3328,3632,3936,4240,4544,4848,5152,5456,5760,6064,6368,6672,6976,7280,7584,7888,8192,8496,8800,9104,9408,9712,10016,10320,10624,10928,11232,11536,11840,12144,12448,12752,13056,13360,13664,13968,14272,14576,14880,15184,15488,15792,16096,16400,16704,17008,17312,17616,17920,18224,18528,18832,19136,19440,19744,20048,20352,20656,20960,21264,21568,21872,22176,22480,22784,23088,23392,23696,24000,24304,24608,24912,25216,25520,25824,26128,26432,26736,27040,27344,27648,27952,28256,28560,28864,29168,29472,29776,30080,30384,30688,30992,31296,31600,31904,32208,32512,32816,33120,33424,33728,34032,34336,34640,34944,35248,35552,35856,36160,36464,36768,37072,37376,37680,37984,38288,38592,38896,39200,39504,39808,40112,40416,40720,41024,41328,41632,41936,42240,42544,42848,43152,43456,43760,44064,44368,44672,44976,45280,45584,45888,46192,46496,46800,47104,47408,47712,48016,48320,48624,48928,49232,49536,49840,50144,50448,50752,51056,51360,51664,51968,52272,52576,52880,53184,53488,53792,54096,54400,54704,55008,55312,55616,55920,56224,56528,56832,57136,57440,57744,58048,58352,58656,58960,59264,59568,59872,60176,60480,60784,61088,61392,61696,62000,62304,62608,62912,63216,63520,63824,64128,64432,64736,65040,65344,65648,65952,66256,66560,66864,67168,67472,67776,68080,68384,68688,68992,69296,69600,69904,70208,70512,70816,71120,71424,71728,72032,72336,72640,72944,73248,73552,73856,74160,74464,74768,75072,75376,75680,75984,76288,76592,76896,77200,77504,77808'/>
+  </group>
+  <group name='288'>
+    <ids val='289,593,897,1201,1505,1809,2113,2417,2721,3025,3329,3633,3937,4241,4545,4849,5153,5457,5761,6065,6369,6673,6977,7281,7585,7889,8193,8497,8801,9105,9409,9713,10017,10321,10625,10929,11233,11537,11841,12145,12449,12753,13057,13361,13665,13969,14273,14577,14881,15185,15489,15793,16097,16401,16705,17009,17313,17617,17921,18225,18529,18833,19137,19441,19745,20049,20353,20657,20961,21265,21569,21873,22177,22481,22785,23089,23393,23697,24001,24305,24609,24913,25217,25521,25825,26129,26433,26737,27041,27345,27649,27953,28257,28561,28865,29169,29473,29777,30081,30385,30689,30993,31297,31601,31905,32209,32513,32817,33121,33425,33729,34033,34337,34641,34945,35249,35553,35857,36161,36465,36769,37073,37377,37681,37985,38289,38593,38897,39201,39505,39809,40113,40417,40721,41025,41329,41633,41937,42241,42545,42849,43153,43457,43761,44065,44369,44673,44977,45281,45585,45889,46193,46497,46801,47105,47409,47713,48017,48321,48625,48929,49233,49537,49841,50145,50449,50753,51057,51361,51665,51969,52273,52577,52881,53185,53489,53793,54097,54401,54705,55009,55313,55617,55921,56225,56529,56833,57137,57441,57745,58049,58353,58657,58961,59265,59569,59873,60177,60481,60785,61089,61393,61697,62001,62305,62609,62913,63217,63521,63825,64129,64433,64737,65041,65345,65649,65953,66257,66561,66865,67169,67473,67777,68081,68385,68689,68993,69297,69601,69905,70209,70513,70817,71121,71425,71729,72033,72337,72641,72945,73249,73553,73857,74161,74465,74769,75073,75377,75681,75985,76289,76593,76897,77201,77505,77809'/>
+  </group>
+  <group name='289'>
+    <ids val='290,594,898,1202,1506,1810,2114,2418,2722,3026,3330,3634,3938,4242,4546,4850,5154,5458,5762,6066,6370,6674,6978,7282,7586,7890,8194,8498,8802,9106,9410,9714,10018,10322,10626,10930,11234,11538,11842,12146,12450,12754,13058,13362,13666,13970,14274,14578,14882,15186,15490,15794,16098,16402,16706,17010,17314,17618,17922,18226,18530,18834,19138,19442,19746,20050,20354,20658,20962,21266,21570,21874,22178,22482,22786,23090,23394,23698,24002,24306,24610,24914,25218,25522,25826,26130,26434,26738,27042,27346,27650,27954,28258,28562,28866,29170,29474,29778,30082,30386,30690,30994,31298,31602,31906,32210,32514,32818,33122,33426,33730,34034,34338,34642,34946,35250,35554,35858,36162,36466,36770,37074,37378,37682,37986,38290,38594,38898,39202,39506,39810,40114,40418,40722,41026,41330,41634,41938,42242,42546,42850,43154,43458,43762,44066,44370,44674,44978,45282,45586,45890,46194,46498,46802,47106,47410,47714,48018,48322,48626,48930,49234,49538,49842,50146,50450,50754,51058,51362,51666,51970,52274,52578,52882,53186,53490,53794,54098,54402,54706,55010,55314,55618,55922,56226,56530,56834,57138,57442,57746,58050,58354,58658,58962,59266,59570,59874,60178,60482,60786,61090,61394,61698,62002,62306,62610,62914,63218,63522,63826,64130,64434,64738,65042,65346,65650,65954,66258,66562,66866,67170,67474,67778,68082,68386,68690,68994,69298,69602,69906,70210,70514,70818,71122,71426,71730,72034,72338,72642,72946,73250,73554,73858,74162,74466,74770,75074,75378,75682,75986,76290,76594,76898,77202,77506,77810'/>
+  </group>
+  <group name='290'>
+    <ids val='291,595,899,1203,1507,1811,2115,2419,2723,3027,3331,3635,3939,4243,4547,4851,5155,5459,5763,6067,6371,6675,6979,7283,7587,7891,8195,8499,8803,9107,9411,9715,10019,10323,10627,10931,11235,11539,11843,12147,12451,12755,13059,13363,13667,13971,14275,14579,14883,15187,15491,15795,16099,16403,16707,17011,17315,17619,17923,18227,18531,18835,19139,19443,19747,20051,20355,20659,20963,21267,21571,21875,22179,22483,22787,23091,23395,23699,24003,24307,24611,24915,25219,25523,25827,26131,26435,26739,27043,27347,27651,27955,28259,28563,28867,29171,29475,29779,30083,30387,30691,30995,31299,31603,31907,32211,32515,32819,33123,33427,33731,34035,34339,34643,34947,35251,35555,35859,36163,36467,36771,37075,37379,37683,37987,38291,38595,38899,39203,39507,39811,40115,40419,40723,41027,41331,41635,41939,42243,42547,42851,43155,43459,43763,44067,44371,44675,44979,45283,45587,45891,46195,46499,46803,47107,47411,47715,48019,48323,48627,48931,49235,49539,49843,50147,50451,50755,51059,51363,51667,51971,52275,52579,52883,53187,53491,53795,54099,54403,54707,55011,55315,55619,55923,56227,56531,56835,57139,57443,57747,58051,58355,58659,58963,59267,59571,59875,60179,60483,60787,61091,61395,61699,62003,62307,62611,62915,63219,63523,63827,64131,64435,64739,65043,65347,65651,65955,66259,66563,66867,67171,67475,67779,68083,68387,68691,68995,69299,69603,69907,70211,70515,70819,71123,71427,71731,72035,72339,72643,72947,73251,73555,73859,74163,74467,74771,75075,75379,75683,75987,76291,76595,76899,77203,77507,77811'/>
+  </group>
+  <group name='291'>
+    <ids val='292,596,900,1204,1508,1812,2116,2420,2724,3028,3332,3636,3940,4244,4548,4852,5156,5460,5764,6068,6372,6676,6980,7284,7588,7892,8196,8500,8804,9108,9412,9716,10020,10324,10628,10932,11236,11540,11844,12148,12452,12756,13060,13364,13668,13972,14276,14580,14884,15188,15492,15796,16100,16404,16708,17012,17316,17620,17924,18228,18532,18836,19140,19444,19748,20052,20356,20660,20964,21268,21572,21876,22180,22484,22788,23092,23396,23700,24004,24308,24612,24916,25220,25524,25828,26132,26436,26740,27044,27348,27652,27956,28260,28564,28868,29172,29476,29780,30084,30388,30692,30996,31300,31604,31908,32212,32516,32820,33124,33428,33732,34036,34340,34644,34948,35252,35556,35860,36164,36468,36772,37076,37380,37684,37988,38292,38596,38900,39204,39508,39812,40116,40420,40724,41028,41332,41636,41940,42244,42548,42852,43156,43460,43764,44068,44372,44676,44980,45284,45588,45892,46196,46500,46804,47108,47412,47716,48020,48324,48628,48932,49236,49540,49844,50148,50452,50756,51060,51364,51668,51972,52276,52580,52884,53188,53492,53796,54100,54404,54708,55012,55316,55620,55924,56228,56532,56836,57140,57444,57748,58052,58356,58660,58964,59268,59572,59876,60180,60484,60788,61092,61396,61700,62004,62308,62612,62916,63220,63524,63828,64132,64436,64740,65044,65348,65652,65956,66260,66564,66868,67172,67476,67780,68084,68388,68692,68996,69300,69604,69908,70212,70516,70820,71124,71428,71732,72036,72340,72644,72948,73252,73556,73860,74164,74468,74772,75076,75380,75684,75988,76292,76596,76900,77204,77508,77812'/>
+  </group>
+  <group name='292'>
+    <ids val='293,597,901,1205,1509,1813,2117,2421,2725,3029,3333,3637,3941,4245,4549,4853,5157,5461,5765,6069,6373,6677,6981,7285,7589,7893,8197,8501,8805,9109,9413,9717,10021,10325,10629,10933,11237,11541,11845,12149,12453,12757,13061,13365,13669,13973,14277,14581,14885,15189,15493,15797,16101,16405,16709,17013,17317,17621,17925,18229,18533,18837,19141,19445,19749,20053,20357,20661,20965,21269,21573,21877,22181,22485,22789,23093,23397,23701,24005,24309,24613,24917,25221,25525,25829,26133,26437,26741,27045,27349,27653,27957,28261,28565,28869,29173,29477,29781,30085,30389,30693,30997,31301,31605,31909,32213,32517,32821,33125,33429,33733,34037,34341,34645,34949,35253,35557,35861,36165,36469,36773,37077,37381,37685,37989,38293,38597,38901,39205,39509,39813,40117,40421,40725,41029,41333,41637,41941,42245,42549,42853,43157,43461,43765,44069,44373,44677,44981,45285,45589,45893,46197,46501,46805,47109,47413,47717,48021,48325,48629,48933,49237,49541,49845,50149,50453,50757,51061,51365,51669,51973,52277,52581,52885,53189,53493,53797,54101,54405,54709,55013,55317,55621,55925,56229,56533,56837,57141,57445,57749,58053,58357,58661,58965,59269,59573,59877,60181,60485,60789,61093,61397,61701,62005,62309,62613,62917,63221,63525,63829,64133,64437,64741,65045,65349,65653,65957,66261,66565,66869,67173,67477,67781,68085,68389,68693,68997,69301,69605,69909,70213,70517,70821,71125,71429,71733,72037,72341,72645,72949,73253,73557,73861,74165,74469,74773,75077,75381,75685,75989,76293,76597,76901,77205,77509,77813'/>
+  </group>
+  <group name='293'>
+    <ids val='294,598,902,1206,1510,1814,2118,2422,2726,3030,3334,3638,3942,4246,4550,4854,5158,5462,5766,6070,6374,6678,6982,7286,7590,7894,8198,8502,8806,9110,9414,9718,10022,10326,10630,10934,11238,11542,11846,12150,12454,12758,13062,13366,13670,13974,14278,14582,14886,15190,15494,15798,16102,16406,16710,17014,17318,17622,17926,18230,18534,18838,19142,19446,19750,20054,20358,20662,20966,21270,21574,21878,22182,22486,22790,23094,23398,23702,24006,24310,24614,24918,25222,25526,25830,26134,26438,26742,27046,27350,27654,27958,28262,28566,28870,29174,29478,29782,30086,30390,30694,30998,31302,31606,31910,32214,32518,32822,33126,33430,33734,34038,34342,34646,34950,35254,35558,35862,36166,36470,36774,37078,37382,37686,37990,38294,38598,38902,39206,39510,39814,40118,40422,40726,41030,41334,41638,41942,42246,42550,42854,43158,43462,43766,44070,44374,44678,44982,45286,45590,45894,46198,46502,46806,47110,47414,47718,48022,48326,48630,48934,49238,49542,49846,50150,50454,50758,51062,51366,51670,51974,52278,52582,52886,53190,53494,53798,54102,54406,54710,55014,55318,55622,55926,56230,56534,56838,57142,57446,57750,58054,58358,58662,58966,59270,59574,59878,60182,60486,60790,61094,61398,61702,62006,62310,62614,62918,63222,63526,63830,64134,64438,64742,65046,65350,65654,65958,66262,66566,66870,67174,67478,67782,68086,68390,68694,68998,69302,69606,69910,70214,70518,70822,71126,71430,71734,72038,72342,72646,72950,73254,73558,73862,74166,74470,74774,75078,75382,75686,75990,76294,76598,76902,77206,77510,77814'/>
+  </group>
+  <group name='294'>
+    <ids val='295,599,903,1207,1511,1815,2119,2423,2727,3031,3335,3639,3943,4247,4551,4855,5159,5463,5767,6071,6375,6679,6983,7287,7591,7895,8199,8503,8807,9111,9415,9719,10023,10327,10631,10935,11239,11543,11847,12151,12455,12759,13063,13367,13671,13975,14279,14583,14887,15191,15495,15799,16103,16407,16711,17015,17319,17623,17927,18231,18535,18839,19143,19447,19751,20055,20359,20663,20967,21271,21575,21879,22183,22487,22791,23095,23399,23703,24007,24311,24615,24919,25223,25527,25831,26135,26439,26743,27047,27351,27655,27959,28263,28567,28871,29175,29479,29783,30087,30391,30695,30999,31303,31607,31911,32215,32519,32823,33127,33431,33735,34039,34343,34647,34951,35255,35559,35863,36167,36471,36775,37079,37383,37687,37991,38295,38599,38903,39207,39511,39815,40119,40423,40727,41031,41335,41639,41943,42247,42551,42855,43159,43463,43767,44071,44375,44679,44983,45287,45591,45895,46199,46503,46807,47111,47415,47719,48023,48327,48631,48935,49239,49543,49847,50151,50455,50759,51063,51367,51671,51975,52279,52583,52887,53191,53495,53799,54103,54407,54711,55015,55319,55623,55927,56231,56535,56839,57143,57447,57751,58055,58359,58663,58967,59271,59575,59879,60183,60487,60791,61095,61399,61703,62007,62311,62615,62919,63223,63527,63831,64135,64439,64743,65047,65351,65655,65959,66263,66567,66871,67175,67479,67783,68087,68391,68695,68999,69303,69607,69911,70215,70519,70823,71127,71431,71735,72039,72343,72647,72951,73255,73559,73863,74167,74471,74775,75079,75383,75687,75991,76295,76599,76903,77207,77511,77815'/>
+  </group>
+  <group name='295'>
+    <ids val='296,600,904,1208,1512,1816,2120,2424,2728,3032,3336,3640,3944,4248,4552,4856,5160,5464,5768,6072,6376,6680,6984,7288,7592,7896,8200,8504,8808,9112,9416,9720,10024,10328,10632,10936,11240,11544,11848,12152,12456,12760,13064,13368,13672,13976,14280,14584,14888,15192,15496,15800,16104,16408,16712,17016,17320,17624,17928,18232,18536,18840,19144,19448,19752,20056,20360,20664,20968,21272,21576,21880,22184,22488,22792,23096,23400,23704,24008,24312,24616,24920,25224,25528,25832,26136,26440,26744,27048,27352,27656,27960,28264,28568,28872,29176,29480,29784,30088,30392,30696,31000,31304,31608,31912,32216,32520,32824,33128,33432,33736,34040,34344,34648,34952,35256,35560,35864,36168,36472,36776,37080,37384,37688,37992,38296,38600,38904,39208,39512,39816,40120,40424,40728,41032,41336,41640,41944,42248,42552,42856,43160,43464,43768,44072,44376,44680,44984,45288,45592,45896,46200,46504,46808,47112,47416,47720,48024,48328,48632,48936,49240,49544,49848,50152,50456,50760,51064,51368,51672,51976,52280,52584,52888,53192,53496,53800,54104,54408,54712,55016,55320,55624,55928,56232,56536,56840,57144,57448,57752,58056,58360,58664,58968,59272,59576,59880,60184,60488,60792,61096,61400,61704,62008,62312,62616,62920,63224,63528,63832,64136,64440,64744,65048,65352,65656,65960,66264,66568,66872,67176,67480,67784,68088,68392,68696,69000,69304,69608,69912,70216,70520,70824,71128,71432,71736,72040,72344,72648,72952,73256,73560,73864,74168,74472,74776,75080,75384,75688,75992,76296,76600,76904,77208,77512,77816'/>
+  </group>
+  <group name='296'>
+    <ids val='297,601,905,1209,1513,1817,2121,2425,2729,3033,3337,3641,3945,4249,4553,4857,5161,5465,5769,6073,6377,6681,6985,7289,7593,7897,8201,8505,8809,9113,9417,9721,10025,10329,10633,10937,11241,11545,11849,12153,12457,12761,13065,13369,13673,13977,14281,14585,14889,15193,15497,15801,16105,16409,16713,17017,17321,17625,17929,18233,18537,18841,19145,19449,19753,20057,20361,20665,20969,21273,21577,21881,22185,22489,22793,23097,23401,23705,24009,24313,24617,24921,25225,25529,25833,26137,26441,26745,27049,27353,27657,27961,28265,28569,28873,29177,29481,29785,30089,30393,30697,31001,31305,31609,31913,32217,32521,32825,33129,33433,33737,34041,34345,34649,34953,35257,35561,35865,36169,36473,36777,37081,37385,37689,37993,38297,38601,38905,39209,39513,39817,40121,40425,40729,41033,41337,41641,41945,42249,42553,42857,43161,43465,43769,44073,44377,44681,44985,45289,45593,45897,46201,46505,46809,47113,47417,47721,48025,48329,48633,48937,49241,49545,49849,50153,50457,50761,51065,51369,51673,51977,52281,52585,52889,53193,53497,53801,54105,54409,54713,55017,55321,55625,55929,56233,56537,56841,57145,57449,57753,58057,58361,58665,58969,59273,59577,59881,60185,60489,60793,61097,61401,61705,62009,62313,62617,62921,63225,63529,63833,64137,64441,64745,65049,65353,65657,65961,66265,66569,66873,67177,67481,67785,68089,68393,68697,69001,69305,69609,69913,70217,70521,70825,71129,71433,71737,72041,72345,72649,72953,73257,73561,73865,74169,74473,74777,75081,75385,75689,75993,76297,76601,76905,77209,77513,77817'/>
+  </group>
+  <group name='297'>
+    <ids val='298,602,906,1210,1514,1818,2122,2426,2730,3034,3338,3642,3946,4250,4554,4858,5162,5466,5770,6074,6378,6682,6986,7290,7594,7898,8202,8506,8810,9114,9418,9722,10026,10330,10634,10938,11242,11546,11850,12154,12458,12762,13066,13370,13674,13978,14282,14586,14890,15194,15498,15802,16106,16410,16714,17018,17322,17626,17930,18234,18538,18842,19146,19450,19754,20058,20362,20666,20970,21274,21578,21882,22186,22490,22794,23098,23402,23706,24010,24314,24618,24922,25226,25530,25834,26138,26442,26746,27050,27354,27658,27962,28266,28570,28874,29178,29482,29786,30090,30394,30698,31002,31306,31610,31914,32218,32522,32826,33130,33434,33738,34042,34346,34650,34954,35258,35562,35866,36170,36474,36778,37082,37386,37690,37994,38298,38602,38906,39210,39514,39818,40122,40426,40730,41034,41338,41642,41946,42250,42554,42858,43162,43466,43770,44074,44378,44682,44986,45290,45594,45898,46202,46506,46810,47114,47418,47722,48026,48330,48634,48938,49242,49546,49850,50154,50458,50762,51066,51370,51674,51978,52282,52586,52890,53194,53498,53802,54106,54410,54714,55018,55322,55626,55930,56234,56538,56842,57146,57450,57754,58058,58362,58666,58970,59274,59578,59882,60186,60490,60794,61098,61402,61706,62010,62314,62618,62922,63226,63530,63834,64138,64442,64746,65050,65354,65658,65962,66266,66570,66874,67178,67482,67786,68090,68394,68698,69002,69306,69610,69914,70218,70522,70826,71130,71434,71738,72042,72346,72650,72954,73258,73562,73866,74170,74474,74778,75082,75386,75690,75994,76298,76602,76906,77210,77514,77818'/>
+  </group>
+  <group name='298'>
+    <ids val='299,603,907,1211,1515,1819,2123,2427,2731,3035,3339,3643,3947,4251,4555,4859,5163,5467,5771,6075,6379,6683,6987,7291,7595,7899,8203,8507,8811,9115,9419,9723,10027,10331,10635,10939,11243,11547,11851,12155,12459,12763,13067,13371,13675,13979,14283,14587,14891,15195,15499,15803,16107,16411,16715,17019,17323,17627,17931,18235,18539,18843,19147,19451,19755,20059,20363,20667,20971,21275,21579,21883,22187,22491,22795,23099,23403,23707,24011,24315,24619,24923,25227,25531,25835,26139,26443,26747,27051,27355,27659,27963,28267,28571,28875,29179,29483,29787,30091,30395,30699,31003,31307,31611,31915,32219,32523,32827,33131,33435,33739,34043,34347,34651,34955,35259,35563,35867,36171,36475,36779,37083,37387,37691,37995,38299,38603,38907,39211,39515,39819,40123,40427,40731,41035,41339,41643,41947,42251,42555,42859,43163,43467,43771,44075,44379,44683,44987,45291,45595,45899,46203,46507,46811,47115,47419,47723,48027,48331,48635,48939,49243,49547,49851,50155,50459,50763,51067,51371,51675,51979,52283,52587,52891,53195,53499,53803,54107,54411,54715,55019,55323,55627,55931,56235,56539,56843,57147,57451,57755,58059,58363,58667,58971,59275,59579,59883,60187,60491,60795,61099,61403,61707,62011,62315,62619,62923,63227,63531,63835,64139,64443,64747,65051,65355,65659,65963,66267,66571,66875,67179,67483,67787,68091,68395,68699,69003,69307,69611,69915,70219,70523,70827,71131,71435,71739,72043,72347,72651,72955,73259,73563,73867,74171,74475,74779,75083,75387,75691,75995,76299,76603,76907,77211,77515,77819'/>
+  </group>
+  <group name='299'>
+    <ids val='300,604,908,1212,1516,1820,2124,2428,2732,3036,3340,3644,3948,4252,4556,4860,5164,5468,5772,6076,6380,6684,6988,7292,7596,7900,8204,8508,8812,9116,9420,9724,10028,10332,10636,10940,11244,11548,11852,12156,12460,12764,13068,13372,13676,13980,14284,14588,14892,15196,15500,15804,16108,16412,16716,17020,17324,17628,17932,18236,18540,18844,19148,19452,19756,20060,20364,20668,20972,21276,21580,21884,22188,22492,22796,23100,23404,23708,24012,24316,24620,24924,25228,25532,25836,26140,26444,26748,27052,27356,27660,27964,28268,28572,28876,29180,29484,29788,30092,30396,30700,31004,31308,31612,31916,32220,32524,32828,33132,33436,33740,34044,34348,34652,34956,35260,35564,35868,36172,36476,36780,37084,37388,37692,37996,38300,38604,38908,39212,39516,39820,40124,40428,40732,41036,41340,41644,41948,42252,42556,42860,43164,43468,43772,44076,44380,44684,44988,45292,45596,45900,46204,46508,46812,47116,47420,47724,48028,48332,48636,48940,49244,49548,49852,50156,50460,50764,51068,51372,51676,51980,52284,52588,52892,53196,53500,53804,54108,54412,54716,55020,55324,55628,55932,56236,56540,56844,57148,57452,57756,58060,58364,58668,58972,59276,59580,59884,60188,60492,60796,61100,61404,61708,62012,62316,62620,62924,63228,63532,63836,64140,64444,64748,65052,65356,65660,65964,66268,66572,66876,67180,67484,67788,68092,68396,68700,69004,69308,69612,69916,70220,70524,70828,71132,71436,71740,72044,72348,72652,72956,73260,73564,73868,74172,74476,74780,75084,75388,75692,75996,76300,76604,76908,77212,77516,77820'/>
+  </group>
+  <group name='300'>
+    <ids val='301,605,909,1213,1517,1821,2125,2429,2733,3037,3341,3645,3949,4253,4557,4861,5165,5469,5773,6077,6381,6685,6989,7293,7597,7901,8205,8509,8813,9117,9421,9725,10029,10333,10637,10941,11245,11549,11853,12157,12461,12765,13069,13373,13677,13981,14285,14589,14893,15197,15501,15805,16109,16413,16717,17021,17325,17629,17933,18237,18541,18845,19149,19453,19757,20061,20365,20669,20973,21277,21581,21885,22189,22493,22797,23101,23405,23709,24013,24317,24621,24925,25229,25533,25837,26141,26445,26749,27053,27357,27661,27965,28269,28573,28877,29181,29485,29789,30093,30397,30701,31005,31309,31613,31917,32221,32525,32829,33133,33437,33741,34045,34349,34653,34957,35261,35565,35869,36173,36477,36781,37085,37389,37693,37997,38301,38605,38909,39213,39517,39821,40125,40429,40733,41037,41341,41645,41949,42253,42557,42861,43165,43469,43773,44077,44381,44685,44989,45293,45597,45901,46205,46509,46813,47117,47421,47725,48029,48333,48637,48941,49245,49549,49853,50157,50461,50765,51069,51373,51677,51981,52285,52589,52893,53197,53501,53805,54109,54413,54717,55021,55325,55629,55933,56237,56541,56845,57149,57453,57757,58061,58365,58669,58973,59277,59581,59885,60189,60493,60797,61101,61405,61709,62013,62317,62621,62925,63229,63533,63837,64141,64445,64749,65053,65357,65661,65965,66269,66573,66877,67181,67485,67789,68093,68397,68701,69005,69309,69613,69917,70221,70525,70829,71133,71437,71741,72045,72349,72653,72957,73261,73565,73869,74173,74477,74781,75085,75389,75693,75997,76301,76605,76909,77213,77517,77821'/>
+  </group>
+  <group name='301'>
+    <ids val='302,606,910,1214,1518,1822,2126,2430,2734,3038,3342,3646,3950,4254,4558,4862,5166,5470,5774,6078,6382,6686,6990,7294,7598,7902,8206,8510,8814,9118,9422,9726,10030,10334,10638,10942,11246,11550,11854,12158,12462,12766,13070,13374,13678,13982,14286,14590,14894,15198,15502,15806,16110,16414,16718,17022,17326,17630,17934,18238,18542,18846,19150,19454,19758,20062,20366,20670,20974,21278,21582,21886,22190,22494,22798,23102,23406,23710,24014,24318,24622,24926,25230,25534,25838,26142,26446,26750,27054,27358,27662,27966,28270,28574,28878,29182,29486,29790,30094,30398,30702,31006,31310,31614,31918,32222,32526,32830,33134,33438,33742,34046,34350,34654,34958,35262,35566,35870,36174,36478,36782,37086,37390,37694,37998,38302,38606,38910,39214,39518,39822,40126,40430,40734,41038,41342,41646,41950,42254,42558,42862,43166,43470,43774,44078,44382,44686,44990,45294,45598,45902,46206,46510,46814,47118,47422,47726,48030,48334,48638,48942,49246,49550,49854,50158,50462,50766,51070,51374,51678,51982,52286,52590,52894,53198,53502,53806,54110,54414,54718,55022,55326,55630,55934,56238,56542,56846,57150,57454,57758,58062,58366,58670,58974,59278,59582,59886,60190,60494,60798,61102,61406,61710,62014,62318,62622,62926,63230,63534,63838,64142,64446,64750,65054,65358,65662,65966,66270,66574,66878,67182,67486,67790,68094,68398,68702,69006,69310,69614,69918,70222,70526,70830,71134,71438,71742,72046,72350,72654,72958,73262,73566,73870,74174,74478,74782,75086,75390,75694,75998,76302,76606,76910,77214,77518,77822'/>
+  </group>
+  <group name='302'>
+    <ids val='303,607,911,1215,1519,1823,2127,2431,2735,3039,3343,3647,3951,4255,4559,4863,5167,5471,5775,6079,6383,6687,6991,7295,7599,7903,8207,8511,8815,9119,9423,9727,10031,10335,10639,10943,11247,11551,11855,12159,12463,12767,13071,13375,13679,13983,14287,14591,14895,15199,15503,15807,16111,16415,16719,17023,17327,17631,17935,18239,18543,18847,19151,19455,19759,20063,20367,20671,20975,21279,21583,21887,22191,22495,22799,23103,23407,23711,24015,24319,24623,24927,25231,25535,25839,26143,26447,26751,27055,27359,27663,27967,28271,28575,28879,29183,29487,29791,30095,30399,30703,31007,31311,31615,31919,32223,32527,32831,33135,33439,33743,34047,34351,34655,34959,35263,35567,35871,36175,36479,36783,37087,37391,37695,37999,38303,38607,38911,39215,39519,39823,40127,40431,40735,41039,41343,41647,41951,42255,42559,42863,43167,43471,43775,44079,44383,44687,44991,45295,45599,45903,46207,46511,46815,47119,47423,47727,48031,48335,48639,48943,49247,49551,49855,50159,50463,50767,51071,51375,51679,51983,52287,52591,52895,53199,53503,53807,54111,54415,54719,55023,55327,55631,55935,56239,56543,56847,57151,57455,57759,58063,58367,58671,58975,59279,59583,59887,60191,60495,60799,61103,61407,61711,62015,62319,62623,62927,63231,63535,63839,64143,64447,64751,65055,65359,65663,65967,66271,66575,66879,67183,67487,67791,68095,68399,68703,69007,69311,69615,69919,70223,70527,70831,71135,71439,71743,72047,72351,72655,72959,73263,73567,73871,74175,74479,74783,75087,75391,75695,75999,76303,76607,76911,77215,77519,77823'/>
+  </group>
+  <group name='303'>
+    <ids val='304,608,912,1216,1520,1824,2128,2432,2736,3040,3344,3648,3952,4256,4560,4864,5168,5472,5776,6080,6384,6688,6992,7296,7600,7904,8208,8512,8816,9120,9424,9728,10032,10336,10640,10944,11248,11552,11856,12160,12464,12768,13072,13376,13680,13984,14288,14592,14896,15200,15504,15808,16112,16416,16720,17024,17328,17632,17936,18240,18544,18848,19152,19456,19760,20064,20368,20672,20976,21280,21584,21888,22192,22496,22800,23104,23408,23712,24016,24320,24624,24928,25232,25536,25840,26144,26448,26752,27056,27360,27664,27968,28272,28576,28880,29184,29488,29792,30096,30400,30704,31008,31312,31616,31920,32224,32528,32832,33136,33440,33744,34048,34352,34656,34960,35264,35568,35872,36176,36480,36784,37088,37392,37696,38000,38304,38608,38912,39216,39520,39824,40128,40432,40736,41040,41344,41648,41952,42256,42560,42864,43168,43472,43776,44080,44384,44688,44992,45296,45600,45904,46208,46512,46816,47120,47424,47728,48032,48336,48640,48944,49248,49552,49856,50160,50464,50768,51072,51376,51680,51984,52288,52592,52896,53200,53504,53808,54112,54416,54720,55024,55328,55632,55936,56240,56544,56848,57152,57456,57760,58064,58368,58672,58976,59280,59584,59888,60192,60496,60800,61104,61408,61712,62016,62320,62624,62928,63232,63536,63840,64144,64448,64752,65056,65360,65664,65968,66272,66576,66880,67184,67488,67792,68096,68400,68704,69008,69312,69616,69920,70224,70528,70832,71136,71440,71744,72048,72352,72656,72960,73264,73568,73872,74176,74480,74784,75088,75392,75696,76000,76304,76608,76912,77216,77520,77824'/>
+  </group>
+</detector-grouping>
diff --git a/Code/Mantid/scripts/LargeScaleStructures/REFL_Detector_Grouping_Sum_Y_rot.xml b/Code/Mantid/scripts/LargeScaleStructures/REFL_Detector_Grouping_Sum_Y_rot.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d159bb2edfd9b12294fa0de25a41c6398aede213
--- /dev/null
+++ b/Code/Mantid/scripts/LargeScaleStructures/REFL_Detector_Grouping_Sum_Y_rot.xml
@@ -0,0 +1,770 @@
+<detector-grouping description="Integrated over Y">
+  <group name='303'>
+    <ids val='1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304'/>
+  </group>
+  <group name='303'>
+    <ids val='305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608'/>
+  </group>
+  <group name='303'>
+    <ids val='609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912'/>
+  </group>
+  <group name='303'>
+    <ids val='913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216'/>
+  </group>
+  <group name='303'>
+    <ids val='1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520'/>
+  </group>
+  <group name='303'>
+    <ids val='1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824'/>
+  </group>
+  <group name='303'>
+    <ids val='1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128'/>
+  </group>
+  <group name='303'>
+    <ids val='2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432'/>
+  </group>
+  <group name='303'>
+    <ids val='2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736'/>
+  </group>
+  <group name='303'>
+    <ids val='2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,2785,2786,2787,2788,2789,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,3038,3039,3040'/>
+  </group>
+  <group name='303'>
+    <ids val='3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,3051,3052,3053,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3116,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140,3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,3188,3189,3190,3191,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,3234,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,3278,3279,3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295,3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311,3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327,3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343,3344'/>
+  </group>
+  <group name='303'>
+    <ids val='3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,3360,3361,3362,3363,3364,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374,3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,3388,3389,3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405,3406,3407,3408,3409,3410,3411,3412,3413,3414,3415,3416,3417,3418,3419,3420,3421,3422,3423,3424,3425,3426,3427,3428,3429,3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3440,3441,3442,3443,3444,3445,3446,3447,3448,3449,3450,3451,3452,3453,3454,3455,3456,3457,3458,3459,3460,3461,3462,3463,3464,3465,3466,3467,3468,3469,3470,3471,3472,3473,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,3496,3497,3498,3499,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,3512,3513,3514,3515,3516,3517,3518,3519,3520,3521,3522,3523,3524,3525,3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3575,3576,3577,3578,3579,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,3648'/>
+  </group>
+  <group name='303'>
+    <ids val='3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952'/>
+  </group>
+  <group name='303'>
+    <ids val='3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238,4239,4240,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256'/>
+  </group>
+  <group name='303'>
+    <ids val='4257,4258,4259,4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310,4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4330,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476,4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,4490,4491,4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,4519,4520,4521,4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,4536,4537,4538,4539,4540,4541,4542,4543,4544,4545,4546,4547,4548,4549,4550,4551,4552,4553,4554,4555,4556,4557,4558,4559,4560'/>
+  </group>
+  <group name='303'>
+    <ids val='4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4574,4575,4576,4577,4578,4579,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611,4612,4613,4614,4615,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642,4643,4644,4645,4646,4647,4648,4649,4650,4651,4652,4653,4654,4655,4656,4657,4658,4659,4660,4661,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672,4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,4683,4684,4685,4686,4687,4688,4689,4690,4691,4692,4693,4694,4695,4696,4697,4698,4699,4700,4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,4712,4713,4714,4715,4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864'/>
+  </group>
+  <group name='303'>
+    <ids val='4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999,5000,5001,5002,5003,5004,5005,5006,5007,5008,5009,5010,5011,5012,5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,5040,5041,5042,5043,5044,5045,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,5056,5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072,5073,5074,5075,5076,5077,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,5113,5114,5115,5116,5117,5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164,5165,5166,5167,5168'/>
+  </group>
+  <group name='303'>
+    <ids val='5169,5170,5171,5172,5173,5174,5175,5176,5177,5178,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5195,5196,5197,5198,5199,5200,5201,5202,5203,5204,5205,5206,5207,5208,5209,5210,5211,5212,5213,5214,5215,5216,5217,5218,5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,5248,5249,5250,5251,5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299,5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385,5386,5387,5388,5389,5390,5391,5392,5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440,5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472'/>
+  </group>
+  <group name='303'>
+    <ids val='5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632,5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648,5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712,5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728,5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744,5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760,5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776'/>
+  </group>
+  <group name='303'>
+    <ids val='5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080'/>
+  </group>
+  <group name='303'>
+    <ids val='6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132,6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180,6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384'/>
+  </group>
+  <group name='303'>
+    <ids val='6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443,6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456,6457,6458,6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474,6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581,6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629,6630,6631,6632,6633,6634,6635,6636,6637,6638,6639,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659,6660,6661,6662,6663,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688'/>
+  </group>
+  <group name='303'>
+    <ids val='6689,6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761,6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,6905,6906,6907,6908,6909,6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934,6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950,6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984,6985,6986,6987,6988,6989,6990,6991,6992'/>
+  </group>
+  <group name='303'>
+    <ids val='6993,6994,6995,6996,6997,6998,6999,7000,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138,7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154,7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167,7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296'/>
+  </group>
+  <group name='303'>
+    <ids val='7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600'/>
+  </group>
+  <group name='303'>
+    <ids val='7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807,7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904'/>
+  </group>
+  <group name='303'>
+    <ids val='7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208'/>
+  </group>
+  <group name='303'>
+    <ids val='8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512'/>
+  </group>
+  <group name='303'>
+    <ids val='8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,8764,8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780,8781,8782,8783,8784,8785,8786,8787,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816'/>
+  </group>
+  <group name='303'>
+    <ids val='8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901,8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8928,8929,8930,8931,8932,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,8944,8945,8946,8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977,8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008,9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023,9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068,9069,9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117,9118,9119,9120'/>
+  </group>
+  <group name='303'>
+    <ids val='9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133,9134,9135,9136,9137,9138,9139,9140,9141,9142,9143,9144,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163,9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,9176,9177,9178,9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194,9195,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405,9406,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423,9424'/>
+  </group>
+  <group name='303'>
+    <ids val='9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9450,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9678,9679,9680,9681,9682,9683,9684,9685,9686,9687,9688,9689,9690,9691,9692,9693,9694,9695,9696,9697,9698,9699,9700,9701,9702,9703,9704,9705,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728'/>
+  </group>
+  <group name='303'>
+    <ids val='9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838,9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9858,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,9869,9870,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926,9927,9928,9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003,10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019,10020,10021,10022,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032'/>
+  </group>
+  <group name='303'>
+    <ids val='10033,10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,10049,10050,10051,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064,10065,10066,10067,10068,10069,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080,10081,10082,10083,10084,10085,10086,10087,10088,10089,10090,10091,10092,10093,10094,10095,10096,10097,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110,10111,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121,10122,10123,10124,10125,10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,10141,10142,10143,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161,10162,10163,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10184,10185,10186,10187,10188,10189,10190,10191,10192,10193,10194,10195,10196,10197,10198,10199,10200,10201,10202,10203,10204,10205,10206,10207,10208,10209,10210,10211,10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10233,10234,10235,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10259,10260,10261,10262,10263,10264,10265,10266,10267,10268,10269,10270,10271,10272,10273,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287,10288,10289,10290,10291,10292,10293,10294,10295,10296,10297,10298,10299,10300,10301,10302,10303,10304,10305,10306,10307,10308,10309,10310,10311,10312,10313,10314,10315,10316,10317,10318,10319,10320,10321,10322,10323,10324,10325,10326,10327,10328,10329,10330,10331,10332,10333,10334,10335,10336'/>
+  </group>
+  <group name='303'>
+    <ids val='10337,10338,10339,10340,10341,10342,10343,10344,10345,10346,10347,10348,10349,10350,10351,10352,10353,10354,10355,10356,10357,10358,10359,10360,10361,10362,10363,10364,10365,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,10393,10394,10395,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407,10408,10409,10410,10411,10412,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422,10423,10424,10425,10426,10427,10428,10429,10430,10431,10432,10433,10434,10435,10436,10437,10438,10439,10440,10441,10442,10443,10444,10445,10446,10447,10448,10449,10450,10451,10452,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10463,10464,10465,10466,10467,10468,10469,10470,10471,10472,10473,10474,10475,10476,10477,10478,10479,10480,10481,10482,10483,10484,10485,10486,10487,10488,10489,10490,10491,10492,10493,10494,10495,10496,10497,10498,10499,10500,10501,10502,10503,10504,10505,10506,10507,10508,10509,10510,10511,10512,10513,10514,10515,10516,10517,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10539,10540,10541,10542,10543,10544,10545,10546,10547,10548,10549,10550,10551,10552,10553,10554,10555,10556,10557,10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,10568,10569,10570,10571,10572,10573,10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618,10619,10620,10621,10622,10623,10624,10625,10626,10627,10628,10629,10630,10631,10632,10633,10634,10635,10636,10637,10638,10639,10640'/>
+  </group>
+  <group name='303'>
+    <ids val='10641,10642,10643,10644,10645,10646,10647,10648,10649,10650,10651,10652,10653,10654,10655,10656,10657,10658,10659,10660,10661,10662,10663,10664,10665,10666,10667,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10687,10688,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10701,10702,10703,10704,10705,10706,10707,10708,10709,10710,10711,10712,10713,10714,10715,10716,10717,10718,10719,10720,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737,10738,10739,10740,10741,10742,10743,10744,10745,10746,10747,10748,10749,10750,10751,10752,10753,10754,10755,10756,10757,10758,10759,10760,10761,10762,10763,10764,10765,10766,10767,10768,10769,10770,10771,10772,10773,10774,10775,10776,10777,10778,10779,10780,10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10791,10792,10793,10794,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812,10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828,10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10843,10844,10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10872,10873,10874,10875,10876,10877,10878,10879,10880,10881,10882,10883,10884,10885,10886,10887,10888,10889,10890,10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906,10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,10920,10921,10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,10933,10934,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944'/>
+  </group>
+  <group name='303'>
+    <ids val='10945,10946,10947,10948,10949,10950,10951,10952,10953,10954,10955,10956,10957,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998,10999,11000,11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044,11045,11046,11047,11048,11049,11050,11051,11052,11053,11054,11055,11056,11057,11058,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184,11185,11186,11187,11188,11189,11190,11191,11192,11193,11194,11195,11196,11197,11198,11199,11200,11201,11202,11203,11204,11205,11206,11207,11208,11209,11210,11211,11212,11213,11214,11215,11216,11217,11218,11219,11220,11221,11222,11223,11224,11225,11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238,11239,11240,11241,11242,11243,11244,11245,11246,11247,11248'/>
+  </group>
+  <group name='303'>
+    <ids val='11249,11250,11251,11252,11253,11254,11255,11256,11257,11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,11270,11271,11272,11273,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288,11289,11290,11291,11292,11293,11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304,11305,11306,11307,11308,11309,11310,11311,11312,11313,11314,11315,11316,11317,11318,11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348,11349,11350,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365,11366,11367,11368,11369,11370,11371,11372,11373,11374,11375,11376,11377,11378,11379,11380,11381,11382,11383,11384,11385,11386,11387,11388,11389,11390,11391,11392,11393,11394,11395,11396,11397,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410,11411,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425,11426,11427,11428,11429,11430,11431,11432,11433,11434,11435,11436,11437,11438,11439,11440,11441,11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457,11458,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,11470,11471,11472,11473,11474,11475,11476,11477,11478,11479,11480,11481,11482,11483,11484,11485,11486,11487,11488,11489,11490,11491,11492,11493,11494,11495,11496,11497,11498,11499,11500,11501,11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517,11518,11519,11520,11521,11522,11523,11524,11525,11526,11527,11528,11529,11530,11531,11532,11533,11534,11535,11536,11537,11538,11539,11540,11541,11542,11543,11544,11545,11546,11547,11548,11549,11550,11551,11552'/>
+  </group>
+  <group name='303'>
+    <ids val='11553,11554,11555,11556,11557,11558,11559,11560,11561,11562,11563,11564,11565,11566,11567,11568,11569,11570,11571,11572,11573,11574,11575,11576,11577,11578,11579,11580,11581,11582,11583,11584,11585,11586,11587,11588,11589,11590,11591,11592,11593,11594,11595,11596,11597,11598,11599,11600,11601,11602,11603,11604,11605,11606,11607,11608,11609,11610,11611,11612,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622,11623,11624,11625,11626,11627,11628,11629,11630,11631,11632,11633,11634,11635,11636,11637,11638,11639,11640,11641,11642,11643,11644,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654,11655,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11669,11670,11671,11672,11673,11674,11675,11676,11677,11678,11679,11680,11681,11682,11683,11684,11685,11686,11687,11688,11689,11690,11691,11692,11693,11694,11695,11696,11697,11698,11699,11700,11701,11702,11703,11704,11705,11706,11707,11708,11709,11710,11711,11712,11713,11714,11715,11716,11717,11718,11719,11720,11721,11722,11723,11724,11725,11726,11727,11728,11729,11730,11731,11732,11733,11734,11735,11736,11737,11738,11739,11740,11741,11742,11743,11744,11745,11746,11747,11748,11749,11750,11751,11752,11753,11754,11755,11756,11757,11758,11759,11760,11761,11762,11763,11764,11765,11766,11767,11768,11769,11770,11771,11772,11773,11774,11775,11776,11777,11778,11779,11780,11781,11782,11783,11784,11785,11786,11787,11788,11789,11790,11791,11792,11793,11794,11795,11796,11797,11798,11799,11800,11801,11802,11803,11804,11805,11806,11807,11808,11809,11810,11811,11812,11813,11814,11815,11816,11817,11818,11819,11820,11821,11822,11823,11824,11825,11826,11827,11828,11829,11830,11831,11832,11833,11834,11835,11836,11837,11838,11839,11840,11841,11842,11843,11844,11845,11846,11847,11848,11849,11850,11851,11852,11853,11854,11855,11856'/>
+  </group>
+  <group name='303'>
+    <ids val='11857,11858,11859,11860,11861,11862,11863,11864,11865,11866,11867,11868,11869,11870,11871,11872,11873,11874,11875,11876,11877,11878,11879,11880,11881,11882,11883,11884,11885,11886,11887,11888,11889,11890,11891,11892,11893,11894,11895,11896,11897,11898,11899,11900,11901,11902,11903,11904,11905,11906,11907,11908,11909,11910,11911,11912,11913,11914,11915,11916,11917,11918,11919,11920,11921,11922,11923,11924,11925,11926,11927,11928,11929,11930,11931,11932,11933,11934,11935,11936,11937,11938,11939,11940,11941,11942,11943,11944,11945,11946,11947,11948,11949,11950,11951,11952,11953,11954,11955,11956,11957,11958,11959,11960,11961,11962,11963,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975,11976,11977,11978,11979,11980,11981,11982,11983,11984,11985,11986,11987,11988,11989,11990,11991,11992,11993,11994,11995,11996,11997,11998,11999,12000,12001,12002,12003,12004,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,12036,12037,12038,12039,12040,12041,12042,12043,12044,12045,12046,12047,12048,12049,12050,12051,12052,12053,12054,12055,12056,12057,12058,12059,12060,12061,12062,12063,12064,12065,12066,12067,12068,12069,12070,12071,12072,12073,12074,12075,12076,12077,12078,12079,12080,12081,12082,12083,12084,12085,12086,12087,12088,12089,12090,12091,12092,12093,12094,12095,12096,12097,12098,12099,12100,12101,12102,12103,12104,12105,12106,12107,12108,12109,12110,12111,12112,12113,12114,12115,12116,12117,12118,12119,12120,12121,12122,12123,12124,12125,12126,12127,12128,12129,12130,12131,12132,12133,12134,12135,12136,12137,12138,12139,12140,12141,12142,12143,12144,12145,12146,12147,12148,12149,12150,12151,12152,12153,12154,12155,12156,12157,12158,12159,12160'/>
+  </group>
+  <group name='303'>
+    <ids val='12161,12162,12163,12164,12165,12166,12167,12168,12169,12170,12171,12172,12173,12174,12175,12176,12177,12178,12179,12180,12181,12182,12183,12184,12185,12186,12187,12188,12189,12190,12191,12192,12193,12194,12195,12196,12197,12198,12199,12200,12201,12202,12203,12204,12205,12206,12207,12208,12209,12210,12211,12212,12213,12214,12215,12216,12217,12218,12219,12220,12221,12222,12223,12224,12225,12226,12227,12228,12229,12230,12231,12232,12233,12234,12235,12236,12237,12238,12239,12240,12241,12242,12243,12244,12245,12246,12247,12248,12249,12250,12251,12252,12253,12254,12255,12256,12257,12258,12259,12260,12261,12262,12263,12264,12265,12266,12267,12268,12269,12270,12271,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12284,12285,12286,12287,12288,12289,12290,12291,12292,12293,12294,12295,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,12306,12307,12308,12309,12310,12311,12312,12313,12314,12315,12316,12317,12318,12319,12320,12321,12322,12323,12324,12325,12326,12327,12328,12329,12330,12331,12332,12333,12334,12335,12336,12337,12338,12339,12340,12341,12342,12343,12344,12345,12346,12347,12348,12349,12350,12351,12352,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12436,12437,12438,12439,12440,12441,12442,12443,12444,12445,12446,12447,12448,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464'/>
+  </group>
+  <group name='303'>
+    <ids val='12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,12535,12536,12537,12538,12539,12540,12541,12542,12543,12544,12545,12546,12547,12548,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,12586,12587,12588,12589,12590,12591,12592,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,12687,12688,12689,12690,12691,12692,12693,12694,12695,12696,12697,12698,12699,12700,12701,12702,12703,12704,12705,12706,12707,12708,12709,12710,12711,12712,12713,12714,12715,12716,12717,12718,12719,12720,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12731,12732,12733,12734,12735,12736,12737,12738,12739,12740,12741,12742,12743,12744,12745,12746,12747,12748,12749,12750,12751,12752,12753,12754,12755,12756,12757,12758,12759,12760,12761,12762,12763,12764,12765,12766,12767,12768'/>
+  </group>
+  <group name='303'>
+    <ids val='12769,12770,12771,12772,12773,12774,12775,12776,12777,12778,12779,12780,12781,12782,12783,12784,12785,12786,12787,12788,12789,12790,12791,12792,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,12828,12829,12830,12831,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,12842,12843,12844,12845,12846,12847,12848,12849,12850,12851,12852,12853,12854,12855,12856,12857,12858,12859,12860,12861,12862,12863,12864,12865,12866,12867,12868,12869,12870,12871,12872,12873,12874,12875,12876,12877,12878,12879,12880,12881,12882,12883,12884,12885,12886,12887,12888,12889,12890,12891,12892,12893,12894,12895,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,12924,12925,12926,12927,12928,12929,12930,12931,12932,12933,12934,12935,12936,12937,12938,12939,12940,12941,12942,12943,12944,12945,12946,12947,12948,12949,12950,12951,12952,12953,12954,12955,12956,12957,12958,12959,12960,12961,12962,12963,12964,12965,12966,12967,12968,12969,12970,12971,12972,12973,12974,12975,12976,12977,12978,12979,12980,12981,12982,12983,12984,12985,12986,12987,12988,12989,12990,12991,12992,12993,12994,12995,12996,12997,12998,12999,13000,13001,13002,13003,13004,13005,13006,13007,13008,13009,13010,13011,13012,13013,13014,13015,13016,13017,13018,13019,13020,13021,13022,13023,13024,13025,13026,13027,13028,13029,13030,13031,13032,13033,13034,13035,13036,13037,13038,13039,13040,13041,13042,13043,13044,13045,13046,13047,13048,13049,13050,13051,13052,13053,13054,13055,13056,13057,13058,13059,13060,13061,13062,13063,13064,13065,13066,13067,13068,13069,13070,13071,13072'/>
+  </group>
+  <group name='303'>
+    <ids val='13073,13074,13075,13076,13077,13078,13079,13080,13081,13082,13083,13084,13085,13086,13087,13088,13089,13090,13091,13092,13093,13094,13095,13096,13097,13098,13099,13100,13101,13102,13103,13104,13105,13106,13107,13108,13109,13110,13111,13112,13113,13114,13115,13116,13117,13118,13119,13120,13121,13122,13123,13124,13125,13126,13127,13128,13129,13130,13131,13132,13133,13134,13135,13136,13137,13138,13139,13140,13141,13142,13143,13144,13145,13146,13147,13148,13149,13150,13151,13152,13153,13154,13155,13156,13157,13158,13159,13160,13161,13162,13163,13164,13165,13166,13167,13168,13169,13170,13171,13172,13173,13174,13175,13176,13177,13178,13179,13180,13181,13182,13183,13184,13185,13186,13187,13188,13189,13190,13191,13192,13193,13194,13195,13196,13197,13198,13199,13200,13201,13202,13203,13204,13205,13206,13207,13208,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13219,13220,13221,13222,13223,13224,13225,13226,13227,13228,13229,13230,13231,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13242,13243,13244,13245,13246,13247,13248,13249,13250,13251,13252,13253,13254,13255,13256,13257,13258,13259,13260,13261,13262,13263,13264,13265,13266,13267,13268,13269,13270,13271,13272,13273,13274,13275,13276,13277,13278,13279,13280,13281,13282,13283,13284,13285,13286,13287,13288,13289,13290,13291,13292,13293,13294,13295,13296,13297,13298,13299,13300,13301,13302,13303,13304,13305,13306,13307,13308,13309,13310,13311,13312,13313,13314,13315,13316,13317,13318,13319,13320,13321,13322,13323,13324,13325,13326,13327,13328,13329,13330,13331,13332,13333,13334,13335,13336,13337,13338,13339,13340,13341,13342,13343,13344,13345,13346,13347,13348,13349,13350,13351,13352,13353,13354,13355,13356,13357,13358,13359,13360,13361,13362,13363,13364,13365,13366,13367,13368,13369,13370,13371,13372,13373,13374,13375,13376'/>
+  </group>
+  <group name='303'>
+    <ids val='13377,13378,13379,13380,13381,13382,13383,13384,13385,13386,13387,13388,13389,13390,13391,13392,13393,13394,13395,13396,13397,13398,13399,13400,13401,13402,13403,13404,13405,13406,13407,13408,13409,13410,13411,13412,13413,13414,13415,13416,13417,13418,13419,13420,13421,13422,13423,13424,13425,13426,13427,13428,13429,13430,13431,13432,13433,13434,13435,13436,13437,13438,13439,13440,13441,13442,13443,13444,13445,13446,13447,13448,13449,13450,13451,13452,13453,13454,13455,13456,13457,13458,13459,13460,13461,13462,13463,13464,13465,13466,13467,13468,13469,13470,13471,13472,13473,13474,13475,13476,13477,13478,13479,13480,13481,13482,13483,13484,13485,13486,13487,13488,13489,13490,13491,13492,13493,13494,13495,13496,13497,13498,13499,13500,13501,13502,13503,13504,13505,13506,13507,13508,13509,13510,13511,13512,13513,13514,13515,13516,13517,13518,13519,13520,13521,13522,13523,13524,13525,13526,13527,13528,13529,13530,13531,13532,13533,13534,13535,13536,13537,13538,13539,13540,13541,13542,13543,13544,13545,13546,13547,13548,13549,13550,13551,13552,13553,13554,13555,13556,13557,13558,13559,13560,13561,13562,13563,13564,13565,13566,13567,13568,13569,13570,13571,13572,13573,13574,13575,13576,13577,13578,13579,13580,13581,13582,13583,13584,13585,13586,13587,13588,13589,13590,13591,13592,13593,13594,13595,13596,13597,13598,13599,13600,13601,13602,13603,13604,13605,13606,13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618,13619,13620,13621,13622,13623,13624,13625,13626,13627,13628,13629,13630,13631,13632,13633,13634,13635,13636,13637,13638,13639,13640,13641,13642,13643,13644,13645,13646,13647,13648,13649,13650,13651,13652,13653,13654,13655,13656,13657,13658,13659,13660,13661,13662,13663,13664,13665,13666,13667,13668,13669,13670,13671,13672,13673,13674,13675,13676,13677,13678,13679,13680'/>
+  </group>
+  <group name='303'>
+    <ids val='13681,13682,13683,13684,13685,13686,13687,13688,13689,13690,13691,13692,13693,13694,13695,13696,13697,13698,13699,13700,13701,13702,13703,13704,13705,13706,13707,13708,13709,13710,13711,13712,13713,13714,13715,13716,13717,13718,13719,13720,13721,13722,13723,13724,13725,13726,13727,13728,13729,13730,13731,13732,13733,13734,13735,13736,13737,13738,13739,13740,13741,13742,13743,13744,13745,13746,13747,13748,13749,13750,13751,13752,13753,13754,13755,13756,13757,13758,13759,13760,13761,13762,13763,13764,13765,13766,13767,13768,13769,13770,13771,13772,13773,13774,13775,13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,13787,13788,13789,13790,13791,13792,13793,13794,13795,13796,13797,13798,13799,13800,13801,13802,13803,13804,13805,13806,13807,13808,13809,13810,13811,13812,13813,13814,13815,13816,13817,13818,13819,13820,13821,13822,13823,13824,13825,13826,13827,13828,13829,13830,13831,13832,13833,13834,13835,13836,13837,13838,13839,13840,13841,13842,13843,13844,13845,13846,13847,13848,13849,13850,13851,13852,13853,13854,13855,13856,13857,13858,13859,13860,13861,13862,13863,13864,13865,13866,13867,13868,13869,13870,13871,13872,13873,13874,13875,13876,13877,13878,13879,13880,13881,13882,13883,13884,13885,13886,13887,13888,13889,13890,13891,13892,13893,13894,13895,13896,13897,13898,13899,13900,13901,13902,13903,13904,13905,13906,13907,13908,13909,13910,13911,13912,13913,13914,13915,13916,13917,13918,13919,13920,13921,13922,13923,13924,13925,13926,13927,13928,13929,13930,13931,13932,13933,13934,13935,13936,13937,13938,13939,13940,13941,13942,13943,13944,13945,13946,13947,13948,13949,13950,13951,13952,13953,13954,13955,13956,13957,13958,13959,13960,13961,13962,13963,13964,13965,13966,13967,13968,13969,13970,13971,13972,13973,13974,13975,13976,13977,13978,13979,13980,13981,13982,13983,13984'/>
+  </group>
+  <group name='303'>
+    <ids val='13985,13986,13987,13988,13989,13990,13991,13992,13993,13994,13995,13996,13997,13998,13999,14000,14001,14002,14003,14004,14005,14006,14007,14008,14009,14010,14011,14012,14013,14014,14015,14016,14017,14018,14019,14020,14021,14022,14023,14024,14025,14026,14027,14028,14029,14030,14031,14032,14033,14034,14035,14036,14037,14038,14039,14040,14041,14042,14043,14044,14045,14046,14047,14048,14049,14050,14051,14052,14053,14054,14055,14056,14057,14058,14059,14060,14061,14062,14063,14064,14065,14066,14067,14068,14069,14070,14071,14072,14073,14074,14075,14076,14077,14078,14079,14080,14081,14082,14083,14084,14085,14086,14087,14088,14089,14090,14091,14092,14093,14094,14095,14096,14097,14098,14099,14100,14101,14102,14103,14104,14105,14106,14107,14108,14109,14110,14111,14112,14113,14114,14115,14116,14117,14118,14119,14120,14121,14122,14123,14124,14125,14126,14127,14128,14129,14130,14131,14132,14133,14134,14135,14136,14137,14138,14139,14140,14141,14142,14143,14144,14145,14146,14147,14148,14149,14150,14151,14152,14153,14154,14155,14156,14157,14158,14159,14160,14161,14162,14163,14164,14165,14166,14167,14168,14169,14170,14171,14172,14173,14174,14175,14176,14177,14178,14179,14180,14181,14182,14183,14184,14185,14186,14187,14188,14189,14190,14191,14192,14193,14194,14195,14196,14197,14198,14199,14200,14201,14202,14203,14204,14205,14206,14207,14208,14209,14210,14211,14212,14213,14214,14215,14216,14217,14218,14219,14220,14221,14222,14223,14224,14225,14226,14227,14228,14229,14230,14231,14232,14233,14234,14235,14236,14237,14238,14239,14240,14241,14242,14243,14244,14245,14246,14247,14248,14249,14250,14251,14252,14253,14254,14255,14256,14257,14258,14259,14260,14261,14262,14263,14264,14265,14266,14267,14268,14269,14270,14271,14272,14273,14274,14275,14276,14277,14278,14279,14280,14281,14282,14283,14284,14285,14286,14287,14288'/>
+  </group>
+  <group name='303'>
+    <ids val='14289,14290,14291,14292,14293,14294,14295,14296,14297,14298,14299,14300,14301,14302,14303,14304,14305,14306,14307,14308,14309,14310,14311,14312,14313,14314,14315,14316,14317,14318,14319,14320,14321,14322,14323,14324,14325,14326,14327,14328,14329,14330,14331,14332,14333,14334,14335,14336,14337,14338,14339,14340,14341,14342,14343,14344,14345,14346,14347,14348,14349,14350,14351,14352,14353,14354,14355,14356,14357,14358,14359,14360,14361,14362,14363,14364,14365,14366,14367,14368,14369,14370,14371,14372,14373,14374,14375,14376,14377,14378,14379,14380,14381,14382,14383,14384,14385,14386,14387,14388,14389,14390,14391,14392,14393,14394,14395,14396,14397,14398,14399,14400,14401,14402,14403,14404,14405,14406,14407,14408,14409,14410,14411,14412,14413,14414,14415,14416,14417,14418,14419,14420,14421,14422,14423,14424,14425,14426,14427,14428,14429,14430,14431,14432,14433,14434,14435,14436,14437,14438,14439,14440,14441,14442,14443,14444,14445,14446,14447,14448,14449,14450,14451,14452,14453,14454,14455,14456,14457,14458,14459,14460,14461,14462,14463,14464,14465,14466,14467,14468,14469,14470,14471,14472,14473,14474,14475,14476,14477,14478,14479,14480,14481,14482,14483,14484,14485,14486,14487,14488,14489,14490,14491,14492,14493,14494,14495,14496,14497,14498,14499,14500,14501,14502,14503,14504,14505,14506,14507,14508,14509,14510,14511,14512,14513,14514,14515,14516,14517,14518,14519,14520,14521,14522,14523,14524,14525,14526,14527,14528,14529,14530,14531,14532,14533,14534,14535,14536,14537,14538,14539,14540,14541,14542,14543,14544,14545,14546,14547,14548,14549,14550,14551,14552,14553,14554,14555,14556,14557,14558,14559,14560,14561,14562,14563,14564,14565,14566,14567,14568,14569,14570,14571,14572,14573,14574,14575,14576,14577,14578,14579,14580,14581,14582,14583,14584,14585,14586,14587,14588,14589,14590,14591,14592'/>
+  </group>
+  <group name='303'>
+    <ids val='14593,14594,14595,14596,14597,14598,14599,14600,14601,14602,14603,14604,14605,14606,14607,14608,14609,14610,14611,14612,14613,14614,14615,14616,14617,14618,14619,14620,14621,14622,14623,14624,14625,14626,14627,14628,14629,14630,14631,14632,14633,14634,14635,14636,14637,14638,14639,14640,14641,14642,14643,14644,14645,14646,14647,14648,14649,14650,14651,14652,14653,14654,14655,14656,14657,14658,14659,14660,14661,14662,14663,14664,14665,14666,14667,14668,14669,14670,14671,14672,14673,14674,14675,14676,14677,14678,14679,14680,14681,14682,14683,14684,14685,14686,14687,14688,14689,14690,14691,14692,14693,14694,14695,14696,14697,14698,14699,14700,14701,14702,14703,14704,14705,14706,14707,14708,14709,14710,14711,14712,14713,14714,14715,14716,14717,14718,14719,14720,14721,14722,14723,14724,14725,14726,14727,14728,14729,14730,14731,14732,14733,14734,14735,14736,14737,14738,14739,14740,14741,14742,14743,14744,14745,14746,14747,14748,14749,14750,14751,14752,14753,14754,14755,14756,14757,14758,14759,14760,14761,14762,14763,14764,14765,14766,14767,14768,14769,14770,14771,14772,14773,14774,14775,14776,14777,14778,14779,14780,14781,14782,14783,14784,14785,14786,14787,14788,14789,14790,14791,14792,14793,14794,14795,14796,14797,14798,14799,14800,14801,14802,14803,14804,14805,14806,14807,14808,14809,14810,14811,14812,14813,14814,14815,14816,14817,14818,14819,14820,14821,14822,14823,14824,14825,14826,14827,14828,14829,14830,14831,14832,14833,14834,14835,14836,14837,14838,14839,14840,14841,14842,14843,14844,14845,14846,14847,14848,14849,14850,14851,14852,14853,14854,14855,14856,14857,14858,14859,14860,14861,14862,14863,14864,14865,14866,14867,14868,14869,14870,14871,14872,14873,14874,14875,14876,14877,14878,14879,14880,14881,14882,14883,14884,14885,14886,14887,14888,14889,14890,14891,14892,14893,14894,14895,14896'/>
+  </group>
+  <group name='303'>
+    <ids val='14897,14898,14899,14900,14901,14902,14903,14904,14905,14906,14907,14908,14909,14910,14911,14912,14913,14914,14915,14916,14917,14918,14919,14920,14921,14922,14923,14924,14925,14926,14927,14928,14929,14930,14931,14932,14933,14934,14935,14936,14937,14938,14939,14940,14941,14942,14943,14944,14945,14946,14947,14948,14949,14950,14951,14952,14953,14954,14955,14956,14957,14958,14959,14960,14961,14962,14963,14964,14965,14966,14967,14968,14969,14970,14971,14972,14973,14974,14975,14976,14977,14978,14979,14980,14981,14982,14983,14984,14985,14986,14987,14988,14989,14990,14991,14992,14993,14994,14995,14996,14997,14998,14999,15000,15001,15002,15003,15004,15005,15006,15007,15008,15009,15010,15011,15012,15013,15014,15015,15016,15017,15018,15019,15020,15021,15022,15023,15024,15025,15026,15027,15028,15029,15030,15031,15032,15033,15034,15035,15036,15037,15038,15039,15040,15041,15042,15043,15044,15045,15046,15047,15048,15049,15050,15051,15052,15053,15054,15055,15056,15057,15058,15059,15060,15061,15062,15063,15064,15065,15066,15067,15068,15069,15070,15071,15072,15073,15074,15075,15076,15077,15078,15079,15080,15081,15082,15083,15084,15085,15086,15087,15088,15089,15090,15091,15092,15093,15094,15095,15096,15097,15098,15099,15100,15101,15102,15103,15104,15105,15106,15107,15108,15109,15110,15111,15112,15113,15114,15115,15116,15117,15118,15119,15120,15121,15122,15123,15124,15125,15126,15127,15128,15129,15130,15131,15132,15133,15134,15135,15136,15137,15138,15139,15140,15141,15142,15143,15144,15145,15146,15147,15148,15149,15150,15151,15152,15153,15154,15155,15156,15157,15158,15159,15160,15161,15162,15163,15164,15165,15166,15167,15168,15169,15170,15171,15172,15173,15174,15175,15176,15177,15178,15179,15180,15181,15182,15183,15184,15185,15186,15187,15188,15189,15190,15191,15192,15193,15194,15195,15196,15197,15198,15199,15200'/>
+  </group>
+  <group name='303'>
+    <ids val='15201,15202,15203,15204,15205,15206,15207,15208,15209,15210,15211,15212,15213,15214,15215,15216,15217,15218,15219,15220,15221,15222,15223,15224,15225,15226,15227,15228,15229,15230,15231,15232,15233,15234,15235,15236,15237,15238,15239,15240,15241,15242,15243,15244,15245,15246,15247,15248,15249,15250,15251,15252,15253,15254,15255,15256,15257,15258,15259,15260,15261,15262,15263,15264,15265,15266,15267,15268,15269,15270,15271,15272,15273,15274,15275,15276,15277,15278,15279,15280,15281,15282,15283,15284,15285,15286,15287,15288,15289,15290,15291,15292,15293,15294,15295,15296,15297,15298,15299,15300,15301,15302,15303,15304,15305,15306,15307,15308,15309,15310,15311,15312,15313,15314,15315,15316,15317,15318,15319,15320,15321,15322,15323,15324,15325,15326,15327,15328,15329,15330,15331,15332,15333,15334,15335,15336,15337,15338,15339,15340,15341,15342,15343,15344,15345,15346,15347,15348,15349,15350,15351,15352,15353,15354,15355,15356,15357,15358,15359,15360,15361,15362,15363,15364,15365,15366,15367,15368,15369,15370,15371,15372,15373,15374,15375,15376,15377,15378,15379,15380,15381,15382,15383,15384,15385,15386,15387,15388,15389,15390,15391,15392,15393,15394,15395,15396,15397,15398,15399,15400,15401,15402,15403,15404,15405,15406,15407,15408,15409,15410,15411,15412,15413,15414,15415,15416,15417,15418,15419,15420,15421,15422,15423,15424,15425,15426,15427,15428,15429,15430,15431,15432,15433,15434,15435,15436,15437,15438,15439,15440,15441,15442,15443,15444,15445,15446,15447,15448,15449,15450,15451,15452,15453,15454,15455,15456,15457,15458,15459,15460,15461,15462,15463,15464,15465,15466,15467,15468,15469,15470,15471,15472,15473,15474,15475,15476,15477,15478,15479,15480,15481,15482,15483,15484,15485,15486,15487,15488,15489,15490,15491,15492,15493,15494,15495,15496,15497,15498,15499,15500,15501,15502,15503,15504'/>
+  </group>
+  <group name='303'>
+    <ids val='15505,15506,15507,15508,15509,15510,15511,15512,15513,15514,15515,15516,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15528,15529,15530,15531,15532,15533,15534,15535,15536,15537,15538,15539,15540,15541,15542,15543,15544,15545,15546,15547,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,15559,15560,15561,15562,15563,15564,15565,15566,15567,15568,15569,15570,15571,15572,15573,15574,15575,15576,15577,15578,15579,15580,15581,15582,15583,15584,15585,15586,15587,15588,15589,15590,15591,15592,15593,15594,15595,15596,15597,15598,15599,15600,15601,15602,15603,15604,15605,15606,15607,15608,15609,15610,15611,15612,15613,15614,15615,15616,15617,15618,15619,15620,15621,15622,15623,15624,15625,15626,15627,15628,15629,15630,15631,15632,15633,15634,15635,15636,15637,15638,15639,15640,15641,15642,15643,15644,15645,15646,15647,15648,15649,15650,15651,15652,15653,15654,15655,15656,15657,15658,15659,15660,15661,15662,15663,15664,15665,15666,15667,15668,15669,15670,15671,15672,15673,15674,15675,15676,15677,15678,15679,15680,15681,15682,15683,15684,15685,15686,15687,15688,15689,15690,15691,15692,15693,15694,15695,15696,15697,15698,15699,15700,15701,15702,15703,15704,15705,15706,15707,15708,15709,15710,15711,15712,15713,15714,15715,15716,15717,15718,15719,15720,15721,15722,15723,15724,15725,15726,15727,15728,15729,15730,15731,15732,15733,15734,15735,15736,15737,15738,15739,15740,15741,15742,15743,15744,15745,15746,15747,15748,15749,15750,15751,15752,15753,15754,15755,15756,15757,15758,15759,15760,15761,15762,15763,15764,15765,15766,15767,15768,15769,15770,15771,15772,15773,15774,15775,15776,15777,15778,15779,15780,15781,15782,15783,15784,15785,15786,15787,15788,15789,15790,15791,15792,15793,15794,15795,15796,15797,15798,15799,15800,15801,15802,15803,15804,15805,15806,15807,15808'/>
+  </group>
+  <group name='303'>
+    <ids val='15809,15810,15811,15812,15813,15814,15815,15816,15817,15818,15819,15820,15821,15822,15823,15824,15825,15826,15827,15828,15829,15830,15831,15832,15833,15834,15835,15836,15837,15838,15839,15840,15841,15842,15843,15844,15845,15846,15847,15848,15849,15850,15851,15852,15853,15854,15855,15856,15857,15858,15859,15860,15861,15862,15863,15864,15865,15866,15867,15868,15869,15870,15871,15872,15873,15874,15875,15876,15877,15878,15879,15880,15881,15882,15883,15884,15885,15886,15887,15888,15889,15890,15891,15892,15893,15894,15895,15896,15897,15898,15899,15900,15901,15902,15903,15904,15905,15906,15907,15908,15909,15910,15911,15912,15913,15914,15915,15916,15917,15918,15919,15920,15921,15922,15923,15924,15925,15926,15927,15928,15929,15930,15931,15932,15933,15934,15935,15936,15937,15938,15939,15940,15941,15942,15943,15944,15945,15946,15947,15948,15949,15950,15951,15952,15953,15954,15955,15956,15957,15958,15959,15960,15961,15962,15963,15964,15965,15966,15967,15968,15969,15970,15971,15972,15973,15974,15975,15976,15977,15978,15979,15980,15981,15982,15983,15984,15985,15986,15987,15988,15989,15990,15991,15992,15993,15994,15995,15996,15997,15998,15999,16000,16001,16002,16003,16004,16005,16006,16007,16008,16009,16010,16011,16012,16013,16014,16015,16016,16017,16018,16019,16020,16021,16022,16023,16024,16025,16026,16027,16028,16029,16030,16031,16032,16033,16034,16035,16036,16037,16038,16039,16040,16041,16042,16043,16044,16045,16046,16047,16048,16049,16050,16051,16052,16053,16054,16055,16056,16057,16058,16059,16060,16061,16062,16063,16064,16065,16066,16067,16068,16069,16070,16071,16072,16073,16074,16075,16076,16077,16078,16079,16080,16081,16082,16083,16084,16085,16086,16087,16088,16089,16090,16091,16092,16093,16094,16095,16096,16097,16098,16099,16100,16101,16102,16103,16104,16105,16106,16107,16108,16109,16110,16111,16112'/>
+  </group>
+  <group name='303'>
+    <ids val='16113,16114,16115,16116,16117,16118,16119,16120,16121,16122,16123,16124,16125,16126,16127,16128,16129,16130,16131,16132,16133,16134,16135,16136,16137,16138,16139,16140,16141,16142,16143,16144,16145,16146,16147,16148,16149,16150,16151,16152,16153,16154,16155,16156,16157,16158,16159,16160,16161,16162,16163,16164,16165,16166,16167,16168,16169,16170,16171,16172,16173,16174,16175,16176,16177,16178,16179,16180,16181,16182,16183,16184,16185,16186,16187,16188,16189,16190,16191,16192,16193,16194,16195,16196,16197,16198,16199,16200,16201,16202,16203,16204,16205,16206,16207,16208,16209,16210,16211,16212,16213,16214,16215,16216,16217,16218,16219,16220,16221,16222,16223,16224,16225,16226,16227,16228,16229,16230,16231,16232,16233,16234,16235,16236,16237,16238,16239,16240,16241,16242,16243,16244,16245,16246,16247,16248,16249,16250,16251,16252,16253,16254,16255,16256,16257,16258,16259,16260,16261,16262,16263,16264,16265,16266,16267,16268,16269,16270,16271,16272,16273,16274,16275,16276,16277,16278,16279,16280,16281,16282,16283,16284,16285,16286,16287,16288,16289,16290,16291,16292,16293,16294,16295,16296,16297,16298,16299,16300,16301,16302,16303,16304,16305,16306,16307,16308,16309,16310,16311,16312,16313,16314,16315,16316,16317,16318,16319,16320,16321,16322,16323,16324,16325,16326,16327,16328,16329,16330,16331,16332,16333,16334,16335,16336,16337,16338,16339,16340,16341,16342,16343,16344,16345,16346,16347,16348,16349,16350,16351,16352,16353,16354,16355,16356,16357,16358,16359,16360,16361,16362,16363,16364,16365,16366,16367,16368,16369,16370,16371,16372,16373,16374,16375,16376,16377,16378,16379,16380,16381,16382,16383,16384,16385,16386,16387,16388,16389,16390,16391,16392,16393,16394,16395,16396,16397,16398,16399,16400,16401,16402,16403,16404,16405,16406,16407,16408,16409,16410,16411,16412,16413,16414,16415,16416'/>
+  </group>
+  <group name='303'>
+    <ids val='16417,16418,16419,16420,16421,16422,16423,16424,16425,16426,16427,16428,16429,16430,16431,16432,16433,16434,16435,16436,16437,16438,16439,16440,16441,16442,16443,16444,16445,16446,16447,16448,16449,16450,16451,16452,16453,16454,16455,16456,16457,16458,16459,16460,16461,16462,16463,16464,16465,16466,16467,16468,16469,16470,16471,16472,16473,16474,16475,16476,16477,16478,16479,16480,16481,16482,16483,16484,16485,16486,16487,16488,16489,16490,16491,16492,16493,16494,16495,16496,16497,16498,16499,16500,16501,16502,16503,16504,16505,16506,16507,16508,16509,16510,16511,16512,16513,16514,16515,16516,16517,16518,16519,16520,16521,16522,16523,16524,16525,16526,16527,16528,16529,16530,16531,16532,16533,16534,16535,16536,16537,16538,16539,16540,16541,16542,16543,16544,16545,16546,16547,16548,16549,16550,16551,16552,16553,16554,16555,16556,16557,16558,16559,16560,16561,16562,16563,16564,16565,16566,16567,16568,16569,16570,16571,16572,16573,16574,16575,16576,16577,16578,16579,16580,16581,16582,16583,16584,16585,16586,16587,16588,16589,16590,16591,16592,16593,16594,16595,16596,16597,16598,16599,16600,16601,16602,16603,16604,16605,16606,16607,16608,16609,16610,16611,16612,16613,16614,16615,16616,16617,16618,16619,16620,16621,16622,16623,16624,16625,16626,16627,16628,16629,16630,16631,16632,16633,16634,16635,16636,16637,16638,16639,16640,16641,16642,16643,16644,16645,16646,16647,16648,16649,16650,16651,16652,16653,16654,16655,16656,16657,16658,16659,16660,16661,16662,16663,16664,16665,16666,16667,16668,16669,16670,16671,16672,16673,16674,16675,16676,16677,16678,16679,16680,16681,16682,16683,16684,16685,16686,16687,16688,16689,16690,16691,16692,16693,16694,16695,16696,16697,16698,16699,16700,16701,16702,16703,16704,16705,16706,16707,16708,16709,16710,16711,16712,16713,16714,16715,16716,16717,16718,16719,16720'/>
+  </group>
+  <group name='303'>
+    <ids val='16721,16722,16723,16724,16725,16726,16727,16728,16729,16730,16731,16732,16733,16734,16735,16736,16737,16738,16739,16740,16741,16742,16743,16744,16745,16746,16747,16748,16749,16750,16751,16752,16753,16754,16755,16756,16757,16758,16759,16760,16761,16762,16763,16764,16765,16766,16767,16768,16769,16770,16771,16772,16773,16774,16775,16776,16777,16778,16779,16780,16781,16782,16783,16784,16785,16786,16787,16788,16789,16790,16791,16792,16793,16794,16795,16796,16797,16798,16799,16800,16801,16802,16803,16804,16805,16806,16807,16808,16809,16810,16811,16812,16813,16814,16815,16816,16817,16818,16819,16820,16821,16822,16823,16824,16825,16826,16827,16828,16829,16830,16831,16832,16833,16834,16835,16836,16837,16838,16839,16840,16841,16842,16843,16844,16845,16846,16847,16848,16849,16850,16851,16852,16853,16854,16855,16856,16857,16858,16859,16860,16861,16862,16863,16864,16865,16866,16867,16868,16869,16870,16871,16872,16873,16874,16875,16876,16877,16878,16879,16880,16881,16882,16883,16884,16885,16886,16887,16888,16889,16890,16891,16892,16893,16894,16895,16896,16897,16898,16899,16900,16901,16902,16903,16904,16905,16906,16907,16908,16909,16910,16911,16912,16913,16914,16915,16916,16917,16918,16919,16920,16921,16922,16923,16924,16925,16926,16927,16928,16929,16930,16931,16932,16933,16934,16935,16936,16937,16938,16939,16940,16941,16942,16943,16944,16945,16946,16947,16948,16949,16950,16951,16952,16953,16954,16955,16956,16957,16958,16959,16960,16961,16962,16963,16964,16965,16966,16967,16968,16969,16970,16971,16972,16973,16974,16975,16976,16977,16978,16979,16980,16981,16982,16983,16984,16985,16986,16987,16988,16989,16990,16991,16992,16993,16994,16995,16996,16997,16998,16999,17000,17001,17002,17003,17004,17005,17006,17007,17008,17009,17010,17011,17012,17013,17014,17015,17016,17017,17018,17019,17020,17021,17022,17023,17024'/>
+  </group>
+  <group name='303'>
+    <ids val='17025,17026,17027,17028,17029,17030,17031,17032,17033,17034,17035,17036,17037,17038,17039,17040,17041,17042,17043,17044,17045,17046,17047,17048,17049,17050,17051,17052,17053,17054,17055,17056,17057,17058,17059,17060,17061,17062,17063,17064,17065,17066,17067,17068,17069,17070,17071,17072,17073,17074,17075,17076,17077,17078,17079,17080,17081,17082,17083,17084,17085,17086,17087,17088,17089,17090,17091,17092,17093,17094,17095,17096,17097,17098,17099,17100,17101,17102,17103,17104,17105,17106,17107,17108,17109,17110,17111,17112,17113,17114,17115,17116,17117,17118,17119,17120,17121,17122,17123,17124,17125,17126,17127,17128,17129,17130,17131,17132,17133,17134,17135,17136,17137,17138,17139,17140,17141,17142,17143,17144,17145,17146,17147,17148,17149,17150,17151,17152,17153,17154,17155,17156,17157,17158,17159,17160,17161,17162,17163,17164,17165,17166,17167,17168,17169,17170,17171,17172,17173,17174,17175,17176,17177,17178,17179,17180,17181,17182,17183,17184,17185,17186,17187,17188,17189,17190,17191,17192,17193,17194,17195,17196,17197,17198,17199,17200,17201,17202,17203,17204,17205,17206,17207,17208,17209,17210,17211,17212,17213,17214,17215,17216,17217,17218,17219,17220,17221,17222,17223,17224,17225,17226,17227,17228,17229,17230,17231,17232,17233,17234,17235,17236,17237,17238,17239,17240,17241,17242,17243,17244,17245,17246,17247,17248,17249,17250,17251,17252,17253,17254,17255,17256,17257,17258,17259,17260,17261,17262,17263,17264,17265,17266,17267,17268,17269,17270,17271,17272,17273,17274,17275,17276,17277,17278,17279,17280,17281,17282,17283,17284,17285,17286,17287,17288,17289,17290,17291,17292,17293,17294,17295,17296,17297,17298,17299,17300,17301,17302,17303,17304,17305,17306,17307,17308,17309,17310,17311,17312,17313,17314,17315,17316,17317,17318,17319,17320,17321,17322,17323,17324,17325,17326,17327,17328'/>
+  </group>
+  <group name='303'>
+    <ids val='17329,17330,17331,17332,17333,17334,17335,17336,17337,17338,17339,17340,17341,17342,17343,17344,17345,17346,17347,17348,17349,17350,17351,17352,17353,17354,17355,17356,17357,17358,17359,17360,17361,17362,17363,17364,17365,17366,17367,17368,17369,17370,17371,17372,17373,17374,17375,17376,17377,17378,17379,17380,17381,17382,17383,17384,17385,17386,17387,17388,17389,17390,17391,17392,17393,17394,17395,17396,17397,17398,17399,17400,17401,17402,17403,17404,17405,17406,17407,17408,17409,17410,17411,17412,17413,17414,17415,17416,17417,17418,17419,17420,17421,17422,17423,17424,17425,17426,17427,17428,17429,17430,17431,17432,17433,17434,17435,17436,17437,17438,17439,17440,17441,17442,17443,17444,17445,17446,17447,17448,17449,17450,17451,17452,17453,17454,17455,17456,17457,17458,17459,17460,17461,17462,17463,17464,17465,17466,17467,17468,17469,17470,17471,17472,17473,17474,17475,17476,17477,17478,17479,17480,17481,17482,17483,17484,17485,17486,17487,17488,17489,17490,17491,17492,17493,17494,17495,17496,17497,17498,17499,17500,17501,17502,17503,17504,17505,17506,17507,17508,17509,17510,17511,17512,17513,17514,17515,17516,17517,17518,17519,17520,17521,17522,17523,17524,17525,17526,17527,17528,17529,17530,17531,17532,17533,17534,17535,17536,17537,17538,17539,17540,17541,17542,17543,17544,17545,17546,17547,17548,17549,17550,17551,17552,17553,17554,17555,17556,17557,17558,17559,17560,17561,17562,17563,17564,17565,17566,17567,17568,17569,17570,17571,17572,17573,17574,17575,17576,17577,17578,17579,17580,17581,17582,17583,17584,17585,17586,17587,17588,17589,17590,17591,17592,17593,17594,17595,17596,17597,17598,17599,17600,17601,17602,17603,17604,17605,17606,17607,17608,17609,17610,17611,17612,17613,17614,17615,17616,17617,17618,17619,17620,17621,17622,17623,17624,17625,17626,17627,17628,17629,17630,17631,17632'/>
+  </group>
+  <group name='303'>
+    <ids val='17633,17634,17635,17636,17637,17638,17639,17640,17641,17642,17643,17644,17645,17646,17647,17648,17649,17650,17651,17652,17653,17654,17655,17656,17657,17658,17659,17660,17661,17662,17663,17664,17665,17666,17667,17668,17669,17670,17671,17672,17673,17674,17675,17676,17677,17678,17679,17680,17681,17682,17683,17684,17685,17686,17687,17688,17689,17690,17691,17692,17693,17694,17695,17696,17697,17698,17699,17700,17701,17702,17703,17704,17705,17706,17707,17708,17709,17710,17711,17712,17713,17714,17715,17716,17717,17718,17719,17720,17721,17722,17723,17724,17725,17726,17727,17728,17729,17730,17731,17732,17733,17734,17735,17736,17737,17738,17739,17740,17741,17742,17743,17744,17745,17746,17747,17748,17749,17750,17751,17752,17753,17754,17755,17756,17757,17758,17759,17760,17761,17762,17763,17764,17765,17766,17767,17768,17769,17770,17771,17772,17773,17774,17775,17776,17777,17778,17779,17780,17781,17782,17783,17784,17785,17786,17787,17788,17789,17790,17791,17792,17793,17794,17795,17796,17797,17798,17799,17800,17801,17802,17803,17804,17805,17806,17807,17808,17809,17810,17811,17812,17813,17814,17815,17816,17817,17818,17819,17820,17821,17822,17823,17824,17825,17826,17827,17828,17829,17830,17831,17832,17833,17834,17835,17836,17837,17838,17839,17840,17841,17842,17843,17844,17845,17846,17847,17848,17849,17850,17851,17852,17853,17854,17855,17856,17857,17858,17859,17860,17861,17862,17863,17864,17865,17866,17867,17868,17869,17870,17871,17872,17873,17874,17875,17876,17877,17878,17879,17880,17881,17882,17883,17884,17885,17886,17887,17888,17889,17890,17891,17892,17893,17894,17895,17896,17897,17898,17899,17900,17901,17902,17903,17904,17905,17906,17907,17908,17909,17910,17911,17912,17913,17914,17915,17916,17917,17918,17919,17920,17921,17922,17923,17924,17925,17926,17927,17928,17929,17930,17931,17932,17933,17934,17935,17936'/>
+  </group>
+  <group name='303'>
+    <ids val='17937,17938,17939,17940,17941,17942,17943,17944,17945,17946,17947,17948,17949,17950,17951,17952,17953,17954,17955,17956,17957,17958,17959,17960,17961,17962,17963,17964,17965,17966,17967,17968,17969,17970,17971,17972,17973,17974,17975,17976,17977,17978,17979,17980,17981,17982,17983,17984,17985,17986,17987,17988,17989,17990,17991,17992,17993,17994,17995,17996,17997,17998,17999,18000,18001,18002,18003,18004,18005,18006,18007,18008,18009,18010,18011,18012,18013,18014,18015,18016,18017,18018,18019,18020,18021,18022,18023,18024,18025,18026,18027,18028,18029,18030,18031,18032,18033,18034,18035,18036,18037,18038,18039,18040,18041,18042,18043,18044,18045,18046,18047,18048,18049,18050,18051,18052,18053,18054,18055,18056,18057,18058,18059,18060,18061,18062,18063,18064,18065,18066,18067,18068,18069,18070,18071,18072,18073,18074,18075,18076,18077,18078,18079,18080,18081,18082,18083,18084,18085,18086,18087,18088,18089,18090,18091,18092,18093,18094,18095,18096,18097,18098,18099,18100,18101,18102,18103,18104,18105,18106,18107,18108,18109,18110,18111,18112,18113,18114,18115,18116,18117,18118,18119,18120,18121,18122,18123,18124,18125,18126,18127,18128,18129,18130,18131,18132,18133,18134,18135,18136,18137,18138,18139,18140,18141,18142,18143,18144,18145,18146,18147,18148,18149,18150,18151,18152,18153,18154,18155,18156,18157,18158,18159,18160,18161,18162,18163,18164,18165,18166,18167,18168,18169,18170,18171,18172,18173,18174,18175,18176,18177,18178,18179,18180,18181,18182,18183,18184,18185,18186,18187,18188,18189,18190,18191,18192,18193,18194,18195,18196,18197,18198,18199,18200,18201,18202,18203,18204,18205,18206,18207,18208,18209,18210,18211,18212,18213,18214,18215,18216,18217,18218,18219,18220,18221,18222,18223,18224,18225,18226,18227,18228,18229,18230,18231,18232,18233,18234,18235,18236,18237,18238,18239,18240'/>
+  </group>
+  <group name='303'>
+    <ids val='18241,18242,18243,18244,18245,18246,18247,18248,18249,18250,18251,18252,18253,18254,18255,18256,18257,18258,18259,18260,18261,18262,18263,18264,18265,18266,18267,18268,18269,18270,18271,18272,18273,18274,18275,18276,18277,18278,18279,18280,18281,18282,18283,18284,18285,18286,18287,18288,18289,18290,18291,18292,18293,18294,18295,18296,18297,18298,18299,18300,18301,18302,18303,18304,18305,18306,18307,18308,18309,18310,18311,18312,18313,18314,18315,18316,18317,18318,18319,18320,18321,18322,18323,18324,18325,18326,18327,18328,18329,18330,18331,18332,18333,18334,18335,18336,18337,18338,18339,18340,18341,18342,18343,18344,18345,18346,18347,18348,18349,18350,18351,18352,18353,18354,18355,18356,18357,18358,18359,18360,18361,18362,18363,18364,18365,18366,18367,18368,18369,18370,18371,18372,18373,18374,18375,18376,18377,18378,18379,18380,18381,18382,18383,18384,18385,18386,18387,18388,18389,18390,18391,18392,18393,18394,18395,18396,18397,18398,18399,18400,18401,18402,18403,18404,18405,18406,18407,18408,18409,18410,18411,18412,18413,18414,18415,18416,18417,18418,18419,18420,18421,18422,18423,18424,18425,18426,18427,18428,18429,18430,18431,18432,18433,18434,18435,18436,18437,18438,18439,18440,18441,18442,18443,18444,18445,18446,18447,18448,18449,18450,18451,18452,18453,18454,18455,18456,18457,18458,18459,18460,18461,18462,18463,18464,18465,18466,18467,18468,18469,18470,18471,18472,18473,18474,18475,18476,18477,18478,18479,18480,18481,18482,18483,18484,18485,18486,18487,18488,18489,18490,18491,18492,18493,18494,18495,18496,18497,18498,18499,18500,18501,18502,18503,18504,18505,18506,18507,18508,18509,18510,18511,18512,18513,18514,18515,18516,18517,18518,18519,18520,18521,18522,18523,18524,18525,18526,18527,18528,18529,18530,18531,18532,18533,18534,18535,18536,18537,18538,18539,18540,18541,18542,18543,18544'/>
+  </group>
+  <group name='303'>
+    <ids val='18545,18546,18547,18548,18549,18550,18551,18552,18553,18554,18555,18556,18557,18558,18559,18560,18561,18562,18563,18564,18565,18566,18567,18568,18569,18570,18571,18572,18573,18574,18575,18576,18577,18578,18579,18580,18581,18582,18583,18584,18585,18586,18587,18588,18589,18590,18591,18592,18593,18594,18595,18596,18597,18598,18599,18600,18601,18602,18603,18604,18605,18606,18607,18608,18609,18610,18611,18612,18613,18614,18615,18616,18617,18618,18619,18620,18621,18622,18623,18624,18625,18626,18627,18628,18629,18630,18631,18632,18633,18634,18635,18636,18637,18638,18639,18640,18641,18642,18643,18644,18645,18646,18647,18648,18649,18650,18651,18652,18653,18654,18655,18656,18657,18658,18659,18660,18661,18662,18663,18664,18665,18666,18667,18668,18669,18670,18671,18672,18673,18674,18675,18676,18677,18678,18679,18680,18681,18682,18683,18684,18685,18686,18687,18688,18689,18690,18691,18692,18693,18694,18695,18696,18697,18698,18699,18700,18701,18702,18703,18704,18705,18706,18707,18708,18709,18710,18711,18712,18713,18714,18715,18716,18717,18718,18719,18720,18721,18722,18723,18724,18725,18726,18727,18728,18729,18730,18731,18732,18733,18734,18735,18736,18737,18738,18739,18740,18741,18742,18743,18744,18745,18746,18747,18748,18749,18750,18751,18752,18753,18754,18755,18756,18757,18758,18759,18760,18761,18762,18763,18764,18765,18766,18767,18768,18769,18770,18771,18772,18773,18774,18775,18776,18777,18778,18779,18780,18781,18782,18783,18784,18785,18786,18787,18788,18789,18790,18791,18792,18793,18794,18795,18796,18797,18798,18799,18800,18801,18802,18803,18804,18805,18806,18807,18808,18809,18810,18811,18812,18813,18814,18815,18816,18817,18818,18819,18820,18821,18822,18823,18824,18825,18826,18827,18828,18829,18830,18831,18832,18833,18834,18835,18836,18837,18838,18839,18840,18841,18842,18843,18844,18845,18846,18847,18848'/>
+  </group>
+  <group name='303'>
+    <ids val='18849,18850,18851,18852,18853,18854,18855,18856,18857,18858,18859,18860,18861,18862,18863,18864,18865,18866,18867,18868,18869,18870,18871,18872,18873,18874,18875,18876,18877,18878,18879,18880,18881,18882,18883,18884,18885,18886,18887,18888,18889,18890,18891,18892,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,18904,18905,18906,18907,18908,18909,18910,18911,18912,18913,18914,18915,18916,18917,18918,18919,18920,18921,18922,18923,18924,18925,18926,18927,18928,18929,18930,18931,18932,18933,18934,18935,18936,18937,18938,18939,18940,18941,18942,18943,18944,18945,18946,18947,18948,18949,18950,18951,18952,18953,18954,18955,18956,18957,18958,18959,18960,18961,18962,18963,18964,18965,18966,18967,18968,18969,18970,18971,18972,18973,18974,18975,18976,18977,18978,18979,18980,18981,18982,18983,18984,18985,18986,18987,18988,18989,18990,18991,18992,18993,18994,18995,18996,18997,18998,18999,19000,19001,19002,19003,19004,19005,19006,19007,19008,19009,19010,19011,19012,19013,19014,19015,19016,19017,19018,19019,19020,19021,19022,19023,19024,19025,19026,19027,19028,19029,19030,19031,19032,19033,19034,19035,19036,19037,19038,19039,19040,19041,19042,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19053,19054,19055,19056,19057,19058,19059,19060,19061,19062,19063,19064,19065,19066,19067,19068,19069,19070,19071,19072,19073,19074,19075,19076,19077,19078,19079,19080,19081,19082,19083,19084,19085,19086,19087,19088,19089,19090,19091,19092,19093,19094,19095,19096,19097,19098,19099,19100,19101,19102,19103,19104,19105,19106,19107,19108,19109,19110,19111,19112,19113,19114,19115,19116,19117,19118,19119,19120,19121,19122,19123,19124,19125,19126,19127,19128,19129,19130,19131,19132,19133,19134,19135,19136,19137,19138,19139,19140,19141,19142,19143,19144,19145,19146,19147,19148,19149,19150,19151,19152'/>
+  </group>
+  <group name='303'>
+    <ids val='19153,19154,19155,19156,19157,19158,19159,19160,19161,19162,19163,19164,19165,19166,19167,19168,19169,19170,19171,19172,19173,19174,19175,19176,19177,19178,19179,19180,19181,19182,19183,19184,19185,19186,19187,19188,19189,19190,19191,19192,19193,19194,19195,19196,19197,19198,19199,19200,19201,19202,19203,19204,19205,19206,19207,19208,19209,19210,19211,19212,19213,19214,19215,19216,19217,19218,19219,19220,19221,19222,19223,19224,19225,19226,19227,19228,19229,19230,19231,19232,19233,19234,19235,19236,19237,19238,19239,19240,19241,19242,19243,19244,19245,19246,19247,19248,19249,19250,19251,19252,19253,19254,19255,19256,19257,19258,19259,19260,19261,19262,19263,19264,19265,19266,19267,19268,19269,19270,19271,19272,19273,19274,19275,19276,19277,19278,19279,19280,19281,19282,19283,19284,19285,19286,19287,19288,19289,19290,19291,19292,19293,19294,19295,19296,19297,19298,19299,19300,19301,19302,19303,19304,19305,19306,19307,19308,19309,19310,19311,19312,19313,19314,19315,19316,19317,19318,19319,19320,19321,19322,19323,19324,19325,19326,19327,19328,19329,19330,19331,19332,19333,19334,19335,19336,19337,19338,19339,19340,19341,19342,19343,19344,19345,19346,19347,19348,19349,19350,19351,19352,19353,19354,19355,19356,19357,19358,19359,19360,19361,19362,19363,19364,19365,19366,19367,19368,19369,19370,19371,19372,19373,19374,19375,19376,19377,19378,19379,19380,19381,19382,19383,19384,19385,19386,19387,19388,19389,19390,19391,19392,19393,19394,19395,19396,19397,19398,19399,19400,19401,19402,19403,19404,19405,19406,19407,19408,19409,19410,19411,19412,19413,19414,19415,19416,19417,19418,19419,19420,19421,19422,19423,19424,19425,19426,19427,19428,19429,19430,19431,19432,19433,19434,19435,19436,19437,19438,19439,19440,19441,19442,19443,19444,19445,19446,19447,19448,19449,19450,19451,19452,19453,19454,19455,19456'/>
+  </group>
+  <group name='303'>
+    <ids val='19457,19458,19459,19460,19461,19462,19463,19464,19465,19466,19467,19468,19469,19470,19471,19472,19473,19474,19475,19476,19477,19478,19479,19480,19481,19482,19483,19484,19485,19486,19487,19488,19489,19490,19491,19492,19493,19494,19495,19496,19497,19498,19499,19500,19501,19502,19503,19504,19505,19506,19507,19508,19509,19510,19511,19512,19513,19514,19515,19516,19517,19518,19519,19520,19521,19522,19523,19524,19525,19526,19527,19528,19529,19530,19531,19532,19533,19534,19535,19536,19537,19538,19539,19540,19541,19542,19543,19544,19545,19546,19547,19548,19549,19550,19551,19552,19553,19554,19555,19556,19557,19558,19559,19560,19561,19562,19563,19564,19565,19566,19567,19568,19569,19570,19571,19572,19573,19574,19575,19576,19577,19578,19579,19580,19581,19582,19583,19584,19585,19586,19587,19588,19589,19590,19591,19592,19593,19594,19595,19596,19597,19598,19599,19600,19601,19602,19603,19604,19605,19606,19607,19608,19609,19610,19611,19612,19613,19614,19615,19616,19617,19618,19619,19620,19621,19622,19623,19624,19625,19626,19627,19628,19629,19630,19631,19632,19633,19634,19635,19636,19637,19638,19639,19640,19641,19642,19643,19644,19645,19646,19647,19648,19649,19650,19651,19652,19653,19654,19655,19656,19657,19658,19659,19660,19661,19662,19663,19664,19665,19666,19667,19668,19669,19670,19671,19672,19673,19674,19675,19676,19677,19678,19679,19680,19681,19682,19683,19684,19685,19686,19687,19688,19689,19690,19691,19692,19693,19694,19695,19696,19697,19698,19699,19700,19701,19702,19703,19704,19705,19706,19707,19708,19709,19710,19711,19712,19713,19714,19715,19716,19717,19718,19719,19720,19721,19722,19723,19724,19725,19726,19727,19728,19729,19730,19731,19732,19733,19734,19735,19736,19737,19738,19739,19740,19741,19742,19743,19744,19745,19746,19747,19748,19749,19750,19751,19752,19753,19754,19755,19756,19757,19758,19759,19760'/>
+  </group>
+  <group name='303'>
+    <ids val='19761,19762,19763,19764,19765,19766,19767,19768,19769,19770,19771,19772,19773,19774,19775,19776,19777,19778,19779,19780,19781,19782,19783,19784,19785,19786,19787,19788,19789,19790,19791,19792,19793,19794,19795,19796,19797,19798,19799,19800,19801,19802,19803,19804,19805,19806,19807,19808,19809,19810,19811,19812,19813,19814,19815,19816,19817,19818,19819,19820,19821,19822,19823,19824,19825,19826,19827,19828,19829,19830,19831,19832,19833,19834,19835,19836,19837,19838,19839,19840,19841,19842,19843,19844,19845,19846,19847,19848,19849,19850,19851,19852,19853,19854,19855,19856,19857,19858,19859,19860,19861,19862,19863,19864,19865,19866,19867,19868,19869,19870,19871,19872,19873,19874,19875,19876,19877,19878,19879,19880,19881,19882,19883,19884,19885,19886,19887,19888,19889,19890,19891,19892,19893,19894,19895,19896,19897,19898,19899,19900,19901,19902,19903,19904,19905,19906,19907,19908,19909,19910,19911,19912,19913,19914,19915,19916,19917,19918,19919,19920,19921,19922,19923,19924,19925,19926,19927,19928,19929,19930,19931,19932,19933,19934,19935,19936,19937,19938,19939,19940,19941,19942,19943,19944,19945,19946,19947,19948,19949,19950,19951,19952,19953,19954,19955,19956,19957,19958,19959,19960,19961,19962,19963,19964,19965,19966,19967,19968,19969,19970,19971,19972,19973,19974,19975,19976,19977,19978,19979,19980,19981,19982,19983,19984,19985,19986,19987,19988,19989,19990,19991,19992,19993,19994,19995,19996,19997,19998,19999,20000,20001,20002,20003,20004,20005,20006,20007,20008,20009,20010,20011,20012,20013,20014,20015,20016,20017,20018,20019,20020,20021,20022,20023,20024,20025,20026,20027,20028,20029,20030,20031,20032,20033,20034,20035,20036,20037,20038,20039,20040,20041,20042,20043,20044,20045,20046,20047,20048,20049,20050,20051,20052,20053,20054,20055,20056,20057,20058,20059,20060,20061,20062,20063,20064'/>
+  </group>
+  <group name='303'>
+    <ids val='20065,20066,20067,20068,20069,20070,20071,20072,20073,20074,20075,20076,20077,20078,20079,20080,20081,20082,20083,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20094,20095,20096,20097,20098,20099,20100,20101,20102,20103,20104,20105,20106,20107,20108,20109,20110,20111,20112,20113,20114,20115,20116,20117,20118,20119,20120,20121,20122,20123,20124,20125,20126,20127,20128,20129,20130,20131,20132,20133,20134,20135,20136,20137,20138,20139,20140,20141,20142,20143,20144,20145,20146,20147,20148,20149,20150,20151,20152,20153,20154,20155,20156,20157,20158,20159,20160,20161,20162,20163,20164,20165,20166,20167,20168,20169,20170,20171,20172,20173,20174,20175,20176,20177,20178,20179,20180,20181,20182,20183,20184,20185,20186,20187,20188,20189,20190,20191,20192,20193,20194,20195,20196,20197,20198,20199,20200,20201,20202,20203,20204,20205,20206,20207,20208,20209,20210,20211,20212,20213,20214,20215,20216,20217,20218,20219,20220,20221,20222,20223,20224,20225,20226,20227,20228,20229,20230,20231,20232,20233,20234,20235,20236,20237,20238,20239,20240,20241,20242,20243,20244,20245,20246,20247,20248,20249,20250,20251,20252,20253,20254,20255,20256,20257,20258,20259,20260,20261,20262,20263,20264,20265,20266,20267,20268,20269,20270,20271,20272,20273,20274,20275,20276,20277,20278,20279,20280,20281,20282,20283,20284,20285,20286,20287,20288,20289,20290,20291,20292,20293,20294,20295,20296,20297,20298,20299,20300,20301,20302,20303,20304,20305,20306,20307,20308,20309,20310,20311,20312,20313,20314,20315,20316,20317,20318,20319,20320,20321,20322,20323,20324,20325,20326,20327,20328,20329,20330,20331,20332,20333,20334,20335,20336,20337,20338,20339,20340,20341,20342,20343,20344,20345,20346,20347,20348,20349,20350,20351,20352,20353,20354,20355,20356,20357,20358,20359,20360,20361,20362,20363,20364,20365,20366,20367,20368'/>
+  </group>
+  <group name='303'>
+    <ids val='20369,20370,20371,20372,20373,20374,20375,20376,20377,20378,20379,20380,20381,20382,20383,20384,20385,20386,20387,20388,20389,20390,20391,20392,20393,20394,20395,20396,20397,20398,20399,20400,20401,20402,20403,20404,20405,20406,20407,20408,20409,20410,20411,20412,20413,20414,20415,20416,20417,20418,20419,20420,20421,20422,20423,20424,20425,20426,20427,20428,20429,20430,20431,20432,20433,20434,20435,20436,20437,20438,20439,20440,20441,20442,20443,20444,20445,20446,20447,20448,20449,20450,20451,20452,20453,20454,20455,20456,20457,20458,20459,20460,20461,20462,20463,20464,20465,20466,20467,20468,20469,20470,20471,20472,20473,20474,20475,20476,20477,20478,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20492,20493,20494,20495,20496,20497,20498,20499,20500,20501,20502,20503,20504,20505,20506,20507,20508,20509,20510,20511,20512,20513,20514,20515,20516,20517,20518,20519,20520,20521,20522,20523,20524,20525,20526,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20538,20539,20540,20541,20542,20543,20544,20545,20546,20547,20548,20549,20550,20551,20552,20553,20554,20555,20556,20557,20558,20559,20560,20561,20562,20563,20564,20565,20566,20567,20568,20569,20570,20571,20572,20573,20574,20575,20576,20577,20578,20579,20580,20581,20582,20583,20584,20585,20586,20587,20588,20589,20590,20591,20592,20593,20594,20595,20596,20597,20598,20599,20600,20601,20602,20603,20604,20605,20606,20607,20608,20609,20610,20611,20612,20613,20614,20615,20616,20617,20618,20619,20620,20621,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20643,20644,20645,20646,20647,20648,20649,20650,20651,20652,20653,20654,20655,20656,20657,20658,20659,20660,20661,20662,20663,20664,20665,20666,20667,20668,20669,20670,20671,20672'/>
+  </group>
+  <group name='303'>
+    <ids val='20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20687,20688,20689,20690,20691,20692,20693,20694,20695,20696,20697,20698,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20710,20711,20712,20713,20714,20715,20716,20717,20718,20719,20720,20721,20722,20723,20724,20725,20726,20727,20728,20729,20730,20731,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20742,20743,20744,20745,20746,20747,20748,20749,20750,20751,20752,20753,20754,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20769,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20799,20800,20801,20802,20803,20804,20805,20806,20807,20808,20809,20810,20811,20812,20813,20814,20815,20816,20817,20818,20819,20820,20821,20822,20823,20824,20825,20826,20827,20828,20829,20830,20831,20832,20833,20834,20835,20836,20837,20838,20839,20840,20841,20842,20843,20844,20845,20846,20847,20848,20849,20850,20851,20852,20853,20854,20855,20856,20857,20858,20859,20860,20861,20862,20863,20864,20865,20866,20867,20868,20869,20870,20871,20872,20873,20874,20875,20876,20877,20878,20879,20880,20881,20882,20883,20884,20885,20886,20887,20888,20889,20890,20891,20892,20893,20894,20895,20896,20897,20898,20899,20900,20901,20902,20903,20904,20905,20906,20907,20908,20909,20910,20911,20912,20913,20914,20915,20916,20917,20918,20919,20920,20921,20922,20923,20924,20925,20926,20927,20928,20929,20930,20931,20932,20933,20934,20935,20936,20937,20938,20939,20940,20941,20942,20943,20944,20945,20946,20947,20948,20949,20950,20951,20952,20953,20954,20955,20956,20957,20958,20959,20960,20961,20962,20963,20964,20965,20966,20967,20968,20969,20970,20971,20972,20973,20974,20975,20976'/>
+  </group>
+  <group name='303'>
+    <ids val='20977,20978,20979,20980,20981,20982,20983,20984,20985,20986,20987,20988,20989,20990,20991,20992,20993,20994,20995,20996,20997,20998,20999,21000,21001,21002,21003,21004,21005,21006,21007,21008,21009,21010,21011,21012,21013,21014,21015,21016,21017,21018,21019,21020,21021,21022,21023,21024,21025,21026,21027,21028,21029,21030,21031,21032,21033,21034,21035,21036,21037,21038,21039,21040,21041,21042,21043,21044,21045,21046,21047,21048,21049,21050,21051,21052,21053,21054,21055,21056,21057,21058,21059,21060,21061,21062,21063,21064,21065,21066,21067,21068,21069,21070,21071,21072,21073,21074,21075,21076,21077,21078,21079,21080,21081,21082,21083,21084,21085,21086,21087,21088,21089,21090,21091,21092,21093,21094,21095,21096,21097,21098,21099,21100,21101,21102,21103,21104,21105,21106,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21117,21118,21119,21120,21121,21122,21123,21124,21125,21126,21127,21128,21129,21130,21131,21132,21133,21134,21135,21136,21137,21138,21139,21140,21141,21142,21143,21144,21145,21146,21147,21148,21149,21150,21151,21152,21153,21154,21155,21156,21157,21158,21159,21160,21161,21162,21163,21164,21165,21166,21167,21168,21169,21170,21171,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21182,21183,21184,21185,21186,21187,21188,21189,21190,21191,21192,21193,21194,21195,21196,21197,21198,21199,21200,21201,21202,21203,21204,21205,21206,21207,21208,21209,21210,21211,21212,21213,21214,21215,21216,21217,21218,21219,21220,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21232,21233,21234,21235,21236,21237,21238,21239,21240,21241,21242,21243,21244,21245,21246,21247,21248,21249,21250,21251,21252,21253,21254,21255,21256,21257,21258,21259,21260,21261,21262,21263,21264,21265,21266,21267,21268,21269,21270,21271,21272,21273,21274,21275,21276,21277,21278,21279,21280'/>
+  </group>
+  <group name='303'>
+    <ids val='21281,21282,21283,21284,21285,21286,21287,21288,21289,21290,21291,21292,21293,21294,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21305,21306,21307,21308,21309,21310,21311,21312,21313,21314,21315,21316,21317,21318,21319,21320,21321,21322,21323,21324,21325,21326,21327,21328,21329,21330,21331,21332,21333,21334,21335,21336,21337,21338,21339,21340,21341,21342,21343,21344,21345,21346,21347,21348,21349,21350,21351,21352,21353,21354,21355,21356,21357,21358,21359,21360,21361,21362,21363,21364,21365,21366,21367,21368,21369,21370,21371,21372,21373,21374,21375,21376,21377,21378,21379,21380,21381,21382,21383,21384,21385,21386,21387,21388,21389,21390,21391,21392,21393,21394,21395,21396,21397,21398,21399,21400,21401,21402,21403,21404,21405,21406,21407,21408,21409,21410,21411,21412,21413,21414,21415,21416,21417,21418,21419,21420,21421,21422,21423,21424,21425,21426,21427,21428,21429,21430,21431,21432,21433,21434,21435,21436,21437,21438,21439,21440,21441,21442,21443,21444,21445,21446,21447,21448,21449,21450,21451,21452,21453,21454,21455,21456,21457,21458,21459,21460,21461,21462,21463,21464,21465,21466,21467,21468,21469,21470,21471,21472,21473,21474,21475,21476,21477,21478,21479,21480,21481,21482,21483,21484,21485,21486,21487,21488,21489,21490,21491,21492,21493,21494,21495,21496,21497,21498,21499,21500,21501,21502,21503,21504,21505,21506,21507,21508,21509,21510,21511,21512,21513,21514,21515,21516,21517,21518,21519,21520,21521,21522,21523,21524,21525,21526,21527,21528,21529,21530,21531,21532,21533,21534,21535,21536,21537,21538,21539,21540,21541,21542,21543,21544,21545,21546,21547,21548,21549,21550,21551,21552,21553,21554,21555,21556,21557,21558,21559,21560,21561,21562,21563,21564,21565,21566,21567,21568,21569,21570,21571,21572,21573,21574,21575,21576,21577,21578,21579,21580,21581,21582,21583,21584'/>
+  </group>
+  <group name='303'>
+    <ids val='21585,21586,21587,21588,21589,21590,21591,21592,21593,21594,21595,21596,21597,21598,21599,21600,21601,21602,21603,21604,21605,21606,21607,21608,21609,21610,21611,21612,21613,21614,21615,21616,21617,21618,21619,21620,21621,21622,21623,21624,21625,21626,21627,21628,21629,21630,21631,21632,21633,21634,21635,21636,21637,21638,21639,21640,21641,21642,21643,21644,21645,21646,21647,21648,21649,21650,21651,21652,21653,21654,21655,21656,21657,21658,21659,21660,21661,21662,21663,21664,21665,21666,21667,21668,21669,21670,21671,21672,21673,21674,21675,21676,21677,21678,21679,21680,21681,21682,21683,21684,21685,21686,21687,21688,21689,21690,21691,21692,21693,21694,21695,21696,21697,21698,21699,21700,21701,21702,21703,21704,21705,21706,21707,21708,21709,21710,21711,21712,21713,21714,21715,21716,21717,21718,21719,21720,21721,21722,21723,21724,21725,21726,21727,21728,21729,21730,21731,21732,21733,21734,21735,21736,21737,21738,21739,21740,21741,21742,21743,21744,21745,21746,21747,21748,21749,21750,21751,21752,21753,21754,21755,21756,21757,21758,21759,21760,21761,21762,21763,21764,21765,21766,21767,21768,21769,21770,21771,21772,21773,21774,21775,21776,21777,21778,21779,21780,21781,21782,21783,21784,21785,21786,21787,21788,21789,21790,21791,21792,21793,21794,21795,21796,21797,21798,21799,21800,21801,21802,21803,21804,21805,21806,21807,21808,21809,21810,21811,21812,21813,21814,21815,21816,21817,21818,21819,21820,21821,21822,21823,21824,21825,21826,21827,21828,21829,21830,21831,21832,21833,21834,21835,21836,21837,21838,21839,21840,21841,21842,21843,21844,21845,21846,21847,21848,21849,21850,21851,21852,21853,21854,21855,21856,21857,21858,21859,21860,21861,21862,21863,21864,21865,21866,21867,21868,21869,21870,21871,21872,21873,21874,21875,21876,21877,21878,21879,21880,21881,21882,21883,21884,21885,21886,21887,21888'/>
+  </group>
+  <group name='303'>
+    <ids val='21889,21890,21891,21892,21893,21894,21895,21896,21897,21898,21899,21900,21901,21902,21903,21904,21905,21906,21907,21908,21909,21910,21911,21912,21913,21914,21915,21916,21917,21918,21919,21920,21921,21922,21923,21924,21925,21926,21927,21928,21929,21930,21931,21932,21933,21934,21935,21936,21937,21938,21939,21940,21941,21942,21943,21944,21945,21946,21947,21948,21949,21950,21951,21952,21953,21954,21955,21956,21957,21958,21959,21960,21961,21962,21963,21964,21965,21966,21967,21968,21969,21970,21971,21972,21973,21974,21975,21976,21977,21978,21979,21980,21981,21982,21983,21984,21985,21986,21987,21988,21989,21990,21991,21992,21993,21994,21995,21996,21997,21998,21999,22000,22001,22002,22003,22004,22005,22006,22007,22008,22009,22010,22011,22012,22013,22014,22015,22016,22017,22018,22019,22020,22021,22022,22023,22024,22025,22026,22027,22028,22029,22030,22031,22032,22033,22034,22035,22036,22037,22038,22039,22040,22041,22042,22043,22044,22045,22046,22047,22048,22049,22050,22051,22052,22053,22054,22055,22056,22057,22058,22059,22060,22061,22062,22063,22064,22065,22066,22067,22068,22069,22070,22071,22072,22073,22074,22075,22076,22077,22078,22079,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22092,22093,22094,22095,22096,22097,22098,22099,22100,22101,22102,22103,22104,22105,22106,22107,22108,22109,22110,22111,22112,22113,22114,22115,22116,22117,22118,22119,22120,22121,22122,22123,22124,22125,22126,22127,22128,22129,22130,22131,22132,22133,22134,22135,22136,22137,22138,22139,22140,22141,22142,22143,22144,22145,22146,22147,22148,22149,22150,22151,22152,22153,22154,22155,22156,22157,22158,22159,22160,22161,22162,22163,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22179,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22191,22192'/>
+  </group>
+  <group name='303'>
+    <ids val='22193,22194,22195,22196,22197,22198,22199,22200,22201,22202,22203,22204,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22218,22219,22220,22221,22222,22223,22224,22225,22226,22227,22228,22229,22230,22231,22232,22233,22234,22235,22236,22237,22238,22239,22240,22241,22242,22243,22244,22245,22246,22247,22248,22249,22250,22251,22252,22253,22254,22255,22256,22257,22258,22259,22260,22261,22262,22263,22264,22265,22266,22267,22268,22269,22270,22271,22272,22273,22274,22275,22276,22277,22278,22279,22280,22281,22282,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22300,22301,22302,22303,22304,22305,22306,22307,22308,22309,22310,22311,22312,22313,22314,22315,22316,22317,22318,22319,22320,22321,22322,22323,22324,22325,22326,22327,22328,22329,22330,22331,22332,22333,22334,22335,22336,22337,22338,22339,22340,22341,22342,22343,22344,22345,22346,22347,22348,22349,22350,22351,22352,22353,22354,22355,22356,22357,22358,22359,22360,22361,22362,22363,22364,22365,22366,22367,22368,22369,22370,22371,22372,22373,22374,22375,22376,22377,22378,22379,22380,22381,22382,22383,22384,22385,22386,22387,22388,22389,22390,22391,22392,22393,22394,22395,22396,22397,22398,22399,22400,22401,22402,22403,22404,22405,22406,22407,22408,22409,22410,22411,22412,22413,22414,22415,22416,22417,22418,22419,22420,22421,22422,22423,22424,22425,22426,22427,22428,22429,22430,22431,22432,22433,22434,22435,22436,22437,22438,22439,22440,22441,22442,22443,22444,22445,22446,22447,22448,22449,22450,22451,22452,22453,22454,22455,22456,22457,22458,22459,22460,22461,22462,22463,22464,22465,22466,22467,22468,22469,22470,22471,22472,22473,22474,22475,22476,22477,22478,22479,22480,22481,22482,22483,22484,22485,22486,22487,22488,22489,22490,22491,22492,22493,22494,22495,22496'/>
+  </group>
+  <group name='303'>
+    <ids val='22497,22498,22499,22500,22501,22502,22503,22504,22505,22506,22507,22508,22509,22510,22511,22512,22513,22514,22515,22516,22517,22518,22519,22520,22521,22522,22523,22524,22525,22526,22527,22528,22529,22530,22531,22532,22533,22534,22535,22536,22537,22538,22539,22540,22541,22542,22543,22544,22545,22546,22547,22548,22549,22550,22551,22552,22553,22554,22555,22556,22557,22558,22559,22560,22561,22562,22563,22564,22565,22566,22567,22568,22569,22570,22571,22572,22573,22574,22575,22576,22577,22578,22579,22580,22581,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22596,22597,22598,22599,22600,22601,22602,22603,22604,22605,22606,22607,22608,22609,22610,22611,22612,22613,22614,22615,22616,22617,22618,22619,22620,22621,22622,22623,22624,22625,22626,22627,22628,22629,22630,22631,22632,22633,22634,22635,22636,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22654,22655,22656,22657,22658,22659,22660,22661,22662,22663,22664,22665,22666,22667,22668,22669,22670,22671,22672,22673,22674,22675,22676,22677,22678,22679,22680,22681,22682,22683,22684,22685,22686,22687,22688,22689,22690,22691,22692,22693,22694,22695,22696,22697,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22716,22717,22718,22719,22720,22721,22722,22723,22724,22725,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22737,22738,22739,22740,22741,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22756,22757,22758,22759,22760,22761,22762,22763,22764,22765,22766,22767,22768,22769,22770,22771,22772,22773,22774,22775,22776,22777,22778,22779,22780,22781,22782,22783,22784,22785,22786,22787,22788,22789,22790,22791,22792,22793,22794,22795,22796,22797,22798,22799,22800'/>
+  </group>
+  <group name='303'>
+    <ids val='22801,22802,22803,22804,22805,22806,22807,22808,22809,22810,22811,22812,22813,22814,22815,22816,22817,22818,22819,22820,22821,22822,22823,22824,22825,22826,22827,22828,22829,22830,22831,22832,22833,22834,22835,22836,22837,22838,22839,22840,22841,22842,22843,22844,22845,22846,22847,22848,22849,22850,22851,22852,22853,22854,22855,22856,22857,22858,22859,22860,22861,22862,22863,22864,22865,22866,22867,22868,22869,22870,22871,22872,22873,22874,22875,22876,22877,22878,22879,22880,22881,22882,22883,22884,22885,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22899,22900,22901,22902,22903,22904,22905,22906,22907,22908,22909,22910,22911,22912,22913,22914,22915,22916,22917,22918,22919,22920,22921,22922,22923,22924,22925,22926,22927,22928,22929,22930,22931,22932,22933,22934,22935,22936,22937,22938,22939,22940,22941,22942,22943,22944,22945,22946,22947,22948,22949,22950,22951,22952,22953,22954,22955,22956,22957,22958,22959,22960,22961,22962,22963,22964,22965,22966,22967,22968,22969,22970,22971,22972,22973,22974,22975,22976,22977,22978,22979,22980,22981,22982,22983,22984,22985,22986,22987,22988,22989,22990,22991,22992,22993,22994,22995,22996,22997,22998,22999,23000,23001,23002,23003,23004,23005,23006,23007,23008,23009,23010,23011,23012,23013,23014,23015,23016,23017,23018,23019,23020,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23033,23034,23035,23036,23037,23038,23039,23040,23041,23042,23043,23044,23045,23046,23047,23048,23049,23050,23051,23052,23053,23054,23055,23056,23057,23058,23059,23060,23061,23062,23063,23064,23065,23066,23067,23068,23069,23070,23071,23072,23073,23074,23075,23076,23077,23078,23079,23080,23081,23082,23083,23084,23085,23086,23087,23088,23089,23090,23091,23092,23093,23094,23095,23096,23097,23098,23099,23100,23101,23102,23103,23104'/>
+  </group>
+  <group name='303'>
+    <ids val='23105,23106,23107,23108,23109,23110,23111,23112,23113,23114,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23125,23126,23127,23128,23129,23130,23131,23132,23133,23134,23135,23136,23137,23138,23139,23140,23141,23142,23143,23144,23145,23146,23147,23148,23149,23150,23151,23152,23153,23154,23155,23156,23157,23158,23159,23160,23161,23162,23163,23164,23165,23166,23167,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23186,23187,23188,23189,23190,23191,23192,23193,23194,23195,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23210,23211,23212,23213,23214,23215,23216,23217,23218,23219,23220,23221,23222,23223,23224,23225,23226,23227,23228,23229,23230,23231,23232,23233,23234,23235,23236,23237,23238,23239,23240,23241,23242,23243,23244,23245,23246,23247,23248,23249,23250,23251,23252,23253,23254,23255,23256,23257,23258,23259,23260,23261,23262,23263,23264,23265,23266,23267,23268,23269,23270,23271,23272,23273,23274,23275,23276,23277,23278,23279,23280,23281,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23305,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23318,23319,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23346,23347,23348,23349,23350,23351,23352,23353,23354,23355,23356,23357,23358,23359,23360,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23376,23377,23378,23379,23380,23381,23382,23383,23384,23385,23386,23387,23388,23389,23390,23391,23392,23393,23394,23395,23396,23397,23398,23399,23400,23401,23402,23403,23404,23405,23406,23407,23408'/>
+  </group>
+  <group name='303'>
+    <ids val='23409,23410,23411,23412,23413,23414,23415,23416,23417,23418,23419,23420,23421,23422,23423,23424,23425,23426,23427,23428,23429,23430,23431,23432,23433,23434,23435,23436,23437,23438,23439,23440,23441,23442,23443,23444,23445,23446,23447,23448,23449,23450,23451,23452,23453,23454,23455,23456,23457,23458,23459,23460,23461,23462,23463,23464,23465,23466,23467,23468,23469,23470,23471,23472,23473,23474,23475,23476,23477,23478,23479,23480,23481,23482,23483,23484,23485,23486,23487,23488,23489,23490,23491,23492,23493,23494,23495,23496,23497,23498,23499,23500,23501,23502,23503,23504,23505,23506,23507,23508,23509,23510,23511,23512,23513,23514,23515,23516,23517,23518,23519,23520,23521,23522,23523,23524,23525,23526,23527,23528,23529,23530,23531,23532,23533,23534,23535,23536,23537,23538,23539,23540,23541,23542,23543,23544,23545,23546,23547,23548,23549,23550,23551,23552,23553,23554,23555,23556,23557,23558,23559,23560,23561,23562,23563,23564,23565,23566,23567,23568,23569,23570,23571,23572,23573,23574,23575,23576,23577,23578,23579,23580,23581,23582,23583,23584,23585,23586,23587,23588,23589,23590,23591,23592,23593,23594,23595,23596,23597,23598,23599,23600,23601,23602,23603,23604,23605,23606,23607,23608,23609,23610,23611,23612,23613,23614,23615,23616,23617,23618,23619,23620,23621,23622,23623,23624,23625,23626,23627,23628,23629,23630,23631,23632,23633,23634,23635,23636,23637,23638,23639,23640,23641,23642,23643,23644,23645,23646,23647,23648,23649,23650,23651,23652,23653,23654,23655,23656,23657,23658,23659,23660,23661,23662,23663,23664,23665,23666,23667,23668,23669,23670,23671,23672,23673,23674,23675,23676,23677,23678,23679,23680,23681,23682,23683,23684,23685,23686,23687,23688,23689,23690,23691,23692,23693,23694,23695,23696,23697,23698,23699,23700,23701,23702,23703,23704,23705,23706,23707,23708,23709,23710,23711,23712'/>
+  </group>
+  <group name='303'>
+    <ids val='23713,23714,23715,23716,23717,23718,23719,23720,23721,23722,23723,23724,23725,23726,23727,23728,23729,23730,23731,23732,23733,23734,23735,23736,23737,23738,23739,23740,23741,23742,23743,23744,23745,23746,23747,23748,23749,23750,23751,23752,23753,23754,23755,23756,23757,23758,23759,23760,23761,23762,23763,23764,23765,23766,23767,23768,23769,23770,23771,23772,23773,23774,23775,23776,23777,23778,23779,23780,23781,23782,23783,23784,23785,23786,23787,23788,23789,23790,23791,23792,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23803,23804,23805,23806,23807,23808,23809,23810,23811,23812,23813,23814,23815,23816,23817,23818,23819,23820,23821,23822,23823,23824,23825,23826,23827,23828,23829,23830,23831,23832,23833,23834,23835,23836,23837,23838,23839,23840,23841,23842,23843,23844,23845,23846,23847,23848,23849,23850,23851,23852,23853,23854,23855,23856,23857,23858,23859,23860,23861,23862,23863,23864,23865,23866,23867,23868,23869,23870,23871,23872,23873,23874,23875,23876,23877,23878,23879,23880,23881,23882,23883,23884,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23896,23897,23898,23899,23900,23901,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23913,23914,23915,23916,23917,23918,23919,23920,23921,23922,23923,23924,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23938,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23961,23962,23963,23964,23965,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23991,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24005,24006,24007,24008,24009,24010,24011,24012,24013,24014,24015,24016'/>
+  </group>
+  <group name='303'>
+    <ids val='24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24027,24028,24029,24030,24031,24032,24033,24034,24035,24036,24037,24038,24039,24040,24041,24042,24043,24044,24045,24046,24047,24048,24049,24050,24051,24052,24053,24054,24055,24056,24057,24058,24059,24060,24061,24062,24063,24064,24065,24066,24067,24068,24069,24070,24071,24072,24073,24074,24075,24076,24077,24078,24079,24080,24081,24082,24083,24084,24085,24086,24087,24088,24089,24090,24091,24092,24093,24094,24095,24096,24097,24098,24099,24100,24101,24102,24103,24104,24105,24106,24107,24108,24109,24110,24111,24112,24113,24114,24115,24116,24117,24118,24119,24120,24121,24122,24123,24124,24125,24126,24127,24128,24129,24130,24131,24132,24133,24134,24135,24136,24137,24138,24139,24140,24141,24142,24143,24144,24145,24146,24147,24148,24149,24150,24151,24152,24153,24154,24155,24156,24157,24158,24159,24160,24161,24162,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24178,24179,24180,24181,24182,24183,24184,24185,24186,24187,24188,24189,24190,24191,24192,24193,24194,24195,24196,24197,24198,24199,24200,24201,24202,24203,24204,24205,24206,24207,24208,24209,24210,24211,24212,24213,24214,24215,24216,24217,24218,24219,24220,24221,24222,24223,24224,24225,24226,24227,24228,24229,24230,24231,24232,24233,24234,24235,24236,24237,24238,24239,24240,24241,24242,24243,24244,24245,24246,24247,24248,24249,24250,24251,24252,24253,24254,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24265,24266,24267,24268,24269,24270,24271,24272,24273,24274,24275,24276,24277,24278,24279,24280,24281,24282,24283,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24296,24297,24298,24299,24300,24301,24302,24303,24304,24305,24306,24307,24308,24309,24310,24311,24312,24313,24314,24315,24316,24317,24318,24319,24320'/>
+  </group>
+  <group name='303'>
+    <ids val='24321,24322,24323,24324,24325,24326,24327,24328,24329,24330,24331,24332,24333,24334,24335,24336,24337,24338,24339,24340,24341,24342,24343,24344,24345,24346,24347,24348,24349,24350,24351,24352,24353,24354,24355,24356,24357,24358,24359,24360,24361,24362,24363,24364,24365,24366,24367,24368,24369,24370,24371,24372,24373,24374,24375,24376,24377,24378,24379,24380,24381,24382,24383,24384,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24400,24401,24402,24403,24404,24405,24406,24407,24408,24409,24410,24411,24412,24413,24414,24415,24416,24417,24418,24419,24420,24421,24422,24423,24424,24425,24426,24427,24428,24429,24430,24431,24432,24433,24434,24435,24436,24437,24438,24439,24440,24441,24442,24443,24444,24445,24446,24447,24448,24449,24450,24451,24452,24453,24454,24455,24456,24457,24458,24459,24460,24461,24462,24463,24464,24465,24466,24467,24468,24469,24470,24471,24472,24473,24474,24475,24476,24477,24478,24479,24480,24481,24482,24483,24484,24485,24486,24487,24488,24489,24490,24491,24492,24493,24494,24495,24496,24497,24498,24499,24500,24501,24502,24503,24504,24505,24506,24507,24508,24509,24510,24511,24512,24513,24514,24515,24516,24517,24518,24519,24520,24521,24522,24523,24524,24525,24526,24527,24528,24529,24530,24531,24532,24533,24534,24535,24536,24537,24538,24539,24540,24541,24542,24543,24544,24545,24546,24547,24548,24549,24550,24551,24552,24553,24554,24555,24556,24557,24558,24559,24560,24561,24562,24563,24564,24565,24566,24567,24568,24569,24570,24571,24572,24573,24574,24575,24576,24577,24578,24579,24580,24581,24582,24583,24584,24585,24586,24587,24588,24589,24590,24591,24592,24593,24594,24595,24596,24597,24598,24599,24600,24601,24602,24603,24604,24605,24606,24607,24608,24609,24610,24611,24612,24613,24614,24615,24616,24617,24618,24619,24620,24621,24622,24623,24624'/>
+  </group>
+  <group name='303'>
+    <ids val='24625,24626,24627,24628,24629,24630,24631,24632,24633,24634,24635,24636,24637,24638,24639,24640,24641,24642,24643,24644,24645,24646,24647,24648,24649,24650,24651,24652,24653,24654,24655,24656,24657,24658,24659,24660,24661,24662,24663,24664,24665,24666,24667,24668,24669,24670,24671,24672,24673,24674,24675,24676,24677,24678,24679,24680,24681,24682,24683,24684,24685,24686,24687,24688,24689,24690,24691,24692,24693,24694,24695,24696,24697,24698,24699,24700,24701,24702,24703,24704,24705,24706,24707,24708,24709,24710,24711,24712,24713,24714,24715,24716,24717,24718,24719,24720,24721,24722,24723,24724,24725,24726,24727,24728,24729,24730,24731,24732,24733,24734,24735,24736,24737,24738,24739,24740,24741,24742,24743,24744,24745,24746,24747,24748,24749,24750,24751,24752,24753,24754,24755,24756,24757,24758,24759,24760,24761,24762,24763,24764,24765,24766,24767,24768,24769,24770,24771,24772,24773,24774,24775,24776,24777,24778,24779,24780,24781,24782,24783,24784,24785,24786,24787,24788,24789,24790,24791,24792,24793,24794,24795,24796,24797,24798,24799,24800,24801,24802,24803,24804,24805,24806,24807,24808,24809,24810,24811,24812,24813,24814,24815,24816,24817,24818,24819,24820,24821,24822,24823,24824,24825,24826,24827,24828,24829,24830,24831,24832,24833,24834,24835,24836,24837,24838,24839,24840,24841,24842,24843,24844,24845,24846,24847,24848,24849,24850,24851,24852,24853,24854,24855,24856,24857,24858,24859,24860,24861,24862,24863,24864,24865,24866,24867,24868,24869,24870,24871,24872,24873,24874,24875,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24895,24896,24897,24898,24899,24900,24901,24902,24903,24904,24905,24906,24907,24908,24909,24910,24911,24912,24913,24914,24915,24916,24917,24918,24919,24920,24921,24922,24923,24924,24925,24926,24927,24928'/>
+  </group>
+  <group name='303'>
+    <ids val='24929,24930,24931,24932,24933,24934,24935,24936,24937,24938,24939,24940,24941,24942,24943,24944,24945,24946,24947,24948,24949,24950,24951,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24971,24972,24973,24974,24975,24976,24977,24978,24979,24980,24981,24982,24983,24984,24985,24986,24987,24988,24989,24990,24991,24992,24993,24994,24995,24996,24997,24998,24999,25000,25001,25002,25003,25004,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25015,25016,25017,25018,25019,25020,25021,25022,25023,25024,25025,25026,25027,25028,25029,25030,25031,25032,25033,25034,25035,25036,25037,25038,25039,25040,25041,25042,25043,25044,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25062,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25077,25078,25079,25080,25081,25082,25083,25084,25085,25086,25087,25088,25089,25090,25091,25092,25093,25094,25095,25096,25097,25098,25099,25100,25101,25102,25103,25104,25105,25106,25107,25108,25109,25110,25111,25112,25113,25114,25115,25116,25117,25118,25119,25120,25121,25122,25123,25124,25125,25126,25127,25128,25129,25130,25131,25132,25133,25134,25135,25136,25137,25138,25139,25140,25141,25142,25143,25144,25145,25146,25147,25148,25149,25150,25151,25152,25153,25154,25155,25156,25157,25158,25159,25160,25161,25162,25163,25164,25165,25166,25167,25168,25169,25170,25171,25172,25173,25174,25175,25176,25177,25178,25179,25180,25181,25182,25183,25184,25185,25186,25187,25188,25189,25190,25191,25192,25193,25194,25195,25196,25197,25198,25199,25200,25201,25202,25203,25204,25205,25206,25207,25208,25209,25210,25211,25212,25213,25214,25215,25216,25217,25218,25219,25220,25221,25222,25223,25224,25225,25226,25227,25228,25229,25230,25231,25232'/>
+  </group>
+  <group name='303'>
+    <ids val='25233,25234,25235,25236,25237,25238,25239,25240,25241,25242,25243,25244,25245,25246,25247,25248,25249,25250,25251,25252,25253,25254,25255,25256,25257,25258,25259,25260,25261,25262,25263,25264,25265,25266,25267,25268,25269,25270,25271,25272,25273,25274,25275,25276,25277,25278,25279,25280,25281,25282,25283,25284,25285,25286,25287,25288,25289,25290,25291,25292,25293,25294,25295,25296,25297,25298,25299,25300,25301,25302,25303,25304,25305,25306,25307,25308,25309,25310,25311,25312,25313,25314,25315,25316,25317,25318,25319,25320,25321,25322,25323,25324,25325,25326,25327,25328,25329,25330,25331,25332,25333,25334,25335,25336,25337,25338,25339,25340,25341,25342,25343,25344,25345,25346,25347,25348,25349,25350,25351,25352,25353,25354,25355,25356,25357,25358,25359,25360,25361,25362,25363,25364,25365,25366,25367,25368,25369,25370,25371,25372,25373,25374,25375,25376,25377,25378,25379,25380,25381,25382,25383,25384,25385,25386,25387,25388,25389,25390,25391,25392,25393,25394,25395,25396,25397,25398,25399,25400,25401,25402,25403,25404,25405,25406,25407,25408,25409,25410,25411,25412,25413,25414,25415,25416,25417,25418,25419,25420,25421,25422,25423,25424,25425,25426,25427,25428,25429,25430,25431,25432,25433,25434,25435,25436,25437,25438,25439,25440,25441,25442,25443,25444,25445,25446,25447,25448,25449,25450,25451,25452,25453,25454,25455,25456,25457,25458,25459,25460,25461,25462,25463,25464,25465,25466,25467,25468,25469,25470,25471,25472,25473,25474,25475,25476,25477,25478,25479,25480,25481,25482,25483,25484,25485,25486,25487,25488,25489,25490,25491,25492,25493,25494,25495,25496,25497,25498,25499,25500,25501,25502,25503,25504,25505,25506,25507,25508,25509,25510,25511,25512,25513,25514,25515,25516,25517,25518,25519,25520,25521,25522,25523,25524,25525,25526,25527,25528,25529,25530,25531,25532,25533,25534,25535,25536'/>
+  </group>
+  <group name='303'>
+    <ids val='25537,25538,25539,25540,25541,25542,25543,25544,25545,25546,25547,25548,25549,25550,25551,25552,25553,25554,25555,25556,25557,25558,25559,25560,25561,25562,25563,25564,25565,25566,25567,25568,25569,25570,25571,25572,25573,25574,25575,25576,25577,25578,25579,25580,25581,25582,25583,25584,25585,25586,25587,25588,25589,25590,25591,25592,25593,25594,25595,25596,25597,25598,25599,25600,25601,25602,25603,25604,25605,25606,25607,25608,25609,25610,25611,25612,25613,25614,25615,25616,25617,25618,25619,25620,25621,25622,25623,25624,25625,25626,25627,25628,25629,25630,25631,25632,25633,25634,25635,25636,25637,25638,25639,25640,25641,25642,25643,25644,25645,25646,25647,25648,25649,25650,25651,25652,25653,25654,25655,25656,25657,25658,25659,25660,25661,25662,25663,25664,25665,25666,25667,25668,25669,25670,25671,25672,25673,25674,25675,25676,25677,25678,25679,25680,25681,25682,25683,25684,25685,25686,25687,25688,25689,25690,25691,25692,25693,25694,25695,25696,25697,25698,25699,25700,25701,25702,25703,25704,25705,25706,25707,25708,25709,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25720,25721,25722,25723,25724,25725,25726,25727,25728,25729,25730,25731,25732,25733,25734,25735,25736,25737,25738,25739,25740,25741,25742,25743,25744,25745,25746,25747,25748,25749,25750,25751,25752,25753,25754,25755,25756,25757,25758,25759,25760,25761,25762,25763,25764,25765,25766,25767,25768,25769,25770,25771,25772,25773,25774,25775,25776,25777,25778,25779,25780,25781,25782,25783,25784,25785,25786,25787,25788,25789,25790,25791,25792,25793,25794,25795,25796,25797,25798,25799,25800,25801,25802,25803,25804,25805,25806,25807,25808,25809,25810,25811,25812,25813,25814,25815,25816,25817,25818,25819,25820,25821,25822,25823,25824,25825,25826,25827,25828,25829,25830,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840'/>
+  </group>
+  <group name='303'>
+    <ids val='25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25856,25857,25858,25859,25860,25861,25862,25863,25864,25865,25866,25867,25868,25869,25870,25871,25872,25873,25874,25875,25876,25877,25878,25879,25880,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25893,25894,25895,25896,25897,25898,25899,25900,25901,25902,25903,25904,25905,25906,25907,25908,25909,25910,25911,25912,25913,25914,25915,25916,25917,25918,25919,25920,25921,25922,25923,25924,25925,25926,25927,25928,25929,25930,25931,25932,25933,25934,25935,25936,25937,25938,25939,25940,25941,25942,25943,25944,25945,25946,25947,25948,25949,25950,25951,25952,25953,25954,25955,25956,25957,25958,25959,25960,25961,25962,25963,25964,25965,25966,25967,25968,25969,25970,25971,25972,25973,25974,25975,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25991,25992,25993,25994,25995,25996,25997,25998,25999,26000,26001,26002,26003,26004,26005,26006,26007,26008,26009,26010,26011,26012,26013,26014,26015,26016,26017,26018,26019,26020,26021,26022,26023,26024,26025,26026,26027,26028,26029,26030,26031,26032,26033,26034,26035,26036,26037,26038,26039,26040,26041,26042,26043,26044,26045,26046,26047,26048,26049,26050,26051,26052,26053,26054,26055,26056,26057,26058,26059,26060,26061,26062,26063,26064,26065,26066,26067,26068,26069,26070,26071,26072,26073,26074,26075,26076,26077,26078,26079,26080,26081,26082,26083,26084,26085,26086,26087,26088,26089,26090,26091,26092,26093,26094,26095,26096,26097,26098,26099,26100,26101,26102,26103,26104,26105,26106,26107,26108,26109,26110,26111,26112,26113,26114,26115,26116,26117,26118,26119,26120,26121,26122,26123,26124,26125,26126,26127,26128,26129,26130,26131,26132,26133,26134,26135,26136,26137,26138,26139,26140,26141,26142,26143,26144'/>
+  </group>
+  <group name='303'>
+    <ids val='26145,26146,26147,26148,26149,26150,26151,26152,26153,26154,26155,26156,26157,26158,26159,26160,26161,26162,26163,26164,26165,26166,26167,26168,26169,26170,26171,26172,26173,26174,26175,26176,26177,26178,26179,26180,26181,26182,26183,26184,26185,26186,26187,26188,26189,26190,26191,26192,26193,26194,26195,26196,26197,26198,26199,26200,26201,26202,26203,26204,26205,26206,26207,26208,26209,26210,26211,26212,26213,26214,26215,26216,26217,26218,26219,26220,26221,26222,26223,26224,26225,26226,26227,26228,26229,26230,26231,26232,26233,26234,26235,26236,26237,26238,26239,26240,26241,26242,26243,26244,26245,26246,26247,26248,26249,26250,26251,26252,26253,26254,26255,26256,26257,26258,26259,26260,26261,26262,26263,26264,26265,26266,26267,26268,26269,26270,26271,26272,26273,26274,26275,26276,26277,26278,26279,26280,26281,26282,26283,26284,26285,26286,26287,26288,26289,26290,26291,26292,26293,26294,26295,26296,26297,26298,26299,26300,26301,26302,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26329,26330,26331,26332,26333,26334,26335,26336,26337,26338,26339,26340,26341,26342,26343,26344,26345,26346,26347,26348,26349,26350,26351,26352,26353,26354,26355,26356,26357,26358,26359,26360,26361,26362,26363,26364,26365,26366,26367,26368,26369,26370,26371,26372,26373,26374,26375,26376,26377,26378,26379,26380,26381,26382,26383,26384,26385,26386,26387,26388,26389,26390,26391,26392,26393,26394,26395,26396,26397,26398,26399,26400,26401,26402,26403,26404,26405,26406,26407,26408,26409,26410,26411,26412,26413,26414,26415,26416,26417,26418,26419,26420,26421,26422,26423,26424,26425,26426,26427,26428,26429,26430,26431,26432,26433,26434,26435,26436,26437,26438,26439,26440,26441,26442,26443,26444,26445,26446,26447,26448'/>
+  </group>
+  <group name='303'>
+    <ids val='26449,26450,26451,26452,26453,26454,26455,26456,26457,26458,26459,26460,26461,26462,26463,26464,26465,26466,26467,26468,26469,26470,26471,26472,26473,26474,26475,26476,26477,26478,26479,26480,26481,26482,26483,26484,26485,26486,26487,26488,26489,26490,26491,26492,26493,26494,26495,26496,26497,26498,26499,26500,26501,26502,26503,26504,26505,26506,26507,26508,26509,26510,26511,26512,26513,26514,26515,26516,26517,26518,26519,26520,26521,26522,26523,26524,26525,26526,26527,26528,26529,26530,26531,26532,26533,26534,26535,26536,26537,26538,26539,26540,26541,26542,26543,26544,26545,26546,26547,26548,26549,26550,26551,26552,26553,26554,26555,26556,26557,26558,26559,26560,26561,26562,26563,26564,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26575,26576,26577,26578,26579,26580,26581,26582,26583,26584,26585,26586,26587,26588,26589,26590,26591,26592,26593,26594,26595,26596,26597,26598,26599,26600,26601,26602,26603,26604,26605,26606,26607,26608,26609,26610,26611,26612,26613,26614,26615,26616,26617,26618,26619,26620,26621,26622,26623,26624,26625,26626,26627,26628,26629,26630,26631,26632,26633,26634,26635,26636,26637,26638,26639,26640,26641,26642,26643,26644,26645,26646,26647,26648,26649,26650,26651,26652,26653,26654,26655,26656,26657,26658,26659,26660,26661,26662,26663,26664,26665,26666,26667,26668,26669,26670,26671,26672,26673,26674,26675,26676,26677,26678,26679,26680,26681,26682,26683,26684,26685,26686,26687,26688,26689,26690,26691,26692,26693,26694,26695,26696,26697,26698,26699,26700,26701,26702,26703,26704,26705,26706,26707,26708,26709,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26720,26721,26722,26723,26724,26725,26726,26727,26728,26729,26730,26731,26732,26733,26734,26735,26736,26737,26738,26739,26740,26741,26742,26743,26744,26745,26746,26747,26748,26749,26750,26751,26752'/>
+  </group>
+  <group name='303'>
+    <ids val='26753,26754,26755,26756,26757,26758,26759,26760,26761,26762,26763,26764,26765,26766,26767,26768,26769,26770,26771,26772,26773,26774,26775,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26786,26787,26788,26789,26790,26791,26792,26793,26794,26795,26796,26797,26798,26799,26800,26801,26802,26803,26804,26805,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26816,26817,26818,26819,26820,26821,26822,26823,26824,26825,26826,26827,26828,26829,26830,26831,26832,26833,26834,26835,26836,26837,26838,26839,26840,26841,26842,26843,26844,26845,26846,26847,26848,26849,26850,26851,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26862,26863,26864,26865,26866,26867,26868,26869,26870,26871,26872,26873,26874,26875,26876,26877,26878,26879,26880,26881,26882,26883,26884,26885,26886,26887,26888,26889,26890,26891,26892,26893,26894,26895,26896,26897,26898,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26911,26912,26913,26914,26915,26916,26917,26918,26919,26920,26921,26922,26923,26924,26925,26926,26927,26928,26929,26930,26931,26932,26933,26934,26935,26936,26937,26938,26939,26940,26941,26942,26943,26944,26945,26946,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26964,26965,26966,26967,26968,26969,26970,26971,26972,26973,26974,26975,26976,26977,26978,26979,26980,26981,26982,26983,26984,26985,26986,26987,26988,26989,26990,26991,26992,26993,26994,26995,26996,26997,26998,26999,27000,27001,27002,27003,27004,27005,27006,27007,27008,27009,27010,27011,27012,27013,27014,27015,27016,27017,27018,27019,27020,27021,27022,27023,27024,27025,27026,27027,27028,27029,27030,27031,27032,27033,27034,27035,27036,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27047,27048,27049,27050,27051,27052,27053,27054,27055,27056'/>
+  </group>
+  <group name='303'>
+    <ids val='27057,27058,27059,27060,27061,27062,27063,27064,27065,27066,27067,27068,27069,27070,27071,27072,27073,27074,27075,27076,27077,27078,27079,27080,27081,27082,27083,27084,27085,27086,27087,27088,27089,27090,27091,27092,27093,27094,27095,27096,27097,27098,27099,27100,27101,27102,27103,27104,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27117,27118,27119,27120,27121,27122,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27133,27134,27135,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27146,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27159,27160,27161,27162,27163,27164,27165,27166,27167,27168,27169,27170,27171,27172,27173,27174,27175,27176,27177,27178,27179,27180,27181,27182,27183,27184,27185,27186,27187,27188,27189,27190,27191,27192,27193,27194,27195,27196,27197,27198,27199,27200,27201,27202,27203,27204,27205,27206,27207,27208,27209,27210,27211,27212,27213,27214,27215,27216,27217,27218,27219,27220,27221,27222,27223,27224,27225,27226,27227,27228,27229,27230,27231,27232,27233,27234,27235,27236,27237,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27249,27250,27251,27252,27253,27254,27255,27256,27257,27258,27259,27260,27261,27262,27263,27264,27265,27266,27267,27268,27269,27270,27271,27272,27273,27274,27275,27276,27277,27278,27279,27280,27281,27282,27283,27284,27285,27286,27287,27288,27289,27290,27291,27292,27293,27294,27295,27296,27297,27298,27299,27300,27301,27302,27303,27304,27305,27306,27307,27308,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360'/>
+  </group>
+  <group name='303'>
+    <ids val='27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27424,27425,27426,27427,27428,27429,27430,27431,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27442,27443,27444,27445,27446,27447,27448,27449,27450,27451,27452,27453,27454,27455,27456,27457,27458,27459,27460,27461,27462,27463,27464,27465,27466,27467,27468,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27481,27482,27483,27484,27485,27486,27487,27488,27489,27490,27491,27492,27493,27494,27495,27496,27497,27498,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27513,27514,27515,27516,27517,27518,27519,27520,27521,27522,27523,27524,27525,27526,27527,27528,27529,27530,27531,27532,27533,27534,27535,27536,27537,27538,27539,27540,27541,27542,27543,27544,27545,27546,27547,27548,27549,27550,27551,27552,27553,27554,27555,27556,27557,27558,27559,27560,27561,27562,27563,27564,27565,27566,27567,27568,27569,27570,27571,27572,27573,27574,27575,27576,27577,27578,27579,27580,27581,27582,27583,27584,27585,27586,27587,27588,27589,27590,27591,27592,27593,27594,27595,27596,27597,27598,27599,27600,27601,27602,27603,27604,27605,27606,27607,27608,27609,27610,27611,27612,27613,27614,27615,27616,27617,27618,27619,27620,27621,27622,27623,27624,27625,27626,27627,27628,27629,27630,27631,27632,27633,27634,27635,27636,27637,27638,27639,27640,27641,27642,27643,27644,27645,27646,27647,27648,27649,27650,27651,27652,27653,27654,27655,27656,27657,27658,27659,27660,27661,27662,27663,27664'/>
+  </group>
+  <group name='303'>
+    <ids val='27665,27666,27667,27668,27669,27670,27671,27672,27673,27674,27675,27676,27677,27678,27679,27680,27681,27682,27683,27684,27685,27686,27687,27688,27689,27690,27691,27692,27693,27694,27695,27696,27697,27698,27699,27700,27701,27702,27703,27704,27705,27706,27707,27708,27709,27710,27711,27712,27713,27714,27715,27716,27717,27718,27719,27720,27721,27722,27723,27724,27725,27726,27727,27728,27729,27730,27731,27732,27733,27734,27735,27736,27737,27738,27739,27740,27741,27742,27743,27744,27745,27746,27747,27748,27749,27750,27751,27752,27753,27754,27755,27756,27757,27758,27759,27760,27761,27762,27763,27764,27765,27766,27767,27768,27769,27770,27771,27772,27773,27774,27775,27776,27777,27778,27779,27780,27781,27782,27783,27784,27785,27786,27787,27788,27789,27790,27791,27792,27793,27794,27795,27796,27797,27798,27799,27800,27801,27802,27803,27804,27805,27806,27807,27808,27809,27810,27811,27812,27813,27814,27815,27816,27817,27818,27819,27820,27821,27822,27823,27824,27825,27826,27827,27828,27829,27830,27831,27832,27833,27834,27835,27836,27837,27838,27839,27840,27841,27842,27843,27844,27845,27846,27847,27848,27849,27850,27851,27852,27853,27854,27855,27856,27857,27858,27859,27860,27861,27862,27863,27864,27865,27866,27867,27868,27869,27870,27871,27872,27873,27874,27875,27876,27877,27878,27879,27880,27881,27882,27883,27884,27885,27886,27887,27888,27889,27890,27891,27892,27893,27894,27895,27896,27897,27898,27899,27900,27901,27902,27903,27904,27905,27906,27907,27908,27909,27910,27911,27912,27913,27914,27915,27916,27917,27918,27919,27920,27921,27922,27923,27924,27925,27926,27927,27928,27929,27930,27931,27932,27933,27934,27935,27936,27937,27938,27939,27940,27941,27942,27943,27944,27945,27946,27947,27948,27949,27950,27951,27952,27953,27954,27955,27956,27957,27958,27959,27960,27961,27962,27963,27964,27965,27966,27967,27968'/>
+  </group>
+  <group name='303'>
+    <ids val='27969,27970,27971,27972,27973,27974,27975,27976,27977,27978,27979,27980,27981,27982,27983,27984,27985,27986,27987,27988,27989,27990,27991,27992,27993,27994,27995,27996,27997,27998,27999,28000,28001,28002,28003,28004,28005,28006,28007,28008,28009,28010,28011,28012,28013,28014,28015,28016,28017,28018,28019,28020,28021,28022,28023,28024,28025,28026,28027,28028,28029,28030,28031,28032,28033,28034,28035,28036,28037,28038,28039,28040,28041,28042,28043,28044,28045,28046,28047,28048,28049,28050,28051,28052,28053,28054,28055,28056,28057,28058,28059,28060,28061,28062,28063,28064,28065,28066,28067,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090,28091,28092,28093,28094,28095,28096,28097,28098,28099,28100,28101,28102,28103,28104,28105,28106,28107,28108,28109,28110,28111,28112,28113,28114,28115,28116,28117,28118,28119,28120,28121,28122,28123,28124,28125,28126,28127,28128,28129,28130,28131,28132,28133,28134,28135,28136,28137,28138,28139,28140,28141,28142,28143,28144,28145,28146,28147,28148,28149,28150,28151,28152,28153,28154,28155,28156,28157,28158,28159,28160,28161,28162,28163,28164,28165,28166,28167,28168,28169,28170,28171,28172,28173,28174,28175,28176,28177,28178,28179,28180,28181,28182,28183,28184,28185,28186,28187,28188,28189,28190,28191,28192,28193,28194,28195,28196,28197,28198,28199,28200,28201,28202,28203,28204,28205,28206,28207,28208,28209,28210,28211,28212,28213,28214,28215,28216,28217,28218,28219,28220,28221,28222,28223,28224,28225,28226,28227,28228,28229,28230,28231,28232,28233,28234,28235,28236,28237,28238,28239,28240,28241,28242,28243,28244,28245,28246,28247,28248,28249,28250,28251,28252,28253,28254,28255,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28267,28268,28269,28270,28271,28272'/>
+  </group>
+  <group name='303'>
+    <ids val='28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28286,28287,28288,28289,28290,28291,28292,28293,28294,28295,28296,28297,28298,28299,28300,28301,28302,28303,28304,28305,28306,28307,28308,28309,28310,28311,28312,28313,28314,28315,28316,28317,28318,28319,28320,28321,28322,28323,28324,28325,28326,28327,28328,28329,28330,28331,28332,28333,28334,28335,28336,28337,28338,28339,28340,28341,28342,28343,28344,28345,28346,28347,28348,28349,28350,28351,28352,28353,28354,28355,28356,28357,28358,28359,28360,28361,28362,28363,28364,28365,28366,28367,28368,28369,28370,28371,28372,28373,28374,28375,28376,28377,28378,28379,28380,28381,28382,28383,28384,28385,28386,28387,28388,28389,28390,28391,28392,28393,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28404,28405,28406,28407,28408,28409,28410,28411,28412,28413,28414,28415,28416,28417,28418,28419,28420,28421,28422,28423,28424,28425,28426,28427,28428,28429,28430,28431,28432,28433,28434,28435,28436,28437,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28448,28449,28450,28451,28452,28453,28454,28455,28456,28457,28458,28459,28460,28461,28462,28463,28464,28465,28466,28467,28468,28469,28470,28471,28472,28473,28474,28475,28476,28477,28478,28479,28480,28481,28482,28483,28484,28485,28486,28487,28488,28489,28490,28491,28492,28493,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28504,28505,28506,28507,28508,28509,28510,28511,28512,28513,28514,28515,28516,28517,28518,28519,28520,28521,28522,28523,28524,28525,28526,28527,28528,28529,28530,28531,28532,28533,28534,28535,28536,28537,28538,28539,28540,28541,28542,28543,28544,28545,28546,28547,28548,28549,28550,28551,28552,28553,28554,28555,28556,28557,28558,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28572,28573,28574,28575,28576'/>
+  </group>
+  <group name='303'>
+    <ids val='28577,28578,28579,28580,28581,28582,28583,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28595,28596,28597,28598,28599,28600,28601,28602,28603,28604,28605,28606,28607,28608,28609,28610,28611,28612,28613,28614,28615,28616,28617,28618,28619,28620,28621,28622,28623,28624,28625,28626,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28638,28639,28640,28641,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28654,28655,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28689,28690,28691,28692,28693,28694,28695,28696,28697,28698,28699,28700,28701,28702,28703,28704,28705,28706,28707,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28725,28726,28727,28728,28729,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28748,28749,28750,28751,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28766,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28779,28780,28781,28782,28783,28784,28785,28786,28787,28788,28789,28790,28791,28792,28793,28794,28795,28796,28797,28798,28799,28800,28801,28802,28803,28804,28805,28806,28807,28808,28809,28810,28811,28812,28813,28814,28815,28816,28817,28818,28819,28820,28821,28822,28823,28824,28825,28826,28827,28828,28829,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,28871,28872,28873,28874,28875,28876,28877,28878,28879,28880'/>
+  </group>
+  <group name='303'>
+    <ids val='28881,28882,28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,28894,28895,28896,28897,28898,28899,28900,28901,28902,28903,28904,28905,28906,28907,28908,28909,28910,28911,28912,28913,28914,28915,28916,28917,28918,28919,28920,28921,28922,28923,28924,28925,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28937,28938,28939,28940,28941,28942,28943,28944,28945,28946,28947,28948,28949,28950,28951,28952,28953,28954,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28966,28967,28968,28969,28970,28971,28972,28973,28974,28975,28976,28977,28978,28979,28980,28981,28982,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28997,28998,28999,29000,29001,29002,29003,29004,29005,29006,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29020,29021,29022,29023,29024,29025,29026,29027,29028,29029,29030,29031,29032,29033,29034,29035,29036,29037,29038,29039,29040,29041,29042,29043,29044,29045,29046,29047,29048,29049,29050,29051,29052,29053,29054,29055,29056,29057,29058,29059,29060,29061,29062,29063,29064,29065,29066,29067,29068,29069,29070,29071,29072,29073,29074,29075,29076,29077,29078,29079,29080,29081,29082,29083,29084,29085,29086,29087,29088,29089,29090,29091,29092,29093,29094,29095,29096,29097,29098,29099,29100,29101,29102,29103,29104,29105,29106,29107,29108,29109,29110,29111,29112,29113,29114,29115,29116,29117,29118,29119,29120,29121,29122,29123,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29134,29135,29136,29137,29138,29139,29140,29141,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29152,29153,29154,29155,29156,29157,29158,29159,29160,29161,29162,29163,29164,29165,29166,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29177,29178,29179,29180,29181,29182,29183,29184'/>
+  </group>
+  <group name='303'>
+    <ids val='29185,29186,29187,29188,29189,29190,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29213,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29224,29225,29226,29227,29228,29229,29230,29231,29232,29233,29234,29235,29236,29237,29238,29239,29240,29241,29242,29243,29244,29245,29246,29247,29248,29249,29250,29251,29252,29253,29254,29255,29256,29257,29258,29259,29260,29261,29262,29263,29264,29265,29266,29267,29268,29269,29270,29271,29272,29273,29274,29275,29276,29277,29278,29279,29280,29281,29282,29283,29284,29285,29286,29287,29288,29289,29290,29291,29292,29293,29294,29295,29296,29297,29298,29299,29300,29301,29302,29303,29304,29305,29306,29307,29308,29309,29310,29311,29312,29313,29314,29315,29316,29317,29318,29319,29320,29321,29322,29323,29324,29325,29326,29327,29328,29329,29330,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29343,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29356,29357,29358,29359,29360,29361,29362,29363,29364,29365,29366,29367,29368,29369,29370,29371,29372,29373,29374,29375,29376,29377,29378,29379,29380,29381,29382,29383,29384,29385,29386,29387,29388,29389,29390,29391,29392,29393,29394,29395,29396,29397,29398,29399,29400,29401,29402,29403,29404,29405,29406,29407,29408,29409,29410,29411,29412,29413,29414,29415,29416,29417,29418,29419,29420,29421,29422,29423,29424,29425,29426,29427,29428,29429,29430,29431,29432,29433,29434,29435,29436,29437,29438,29439,29440,29441,29442,29443,29444,29445,29446,29447,29448,29449,29450,29451,29452,29453,29454,29455,29456,29457,29458,29459,29460,29461,29462,29463,29464,29465,29466,29467,29468,29469,29470,29471,29472,29473,29474,29475,29476,29477,29478,29479,29480,29481,29482,29483,29484,29485,29486,29487,29488'/>
+  </group>
+  <group name='303'>
+    <ids val='29489,29490,29491,29492,29493,29494,29495,29496,29497,29498,29499,29500,29501,29502,29503,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29517,29518,29519,29520,29521,29522,29523,29524,29525,29526,29527,29528,29529,29530,29531,29532,29533,29534,29535,29536,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29548,29549,29550,29551,29552,29553,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29566,29567,29568,29569,29570,29571,29572,29573,29574,29575,29576,29577,29578,29579,29580,29581,29582,29583,29584,29585,29586,29587,29588,29589,29590,29591,29592,29593,29594,29595,29596,29597,29598,29599,29600,29601,29602,29603,29604,29605,29606,29607,29608,29609,29610,29611,29612,29613,29614,29615,29616,29617,29618,29619,29620,29621,29622,29623,29624,29625,29626,29627,29628,29629,29630,29631,29632,29633,29634,29635,29636,29637,29638,29639,29640,29641,29642,29643,29644,29645,29646,29647,29648,29649,29650,29651,29652,29653,29654,29655,29656,29657,29658,29659,29660,29661,29662,29663,29664,29665,29666,29667,29668,29669,29670,29671,29672,29673,29674,29675,29676,29677,29678,29679,29680,29681,29682,29683,29684,29685,29686,29687,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29699,29700,29701,29702,29703,29704,29705,29706,29707,29708,29709,29710,29711,29712,29713,29714,29715,29716,29717,29718,29719,29720,29721,29722,29723,29724,29725,29726,29727,29728,29729,29730,29731,29732,29733,29734,29735,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29746,29747,29748,29749,29750,29751,29752,29753,29754,29755,29756,29757,29758,29759,29760,29761,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29781,29782,29783,29784,29785,29786,29787,29788,29789,29790,29791,29792'/>
+  </group>
+  <group name='303'>
+    <ids val='29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29805,29806,29807,29808,29809,29810,29811,29812,29813,29814,29815,29816,29817,29818,29819,29820,29821,29822,29823,29824,29825,29826,29827,29828,29829,29830,29831,29832,29833,29834,29835,29836,29837,29838,29839,29840,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29852,29853,29854,29855,29856,29857,29858,29859,29860,29861,29862,29863,29864,29865,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29882,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29906,29907,29908,29909,29910,29911,29912,29913,29914,29915,29916,29917,29918,29919,29920,29921,29922,29923,29924,29925,29926,29927,29928,29929,29930,29931,29932,29933,29934,29935,29936,29937,29938,29939,29940,29941,29942,29943,29944,29945,29946,29947,29948,29949,29950,29951,29952,29953,29954,29955,29956,29957,29958,29959,29960,29961,29962,29963,29964,29965,29966,29967,29968,29969,29970,29971,29972,29973,29974,29975,29976,29977,29978,29979,29980,29981,29982,29983,29984,29985,29986,29987,29988,29989,29990,29991,29992,29993,29994,29995,29996,29997,29998,29999,30000,30001,30002,30003,30004,30005,30006,30007,30008,30009,30010,30011,30012,30013,30014,30015,30016,30017,30018,30019,30020,30021,30022,30023,30024,30025,30026,30027,30028,30029,30030,30031,30032,30033,30034,30035,30036,30037,30038,30039,30040,30041,30042,30043,30044,30045,30046,30047,30048,30049,30050,30051,30052,30053,30054,30055,30056,30057,30058,30059,30060,30061,30062,30063,30064,30065,30066,30067,30068,30069,30070,30071,30072,30073,30074,30075,30076,30077,30078,30079,30080,30081,30082,30083,30084,30085,30086,30087,30088,30089,30090,30091,30092,30093,30094,30095,30096'/>
+  </group>
+  <group name='303'>
+    <ids val='30097,30098,30099,30100,30101,30102,30103,30104,30105,30106,30107,30108,30109,30110,30111,30112,30113,30114,30115,30116,30117,30118,30119,30120,30121,30122,30123,30124,30125,30126,30127,30128,30129,30130,30131,30132,30133,30134,30135,30136,30137,30138,30139,30140,30141,30142,30143,30144,30145,30146,30147,30148,30149,30150,30151,30152,30153,30154,30155,30156,30157,30158,30159,30160,30161,30162,30163,30164,30165,30166,30167,30168,30169,30170,30171,30172,30173,30174,30175,30176,30177,30178,30179,30180,30181,30182,30183,30184,30185,30186,30187,30188,30189,30190,30191,30192,30193,30194,30195,30196,30197,30198,30199,30200,30201,30202,30203,30204,30205,30206,30207,30208,30209,30210,30211,30212,30213,30214,30215,30216,30217,30218,30219,30220,30221,30222,30223,30224,30225,30226,30227,30228,30229,30230,30231,30232,30233,30234,30235,30236,30237,30238,30239,30240,30241,30242,30243,30244,30245,30246,30247,30248,30249,30250,30251,30252,30253,30254,30255,30256,30257,30258,30259,30260,30261,30262,30263,30264,30265,30266,30267,30268,30269,30270,30271,30272,30273,30274,30275,30276,30277,30278,30279,30280,30281,30282,30283,30284,30285,30286,30287,30288,30289,30290,30291,30292,30293,30294,30295,30296,30297,30298,30299,30300,30301,30302,30303,30304,30305,30306,30307,30308,30309,30310,30311,30312,30313,30314,30315,30316,30317,30318,30319,30320,30321,30322,30323,30324,30325,30326,30327,30328,30329,30330,30331,30332,30333,30334,30335,30336,30337,30338,30339,30340,30341,30342,30343,30344,30345,30346,30347,30348,30349,30350,30351,30352,30353,30354,30355,30356,30357,30358,30359,30360,30361,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30372,30373,30374,30375,30376,30377,30378,30379,30380,30381,30382,30383,30384,30385,30386,30387,30388,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30399,30400'/>
+  </group>
+  <group name='303'>
+    <ids val='30401,30402,30403,30404,30405,30406,30407,30408,30409,30410,30411,30412,30413,30414,30415,30416,30417,30418,30419,30420,30421,30422,30423,30424,30425,30426,30427,30428,30429,30430,30431,30432,30433,30434,30435,30436,30437,30438,30439,30440,30441,30442,30443,30444,30445,30446,30447,30448,30449,30450,30451,30452,30453,30454,30455,30456,30457,30458,30459,30460,30461,30462,30463,30464,30465,30466,30467,30468,30469,30470,30471,30472,30473,30474,30475,30476,30477,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30489,30490,30491,30492,30493,30494,30495,30496,30497,30498,30499,30500,30501,30502,30503,30504,30505,30506,30507,30508,30509,30510,30511,30512,30513,30514,30515,30516,30517,30518,30519,30520,30521,30522,30523,30524,30525,30526,30527,30528,30529,30530,30531,30532,30533,30534,30535,30536,30537,30538,30539,30540,30541,30542,30543,30544,30545,30546,30547,30548,30549,30550,30551,30552,30553,30554,30555,30556,30557,30558,30559,30560,30561,30562,30563,30564,30565,30566,30567,30568,30569,30570,30571,30572,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30585,30586,30587,30588,30589,30590,30591,30592,30593,30594,30595,30596,30597,30598,30599,30600,30601,30602,30603,30604,30605,30606,30607,30608,30609,30610,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30623,30624,30625,30626,30627,30628,30629,30630,30631,30632,30633,30634,30635,30636,30637,30638,30639,30640,30641,30642,30643,30644,30645,30646,30647,30648,30649,30650,30651,30652,30653,30654,30655,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30669,30670,30671,30672,30673,30674,30675,30676,30677,30678,30679,30680,30681,30682,30683,30684,30685,30686,30687,30688,30689,30690,30691,30692,30693,30694,30695,30696,30697,30698,30699,30700,30701,30702,30703,30704'/>
+  </group>
+  <group name='303'>
+    <ids val='30705,30706,30707,30708,30709,30710,30711,30712,30713,30714,30715,30716,30717,30718,30719,30720,30721,30722,30723,30724,30725,30726,30727,30728,30729,30730,30731,30732,30733,30734,30735,30736,30737,30738,30739,30740,30741,30742,30743,30744,30745,30746,30747,30748,30749,30750,30751,30752,30753,30754,30755,30756,30757,30758,30759,30760,30761,30762,30763,30764,30765,30766,30767,30768,30769,30770,30771,30772,30773,30774,30775,30776,30777,30778,30779,30780,30781,30782,30783,30784,30785,30786,30787,30788,30789,30790,30791,30792,30793,30794,30795,30796,30797,30798,30799,30800,30801,30802,30803,30804,30805,30806,30807,30808,30809,30810,30811,30812,30813,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30826,30827,30828,30829,30830,30831,30832,30833,30834,30835,30836,30837,30838,30839,30840,30841,30842,30843,30844,30845,30846,30847,30848,30849,30850,30851,30852,30853,30854,30855,30856,30857,30858,30859,30860,30861,30862,30863,30864,30865,30866,30867,30868,30869,30870,30871,30872,30873,30874,30875,30876,30877,30878,30879,30880,30881,30882,30883,30884,30885,30886,30887,30888,30889,30890,30891,30892,30893,30894,30895,30896,30897,30898,30899,30900,30901,30902,30903,30904,30905,30906,30907,30908,30909,30910,30911,30912,30913,30914,30915,30916,30917,30918,30919,30920,30921,30922,30923,30924,30925,30926,30927,30928,30929,30930,30931,30932,30933,30934,30935,30936,30937,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30952,30953,30954,30955,30956,30957,30958,30959,30960,30961,30962,30963,30964,30965,30966,30967,30968,30969,30970,30971,30972,30973,30974,30975,30976,30977,30978,30979,30980,30981,30982,30983,30984,30985,30986,30987,30988,30989,30990,30991,30992,30993,30994,30995,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31006,31007,31008'/>
+  </group>
+  <group name='303'>
+    <ids val='31009,31010,31011,31012,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31028,31029,31030,31031,31032,31033,31034,31035,31036,31037,31038,31039,31040,31041,31042,31043,31044,31045,31046,31047,31048,31049,31050,31051,31052,31053,31054,31055,31056,31057,31058,31059,31060,31061,31062,31063,31064,31065,31066,31067,31068,31069,31070,31071,31072,31073,31074,31075,31076,31077,31078,31079,31080,31081,31082,31083,31084,31085,31086,31087,31088,31089,31090,31091,31092,31093,31094,31095,31096,31097,31098,31099,31100,31101,31102,31103,31104,31105,31106,31107,31108,31109,31110,31111,31112,31113,31114,31115,31116,31117,31118,31119,31120,31121,31122,31123,31124,31125,31126,31127,31128,31129,31130,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31143,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31155,31156,31157,31158,31159,31160,31161,31162,31163,31164,31165,31166,31167,31168,31169,31170,31171,31172,31173,31174,31175,31176,31177,31178,31179,31180,31181,31182,31183,31184,31185,31186,31187,31188,31189,31190,31191,31192,31193,31194,31195,31196,31197,31198,31199,31200,31201,31202,31203,31204,31205,31206,31207,31208,31209,31210,31211,31212,31213,31214,31215,31216,31217,31218,31219,31220,31221,31222,31223,31224,31225,31226,31227,31228,31229,31230,31231,31232,31233,31234,31235,31236,31237,31238,31239,31240,31241,31242,31243,31244,31245,31246,31247,31248,31249,31250,31251,31252,31253,31254,31255,31256,31257,31258,31259,31260,31261,31262,31263,31264,31265,31266,31267,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31283,31284,31285,31286,31287,31288,31289,31290,31291,31292,31293,31294,31295,31296,31297,31298,31299,31300,31301,31302,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312'/>
+  </group>
+  <group name='303'>
+    <ids val='31313,31314,31315,31316,31317,31318,31319,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31344,31345,31346,31347,31348,31349,31350,31351,31352,31353,31354,31355,31356,31357,31358,31359,31360,31361,31362,31363,31364,31365,31366,31367,31368,31369,31370,31371,31372,31373,31374,31375,31376,31377,31378,31379,31380,31381,31382,31383,31384,31385,31386,31387,31388,31389,31390,31391,31392,31393,31394,31395,31396,31397,31398,31399,31400,31401,31402,31403,31404,31405,31406,31407,31408,31409,31410,31411,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31423,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31435,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31446,31447,31448,31449,31450,31451,31452,31453,31454,31455,31456,31457,31458,31459,31460,31461,31462,31463,31464,31465,31466,31467,31468,31469,31470,31471,31472,31473,31474,31475,31476,31477,31478,31479,31480,31481,31482,31483,31484,31485,31486,31487,31488,31489,31490,31491,31492,31493,31494,31495,31496,31497,31498,31499,31500,31501,31502,31503,31504,31505,31506,31507,31508,31509,31510,31511,31512,31513,31514,31515,31516,31517,31518,31519,31520,31521,31522,31523,31524,31525,31526,31527,31528,31529,31530,31531,31532,31533,31534,31535,31536,31537,31538,31539,31540,31541,31542,31543,31544,31545,31546,31547,31548,31549,31550,31551,31552,31553,31554,31555,31556,31557,31558,31559,31560,31561,31562,31563,31564,31565,31566,31567,31568,31569,31570,31571,31572,31573,31574,31575,31576,31577,31578,31579,31580,31581,31582,31583,31584,31585,31586,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31598,31599,31600,31601,31602,31603,31604,31605,31606,31607,31608,31609,31610,31611,31612,31613,31614,31615,31616'/>
+  </group>
+  <group name='303'>
+    <ids val='31617,31618,31619,31620,31621,31622,31623,31624,31625,31626,31627,31628,31629,31630,31631,31632,31633,31634,31635,31636,31637,31638,31639,31640,31641,31642,31643,31644,31645,31646,31647,31648,31649,31650,31651,31652,31653,31654,31655,31656,31657,31658,31659,31660,31661,31662,31663,31664,31665,31666,31667,31668,31669,31670,31671,31672,31673,31674,31675,31676,31677,31678,31679,31680,31681,31682,31683,31684,31685,31686,31687,31688,31689,31690,31691,31692,31693,31694,31695,31696,31697,31698,31699,31700,31701,31702,31703,31704,31705,31706,31707,31708,31709,31710,31711,31712,31713,31714,31715,31716,31717,31718,31719,31720,31721,31722,31723,31724,31725,31726,31727,31728,31729,31730,31731,31732,31733,31734,31735,31736,31737,31738,31739,31740,31741,31742,31743,31744,31745,31746,31747,31748,31749,31750,31751,31752,31753,31754,31755,31756,31757,31758,31759,31760,31761,31762,31763,31764,31765,31766,31767,31768,31769,31770,31771,31772,31773,31774,31775,31776,31777,31778,31779,31780,31781,31782,31783,31784,31785,31786,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31800,31801,31802,31803,31804,31805,31806,31807,31808,31809,31810,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31821,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31859,31860,31861,31862,31863,31864,31865,31866,31867,31868,31869,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31881,31882,31883,31884,31885,31886,31887,31888,31889,31890,31891,31892,31893,31894,31895,31896,31897,31898,31899,31900,31901,31902,31903,31904,31905,31906,31907,31908,31909,31910,31911,31912,31913,31914,31915,31916,31917,31918,31919,31920'/>
+  </group>
+  <group name='303'>
+    <ids val='31921,31922,31923,31924,31925,31926,31927,31928,31929,31930,31931,31932,31933,31934,31935,31936,31937,31938,31939,31940,31941,31942,31943,31944,31945,31946,31947,31948,31949,31950,31951,31952,31953,31954,31955,31956,31957,31958,31959,31960,31961,31962,31963,31964,31965,31966,31967,31968,31969,31970,31971,31972,31973,31974,31975,31976,31977,31978,31979,31980,31981,31982,31983,31984,31985,31986,31987,31988,31989,31990,31991,31992,31993,31994,31995,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32010,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32032,32033,32034,32035,32036,32037,32038,32039,32040,32041,32042,32043,32044,32045,32046,32047,32048,32049,32050,32051,32052,32053,32054,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32110,32111,32112,32113,32114,32115,32116,32117,32118,32119,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32166,32167,32168,32169,32170,32171,32172,32173,32174,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224'/>
+  </group>
+  <group name='303'>
+    <ids val='32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32315,32316,32317,32318,32319,32320,32321,32322,32323,32324,32325,32326,32327,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32386,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32411,32412,32413,32414,32415,32416,32417,32418,32419,32420,32421,32422,32423,32424,32425,32426,32427,32428,32429,32430,32431,32432,32433,32434,32435,32436,32437,32438,32439,32440,32441,32442,32443,32444,32445,32446,32447,32448,32449,32450,32451,32452,32453,32454,32455,32456,32457,32458,32459,32460,32461,32462,32463,32464,32465,32466,32467,32468,32469,32470,32471,32472,32473,32474,32475,32476,32477,32478,32479,32480,32481,32482,32483,32484,32485,32486,32487,32488,32489,32490,32491,32492,32493,32494,32495,32496,32497,32498,32499,32500,32501,32502,32503,32504,32505,32506,32507,32508,32509,32510,32511,32512,32513,32514,32515,32516,32517,32518,32519,32520,32521,32522,32523,32524,32525,32526,32527,32528'/>
+  </group>
+  <group name='303'>
+    <ids val='32529,32530,32531,32532,32533,32534,32535,32536,32537,32538,32539,32540,32541,32542,32543,32544,32545,32546,32547,32548,32549,32550,32551,32552,32553,32554,32555,32556,32557,32558,32559,32560,32561,32562,32563,32564,32565,32566,32567,32568,32569,32570,32571,32572,32573,32574,32575,32576,32577,32578,32579,32580,32581,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32592,32593,32594,32595,32596,32597,32598,32599,32600,32601,32602,32603,32604,32605,32606,32607,32608,32609,32610,32611,32612,32613,32614,32615,32616,32617,32618,32619,32620,32621,32622,32623,32624,32625,32626,32627,32628,32629,32630,32631,32632,32633,32634,32635,32636,32637,32638,32639,32640,32641,32642,32643,32644,32645,32646,32647,32648,32649,32650,32651,32652,32653,32654,32655,32656,32657,32658,32659,32660,32661,32662,32663,32664,32665,32666,32667,32668,32669,32670,32671,32672,32673,32674,32675,32676,32677,32678,32679,32680,32681,32682,32683,32684,32685,32686,32687,32688,32689,32690,32691,32692,32693,32694,32695,32696,32697,32698,32699,32700,32701,32702,32703,32704,32705,32706,32707,32708,32709,32710,32711,32712,32713,32714,32715,32716,32717,32718,32719,32720,32721,32722,32723,32724,32725,32726,32727,32728,32729,32730,32731,32732,32733,32734,32735,32736,32737,32738,32739,32740,32741,32742,32743,32744,32745,32746,32747,32748,32749,32750,32751,32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767,32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783,32784,32785,32786,32787,32788,32789,32790,32791,32792,32793,32794,32795,32796,32797,32798,32799,32800,32801,32802,32803,32804,32805,32806,32807,32808,32809,32810,32811,32812,32813,32814,32815,32816,32817,32818,32819,32820,32821,32822,32823,32824,32825,32826,32827,32828,32829,32830,32831,32832'/>
+  </group>
+  <group name='303'>
+    <ids val='32833,32834,32835,32836,32837,32838,32839,32840,32841,32842,32843,32844,32845,32846,32847,32848,32849,32850,32851,32852,32853,32854,32855,32856,32857,32858,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32873,32874,32875,32876,32877,32878,32879,32880,32881,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,32894,32895,32896,32897,32898,32899,32900,32901,32902,32903,32904,32905,32906,32907,32908,32909,32910,32911,32912,32913,32914,32915,32916,32917,32918,32919,32920,32921,32922,32923,32924,32925,32926,32927,32928,32929,32930,32931,32932,32933,32934,32935,32936,32937,32938,32939,32940,32941,32942,32943,32944,32945,32946,32947,32948,32949,32950,32951,32952,32953,32954,32955,32956,32957,32958,32959,32960,32961,32962,32963,32964,32965,32966,32967,32968,32969,32970,32971,32972,32973,32974,32975,32976,32977,32978,32979,32980,32981,32982,32983,32984,32985,32986,32987,32988,32989,32990,32991,32992,32993,32994,32995,32996,32997,32998,32999,33000,33001,33002,33003,33004,33005,33006,33007,33008,33009,33010,33011,33012,33013,33014,33015,33016,33017,33018,33019,33020,33021,33022,33023,33024,33025,33026,33027,33028,33029,33030,33031,33032,33033,33034,33035,33036,33037,33038,33039,33040,33041,33042,33043,33044,33045,33046,33047,33048,33049,33050,33051,33052,33053,33054,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33068,33069,33070,33071,33072,33073,33074,33075,33076,33077,33078,33079,33080,33081,33082,33083,33084,33085,33086,33087,33088,33089,33090,33091,33092,33093,33094,33095,33096,33097,33098,33099,33100,33101,33102,33103,33104,33105,33106,33107,33108,33109,33110,33111,33112,33113,33114,33115,33116,33117,33118,33119,33120,33121,33122,33123,33124,33125,33126,33127,33128,33129,33130,33131,33132,33133,33134,33135,33136'/>
+  </group>
+  <group name='303'>
+    <ids val='33137,33138,33139,33140,33141,33142,33143,33144,33145,33146,33147,33148,33149,33150,33151,33152,33153,33154,33155,33156,33157,33158,33159,33160,33161,33162,33163,33164,33165,33166,33167,33168,33169,33170,33171,33172,33173,33174,33175,33176,33177,33178,33179,33180,33181,33182,33183,33184,33185,33186,33187,33188,33189,33190,33191,33192,33193,33194,33195,33196,33197,33198,33199,33200,33201,33202,33203,33204,33205,33206,33207,33208,33209,33210,33211,33212,33213,33214,33215,33216,33217,33218,33219,33220,33221,33222,33223,33224,33225,33226,33227,33228,33229,33230,33231,33232,33233,33234,33235,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33251,33252,33253,33254,33255,33256,33257,33258,33259,33260,33261,33262,33263,33264,33265,33266,33267,33268,33269,33270,33271,33272,33273,33274,33275,33276,33277,33278,33279,33280,33281,33282,33283,33284,33285,33286,33287,33288,33289,33290,33291,33292,33293,33294,33295,33296,33297,33298,33299,33300,33301,33302,33303,33304,33305,33306,33307,33308,33309,33310,33311,33312,33313,33314,33315,33316,33317,33318,33319,33320,33321,33322,33323,33324,33325,33326,33327,33328,33329,33330,33331,33332,33333,33334,33335,33336,33337,33338,33339,33340,33341,33342,33343,33344,33345,33346,33347,33348,33349,33350,33351,33352,33353,33354,33355,33356,33357,33358,33359,33360,33361,33362,33363,33364,33365,33366,33367,33368,33369,33370,33371,33372,33373,33374,33375,33376,33377,33378,33379,33380,33381,33382,33383,33384,33385,33386,33387,33388,33389,33390,33391,33392,33393,33394,33395,33396,33397,33398,33399,33400,33401,33402,33403,33404,33405,33406,33407,33408,33409,33410,33411,33412,33413,33414,33415,33416,33417,33418,33419,33420,33421,33422,33423,33424,33425,33426,33427,33428,33429,33430,33431,33432,33433,33434,33435,33436,33437,33438,33439,33440'/>
+  </group>
+  <group name='303'>
+    <ids val='33441,33442,33443,33444,33445,33446,33447,33448,33449,33450,33451,33452,33453,33454,33455,33456,33457,33458,33459,33460,33461,33462,33463,33464,33465,33466,33467,33468,33469,33470,33471,33472,33473,33474,33475,33476,33477,33478,33479,33480,33481,33482,33483,33484,33485,33486,33487,33488,33489,33490,33491,33492,33493,33494,33495,33496,33497,33498,33499,33500,33501,33502,33503,33504,33505,33506,33507,33508,33509,33510,33511,33512,33513,33514,33515,33516,33517,33518,33519,33520,33521,33522,33523,33524,33525,33526,33527,33528,33529,33530,33531,33532,33533,33534,33535,33536,33537,33538,33539,33540,33541,33542,33543,33544,33545,33546,33547,33548,33549,33550,33551,33552,33553,33554,33555,33556,33557,33558,33559,33560,33561,33562,33563,33564,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33575,33576,33577,33578,33579,33580,33581,33582,33583,33584,33585,33586,33587,33588,33589,33590,33591,33592,33593,33594,33595,33596,33597,33598,33599,33600,33601,33602,33603,33604,33605,33606,33607,33608,33609,33610,33611,33612,33613,33614,33615,33616,33617,33618,33619,33620,33621,33622,33623,33624,33625,33626,33627,33628,33629,33630,33631,33632,33633,33634,33635,33636,33637,33638,33639,33640,33641,33642,33643,33644,33645,33646,33647,33648,33649,33650,33651,33652,33653,33654,33655,33656,33657,33658,33659,33660,33661,33662,33663,33664,33665,33666,33667,33668,33669,33670,33671,33672,33673,33674,33675,33676,33677,33678,33679,33680,33681,33682,33683,33684,33685,33686,33687,33688,33689,33690,33691,33692,33693,33694,33695,33696,33697,33698,33699,33700,33701,33702,33703,33704,33705,33706,33707,33708,33709,33710,33711,33712,33713,33714,33715,33716,33717,33718,33719,33720,33721,33722,33723,33724,33725,33726,33727,33728,33729,33730,33731,33732,33733,33734,33735,33736,33737,33738,33739,33740,33741,33742,33743,33744'/>
+  </group>
+  <group name='303'>
+    <ids val='33745,33746,33747,33748,33749,33750,33751,33752,33753,33754,33755,33756,33757,33758,33759,33760,33761,33762,33763,33764,33765,33766,33767,33768,33769,33770,33771,33772,33773,33774,33775,33776,33777,33778,33779,33780,33781,33782,33783,33784,33785,33786,33787,33788,33789,33790,33791,33792,33793,33794,33795,33796,33797,33798,33799,33800,33801,33802,33803,33804,33805,33806,33807,33808,33809,33810,33811,33812,33813,33814,33815,33816,33817,33818,33819,33820,33821,33822,33823,33824,33825,33826,33827,33828,33829,33830,33831,33832,33833,33834,33835,33836,33837,33838,33839,33840,33841,33842,33843,33844,33845,33846,33847,33848,33849,33850,33851,33852,33853,33854,33855,33856,33857,33858,33859,33860,33861,33862,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33873,33874,33875,33876,33877,33878,33879,33880,33881,33882,33883,33884,33885,33886,33887,33888,33889,33890,33891,33892,33893,33894,33895,33896,33897,33898,33899,33900,33901,33902,33903,33904,33905,33906,33907,33908,33909,33910,33911,33912,33913,33914,33915,33916,33917,33918,33919,33920,33921,33922,33923,33924,33925,33926,33927,33928,33929,33930,33931,33932,33933,33934,33935,33936,33937,33938,33939,33940,33941,33942,33943,33944,33945,33946,33947,33948,33949,33950,33951,33952,33953,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33967,33968,33969,33970,33971,33972,33973,33974,33975,33976,33977,33978,33979,33980,33981,33982,33983,33984,33985,33986,33987,33988,33989,33990,33991,33992,33993,33994,33995,33996,33997,33998,33999,34000,34001,34002,34003,34004,34005,34006,34007,34008,34009,34010,34011,34012,34013,34014,34015,34016,34017,34018,34019,34020,34021,34022,34023,34024,34025,34026,34027,34028,34029,34030,34031,34032,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34044,34045,34046,34047,34048'/>
+  </group>
+  <group name='303'>
+    <ids val='34049,34050,34051,34052,34053,34054,34055,34056,34057,34058,34059,34060,34061,34062,34063,34064,34065,34066,34067,34068,34069,34070,34071,34072,34073,34074,34075,34076,34077,34078,34079,34080,34081,34082,34083,34084,34085,34086,34087,34088,34089,34090,34091,34092,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34103,34104,34105,34106,34107,34108,34109,34110,34111,34112,34113,34114,34115,34116,34117,34118,34119,34120,34121,34122,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34134,34135,34136,34137,34138,34139,34140,34141,34142,34143,34144,34145,34146,34147,34148,34149,34150,34151,34152,34153,34154,34155,34156,34157,34158,34159,34160,34161,34162,34163,34164,34165,34166,34167,34168,34169,34170,34171,34172,34173,34174,34175,34176,34177,34178,34179,34180,34181,34182,34183,34184,34185,34186,34187,34188,34189,34190,34191,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34203,34204,34205,34206,34207,34208,34209,34210,34211,34212,34213,34214,34215,34216,34217,34218,34219,34220,34221,34222,34223,34224,34225,34226,34227,34228,34229,34230,34231,34232,34233,34234,34235,34236,34237,34238,34239,34240,34241,34242,34243,34244,34245,34246,34247,34248,34249,34250,34251,34252,34253,34254,34255,34256,34257,34258,34259,34260,34261,34262,34263,34264,34265,34266,34267,34268,34269,34270,34271,34272,34273,34274,34275,34276,34277,34278,34279,34280,34281,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,34297,34298,34299,34300,34301,34302,34303,34304,34305,34306,34307,34308,34309,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34321,34322,34323,34324,34325,34326,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34343,34344,34345,34346,34347,34348,34349,34350,34351,34352'/>
+  </group>
+  <group name='303'>
+    <ids val='34353,34354,34355,34356,34357,34358,34359,34360,34361,34362,34363,34364,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34381,34382,34383,34384,34385,34386,34387,34388,34389,34390,34391,34392,34393,34394,34395,34396,34397,34398,34399,34400,34401,34402,34403,34404,34405,34406,34407,34408,34409,34410,34411,34412,34413,34414,34415,34416,34417,34418,34419,34420,34421,34422,34423,34424,34425,34426,34427,34428,34429,34430,34431,34432,34433,34434,34435,34436,34437,34438,34439,34440,34441,34442,34443,34444,34445,34446,34447,34448,34449,34450,34451,34452,34453,34454,34455,34456,34457,34458,34459,34460,34461,34462,34463,34464,34465,34466,34467,34468,34469,34470,34471,34472,34473,34474,34475,34476,34477,34478,34479,34480,34481,34482,34483,34484,34485,34486,34487,34488,34489,34490,34491,34492,34493,34494,34495,34496,34497,34498,34499,34500,34501,34502,34503,34504,34505,34506,34507,34508,34509,34510,34511,34512,34513,34514,34515,34516,34517,34518,34519,34520,34521,34522,34523,34524,34525,34526,34527,34528,34529,34530,34531,34532,34533,34534,34535,34536,34537,34538,34539,34540,34541,34542,34543,34544,34545,34546,34547,34548,34549,34550,34551,34552,34553,34554,34555,34556,34557,34558,34559,34560,34561,34562,34563,34564,34565,34566,34567,34568,34569,34570,34571,34572,34573,34574,34575,34576,34577,34578,34579,34580,34581,34582,34583,34584,34585,34586,34587,34588,34589,34590,34591,34592,34593,34594,34595,34596,34597,34598,34599,34600,34601,34602,34603,34604,34605,34606,34607,34608,34609,34610,34611,34612,34613,34614,34615,34616,34617,34618,34619,34620,34621,34622,34623,34624,34625,34626,34627,34628,34629,34630,34631,34632,34633,34634,34635,34636,34637,34638,34639,34640,34641,34642,34643,34644,34645,34646,34647,34648,34649,34650,34651,34652,34653,34654,34655,34656'/>
+  </group>
+  <group name='303'>
+    <ids val='34657,34658,34659,34660,34661,34662,34663,34664,34665,34666,34667,34668,34669,34670,34671,34672,34673,34674,34675,34676,34677,34678,34679,34680,34681,34682,34683,34684,34685,34686,34687,34688,34689,34690,34691,34692,34693,34694,34695,34696,34697,34698,34699,34700,34701,34702,34703,34704,34705,34706,34707,34708,34709,34710,34711,34712,34713,34714,34715,34716,34717,34718,34719,34720,34721,34722,34723,34724,34725,34726,34727,34728,34729,34730,34731,34732,34733,34734,34735,34736,34737,34738,34739,34740,34741,34742,34743,34744,34745,34746,34747,34748,34749,34750,34751,34752,34753,34754,34755,34756,34757,34758,34759,34760,34761,34762,34763,34764,34765,34766,34767,34768,34769,34770,34771,34772,34773,34774,34775,34776,34777,34778,34779,34780,34781,34782,34783,34784,34785,34786,34787,34788,34789,34790,34791,34792,34793,34794,34795,34796,34797,34798,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34809,34810,34811,34812,34813,34814,34815,34816,34817,34818,34819,34820,34821,34822,34823,34824,34825,34826,34827,34828,34829,34830,34831,34832,34833,34834,34835,34836,34837,34838,34839,34840,34841,34842,34843,34844,34845,34846,34847,34848,34849,34850,34851,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34866,34867,34868,34869,34870,34871,34872,34873,34874,34875,34876,34877,34878,34879,34880,34881,34882,34883,34884,34885,34886,34887,34888,34889,34890,34891,34892,34893,34894,34895,34896,34897,34898,34899,34900,34901,34902,34903,34904,34905,34906,34907,34908,34909,34910,34911,34912,34913,34914,34915,34916,34917,34918,34919,34920,34921,34922,34923,34924,34925,34926,34927,34928,34929,34930,34931,34932,34933,34934,34935,34936,34937,34938,34939,34940,34941,34942,34943,34944,34945,34946,34947,34948,34949,34950,34951,34952,34953,34954,34955,34956,34957,34958,34959,34960'/>
+  </group>
+  <group name='303'>
+    <ids val='34961,34962,34963,34964,34965,34966,34967,34968,34969,34970,34971,34972,34973,34974,34975,34976,34977,34978,34979,34980,34981,34982,34983,34984,34985,34986,34987,34988,34989,34990,34991,34992,34993,34994,34995,34996,34997,34998,34999,35000,35001,35002,35003,35004,35005,35006,35007,35008,35009,35010,35011,35012,35013,35014,35015,35016,35017,35018,35019,35020,35021,35022,35023,35024,35025,35026,35027,35028,35029,35030,35031,35032,35033,35034,35035,35036,35037,35038,35039,35040,35041,35042,35043,35044,35045,35046,35047,35048,35049,35050,35051,35052,35053,35054,35055,35056,35057,35058,35059,35060,35061,35062,35063,35064,35065,35066,35067,35068,35069,35070,35071,35072,35073,35074,35075,35076,35077,35078,35079,35080,35081,35082,35083,35084,35085,35086,35087,35088,35089,35090,35091,35092,35093,35094,35095,35096,35097,35098,35099,35100,35101,35102,35103,35104,35105,35106,35107,35108,35109,35110,35111,35112,35113,35114,35115,35116,35117,35118,35119,35120,35121,35122,35123,35124,35125,35126,35127,35128,35129,35130,35131,35132,35133,35134,35135,35136,35137,35138,35139,35140,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35166,35167,35168,35169,35170,35171,35172,35173,35174,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35195,35196,35197,35198,35199,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264'/>
+  </group>
+  <group name='303'>
+    <ids val='35265,35266,35267,35268,35269,35270,35271,35272,35273,35274,35275,35276,35277,35278,35279,35280,35281,35282,35283,35284,35285,35286,35287,35288,35289,35290,35291,35292,35293,35294,35295,35296,35297,35298,35299,35300,35301,35302,35303,35304,35305,35306,35307,35308,35309,35310,35311,35312,35313,35314,35315,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35328,35329,35330,35331,35332,35333,35334,35335,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35390,35391,35392,35393,35394,35395,35396,35397,35398,35399,35400,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35449,35450,35451,35452,35453,35454,35455,35456,35457,35458,35459,35460,35461,35462,35463,35464,35465,35466,35467,35468,35469,35470,35471,35472,35473,35474,35475,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568'/>
+  </group>
+  <group name='303'>
+    <ids val='35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35591,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35622,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35686,35687,35688,35689,35690,35691,35692,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35744,35745,35746,35747,35748,35749,35750,35751,35752,35753,35754,35755,35756,35757,35758,35759,35760,35761,35762,35763,35764,35765,35766,35767,35768,35769,35770,35771,35772,35773,35774,35775,35776,35777,35778,35779,35780,35781,35782,35783,35784,35785,35786,35787,35788,35789,35790,35791,35792,35793,35794,35795,35796,35797,35798,35799,35800,35801,35802,35803,35804,35805,35806,35807,35808,35809,35810,35811,35812,35813,35814,35815,35816,35817,35818,35819,35820,35821,35822,35823,35824,35825,35826,35827,35828,35829,35830,35831,35832,35833,35834,35835,35836,35837,35838,35839,35840,35841,35842,35843,35844,35845,35846,35847,35848,35849,35850,35851,35852,35853,35854,35855,35856,35857,35858,35859,35860,35861,35862,35863,35864,35865,35866,35867,35868,35869,35870,35871,35872'/>
+  </group>
+  <group name='303'>
+    <ids val='35873,35874,35875,35876,35877,35878,35879,35880,35881,35882,35883,35884,35885,35886,35887,35888,35889,35890,35891,35892,35893,35894,35895,35896,35897,35898,35899,35900,35901,35902,35903,35904,35905,35906,35907,35908,35909,35910,35911,35912,35913,35914,35915,35916,35917,35918,35919,35920,35921,35922,35923,35924,35925,35926,35927,35928,35929,35930,35931,35932,35933,35934,35935,35936,35937,35938,35939,35940,35941,35942,35943,35944,35945,35946,35947,35948,35949,35950,35951,35952,35953,35954,35955,35956,35957,35958,35959,35960,35961,35962,35963,35964,35965,35966,35967,35968,35969,35970,35971,35972,35973,35974,35975,35976,35977,35978,35979,35980,35981,35982,35983,35984,35985,35986,35987,35988,35989,35990,35991,35992,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36125,36126,36127,36128,36129,36130,36131,36132,36133,36134,36135,36136,36137,36138,36139,36140,36141,36142,36143,36144,36145,36146,36147,36148,36149,36150,36151,36152,36153,36154,36155,36156,36157,36158,36159,36160,36161,36162,36163,36164,36165,36166,36167,36168,36169,36170,36171,36172,36173,36174,36175,36176'/>
+  </group>
+  <group name='303'>
+    <ids val='36177,36178,36179,36180,36181,36182,36183,36184,36185,36186,36187,36188,36189,36190,36191,36192,36193,36194,36195,36196,36197,36198,36199,36200,36201,36202,36203,36204,36205,36206,36207,36208,36209,36210,36211,36212,36213,36214,36215,36216,36217,36218,36219,36220,36221,36222,36223,36224,36225,36226,36227,36228,36229,36230,36231,36232,36233,36234,36235,36236,36237,36238,36239,36240,36241,36242,36243,36244,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36255,36256,36257,36258,36259,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36273,36274,36275,36276,36277,36278,36279,36280,36281,36282,36283,36284,36285,36286,36287,36288,36289,36290,36291,36292,36293,36294,36295,36296,36297,36298,36299,36300,36301,36302,36303,36304,36305,36306,36307,36308,36309,36310,36311,36312,36313,36314,36315,36316,36317,36318,36319,36320,36321,36322,36323,36324,36325,36326,36327,36328,36329,36330,36331,36332,36333,36334,36335,36336,36337,36338,36339,36340,36341,36342,36343,36344,36345,36346,36347,36348,36349,36350,36351,36352,36353,36354,36355,36356,36357,36358,36359,36360,36361,36362,36363,36364,36365,36366,36367,36368,36369,36370,36371,36372,36373,36374,36375,36376,36377,36378,36379,36380,36381,36382,36383,36384,36385,36386,36387,36388,36389,36390,36391,36392,36393,36394,36395,36396,36397,36398,36399,36400,36401,36402,36403,36404,36405,36406,36407,36408,36409,36410,36411,36412,36413,36414,36415,36416,36417,36418,36419,36420,36421,36422,36423,36424,36425,36426,36427,36428,36429,36430,36431,36432,36433,36434,36435,36436,36437,36438,36439,36440,36441,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36454,36455,36456,36457,36458,36459,36460,36461,36462,36463,36464,36465,36466,36467,36468,36469,36470,36471,36472,36473,36474,36475,36476,36477,36478,36479,36480'/>
+  </group>
+  <group name='303'>
+    <ids val='36481,36482,36483,36484,36485,36486,36487,36488,36489,36490,36491,36492,36493,36494,36495,36496,36497,36498,36499,36500,36501,36502,36503,36504,36505,36506,36507,36508,36509,36510,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36523,36524,36525,36526,36527,36528,36529,36530,36531,36532,36533,36534,36535,36536,36537,36538,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36558,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36710,36711,36712,36713,36714,36715,36716,36717,36718,36719,36720,36721,36722,36723,36724,36725,36726,36727,36728,36729,36730,36731,36732,36733,36734,36735,36736,36737,36738,36739,36740,36741,36742,36743,36744,36745,36746,36747,36748,36749,36750,36751,36752,36753,36754,36755,36756,36757,36758,36759,36760,36761,36762,36763,36764,36765,36766,36767,36768,36769,36770,36771,36772,36773,36774,36775,36776,36777,36778,36779,36780,36781,36782,36783,36784'/>
+  </group>
+  <group name='303'>
+    <ids val='36785,36786,36787,36788,36789,36790,36791,36792,36793,36794,36795,36796,36797,36798,36799,36800,36801,36802,36803,36804,36805,36806,36807,36808,36809,36810,36811,36812,36813,36814,36815,36816,36817,36818,36819,36820,36821,36822,36823,36824,36825,36826,36827,36828,36829,36830,36831,36832,36833,36834,36835,36836,36837,36838,36839,36840,36841,36842,36843,36844,36845,36846,36847,36848,36849,36850,36851,36852,36853,36854,36855,36856,36857,36858,36859,36860,36861,36862,36863,36864,36865,36866,36867,36868,36869,36870,36871,36872,36873,36874,36875,36876,36877,36878,36879,36880,36881,36882,36883,36884,36885,36886,36887,36888,36889,36890,36891,36892,36893,36894,36895,36896,36897,36898,36899,36900,36901,36902,36903,36904,36905,36906,36907,36908,36909,36910,36911,36912,36913,36914,36915,36916,36917,36918,36919,36920,36921,36922,36923,36924,36925,36926,36927,36928,36929,36930,36931,36932,36933,36934,36935,36936,36937,36938,36939,36940,36941,36942,36943,36944,36945,36946,36947,36948,36949,36950,36951,36952,36953,36954,36955,36956,36957,36958,36959,36960,36961,36962,36963,36964,36965,36966,36967,36968,36969,36970,36971,36972,36973,36974,36975,36976,36977,36978,36979,36980,36981,36982,36983,36984,36985,36986,36987,36988,36989,36990,36991,36992,36993,36994,36995,36996,36997,36998,36999,37000,37001,37002,37003,37004,37005,37006,37007,37008,37009,37010,37011,37012,37013,37014,37015,37016,37017,37018,37019,37020,37021,37022,37023,37024,37025,37026,37027,37028,37029,37030,37031,37032,37033,37034,37035,37036,37037,37038,37039,37040,37041,37042,37043,37044,37045,37046,37047,37048,37049,37050,37051,37052,37053,37054,37055,37056,37057,37058,37059,37060,37061,37062,37063,37064,37065,37066,37067,37068,37069,37070,37071,37072,37073,37074,37075,37076,37077,37078,37079,37080,37081,37082,37083,37084,37085,37086,37087,37088'/>
+  </group>
+  <group name='303'>
+    <ids val='37089,37090,37091,37092,37093,37094,37095,37096,37097,37098,37099,37100,37101,37102,37103,37104,37105,37106,37107,37108,37109,37110,37111,37112,37113,37114,37115,37116,37117,37118,37119,37120,37121,37122,37123,37124,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37145,37146,37147,37148,37149,37150,37151,37152,37153,37154,37155,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37167,37168,37169,37170,37171,37172,37173,37174,37175,37176,37177,37178,37179,37180,37181,37182,37183,37184,37185,37186,37187,37188,37189,37190,37191,37192,37193,37194,37195,37196,37197,37198,37199,37200,37201,37202,37203,37204,37205,37206,37207,37208,37209,37210,37211,37212,37213,37214,37215,37216,37217,37218,37219,37220,37221,37222,37223,37224,37225,37226,37227,37228,37229,37230,37231,37232,37233,37234,37235,37236,37237,37238,37239,37240,37241,37242,37243,37244,37245,37246,37247,37248,37249,37250,37251,37252,37253,37254,37255,37256,37257,37258,37259,37260,37261,37262,37263,37264,37265,37266,37267,37268,37269,37270,37271,37272,37273,37274,37275,37276,37277,37278,37279,37280,37281,37282,37283,37284,37285,37286,37287,37288,37289,37290,37291,37292,37293,37294,37295,37296,37297,37298,37299,37300,37301,37302,37303,37304,37305,37306,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37319,37320,37321,37322,37323,37324,37325,37326,37327,37328,37329,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37340,37341,37342,37343,37344,37345,37346,37347,37348,37349,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392'/>
+  </group>
+  <group name='303'>
+    <ids val='37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37492,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37518,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,37544,37545,37546,37547,37548,37549,37550,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37576,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37694,37695,37696'/>
+  </group>
+  <group name='303'>
+    <ids val='37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37738,37739,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37775,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37834,37835,37836,37837,37838,37839,37840,37841,37842,37843,37844,37845,37846,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37950,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37995,37996,37997,37998,37999,38000'/>
+  </group>
+  <group name='303'>
+    <ids val='38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38021,38022,38023,38024,38025,38026,38027,38028,38029,38030,38031,38032,38033,38034,38035,38036,38037,38038,38039,38040,38041,38042,38043,38044,38045,38046,38047,38048,38049,38050,38051,38052,38053,38054,38055,38056,38057,38058,38059,38060,38061,38062,38063,38064,38065,38066,38067,38068,38069,38070,38071,38072,38073,38074,38075,38076,38077,38078,38079,38080,38081,38082,38083,38084,38085,38086,38087,38088,38089,38090,38091,38092,38093,38094,38095,38096,38097,38098,38099,38100,38101,38102,38103,38104,38105,38106,38107,38108,38109,38110,38111,38112,38113,38114,38115,38116,38117,38118,38119,38120,38121,38122,38123,38124,38125,38126,38127,38128,38129,38130,38131,38132,38133,38134,38135,38136,38137,38138,38139,38140,38141,38142,38143,38144,38145,38146,38147,38148,38149,38150,38151,38152,38153,38154,38155,38156,38157,38158,38159,38160,38161,38162,38163,38164,38165,38166,38167,38168,38169,38170,38171,38172,38173,38174,38175,38176,38177,38178,38179,38180,38181,38182,38183,38184,38185,38186,38187,38188,38189,38190,38191,38192,38193,38194,38195,38196,38197,38198,38199,38200,38201,38202,38203,38204,38205,38206,38207,38208,38209,38210,38211,38212,38213,38214,38215,38216,38217,38218,38219,38220,38221,38222,38223,38224,38225,38226,38227,38228,38229,38230,38231,38232,38233,38234,38235,38236,38237,38238,38239,38240,38241,38242,38243,38244,38245,38246,38247,38248,38249,38250,38251,38252,38253,38254,38255,38256,38257,38258,38259,38260,38261,38262,38263,38264,38265,38266,38267,38268,38269,38270,38271,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304'/>
+  </group>
+  <group name='303'>
+    <ids val='38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38376,38377,38378,38379,38380,38381,38382,38383,38384,38385,38386,38387,38388,38389,38390,38391,38392,38393,38394,38395,38396,38397,38398,38399,38400,38401,38402,38403,38404,38405,38406,38407,38408,38409,38410,38411,38412,38413,38414,38415,38416,38417,38418,38419,38420,38421,38422,38423,38424,38425,38426,38427,38428,38429,38430,38431,38432,38433,38434,38435,38436,38437,38438,38439,38440,38441,38442,38443,38444,38445,38446,38447,38448,38449,38450,38451,38452,38453,38454,38455,38456,38457,38458,38459,38460,38461,38462,38463,38464,38465,38466,38467,38468,38469,38470,38471,38472,38473,38474,38475,38476,38477,38478,38479,38480,38481,38482,38483,38484,38485,38486,38487,38488,38489,38490,38491,38492,38493,38494,38495,38496,38497,38498,38499,38500,38501,38502,38503,38504,38505,38506,38507,38508,38509,38510,38511,38512,38513,38514,38515,38516,38517,38518,38519,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38533,38534,38535,38536,38537,38538,38539,38540,38541,38542,38543,38544,38545,38546,38547,38548,38549,38550,38551,38552,38553,38554,38555,38556,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38567,38568,38569,38570,38571,38572,38573,38574,38575,38576,38577,38578,38579,38580,38581,38582,38583,38584,38585,38586,38587,38588,38589,38590,38591,38592,38593,38594,38595,38596,38597,38598,38599,38600,38601,38602,38603,38604,38605,38606,38607,38608'/>
+  </group>
+  <group name='303'>
+    <ids val='38609,38610,38611,38612,38613,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38624,38625,38626,38627,38628,38629,38630,38631,38632,38633,38634,38635,38636,38637,38638,38639,38640,38641,38642,38643,38644,38645,38646,38647,38648,38649,38650,38651,38652,38653,38654,38655,38656,38657,38658,38659,38660,38661,38662,38663,38664,38665,38666,38667,38668,38669,38670,38671,38672,38673,38674,38675,38676,38677,38678,38679,38680,38681,38682,38683,38684,38685,38686,38687,38688,38689,38690,38691,38692,38693,38694,38695,38696,38697,38698,38699,38700,38701,38702,38703,38704,38705,38706,38707,38708,38709,38710,38711,38712,38713,38714,38715,38716,38717,38718,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38738,38739,38740,38741,38742,38743,38744,38745,38746,38747,38748,38749,38750,38751,38752,38753,38754,38755,38756,38757,38758,38759,38760,38761,38762,38763,38764,38765,38766,38767,38768,38769,38770,38771,38772,38773,38774,38775,38776,38777,38778,38779,38780,38781,38782,38783,38784,38785,38786,38787,38788,38789,38790,38791,38792,38793,38794,38795,38796,38797,38798,38799,38800,38801,38802,38803,38804,38805,38806,38807,38808,38809,38810,38811,38812,38813,38814,38815,38816,38817,38818,38819,38820,38821,38822,38823,38824,38825,38826,38827,38828,38829,38830,38831,38832,38833,38834,38835,38836,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38886,38887,38888,38889,38890,38891,38892,38893,38894,38895,38896,38897,38898,38899,38900,38901,38902,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912'/>
+  </group>
+  <group name='303'>
+    <ids val='38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,39023,39024,39025,39026,39027,39028,39029,39030,39031,39032,39033,39034,39035,39036,39037,39038,39039,39040,39041,39042,39043,39044,39045,39046,39047,39048,39049,39050,39051,39052,39053,39054,39055,39056,39057,39058,39059,39060,39061,39062,39063,39064,39065,39066,39067,39068,39069,39070,39071,39072,39073,39074,39075,39076,39077,39078,39079,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39118,39119,39120,39121,39122,39123,39124,39125,39126,39127,39128,39129,39130,39131,39132,39133,39134,39135,39136,39137,39138,39139,39140,39141,39142,39143,39144,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,39176,39177,39178,39179,39180,39181,39182,39183,39184,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39214,39215,39216'/>
+  </group>
+  <group name='303'>
+    <ids val='39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39252,39253,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39267,39268,39269,39270,39271,39272,39273,39274,39275,39276,39277,39278,39279,39280,39281,39282,39283,39284,39285,39286,39287,39288,39289,39290,39291,39292,39293,39294,39295,39296,39297,39298,39299,39300,39301,39302,39303,39304,39305,39306,39307,39308,39309,39310,39311,39312,39313,39314,39315,39316,39317,39318,39319,39320,39321,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39333,39334,39335,39336,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39514,39515,39516,39517,39518,39519,39520'/>
+  </group>
+  <group name='303'>
+    <ids val='39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39532,39533,39534,39535,39536,39537,39538,39539,39540,39541,39542,39543,39544,39545,39546,39547,39548,39549,39550,39551,39552,39553,39554,39555,39556,39557,39558,39559,39560,39561,39562,39563,39564,39565,39566,39567,39568,39569,39570,39571,39572,39573,39574,39575,39576,39577,39578,39579,39580,39581,39582,39583,39584,39585,39586,39587,39588,39589,39590,39591,39592,39593,39594,39595,39596,39597,39598,39599,39600,39601,39602,39603,39604,39605,39606,39607,39608,39609,39610,39611,39612,39613,39614,39615,39616,39617,39618,39619,39620,39621,39622,39623,39624,39625,39626,39627,39628,39629,39630,39631,39632,39633,39634,39635,39636,39637,39638,39639,39640,39641,39642,39643,39644,39645,39646,39647,39648,39649,39650,39651,39652,39653,39654,39655,39656,39657,39658,39659,39660,39661,39662,39663,39664,39665,39666,39667,39668,39669,39670,39671,39672,39673,39674,39675,39676,39677,39678,39679,39680,39681,39682,39683,39684,39685,39686,39687,39688,39689,39690,39691,39692,39693,39694,39695,39696,39697,39698,39699,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39711,39712,39713,39714,39715,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39727,39728,39729,39730,39731,39732,39733,39734,39735,39736,39737,39738,39739,39740,39741,39742,39743,39744,39745,39746,39747,39748,39749,39750,39751,39752,39753,39754,39755,39756,39757,39758,39759,39760,39761,39762,39763,39764,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824'/>
+  </group>
+  <group name='303'>
+    <ids val='39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40060,40061,40062,40063,40064,40065,40066,40067,40068,40069,40070,40071,40072,40073,40074,40075,40076,40077,40078,40079,40080,40081,40082,40083,40084,40085,40086,40087,40088,40089,40090,40091,40092,40093,40094,40095,40096,40097,40098,40099,40100,40101,40102,40103,40104,40105,40106,40107,40108,40109,40110,40111,40112,40113,40114,40115,40116,40117,40118,40119,40120,40121,40122,40123,40124,40125,40126,40127,40128'/>
+  </group>
+  <group name='303'>
+    <ids val='40129,40130,40131,40132,40133,40134,40135,40136,40137,40138,40139,40140,40141,40142,40143,40144,40145,40146,40147,40148,40149,40150,40151,40152,40153,40154,40155,40156,40157,40158,40159,40160,40161,40162,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432'/>
+  </group>
+  <group name='303'>
+    <ids val='40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40479,40480,40481,40482,40483,40484,40485,40486,40487,40488,40489,40490,40491,40492,40493,40494,40495,40496,40497,40498,40499,40500,40501,40502,40503,40504,40505,40506,40507,40508,40509,40510,40511,40512,40513,40514,40515,40516,40517,40518,40519,40520,40521,40522,40523,40524,40525,40526,40527,40528,40529,40530,40531,40532,40533,40534,40535,40536,40537,40538,40539,40540,40541,40542,40543,40544,40545,40546,40547,40548,40549,40550,40551,40552,40553,40554,40555,40556,40557,40558,40559,40560,40561,40562,40563,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40574,40575,40576,40577,40578,40579,40580,40581,40582,40583,40584,40585,40586,40587,40588,40589,40590,40591,40592,40593,40594,40595,40596,40597,40598,40599,40600,40601,40602,40603,40604,40605,40606,40607,40608,40609,40610,40611,40612,40613,40614,40615,40616,40617,40618,40619,40620,40621,40622,40623,40624,40625,40626,40627,40628,40629,40630,40631,40632,40633,40634,40635,40636,40637,40638,40639,40640,40641,40642,40643,40644,40645,40646,40647,40648,40649,40650,40651,40652,40653,40654,40655,40656,40657,40658,40659,40660,40661,40662,40663,40664,40665,40666,40667,40668,40669,40670,40671,40672,40673,40674,40675,40676,40677,40678,40679,40680,40681,40682,40683,40684,40685,40686,40687,40688,40689,40690,40691,40692,40693,40694,40695,40696,40697,40698,40699,40700,40701,40702,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40715,40716,40717,40718,40719,40720,40721,40722,40723,40724,40725,40726,40727,40728,40729,40730,40731,40732,40733,40734,40735,40736'/>
+  </group>
+  <group name='303'>
+    <ids val='40737,40738,40739,40740,40741,40742,40743,40744,40745,40746,40747,40748,40749,40750,40751,40752,40753,40754,40755,40756,40757,40758,40759,40760,40761,40762,40763,40764,40765,40766,40767,40768,40769,40770,40771,40772,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40784,40785,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40831,40832,40833,40834,40835,40836,40837,40838,40839,40840,40841,40842,40843,40844,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40857,40858,40859,40860,40861,40862,40863,40864,40865,40866,40867,40868,40869,40870,40871,40872,40873,40874,40875,40876,40877,40878,40879,40880,40881,40882,40883,40884,40885,40886,40887,40888,40889,40890,40891,40892,40893,40894,40895,40896,40897,40898,40899,40900,40901,40902,40903,40904,40905,40906,40907,40908,40909,40910,40911,40912,40913,40914,40915,40916,40917,40918,40919,40920,40921,40922,40923,40924,40925,40926,40927,40928,40929,40930,40931,40932,40933,40934,40935,40936,40937,40938,40939,40940,40941,40942,40943,40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959,40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975,40976,40977,40978,40979,40980,40981,40982,40983,40984,40985,40986,40987,40988,40989,40990,40991,40992,40993,40994,40995,40996,40997,40998,40999,41000,41001,41002,41003,41004,41005,41006,41007,41008,41009,41010,41011,41012,41013,41014,41015,41016,41017,41018,41019,41020,41021,41022,41023,41024,41025,41026,41027,41028,41029,41030,41031,41032,41033,41034,41035,41036,41037,41038,41039,41040'/>
+  </group>
+  <group name='303'>
+    <ids val='41041,41042,41043,41044,41045,41046,41047,41048,41049,41050,41051,41052,41053,41054,41055,41056,41057,41058,41059,41060,41061,41062,41063,41064,41065,41066,41067,41068,41069,41070,41071,41072,41073,41074,41075,41076,41077,41078,41079,41080,41081,41082,41083,41084,41085,41086,41087,41088,41089,41090,41091,41092,41093,41094,41095,41096,41097,41098,41099,41100,41101,41102,41103,41104,41105,41106,41107,41108,41109,41110,41111,41112,41113,41114,41115,41116,41117,41118,41119,41120,41121,41122,41123,41124,41125,41126,41127,41128,41129,41130,41131,41132,41133,41134,41135,41136,41137,41138,41139,41140,41141,41142,41143,41144,41145,41146,41147,41148,41149,41150,41151,41152,41153,41154,41155,41156,41157,41158,41159,41160,41161,41162,41163,41164,41165,41166,41167,41168,41169,41170,41171,41172,41173,41174,41175,41176,41177,41178,41179,41180,41181,41182,41183,41184,41185,41186,41187,41188,41189,41190,41191,41192,41193,41194,41195,41196,41197,41198,41199,41200,41201,41202,41203,41204,41205,41206,41207,41208,41209,41210,41211,41212,41213,41214,41215,41216,41217,41218,41219,41220,41221,41222,41223,41224,41225,41226,41227,41228,41229,41230,41231,41232,41233,41234,41235,41236,41237,41238,41239,41240,41241,41242,41243,41244,41245,41246,41247,41248,41249,41250,41251,41252,41253,41254,41255,41256,41257,41258,41259,41260,41261,41262,41263,41264,41265,41266,41267,41268,41269,41270,41271,41272,41273,41274,41275,41276,41277,41278,41279,41280,41281,41282,41283,41284,41285,41286,41287,41288,41289,41290,41291,41292,41293,41294,41295,41296,41297,41298,41299,41300,41301,41302,41303,41304,41305,41306,41307,41308,41309,41310,41311,41312,41313,41314,41315,41316,41317,41318,41319,41320,41321,41322,41323,41324,41325,41326,41327,41328,41329,41330,41331,41332,41333,41334,41335,41336,41337,41338,41339,41340,41341,41342,41343,41344'/>
+  </group>
+  <group name='303'>
+    <ids val='41345,41346,41347,41348,41349,41350,41351,41352,41353,41354,41355,41356,41357,41358,41359,41360,41361,41362,41363,41364,41365,41366,41367,41368,41369,41370,41371,41372,41373,41374,41375,41376,41377,41378,41379,41380,41381,41382,41383,41384,41385,41386,41387,41388,41389,41390,41391,41392,41393,41394,41395,41396,41397,41398,41399,41400,41401,41402,41403,41404,41405,41406,41407,41408,41409,41410,41411,41412,41413,41414,41415,41416,41417,41418,41419,41420,41421,41422,41423,41424,41425,41426,41427,41428,41429,41430,41431,41432,41433,41434,41435,41436,41437,41438,41439,41440,41441,41442,41443,41444,41445,41446,41447,41448,41449,41450,41451,41452,41453,41454,41455,41456,41457,41458,41459,41460,41461,41462,41463,41464,41465,41466,41467,41468,41469,41470,41471,41472,41473,41474,41475,41476,41477,41478,41479,41480,41481,41482,41483,41484,41485,41486,41487,41488,41489,41490,41491,41492,41493,41494,41495,41496,41497,41498,41499,41500,41501,41502,41503,41504,41505,41506,41507,41508,41509,41510,41511,41512,41513,41514,41515,41516,41517,41518,41519,41520,41521,41522,41523,41524,41525,41526,41527,41528,41529,41530,41531,41532,41533,41534,41535,41536,41537,41538,41539,41540,41541,41542,41543,41544,41545,41546,41547,41548,41549,41550,41551,41552,41553,41554,41555,41556,41557,41558,41559,41560,41561,41562,41563,41564,41565,41566,41567,41568,41569,41570,41571,41572,41573,41574,41575,41576,41577,41578,41579,41580,41581,41582,41583,41584,41585,41586,41587,41588,41589,41590,41591,41592,41593,41594,41595,41596,41597,41598,41599,41600,41601,41602,41603,41604,41605,41606,41607,41608,41609,41610,41611,41612,41613,41614,41615,41616,41617,41618,41619,41620,41621,41622,41623,41624,41625,41626,41627,41628,41629,41630,41631,41632,41633,41634,41635,41636,41637,41638,41639,41640,41641,41642,41643,41644,41645,41646,41647,41648'/>
+  </group>
+  <group name='303'>
+    <ids val='41649,41650,41651,41652,41653,41654,41655,41656,41657,41658,41659,41660,41661,41662,41663,41664,41665,41666,41667,41668,41669,41670,41671,41672,41673,41674,41675,41676,41677,41678,41679,41680,41681,41682,41683,41684,41685,41686,41687,41688,41689,41690,41691,41692,41693,41694,41695,41696,41697,41698,41699,41700,41701,41702,41703,41704,41705,41706,41707,41708,41709,41710,41711,41712,41713,41714,41715,41716,41717,41718,41719,41720,41721,41722,41723,41724,41725,41726,41727,41728,41729,41730,41731,41732,41733,41734,41735,41736,41737,41738,41739,41740,41741,41742,41743,41744,41745,41746,41747,41748,41749,41750,41751,41752,41753,41754,41755,41756,41757,41758,41759,41760,41761,41762,41763,41764,41765,41766,41767,41768,41769,41770,41771,41772,41773,41774,41775,41776,41777,41778,41779,41780,41781,41782,41783,41784,41785,41786,41787,41788,41789,41790,41791,41792,41793,41794,41795,41796,41797,41798,41799,41800,41801,41802,41803,41804,41805,41806,41807,41808,41809,41810,41811,41812,41813,41814,41815,41816,41817,41818,41819,41820,41821,41822,41823,41824,41825,41826,41827,41828,41829,41830,41831,41832,41833,41834,41835,41836,41837,41838,41839,41840,41841,41842,41843,41844,41845,41846,41847,41848,41849,41850,41851,41852,41853,41854,41855,41856,41857,41858,41859,41860,41861,41862,41863,41864,41865,41866,41867,41868,41869,41870,41871,41872,41873,41874,41875,41876,41877,41878,41879,41880,41881,41882,41883,41884,41885,41886,41887,41888,41889,41890,41891,41892,41893,41894,41895,41896,41897,41898,41899,41900,41901,41902,41903,41904,41905,41906,41907,41908,41909,41910,41911,41912,41913,41914,41915,41916,41917,41918,41919,41920,41921,41922,41923,41924,41925,41926,41927,41928,41929,41930,41931,41932,41933,41934,41935,41936,41937,41938,41939,41940,41941,41942,41943,41944,41945,41946,41947,41948,41949,41950,41951,41952'/>
+  </group>
+  <group name='303'>
+    <ids val='41953,41954,41955,41956,41957,41958,41959,41960,41961,41962,41963,41964,41965,41966,41967,41968,41969,41970,41971,41972,41973,41974,41975,41976,41977,41978,41979,41980,41981,41982,41983,41984,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,41997,41998,41999,42000,42001,42002,42003,42004,42005,42006,42007,42008,42009,42010,42011,42012,42013,42014,42015,42016,42017,42018,42019,42020,42021,42022,42023,42024,42025,42026,42027,42028,42029,42030,42031,42032,42033,42034,42035,42036,42037,42038,42039,42040,42041,42042,42043,42044,42045,42046,42047,42048,42049,42050,42051,42052,42053,42054,42055,42056,42057,42058,42059,42060,42061,42062,42063,42064,42065,42066,42067,42068,42069,42070,42071,42072,42073,42074,42075,42076,42077,42078,42079,42080,42081,42082,42083,42084,42085,42086,42087,42088,42089,42090,42091,42092,42093,42094,42095,42096,42097,42098,42099,42100,42101,42102,42103,42104,42105,42106,42107,42108,42109,42110,42111,42112,42113,42114,42115,42116,42117,42118,42119,42120,42121,42122,42123,42124,42125,42126,42127,42128,42129,42130,42131,42132,42133,42134,42135,42136,42137,42138,42139,42140,42141,42142,42143,42144,42145,42146,42147,42148,42149,42150,42151,42152,42153,42154,42155,42156,42157,42158,42159,42160,42161,42162,42163,42164,42165,42166,42167,42168,42169,42170,42171,42172,42173,42174,42175,42176,42177,42178,42179,42180,42181,42182,42183,42184,42185,42186,42187,42188,42189,42190,42191,42192,42193,42194,42195,42196,42197,42198,42199,42200,42201,42202,42203,42204,42205,42206,42207,42208,42209,42210,42211,42212,42213,42214,42215,42216,42217,42218,42219,42220,42221,42222,42223,42224,42225,42226,42227,42228,42229,42230,42231,42232,42233,42234,42235,42236,42237,42238,42239,42240,42241,42242,42243,42244,42245,42246,42247,42248,42249,42250,42251,42252,42253,42254,42255,42256'/>
+  </group>
+  <group name='303'>
+    <ids val='42257,42258,42259,42260,42261,42262,42263,42264,42265,42266,42267,42268,42269,42270,42271,42272,42273,42274,42275,42276,42277,42278,42279,42280,42281,42282,42283,42284,42285,42286,42287,42288,42289,42290,42291,42292,42293,42294,42295,42296,42297,42298,42299,42300,42301,42302,42303,42304,42305,42306,42307,42308,42309,42310,42311,42312,42313,42314,42315,42316,42317,42318,42319,42320,42321,42322,42323,42324,42325,42326,42327,42328,42329,42330,42331,42332,42333,42334,42335,42336,42337,42338,42339,42340,42341,42342,42343,42344,42345,42346,42347,42348,42349,42350,42351,42352,42353,42354,42355,42356,42357,42358,42359,42360,42361,42362,42363,42364,42365,42366,42367,42368,42369,42370,42371,42372,42373,42374,42375,42376,42377,42378,42379,42380,42381,42382,42383,42384,42385,42386,42387,42388,42389,42390,42391,42392,42393,42394,42395,42396,42397,42398,42399,42400,42401,42402,42403,42404,42405,42406,42407,42408,42409,42410,42411,42412,42413,42414,42415,42416,42417,42418,42419,42420,42421,42422,42423,42424,42425,42426,42427,42428,42429,42430,42431,42432,42433,42434,42435,42436,42437,42438,42439,42440,42441,42442,42443,42444,42445,42446,42447,42448,42449,42450,42451,42452,42453,42454,42455,42456,42457,42458,42459,42460,42461,42462,42463,42464,42465,42466,42467,42468,42469,42470,42471,42472,42473,42474,42475,42476,42477,42478,42479,42480,42481,42482,42483,42484,42485,42486,42487,42488,42489,42490,42491,42492,42493,42494,42495,42496,42497,42498,42499,42500,42501,42502,42503,42504,42505,42506,42507,42508,42509,42510,42511,42512,42513,42514,42515,42516,42517,42518,42519,42520,42521,42522,42523,42524,42525,42526,42527,42528,42529,42530,42531,42532,42533,42534,42535,42536,42537,42538,42539,42540,42541,42542,42543,42544,42545,42546,42547,42548,42549,42550,42551,42552,42553,42554,42555,42556,42557,42558,42559,42560'/>
+  </group>
+  <group name='303'>
+    <ids val='42561,42562,42563,42564,42565,42566,42567,42568,42569,42570,42571,42572,42573,42574,42575,42576,42577,42578,42579,42580,42581,42582,42583,42584,42585,42586,42587,42588,42589,42590,42591,42592,42593,42594,42595,42596,42597,42598,42599,42600,42601,42602,42603,42604,42605,42606,42607,42608,42609,42610,42611,42612,42613,42614,42615,42616,42617,42618,42619,42620,42621,42622,42623,42624,42625,42626,42627,42628,42629,42630,42631,42632,42633,42634,42635,42636,42637,42638,42639,42640,42641,42642,42643,42644,42645,42646,42647,42648,42649,42650,42651,42652,42653,42654,42655,42656,42657,42658,42659,42660,42661,42662,42663,42664,42665,42666,42667,42668,42669,42670,42671,42672,42673,42674,42675,42676,42677,42678,42679,42680,42681,42682,42683,42684,42685,42686,42687,42688,42689,42690,42691,42692,42693,42694,42695,42696,42697,42698,42699,42700,42701,42702,42703,42704,42705,42706,42707,42708,42709,42710,42711,42712,42713,42714,42715,42716,42717,42718,42719,42720,42721,42722,42723,42724,42725,42726,42727,42728,42729,42730,42731,42732,42733,42734,42735,42736,42737,42738,42739,42740,42741,42742,42743,42744,42745,42746,42747,42748,42749,42750,42751,42752,42753,42754,42755,42756,42757,42758,42759,42760,42761,42762,42763,42764,42765,42766,42767,42768,42769,42770,42771,42772,42773,42774,42775,42776,42777,42778,42779,42780,42781,42782,42783,42784,42785,42786,42787,42788,42789,42790,42791,42792,42793,42794,42795,42796,42797,42798,42799,42800,42801,42802,42803,42804,42805,42806,42807,42808,42809,42810,42811,42812,42813,42814,42815,42816,42817,42818,42819,42820,42821,42822,42823,42824,42825,42826,42827,42828,42829,42830,42831,42832,42833,42834,42835,42836,42837,42838,42839,42840,42841,42842,42843,42844,42845,42846,42847,42848,42849,42850,42851,42852,42853,42854,42855,42856,42857,42858,42859,42860,42861,42862,42863,42864'/>
+  </group>
+  <group name='303'>
+    <ids val='42865,42866,42867,42868,42869,42870,42871,42872,42873,42874,42875,42876,42877,42878,42879,42880,42881,42882,42883,42884,42885,42886,42887,42888,42889,42890,42891,42892,42893,42894,42895,42896,42897,42898,42899,42900,42901,42902,42903,42904,42905,42906,42907,42908,42909,42910,42911,42912,42913,42914,42915,42916,42917,42918,42919,42920,42921,42922,42923,42924,42925,42926,42927,42928,42929,42930,42931,42932,42933,42934,42935,42936,42937,42938,42939,42940,42941,42942,42943,42944,42945,42946,42947,42948,42949,42950,42951,42952,42953,42954,42955,42956,42957,42958,42959,42960,42961,42962,42963,42964,42965,42966,42967,42968,42969,42970,42971,42972,42973,42974,42975,42976,42977,42978,42979,42980,42981,42982,42983,42984,42985,42986,42987,42988,42989,42990,42991,42992,42993,42994,42995,42996,42997,42998,42999,43000,43001,43002,43003,43004,43005,43006,43007,43008,43009,43010,43011,43012,43013,43014,43015,43016,43017,43018,43019,43020,43021,43022,43023,43024,43025,43026,43027,43028,43029,43030,43031,43032,43033,43034,43035,43036,43037,43038,43039,43040,43041,43042,43043,43044,43045,43046,43047,43048,43049,43050,43051,43052,43053,43054,43055,43056,43057,43058,43059,43060,43061,43062,43063,43064,43065,43066,43067,43068,43069,43070,43071,43072,43073,43074,43075,43076,43077,43078,43079,43080,43081,43082,43083,43084,43085,43086,43087,43088,43089,43090,43091,43092,43093,43094,43095,43096,43097,43098,43099,43100,43101,43102,43103,43104,43105,43106,43107,43108,43109,43110,43111,43112,43113,43114,43115,43116,43117,43118,43119,43120,43121,43122,43123,43124,43125,43126,43127,43128,43129,43130,43131,43132,43133,43134,43135,43136,43137,43138,43139,43140,43141,43142,43143,43144,43145,43146,43147,43148,43149,43150,43151,43152,43153,43154,43155,43156,43157,43158,43159,43160,43161,43162,43163,43164,43165,43166,43167,43168'/>
+  </group>
+  <group name='303'>
+    <ids val='43169,43170,43171,43172,43173,43174,43175,43176,43177,43178,43179,43180,43181,43182,43183,43184,43185,43186,43187,43188,43189,43190,43191,43192,43193,43194,43195,43196,43197,43198,43199,43200,43201,43202,43203,43204,43205,43206,43207,43208,43209,43210,43211,43212,43213,43214,43215,43216,43217,43218,43219,43220,43221,43222,43223,43224,43225,43226,43227,43228,43229,43230,43231,43232,43233,43234,43235,43236,43237,43238,43239,43240,43241,43242,43243,43244,43245,43246,43247,43248,43249,43250,43251,43252,43253,43254,43255,43256,43257,43258,43259,43260,43261,43262,43263,43264,43265,43266,43267,43268,43269,43270,43271,43272,43273,43274,43275,43276,43277,43278,43279,43280,43281,43282,43283,43284,43285,43286,43287,43288,43289,43290,43291,43292,43293,43294,43295,43296,43297,43298,43299,43300,43301,43302,43303,43304,43305,43306,43307,43308,43309,43310,43311,43312,43313,43314,43315,43316,43317,43318,43319,43320,43321,43322,43323,43324,43325,43326,43327,43328,43329,43330,43331,43332,43333,43334,43335,43336,43337,43338,43339,43340,43341,43342,43343,43344,43345,43346,43347,43348,43349,43350,43351,43352,43353,43354,43355,43356,43357,43358,43359,43360,43361,43362,43363,43364,43365,43366,43367,43368,43369,43370,43371,43372,43373,43374,43375,43376,43377,43378,43379,43380,43381,43382,43383,43384,43385,43386,43387,43388,43389,43390,43391,43392,43393,43394,43395,43396,43397,43398,43399,43400,43401,43402,43403,43404,43405,43406,43407,43408,43409,43410,43411,43412,43413,43414,43415,43416,43417,43418,43419,43420,43421,43422,43423,43424,43425,43426,43427,43428,43429,43430,43431,43432,43433,43434,43435,43436,43437,43438,43439,43440,43441,43442,43443,43444,43445,43446,43447,43448,43449,43450,43451,43452,43453,43454,43455,43456,43457,43458,43459,43460,43461,43462,43463,43464,43465,43466,43467,43468,43469,43470,43471,43472'/>
+  </group>
+  <group name='303'>
+    <ids val='43473,43474,43475,43476,43477,43478,43479,43480,43481,43482,43483,43484,43485,43486,43487,43488,43489,43490,43491,43492,43493,43494,43495,43496,43497,43498,43499,43500,43501,43502,43503,43504,43505,43506,43507,43508,43509,43510,43511,43512,43513,43514,43515,43516,43517,43518,43519,43520,43521,43522,43523,43524,43525,43526,43527,43528,43529,43530,43531,43532,43533,43534,43535,43536,43537,43538,43539,43540,43541,43542,43543,43544,43545,43546,43547,43548,43549,43550,43551,43552,43553,43554,43555,43556,43557,43558,43559,43560,43561,43562,43563,43564,43565,43566,43567,43568,43569,43570,43571,43572,43573,43574,43575,43576,43577,43578,43579,43580,43581,43582,43583,43584,43585,43586,43587,43588,43589,43590,43591,43592,43593,43594,43595,43596,43597,43598,43599,43600,43601,43602,43603,43604,43605,43606,43607,43608,43609,43610,43611,43612,43613,43614,43615,43616,43617,43618,43619,43620,43621,43622,43623,43624,43625,43626,43627,43628,43629,43630,43631,43632,43633,43634,43635,43636,43637,43638,43639,43640,43641,43642,43643,43644,43645,43646,43647,43648,43649,43650,43651,43652,43653,43654,43655,43656,43657,43658,43659,43660,43661,43662,43663,43664,43665,43666,43667,43668,43669,43670,43671,43672,43673,43674,43675,43676,43677,43678,43679,43680,43681,43682,43683,43684,43685,43686,43687,43688,43689,43690,43691,43692,43693,43694,43695,43696,43697,43698,43699,43700,43701,43702,43703,43704,43705,43706,43707,43708,43709,43710,43711,43712,43713,43714,43715,43716,43717,43718,43719,43720,43721,43722,43723,43724,43725,43726,43727,43728,43729,43730,43731,43732,43733,43734,43735,43736,43737,43738,43739,43740,43741,43742,43743,43744,43745,43746,43747,43748,43749,43750,43751,43752,43753,43754,43755,43756,43757,43758,43759,43760,43761,43762,43763,43764,43765,43766,43767,43768,43769,43770,43771,43772,43773,43774,43775,43776'/>
+  </group>
+  <group name='303'>
+    <ids val='43777,43778,43779,43780,43781,43782,43783,43784,43785,43786,43787,43788,43789,43790,43791,43792,43793,43794,43795,43796,43797,43798,43799,43800,43801,43802,43803,43804,43805,43806,43807,43808,43809,43810,43811,43812,43813,43814,43815,43816,43817,43818,43819,43820,43821,43822,43823,43824,43825,43826,43827,43828,43829,43830,43831,43832,43833,43834,43835,43836,43837,43838,43839,43840,43841,43842,43843,43844,43845,43846,43847,43848,43849,43850,43851,43852,43853,43854,43855,43856,43857,43858,43859,43860,43861,43862,43863,43864,43865,43866,43867,43868,43869,43870,43871,43872,43873,43874,43875,43876,43877,43878,43879,43880,43881,43882,43883,43884,43885,43886,43887,43888,43889,43890,43891,43892,43893,43894,43895,43896,43897,43898,43899,43900,43901,43902,43903,43904,43905,43906,43907,43908,43909,43910,43911,43912,43913,43914,43915,43916,43917,43918,43919,43920,43921,43922,43923,43924,43925,43926,43927,43928,43929,43930,43931,43932,43933,43934,43935,43936,43937,43938,43939,43940,43941,43942,43943,43944,43945,43946,43947,43948,43949,43950,43951,43952,43953,43954,43955,43956,43957,43958,43959,43960,43961,43962,43963,43964,43965,43966,43967,43968,43969,43970,43971,43972,43973,43974,43975,43976,43977,43978,43979,43980,43981,43982,43983,43984,43985,43986,43987,43988,43989,43990,43991,43992,43993,43994,43995,43996,43997,43998,43999,44000,44001,44002,44003,44004,44005,44006,44007,44008,44009,44010,44011,44012,44013,44014,44015,44016,44017,44018,44019,44020,44021,44022,44023,44024,44025,44026,44027,44028,44029,44030,44031,44032,44033,44034,44035,44036,44037,44038,44039,44040,44041,44042,44043,44044,44045,44046,44047,44048,44049,44050,44051,44052,44053,44054,44055,44056,44057,44058,44059,44060,44061,44062,44063,44064,44065,44066,44067,44068,44069,44070,44071,44072,44073,44074,44075,44076,44077,44078,44079,44080'/>
+  </group>
+  <group name='303'>
+    <ids val='44081,44082,44083,44084,44085,44086,44087,44088,44089,44090,44091,44092,44093,44094,44095,44096,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44107,44108,44109,44110,44111,44112,44113,44114,44115,44116,44117,44118,44119,44120,44121,44122,44123,44124,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44144,44145,44146,44147,44148,44149,44150,44151,44152,44153,44154,44155,44156,44157,44158,44159,44160,44161,44162,44163,44164,44165,44166,44167,44168,44169,44170,44171,44172,44173,44174,44175,44176,44177,44178,44179,44180,44181,44182,44183,44184,44185,44186,44187,44188,44189,44190,44191,44192,44193,44194,44195,44196,44197,44198,44199,44200,44201,44202,44203,44204,44205,44206,44207,44208,44209,44210,44211,44212,44213,44214,44215,44216,44217,44218,44219,44220,44221,44222,44223,44224,44225,44226,44227,44228,44229,44230,44231,44232,44233,44234,44235,44236,44237,44238,44239,44240,44241,44242,44243,44244,44245,44246,44247,44248,44249,44250,44251,44252,44253,44254,44255,44256,44257,44258,44259,44260,44261,44262,44263,44264,44265,44266,44267,44268,44269,44270,44271,44272,44273,44274,44275,44276,44277,44278,44279,44280,44281,44282,44283,44284,44285,44286,44287,44288,44289,44290,44291,44292,44293,44294,44295,44296,44297,44298,44299,44300,44301,44302,44303,44304,44305,44306,44307,44308,44309,44310,44311,44312,44313,44314,44315,44316,44317,44318,44319,44320,44321,44322,44323,44324,44325,44326,44327,44328,44329,44330,44331,44332,44333,44334,44335,44336,44337,44338,44339,44340,44341,44342,44343,44344,44345,44346,44347,44348,44349,44350,44351,44352,44353,44354,44355,44356,44357,44358,44359,44360,44361,44362,44363,44364,44365,44366,44367,44368,44369,44370,44371,44372,44373,44374,44375,44376,44377,44378,44379,44380,44381,44382,44383,44384'/>
+  </group>
+  <group name='303'>
+    <ids val='44385,44386,44387,44388,44389,44390,44391,44392,44393,44394,44395,44396,44397,44398,44399,44400,44401,44402,44403,44404,44405,44406,44407,44408,44409,44410,44411,44412,44413,44414,44415,44416,44417,44418,44419,44420,44421,44422,44423,44424,44425,44426,44427,44428,44429,44430,44431,44432,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44444,44445,44446,44447,44448,44449,44450,44451,44452,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44471,44472,44473,44474,44475,44476,44477,44478,44479,44480,44481,44482,44483,44484,44485,44486,44487,44488,44489,44490,44491,44492,44493,44494,44495,44496,44497,44498,44499,44500,44501,44502,44503,44504,44505,44506,44507,44508,44509,44510,44511,44512,44513,44514,44515,44516,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44536,44537,44538,44539,44540,44541,44542,44543,44544,44545,44546,44547,44548,44549,44550,44551,44552,44553,44554,44555,44556,44557,44558,44559,44560,44561,44562,44563,44564,44565,44566,44567,44568,44569,44570,44571,44572,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44592,44593,44594,44595,44596,44597,44598,44599,44600,44601,44602,44603,44604,44605,44606,44607,44608,44609,44610,44611,44612,44613,44614,44615,44616,44617,44618,44619,44620,44621,44622,44623,44624,44625,44626,44627,44628,44629,44630,44631,44632,44633,44634,44635,44636,44637,44638,44639,44640,44641,44642,44643,44644,44645,44646,44647,44648,44649,44650,44651,44652,44653,44654,44655,44656,44657,44658,44659,44660,44661,44662,44663,44664,44665,44666,44667,44668,44669,44670,44671,44672,44673,44674,44675,44676,44677,44678,44679,44680,44681,44682,44683,44684,44685,44686,44687,44688'/>
+  </group>
+  <group name='303'>
+    <ids val='44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44732,44733,44734,44735,44736,44737,44738,44739,44740,44741,44742,44743,44744,44745,44746,44747,44748,44749,44750,44751,44752,44753,44754,44755,44756,44757,44758,44759,44760,44761,44762,44763,44764,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44776,44777,44778,44779,44780,44781,44782,44783,44784,44785,44786,44787,44788,44789,44790,44791,44792,44793,44794,44795,44796,44797,44798,44799,44800,44801,44802,44803,44804,44805,44806,44807,44808,44809,44810,44811,44812,44813,44814,44815,44816,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,44836,44837,44838,44839,44840,44841,44842,44843,44844,44845,44846,44847,44848,44849,44850,44851,44852,44853,44854,44855,44856,44857,44858,44859,44860,44861,44862,44863,44864,44865,44866,44867,44868,44869,44870,44871,44872,44873,44874,44875,44876,44877,44878,44879,44880,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44892,44893,44894,44895,44896,44897,44898,44899,44900,44901,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44921,44922,44923,44924,44925,44926,44927,44928,44929,44930,44931,44932,44933,44934,44935,44936,44937,44938,44939,44940,44941,44942,44943,44944,44945,44946,44947,44948,44949,44950,44951,44952,44953,44954,44955,44956,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44984,44985,44986,44987,44988,44989,44990,44991,44992'/>
+  </group>
+  <group name='303'>
+    <ids val='44993,44994,44995,44996,44997,44998,44999,45000,45001,45002,45003,45004,45005,45006,45007,45008,45009,45010,45011,45012,45013,45014,45015,45016,45017,45018,45019,45020,45021,45022,45023,45024,45025,45026,45027,45028,45029,45030,45031,45032,45033,45034,45035,45036,45037,45038,45039,45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055,45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071,45072,45073,45074,45075,45076,45077,45078,45079,45080,45081,45082,45083,45084,45085,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45096,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45124,45125,45126,45127,45128,45129,45130,45131,45132,45133,45134,45135,45136,45137,45138,45139,45140,45141,45142,45143,45144,45145,45146,45147,45148,45149,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45180,45181,45182,45183,45184,45185,45186,45187,45188,45189,45190,45191,45192,45193,45194,45195,45196,45197,45198,45199,45200,45201,45202,45203,45204,45205,45206,45207,45208,45209,45210,45211,45212,45213,45214,45215,45216,45217,45218,45219,45220,45221,45222,45223,45224,45225,45226,45227,45228,45229,45230,45231,45232,45233,45234,45235,45236,45237,45238,45239,45240,45241,45242,45243,45244,45245,45246,45247,45248,45249,45250,45251,45252,45253,45254,45255,45256,45257,45258,45259,45260,45261,45262,45263,45264,45265,45266,45267,45268,45269,45270,45271,45272,45273,45274,45275,45276,45277,45278,45279,45280,45281,45282,45283,45284,45285,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296'/>
+  </group>
+  <group name='303'>
+    <ids val='45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45320,45321,45322,45323,45324,45325,45326,45327,45328,45329,45330,45331,45332,45333,45334,45335,45336,45337,45338,45339,45340,45341,45342,45343,45344,45345,45346,45347,45348,45349,45350,45351,45352,45353,45354,45355,45356,45357,45358,45359,45360,45361,45362,45363,45364,45365,45366,45367,45368,45369,45370,45371,45372,45373,45374,45375,45376,45377,45378,45379,45380,45381,45382,45383,45384,45385,45386,45387,45388,45389,45390,45391,45392,45393,45394,45395,45396,45397,45398,45399,45400,45401,45402,45403,45404,45405,45406,45407,45408,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45432,45433,45434,45435,45436,45437,45438,45439,45440,45441,45442,45443,45444,45445,45446,45447,45448,45449,45450,45451,45452,45453,45454,45455,45456,45457,45458,45459,45460,45461,45462,45463,45464,45465,45466,45467,45468,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45480,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45516,45517,45518,45519,45520,45521,45522,45523,45524,45525,45526,45527,45528,45529,45530,45531,45532,45533,45534,45535,45536,45537,45538,45539,45540,45541,45542,45543,45544,45545,45546,45547,45548,45549,45550,45551,45552,45553,45554,45555,45556,45557,45558,45559,45560,45561,45562,45563,45564,45565,45566,45567,45568,45569,45570,45571,45572,45573,45574,45575,45576,45577,45578,45579,45580,45581,45582,45583,45584,45585,45586,45587,45588,45589,45590,45591,45592,45593,45594,45595,45596,45597,45598,45599,45600'/>
+  </group>
+  <group name='303'>
+    <ids val='45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45620,45621,45622,45623,45624,45625,45626,45627,45628,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45656,45657,45658,45659,45660,45661,45662,45663,45664,45665,45666,45667,45668,45669,45670,45671,45672,45673,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45684,45685,45686,45687,45688,45689,45690,45691,45692,45693,45694,45695,45696,45697,45698,45699,45700,45701,45702,45703,45704,45705,45706,45707,45708,45709,45710,45711,45712,45713,45714,45715,45716,45717,45718,45719,45720,45721,45722,45723,45724,45725,45726,45727,45728,45729,45730,45731,45732,45733,45734,45735,45736,45737,45738,45739,45740,45741,45742,45743,45744,45745,45746,45747,45748,45749,45750,45751,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45768,45769,45770,45771,45772,45773,45774,45775,45776,45777,45778,45779,45780,45781,45782,45783,45784,45785,45786,45787,45788,45789,45790,45791,45792,45793,45794,45795,45796,45797,45798,45799,45800,45801,45802,45803,45804,45805,45806,45807,45808,45809,45810,45811,45812,45813,45814,45815,45816,45817,45818,45819,45820,45821,45822,45823,45824,45825,45826,45827,45828,45829,45830,45831,45832,45833,45834,45835,45836,45837,45838,45839,45840,45841,45842,45843,45844,45845,45846,45847,45848,45849,45850,45851,45852,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904'/>
+  </group>
+  <group name='303'>
+    <ids val='45905,45906,45907,45908,45909,45910,45911,45912,45913,45914,45915,45916,45917,45918,45919,45920,45921,45922,45923,45924,45925,45926,45927,45928,45929,45930,45931,45932,45933,45934,45935,45936,45937,45938,45939,45940,45941,45942,45943,45944,45945,45946,45947,45948,45949,45950,45951,45952,45953,45954,45955,45956,45957,45958,45959,45960,45961,45962,45963,45964,45965,45966,45967,45968,45969,45970,45971,45972,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45984,45985,45986,45987,45988,45989,45990,45991,45992,45993,45994,45995,45996,45997,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46020,46021,46022,46023,46024,46025,46026,46027,46028,46029,46030,46031,46032,46033,46034,46035,46036,46037,46038,46039,46040,46041,46042,46043,46044,46045,46046,46047,46048,46049,46050,46051,46052,46053,46054,46055,46056,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46076,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46096,46097,46098,46099,46100,46101,46102,46103,46104,46105,46106,46107,46108,46109,46110,46111,46112,46113,46114,46115,46116,46117,46118,46119,46120,46121,46122,46123,46124,46125,46126,46127,46128,46129,46130,46131,46132,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46160,46161,46162,46163,46164,46165,46166,46167,46168,46169,46170,46171,46172,46173,46174,46175,46176,46177,46178,46179,46180,46181,46182,46183,46184,46185,46186,46187,46188,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46208'/>
+  </group>
+  <group name='303'>
+    <ids val='46209,46210,46211,46212,46213,46214,46215,46216,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46237,46238,46239,46240,46241,46242,46243,46244,46245,46246,46247,46248,46249,46250,46251,46252,46253,46254,46255,46256,46257,46258,46259,46260,46261,46262,46263,46264,46265,46266,46267,46268,46269,46270,46271,46272,46273,46274,46275,46276,46277,46278,46279,46280,46281,46282,46283,46284,46285,46286,46287,46288,46289,46290,46291,46292,46293,46294,46295,46296,46297,46298,46299,46300,46301,46302,46303,46304,46305,46306,46307,46308,46309,46310,46311,46312,46313,46314,46315,46316,46317,46318,46319,46320,46321,46322,46323,46324,46325,46326,46327,46328,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46356,46357,46358,46359,46360,46361,46362,46363,46364,46365,46366,46367,46368,46369,46370,46371,46372,46373,46374,46375,46376,46377,46378,46379,46380,46381,46382,46383,46384,46385,46386,46387,46388,46389,46390,46391,46392,46393,46394,46395,46396,46397,46398,46399,46400,46401,46402,46403,46404,46405,46406,46407,46408,46409,46410,46411,46412,46413,46414,46415,46416,46417,46418,46419,46420,46421,46422,46423,46424,46425,46426,46427,46428,46429,46430,46431,46432,46433,46434,46435,46436,46437,46438,46439,46440,46441,46442,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46496,46497,46498,46499,46500,46501,46502,46503,46504,46505,46506,46507,46508,46509,46510,46511,46512'/>
+  </group>
+  <group name='303'>
+    <ids val='46513,46514,46515,46516,46517,46518,46519,46520,46521,46522,46523,46524,46525,46526,46527,46528,46529,46530,46531,46532,46533,46534,46535,46536,46537,46538,46539,46540,46541,46542,46543,46544,46545,46546,46547,46548,46549,46550,46551,46552,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46572,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46608,46609,46610,46611,46612,46613,46614,46615,46616,46617,46618,46619,46620,46621,46622,46623,46624,46625,46626,46627,46628,46629,46630,46631,46632,46633,46634,46635,46636,46637,46638,46639,46640,46641,46642,46643,46644,46645,46646,46647,46648,46649,46650,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46664,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46692,46693,46694,46695,46696,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46748,46749,46750,46751,46752,46753,46754,46755,46756,46757,46758,46759,46760,46761,46762,46763,46764,46765,46766,46767,46768,46769,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46804,46805,46806,46807,46808,46809,46810,46811,46812,46813,46814,46815,46816'/>
+  </group>
+  <group name='303'>
+    <ids val='46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46832,46833,46834,46835,46836,46837,46838,46839,46840,46841,46842,46843,46844,46845,46846,46847,46848,46849,46850,46851,46852,46853,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46888,46889,46890,46891,46892,46893,46894,46895,46896,46897,46898,46899,46900,46901,46902,46903,46904,46905,46906,46907,46908,46909,46910,46911,46912,46913,46914,46915,46916,46917,46918,46919,46920,46921,46922,46923,46924,46925,46926,46927,46928,46929,46930,46931,46932,46933,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46944,46945,46946,46947,46948,46949,46950,46951,46952,46953,46954,46955,46956,46957,46958,46959,46960,46961,46962,46963,46964,46965,46966,46967,46968,46969,46970,46971,46972,46973,46974,46975,46976,46977,46978,46979,46980,46981,46982,46983,46984,46985,46986,46987,46988,46989,46990,46991,46992,46993,46994,46995,46996,46997,46998,46999,47000,47001,47002,47003,47004,47005,47006,47007,47008,47009,47010,47011,47012,47013,47014,47015,47016,47017,47018,47019,47020,47021,47022,47023,47024,47025,47026,47027,47028,47029,47030,47031,47032,47033,47034,47035,47036,47037,47038,47039,47040,47041,47042,47043,47044,47045,47046,47047,47048,47049,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47084,47085,47086,47087,47088,47089,47090,47091,47092,47093,47094,47095,47096,47097,47098,47099,47100,47101,47102,47103,47104,47105,47106,47107,47108,47109,47110,47111,47112,47113,47114,47115,47116,47117,47118,47119,47120'/>
+  </group>
+  <group name='303'>
+    <ids val='47121,47122,47123,47124,47125,47126,47127,47128,47129,47130,47131,47132,47133,47134,47135,47136,47137,47138,47139,47140,47141,47142,47143,47144,47145,47146,47147,47148,47149,47150,47151,47152,47153,47154,47155,47156,47157,47158,47159,47160,47161,47162,47163,47164,47165,47166,47167,47168,47169,47170,47171,47172,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47185,47186,47187,47188,47189,47190,47191,47192,47193,47194,47195,47196,47197,47198,47199,47200,47201,47202,47203,47204,47205,47206,47207,47208,47209,47210,47211,47212,47213,47214,47215,47216,47217,47218,47219,47220,47221,47222,47223,47224,47225,47226,47227,47228,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47245,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,47264,47265,47266,47267,47268,47269,47270,47271,47272,47273,47274,47275,47276,47277,47278,47279,47280,47281,47282,47283,47284,47285,47286,47287,47288,47289,47290,47291,47292,47293,47294,47295,47296,47297,47298,47299,47300,47301,47302,47303,47304,47305,47306,47307,47308,47309,47310,47311,47312,47313,47314,47315,47316,47317,47318,47319,47320,47321,47322,47323,47324,47325,47326,47327,47328,47329,47330,47331,47332,47333,47334,47335,47336,47337,47338,47339,47340,47341,47342,47343,47344,47345,47346,47347,47348,47349,47350,47351,47352,47353,47354,47355,47356,47357,47358,47359,47360,47361,47362,47363,47364,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47384,47385,47386,47387,47388,47389,47390,47391,47392,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47420,47421,47422,47423,47424'/>
+  </group>
+  <group name='303'>
+    <ids val='47425,47426,47427,47428,47429,47430,47431,47432,47433,47434,47435,47436,47437,47438,47439,47440,47441,47442,47443,47444,47445,47446,47447,47448,47449,47450,47451,47452,47453,47454,47455,47456,47457,47458,47459,47460,47461,47462,47463,47464,47465,47466,47467,47468,47469,47470,47471,47472,47473,47474,47475,47476,47477,47478,47479,47480,47481,47482,47483,47484,47485,47486,47487,47488,47489,47490,47491,47492,47493,47494,47495,47496,47497,47498,47499,47500,47501,47502,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47532,47533,47534,47535,47536,47537,47538,47539,47540,47541,47542,47543,47544,47545,47546,47547,47548,47549,47550,47551,47552,47553,47554,47555,47556,47557,47558,47559,47560,47561,47562,47563,47564,47565,47566,47567,47568,47569,47570,47571,47572,47573,47574,47575,47576,47577,47578,47579,47580,47581,47582,47583,47584,47585,47586,47587,47588,47589,47590,47591,47592,47593,47594,47595,47596,47597,47598,47599,47600,47601,47602,47603,47604,47605,47606,47607,47608,47609,47610,47611,47612,47613,47614,47615,47616,47617,47618,47619,47620,47621,47622,47623,47624,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47637,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47672,47673,47674,47675,47676,47677,47678,47679,47680,47681,47682,47683,47684,47685,47686,47687,47688,47689,47690,47691,47692,47693,47694,47695,47696,47697,47698,47699,47700,47701,47702,47703,47704,47705,47706,47707,47708,47709,47710,47711,47712,47713,47714,47715,47716,47717,47718,47719,47720,47721,47722,47723,47724,47725,47726,47727,47728'/>
+  </group>
+  <group name='303'>
+    <ids val='47729,47730,47731,47732,47733,47734,47735,47736,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47747,47748,47749,47750,47751,47752,47753,47754,47755,47756,47757,47758,47759,47760,47761,47762,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47784,47785,47786,47787,47788,47789,47790,47791,47792,47793,47794,47795,47796,47797,47798,47799,47800,47801,47802,47803,47804,47805,47806,47807,47808,47809,47810,47811,47812,47813,47814,47815,47816,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47832,47833,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47868,47869,47870,47871,47872,47873,47874,47875,47876,47877,47878,47879,47880,47881,47882,47883,47884,47885,47886,47887,47888,47889,47890,47891,47892,47893,47894,47895,47896,47897,47898,47899,47900,47901,47902,47903,47904,47905,47906,47907,47908,47909,47910,47911,47912,47913,47914,47915,47916,47917,47918,47919,47920,47921,47922,47923,47924,47925,47926,47927,47928,47929,47930,47931,47932,47933,47934,47935,47936,47937,47938,47939,47940,47941,47942,47943,47944,47945,47946,47947,47948,47949,47950,47951,47952,47953,47954,47955,47956,47957,47958,47959,47960,47961,47962,47963,47964,47965,47966,47967,47968,47969,47970,47971,47972,47973,47974,47975,47976,47977,47978,47979,47980,47981,47982,47983,47984,47985,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48008,48009,48010,48011,48012,48013,48014,48015,48016,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032'/>
+  </group>
+  <group name='303'>
+    <ids val='48033,48034,48035,48036,48037,48038,48039,48040,48041,48042,48043,48044,48045,48046,48047,48048,48049,48050,48051,48052,48053,48054,48055,48056,48057,48058,48059,48060,48061,48062,48063,48064,48065,48066,48067,48068,48069,48070,48071,48072,48073,48074,48075,48076,48077,48078,48079,48080,48081,48082,48083,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48120,48121,48122,48123,48124,48125,48126,48127,48128,48129,48130,48131,48132,48133,48134,48135,48136,48137,48138,48139,48140,48141,48142,48143,48144,48145,48146,48147,48148,48149,48150,48151,48152,48153,48154,48155,48156,48157,48158,48159,48160,48161,48162,48163,48164,48165,48166,48167,48168,48169,48170,48171,48172,48173,48174,48175,48176,48177,48178,48179,48180,48181,48182,48183,48184,48185,48186,48187,48188,48189,48190,48191,48192,48193,48194,48195,48196,48197,48198,48199,48200,48201,48202,48203,48204,48205,48206,48207,48208,48209,48210,48211,48212,48213,48214,48215,48216,48217,48218,48219,48220,48221,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48260,48261,48262,48263,48264,48265,48266,48267,48268,48269,48270,48271,48272,48273,48274,48275,48276,48277,48278,48279,48280,48281,48282,48283,48284,48285,48286,48287,48288,48289,48290,48291,48292,48293,48294,48295,48296,48297,48298,48299,48300,48301,48302,48303,48304,48305,48306,48307,48308,48309,48310,48311,48312,48313,48314,48315,48316,48317,48318,48319,48320,48321,48322,48323,48324,48325,48326,48327,48328,48329,48330,48331,48332,48333,48334,48335,48336'/>
+  </group>
+  <group name='303'>
+    <ids val='48337,48338,48339,48340,48341,48342,48343,48344,48345,48346,48347,48348,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48372,48373,48374,48375,48376,48377,48378,48379,48380,48381,48382,48383,48384,48385,48386,48387,48388,48389,48390,48391,48392,48393,48394,48395,48396,48397,48398,48399,48400,48401,48402,48403,48404,48405,48406,48407,48408,48409,48410,48411,48412,48413,48414,48415,48416,48417,48418,48419,48420,48421,48422,48423,48424,48425,48426,48427,48428,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,48442,48443,48444,48445,48446,48447,48448,48449,48450,48451,48452,48453,48454,48455,48456,48457,48458,48459,48460,48461,48462,48463,48464,48465,48466,48467,48468,48469,48470,48471,48472,48473,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48484,48485,48486,48487,48488,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48512,48513,48514,48515,48516,48517,48518,48519,48520,48521,48522,48523,48524,48525,48526,48527,48528,48529,48530,48531,48532,48533,48534,48535,48536,48537,48538,48539,48540,48541,48542,48543,48544,48545,48546,48547,48548,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48560,48561,48562,48563,48564,48565,48566,48567,48568,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48596,48597,48598,48599,48600,48601,48602,48603,48604,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48617,48618,48619,48620,48621,48622,48623,48624,48625,48626,48627,48628,48629,48630,48631,48632,48633,48634,48635,48636,48637,48638,48639,48640'/>
+  </group>
+  <group name='303'>
+    <ids val='48641,48642,48643,48644,48645,48646,48647,48648,48649,48650,48651,48652,48653,48654,48655,48656,48657,48658,48659,48660,48661,48662,48663,48664,48665,48666,48667,48668,48669,48670,48671,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48708,48709,48710,48711,48712,48713,48714,48715,48716,48717,48718,48719,48720,48721,48722,48723,48724,48725,48726,48727,48728,48729,48730,48731,48732,48733,48734,48735,48736,48737,48738,48739,48740,48741,48742,48743,48744,48745,48746,48747,48748,48749,48750,48751,48752,48753,48754,48755,48756,48757,48758,48759,48760,48761,48762,48763,48764,48765,48766,48767,48768,48769,48770,48771,48772,48773,48774,48775,48776,48777,48778,48779,48780,48781,48782,48783,48784,48785,48786,48787,48788,48789,48790,48791,48792,48793,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48808,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48848,48849,48850,48851,48852,48853,48854,48855,48856,48857,48858,48859,48860,48861,48862,48863,48864,48865,48866,48867,48868,48869,48870,48871,48872,48873,48874,48875,48876,48877,48878,48879,48880,48881,48882,48883,48884,48885,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48897,48898,48899,48900,48901,48902,48903,48904,48905,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48920,48921,48922,48923,48924,48925,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944'/>
+  </group>
+  <group name='303'>
+    <ids val='48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48960,48961,48962,48963,48964,48965,48966,48967,48968,48969,48970,48971,48972,48973,48974,48975,48976,48977,48978,48979,48980,48981,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49044,49045,49046,49047,49048,49049,49050,49051,49052,49053,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49072,49073,49074,49075,49076,49077,49078,49079,49080,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49093,49094,49095,49096,49097,49098,49099,49100,49101,49102,49103,49104,49105,49106,49107,49108,49109,49110,49111,49112,49113,49114,49115,49116,49117,49118,49119,49120,49121,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49212,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49233,49234,49235,49236,49237,49238,49239,49240,49241,49242,49243,49244,49245,49246,49247,49248'/>
+  </group>
+  <group name='303'>
+    <ids val='49249,49250,49251,49252,49253,49254,49255,49256,49257,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49296,49297,49298,49299,49300,49301,49302,49303,49304,49305,49306,49307,49308,49309,49310,49311,49312,49313,49314,49315,49316,49317,49318,49319,49320,49321,49322,49323,49324,49325,49326,49327,49328,49329,49330,49331,49332,49333,49334,49335,49336,49337,49338,49339,49340,49341,49342,49343,49344,49345,49346,49347,49348,49349,49350,49351,49352,49353,49354,49355,49356,49357,49358,49359,49360,49361,49362,49363,49364,49365,49366,49367,49368,49369,49370,49371,49372,49373,49374,49375,49376,49377,49378,49379,49380,49381,49382,49383,49384,49385,49386,49387,49388,49389,49390,49391,49392,49393,49394,49395,49396,49397,49398,49399,49400,49401,49402,49403,49404,49405,49406,49407,49408,49409,49410,49411,49412,49413,49414,49415,49416,49417,49418,49419,49420,49421,49422,49423,49424,49425,49426,49427,49428,49429,49430,49431,49432,49433,49434,49435,49436,49437,49438,49439,49440,49441,49442,49443,49444,49445,49446,49447,49448,49449,49450,49451,49452,49453,49454,49455,49456,49457,49458,49459,49460,49461,49462,49463,49464,49465,49466,49467,49468,49469,49470,49471,49472,49473,49474,49475,49476,49477,49478,49479,49480,49481,49482,49483,49484,49485,49486,49487,49488,49489,49490,49491,49492,49493,49494,49495,49496,49497,49498,49499,49500,49501,49502,49503,49504,49505,49506,49507,49508,49509,49510,49511,49512,49513,49514,49515,49516,49517,49518,49519,49520,49521,49522,49523,49524,49525,49526,49527,49528,49529,49530,49531,49532,49533,49534,49535,49536,49537,49538,49539,49540,49541,49542,49543,49544,49545,49546,49547,49548,49549,49550,49551,49552'/>
+  </group>
+  <group name='303'>
+    <ids val='49553,49554,49555,49556,49557,49558,49559,49560,49561,49562,49563,49564,49565,49566,49567,49568,49569,49570,49571,49572,49573,49574,49575,49576,49577,49578,49579,49580,49581,49582,49583,49584,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49597,49598,49599,49600,49601,49602,49603,49604,49605,49606,49607,49608,49609,49610,49611,49612,49613,49614,49615,49616,49617,49618,49619,49620,49621,49622,49623,49624,49625,49626,49627,49628,49629,49630,49631,49632,49633,49634,49635,49636,49637,49638,49639,49640,49641,49642,49643,49644,49645,49646,49647,49648,49649,49650,49651,49652,49653,49654,49655,49656,49657,49658,49659,49660,49661,49662,49663,49664,49665,49666,49667,49668,49669,49670,49671,49672,49673,49674,49675,49676,49677,49678,49679,49680,49681,49682,49683,49684,49685,49686,49687,49688,49689,49690,49691,49692,49693,49694,49695,49696,49697,49698,49699,49700,49701,49702,49703,49704,49705,49706,49707,49708,49709,49710,49711,49712,49713,49714,49715,49716,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,49734,49735,49736,49737,49738,49739,49740,49741,49742,49743,49744,49745,49746,49747,49748,49749,49750,49751,49752,49753,49754,49755,49756,49757,49758,49759,49760,49761,49762,49763,49764,49765,49766,49767,49768,49769,49770,49771,49772,49773,49774,49775,49776,49777,49778,49779,49780,49781,49782,49783,49784,49785,49786,49787,49788,49789,49790,49791,49792,49793,49794,49795,49796,49797,49798,49799,49800,49801,49802,49803,49804,49805,49806,49807,49808,49809,49810,49811,49812,49813,49814,49815,49816,49817,49818,49819,49820,49821,49822,49823,49824,49825,49826,49827,49828,49829,49830,49831,49832,49833,49834,49835,49836,49837,49838,49839,49840,49841,49842,49843,49844,49845,49846,49847,49848,49849,49850,49851,49852,49853,49854,49855,49856'/>
+  </group>
+  <group name='303'>
+    <ids val='49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49884,49885,49886,49887,49888,49889,49890,49891,49892,49893,49894,49895,49896,49897,49898,49899,49900,49901,49902,49903,49904,49905,49906,49907,49908,49909,49910,49911,49912,49913,49914,49915,49916,49917,49918,49919,49920,49921,49922,49923,49924,49925,49926,49927,49928,49929,49930,49931,49932,49933,49934,49935,49936,49937,49938,49939,49940,49941,49942,49943,49944,49945,49946,49947,49948,49949,49950,49951,49952,49953,49954,49955,49956,49957,49958,49959,49960,49961,49962,49963,49964,49965,49966,49967,49968,49969,49970,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49989,49990,49991,49992,49993,49994,49995,49996,49997,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50024,50025,50026,50027,50028,50029,50030,50031,50032,50033,50034,50035,50036,50037,50038,50039,50040,50041,50042,50043,50044,50045,50046,50047,50048,50049,50050,50051,50052,50053,50054,50055,50056,50057,50058,50059,50060,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50112,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50136,50137,50138,50139,50140,50141,50142,50143,50144,50145,50146,50147,50148,50149,50150,50151,50152,50153,50154,50155,50156,50157,50158,50159,50160'/>
+  </group>
+  <group name='303'>
+    <ids val='50161,50162,50163,50164,50165,50166,50167,50168,50169,50170,50171,50172,50173,50174,50175,50176,50177,50178,50179,50180,50181,50182,50183,50184,50185,50186,50187,50188,50189,50190,50191,50192,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,50203,50204,50205,50206,50207,50208,50209,50210,50211,50212,50213,50214,50215,50216,50217,50218,50219,50220,50221,50222,50223,50224,50225,50226,50227,50228,50229,50230,50231,50232,50233,50234,50235,50236,50237,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50248,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50276,50277,50278,50279,50280,50281,50282,50283,50284,50285,50286,50287,50288,50289,50290,50291,50292,50293,50294,50295,50296,50297,50298,50299,50300,50301,50302,50303,50304,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50324,50325,50326,50327,50328,50329,50330,50331,50332,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50360,50361,50362,50363,50364,50365,50366,50367,50368,50369,50370,50371,50372,50373,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,50400,50401,50402,50403,50404,50405,50406,50407,50408,50409,50410,50411,50412,50413,50414,50415,50416,50417,50418,50419,50420,50421,50422,50423,50424,50425,50426,50427,50428,50429,50430,50431,50432,50433,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50444,50445,50446,50447,50448,50449,50450,50451,50452,50453,50454,50455,50456,50457,50458,50459,50460,50461,50462,50463,50464'/>
+  </group>
+  <group name='303'>
+    <ids val='50465,50466,50467,50468,50469,50470,50471,50472,50473,50474,50475,50476,50477,50478,50479,50480,50481,50482,50483,50484,50485,50486,50487,50488,50489,50490,50491,50492,50493,50494,50495,50496,50497,50498,50499,50500,50501,50502,50503,50504,50505,50506,50507,50508,50509,50510,50511,50512,50513,50514,50515,50516,50517,50518,50519,50520,50521,50522,50523,50524,50525,50526,50527,50528,50529,50530,50531,50532,50533,50534,50535,50536,50537,50538,50539,50540,50541,50542,50543,50544,50545,50546,50547,50548,50549,50550,50551,50552,50553,50554,50555,50556,50557,50558,50559,50560,50561,50562,50563,50564,50565,50566,50567,50568,50569,50570,50571,50572,50573,50574,50575,50576,50577,50578,50579,50580,50581,50582,50583,50584,50585,50586,50587,50588,50589,50590,50591,50592,50593,50594,50595,50596,50597,50598,50599,50600,50601,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50612,50613,50614,50615,50616,50617,50618,50619,50620,50621,50622,50623,50624,50625,50626,50627,50628,50629,50630,50631,50632,50633,50634,50635,50636,50637,50638,50639,50640,50641,50642,50643,50644,50645,50646,50647,50648,50649,50650,50651,50652,50653,50654,50655,50656,50657,50658,50659,50660,50661,50662,50663,50664,50665,50666,50667,50668,50669,50670,50671,50672,50673,50674,50675,50676,50677,50678,50679,50680,50681,50682,50683,50684,50685,50686,50687,50688,50689,50690,50691,50692,50693,50694,50695,50696,50697,50698,50699,50700,50701,50702,50703,50704,50705,50706,50707,50708,50709,50710,50711,50712,50713,50714,50715,50716,50717,50718,50719,50720,50721,50722,50723,50724,50725,50726,50727,50728,50729,50730,50731,50732,50733,50734,50735,50736,50737,50738,50739,50740,50741,50742,50743,50744,50745,50746,50747,50748,50749,50750,50751,50752,50753,50754,50755,50756,50757,50758,50759,50760,50761,50762,50763,50764,50765,50766,50767,50768'/>
+  </group>
+  <group name='303'>
+    <ids val='50769,50770,50771,50772,50773,50774,50775,50776,50777,50778,50779,50780,50781,50782,50783,50784,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50796,50797,50798,50799,50800,50801,50802,50803,50804,50805,50806,50807,50808,50809,50810,50811,50812,50813,50814,50815,50816,50817,50818,50819,50820,50821,50822,50823,50824,50825,50826,50827,50828,50829,50830,50831,50832,50833,50834,50835,50836,50837,50838,50839,50840,50841,50842,50843,50844,50845,50846,50847,50848,50849,50850,50851,50852,50853,50854,50855,50856,50857,50858,50859,50860,50861,50862,50863,50864,50865,50866,50867,50868,50869,50870,50871,50872,50873,50874,50875,50876,50877,50878,50879,50880,50881,50882,50883,50884,50885,50886,50887,50888,50889,50890,50891,50892,50893,50894,50895,50896,50897,50898,50899,50900,50901,50902,50903,50904,50905,50906,50907,50908,50909,50910,50911,50912,50913,50914,50915,50916,50917,50918,50919,50920,50921,50922,50923,50924,50925,50926,50927,50928,50929,50930,50931,50932,50933,50934,50935,50936,50937,50938,50939,50940,50941,50942,50943,50944,50945,50946,50947,50948,50949,50950,50951,50952,50953,50954,50955,50956,50957,50958,50959,50960,50961,50962,50963,50964,50965,50966,50967,50968,50969,50970,50971,50972,50973,50974,50975,50976,50977,50978,50979,50980,50981,50982,50983,50984,50985,50986,50987,50988,50989,50990,50991,50992,50993,50994,50995,50996,50997,50998,50999,51000,51001,51002,51003,51004,51005,51006,51007,51008,51009,51010,51011,51012,51013,51014,51015,51016,51017,51018,51019,51020,51021,51022,51023,51024,51025,51026,51027,51028,51029,51030,51031,51032,51033,51034,51035,51036,51037,51038,51039,51040,51041,51042,51043,51044,51045,51046,51047,51048,51049,51050,51051,51052,51053,51054,51055,51056,51057,51058,51059,51060,51061,51062,51063,51064,51065,51066,51067,51068,51069,51070,51071,51072'/>
+  </group>
+  <group name='303'>
+    <ids val='51073,51074,51075,51076,51077,51078,51079,51080,51081,51082,51083,51084,51085,51086,51087,51088,51089,51090,51091,51092,51093,51094,51095,51096,51097,51098,51099,51100,51101,51102,51103,51104,51105,51106,51107,51108,51109,51110,51111,51112,51113,51114,51115,51116,51117,51118,51119,51120,51121,51122,51123,51124,51125,51126,51127,51128,51129,51130,51131,51132,51133,51134,51135,51136,51137,51138,51139,51140,51141,51142,51143,51144,51145,51146,51147,51148,51149,51150,51151,51152,51153,51154,51155,51156,51157,51158,51159,51160,51161,51162,51163,51164,51165,51166,51167,51168,51169,51170,51171,51172,51173,51174,51175,51176,51177,51178,51179,51180,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,51195,51196,51197,51198,51199,51200,51201,51202,51203,51204,51205,51206,51207,51208,51209,51210,51211,51212,51213,51214,51215,51216,51217,51218,51219,51220,51221,51222,51223,51224,51225,51226,51227,51228,51229,51230,51231,51232,51233,51234,51235,51236,51237,51238,51239,51240,51241,51242,51243,51244,51245,51246,51247,51248,51249,51250,51251,51252,51253,51254,51255,51256,51257,51258,51259,51260,51261,51262,51263,51264,51265,51266,51267,51268,51269,51270,51271,51272,51273,51274,51275,51276,51277,51278,51279,51280,51281,51282,51283,51284,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51312,51313,51314,51315,51316,51317,51318,51319,51320,51321,51322,51323,51324,51325,51326,51327,51328,51329,51330,51331,51332,51333,51334,51335,51336,51337,51338,51339,51340,51341,51342,51343,51344,51345,51346,51347,51348,51349,51350,51351,51352,51353,51354,51355,51356,51357,51358,51359,51360,51361,51362,51363,51364,51365,51366,51367,51368,51369,51370,51371,51372,51373,51374,51375,51376'/>
+  </group>
+  <group name='303'>
+    <ids val='51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51388,51389,51390,51391,51392,51393,51394,51395,51396,51397,51398,51399,51400,51401,51402,51403,51404,51405,51406,51407,51408,51409,51410,51411,51412,51413,51414,51415,51416,51417,51418,51419,51420,51421,51422,51423,51424,51425,51426,51427,51428,51429,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51445,51446,51447,51448,51449,51450,51451,51452,51453,51454,51455,51456,51457,51458,51459,51460,51461,51462,51463,51464,51465,51466,51467,51468,51469,51470,51471,51472,51473,51474,51475,51476,51477,51478,51479,51480,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,51500,51501,51502,51503,51504,51505,51506,51507,51508,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,51528,51529,51530,51531,51532,51533,51534,51535,51536,51537,51538,51539,51540,51541,51542,51543,51544,51545,51546,51547,51548,51549,51550,51551,51552,51553,51554,51555,51556,51557,51558,51559,51560,51561,51562,51563,51564,51565,51566,51567,51568,51569,51570,51571,51572,51573,51574,51575,51576,51577,51578,51579,51580,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51592,51593,51594,51595,51596,51597,51598,51599,51600,51601,51602,51603,51604,51605,51606,51607,51608,51609,51610,51611,51612,51613,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51648,51649,51650,51651,51652,51653,51654,51655,51656,51657,51658,51659,51660,51661,51662,51663,51664,51665,51666,51667,51668,51669,51670,51671,51672,51673,51674,51675,51676,51677,51678,51679,51680'/>
+  </group>
+  <group name='303'>
+    <ids val='51681,51682,51683,51684,51685,51686,51687,51688,51689,51690,51691,51692,51693,51694,51695,51696,51697,51698,51699,51700,51701,51702,51703,51704,51705,51706,51707,51708,51709,51710,51711,51712,51713,51714,51715,51716,51717,51718,51719,51720,51721,51722,51723,51724,51725,51726,51727,51728,51729,51730,51731,51732,51733,51734,51735,51736,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,51750,51751,51752,51753,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,51783,51784,51785,51786,51787,51788,51789,51790,51791,51792,51793,51794,51795,51796,51797,51798,51799,51800,51801,51802,51803,51804,51805,51806,51807,51808,51809,51810,51811,51812,51813,51814,51815,51816,51817,51818,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51837,51838,51839,51840,51841,51842,51843,51844,51845,51846,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51864,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51900,51901,51902,51903,51904,51905,51906,51907,51908,51909,51910,51911,51912,51913,51914,51915,51916,51917,51918,51919,51920,51921,51922,51923,51924,51925,51926,51927,51928,51929,51930,51931,51932,51933,51934,51935,51936,51937,51938,51939,51940,51941,51942,51943,51944,51945,51946,51947,51948,51949,51950,51951,51952,51953,51954,51955,51956,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51976,51977,51978,51979,51980,51981,51982,51983,51984'/>
+  </group>
+  <group name='303'>
+    <ids val='51985,51986,51987,51988,51989,51990,51991,51992,51993,51994,51995,51996,51997,51998,51999,52000,52001,52002,52003,52004,52005,52006,52007,52008,52009,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52033,52034,52035,52036,52037,52038,52039,52040,52041,52042,52043,52044,52045,52046,52047,52048,52049,52050,52051,52052,52053,52054,52055,52056,52057,52058,52059,52060,52061,52062,52063,52064,52065,52066,52067,52068,52069,52070,52071,52072,52073,52074,52075,52076,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52088,52089,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52124,52125,52126,52127,52128,52129,52130,52131,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52152,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52180,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,52192,52193,52194,52195,52196,52197,52198,52199,52200,52201,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52236,52237,52238,52239,52240,52241,52242,52243,52244,52245,52246,52247,52248,52249,52250,52251,52252,52253,52254,52255,52256,52257,52258,52259,52260,52261,52262,52263,52264,52265,52266,52267,52268,52269,52270,52271,52272,52273,52274,52275,52276,52277,52278,52279,52280,52281,52282,52283,52284,52285,52286,52287,52288'/>
+  </group>
+  <group name='303'>
+    <ids val='52289,52290,52291,52292,52293,52294,52295,52296,52297,52298,52299,52300,52301,52302,52303,52304,52305,52306,52307,52308,52309,52310,52311,52312,52313,52314,52315,52316,52317,52318,52319,52320,52321,52322,52323,52324,52325,52326,52327,52328,52329,52330,52331,52332,52333,52334,52335,52336,52337,52338,52339,52340,52341,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,52372,52373,52374,52375,52376,52377,52378,52379,52380,52381,52382,52383,52384,52385,52386,52387,52388,52389,52390,52391,52392,52393,52394,52395,52396,52397,52398,52399,52400,52401,52402,52403,52404,52405,52406,52407,52408,52409,52410,52411,52412,52413,52414,52415,52416,52417,52418,52419,52420,52421,52422,52423,52424,52425,52426,52427,52428,52429,52430,52431,52432,52433,52434,52435,52436,52437,52438,52439,52440,52441,52442,52443,52444,52445,52446,52447,52448,52449,52450,52451,52452,52453,52454,52455,52456,52457,52458,52459,52460,52461,52462,52463,52464,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,52478,52479,52480,52481,52482,52483,52484,52485,52486,52487,52488,52489,52490,52491,52492,52493,52494,52495,52496,52497,52498,52499,52500,52501,52502,52503,52504,52505,52506,52507,52508,52509,52510,52511,52512,52513,52514,52515,52516,52517,52518,52519,52520,52521,52522,52523,52524,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52537,52538,52539,52540,52541,52542,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52572,52573,52574,52575,52576,52577,52578,52579,52580,52581,52582,52583,52584,52585,52586,52587,52588,52589,52590,52591,52592'/>
+  </group>
+  <group name='303'>
+    <ids val='52593,52594,52595,52596,52597,52598,52599,52600,52601,52602,52603,52604,52605,52606,52607,52608,52609,52610,52611,52612,52613,52614,52615,52616,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52628,52629,52630,52631,52632,52633,52634,52635,52636,52637,52638,52639,52640,52641,52642,52643,52644,52645,52646,52647,52648,52649,52650,52651,52652,52653,52654,52655,52656,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52676,52677,52678,52679,52680,52681,52682,52683,52684,52685,52686,52687,52688,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,52706,52707,52708,52709,52710,52711,52712,52713,52714,52715,52716,52717,52718,52719,52720,52721,52722,52723,52724,52725,52726,52727,52728,52729,52730,52731,52732,52733,52734,52735,52736,52737,52738,52739,52740,52741,52742,52743,52744,52745,52746,52747,52748,52749,52750,52751,52752,52753,52754,52755,52756,52757,52758,52759,52760,52761,52762,52763,52764,52765,52766,52767,52768,52769,52770,52771,52772,52773,52774,52775,52776,52777,52778,52779,52780,52781,52782,52783,52784,52785,52786,52787,52788,52789,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52824,52825,52826,52827,52828,52829,52830,52831,52832,52833,52834,52835,52836,52837,52838,52839,52840,52841,52842,52843,52844,52845,52846,52847,52848,52849,52850,52851,52852,52853,52854,52855,52856,52857,52858,52859,52860,52861,52862,52863,52864,52865,52866,52867,52868,52869,52870,52871,52872,52873,52874,52875,52876,52877,52878,52879,52880,52881,52882,52883,52884,52885,52886,52887,52888,52889,52890,52891,52892,52893,52894,52895,52896'/>
+  </group>
+  <group name='303'>
+    <ids val='52897,52898,52899,52900,52901,52902,52903,52904,52905,52906,52907,52908,52909,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,52923,52924,52925,52926,52927,52928,52929,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52964,52965,52966,52967,52968,52969,52970,52971,52972,52973,52974,52975,52976,52977,52978,52979,52980,52981,52982,52983,52984,52985,52986,52987,52988,52989,52990,52991,52992,52993,52994,52995,52996,52997,52998,52999,53000,53001,53002,53003,53004,53005,53006,53007,53008,53009,53010,53011,53012,53013,53014,53015,53016,53017,53018,53019,53020,53021,53022,53023,53024,53025,53026,53027,53028,53029,53030,53031,53032,53033,53034,53035,53036,53037,53038,53039,53040,53041,53042,53043,53044,53045,53046,53047,53048,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53076,53077,53078,53079,53080,53081,53082,53083,53084,53085,53086,53087,53088,53089,53090,53091,53092,53093,53094,53095,53096,53097,53098,53099,53100,53101,53102,53103,53104,53105,53106,53107,53108,53109,53110,53111,53112,53113,53114,53115,53116,53117,53118,53119,53120,53121,53122,53123,53124,53125,53126,53127,53128,53129,53130,53131,53132,53133,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53153,53154,53155,53156,53157,53158,53159,53160,53161,53162,53163,53164,53165,53166,53167,53168,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53188,53189,53190,53191,53192,53193,53194,53195,53196,53197,53198,53199,53200'/>
+  </group>
+  <group name='303'>
+    <ids val='53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53216,53217,53218,53219,53220,53221,53222,53223,53224,53225,53226,53227,53228,53229,53230,53231,53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247,53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263,53264,53265,53266,53267,53268,53269,53270,53271,53272,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,53293,53294,53295,53296,53297,53298,53299,53300,53301,53302,53303,53304,53305,53306,53307,53308,53309,53310,53311,53312,53313,53314,53315,53316,53317,53318,53319,53320,53321,53322,53323,53324,53325,53326,53327,53328,53329,53330,53331,53332,53333,53334,53335,53336,53337,53338,53339,53340,53341,53342,53343,53344,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53356,53357,53358,53359,53360,53361,53362,53363,53364,53365,53366,53367,53368,53369,53370,53371,53372,53373,53374,53375,53376,53377,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53412,53413,53414,53415,53416,53417,53418,53419,53420,53421,53422,53423,53424,53425,53426,53427,53428,53429,53430,53431,53432,53433,53434,53435,53436,53437,53438,53439,53440,53441,53442,53443,53444,53445,53446,53447,53448,53449,53450,53451,53452,53453,53454,53455,53456,53457,53458,53459,53460,53461,53462,53463,53464,53465,53466,53467,53468,53469,53470,53471,53472,53473,53474,53475,53476,53477,53478,53479,53480,53481,53482,53483,53484,53485,53486,53487,53488,53489,53490,53491,53492,53493,53494,53495,53496,53497,53498,53499,53500,53501,53502,53503,53504'/>
+  </group>
+  <group name='303'>
+    <ids val='53505,53506,53507,53508,53509,53510,53511,53512,53513,53514,53515,53516,53517,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53552,53553,53554,53555,53556,53557,53558,53559,53560,53561,53562,53563,53564,53565,53566,53567,53568,53569,53570,53571,53572,53573,53574,53575,53576,53577,53578,53579,53580,53581,53582,53583,53584,53585,53586,53587,53588,53589,53590,53591,53592,53593,53594,53595,53596,53597,53598,53599,53600,53601,53602,53603,53604,53605,53606,53607,53608,53609,53610,53611,53612,53613,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53628,53629,53630,53631,53632,53633,53634,53635,53636,53637,53638,53639,53640,53641,53642,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53664,53665,53666,53667,53668,53669,53670,53671,53672,53673,53674,53675,53676,53677,53678,53679,53680,53681,53682,53683,53684,53685,53686,53687,53688,53689,53690,53691,53692,53693,53694,53695,53696,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,53712,53713,53714,53715,53716,53717,53718,53719,53720,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,53739,53740,53741,53742,53743,53744,53745,53746,53747,53748,53749,53750,53751,53752,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,53767,53768,53769,53770,53771,53772,53773,53774,53775,53776,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,53802,53803,53804,53805,53806,53807,53808'/>
+  </group>
+  <group name='303'>
+    <ids val='53809,53810,53811,53812,53813,53814,53815,53816,53817,53818,53819,53820,53821,53822,53823,53824,53825,53826,53827,53828,53829,53830,53831,53832,53833,53834,53835,53836,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53852,53853,53854,53855,53856,53857,53858,53859,53860,53861,53862,53863,53864,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53888,53889,53890,53891,53892,53893,53894,53895,53896,53897,53898,53899,53900,53901,53902,53903,53904,53905,53906,53907,53908,53909,53910,53911,53912,53913,53914,53915,53916,53917,53918,53919,53920,53921,53922,53923,53924,53925,53926,53927,53928,53929,53930,53931,53932,53933,53934,53935,53936,53937,53938,53939,53940,53941,53942,53943,53944,53945,53946,53947,53948,53949,53950,53951,53952,53953,53954,53955,53956,53957,53958,53959,53960,53961,53962,53963,53964,53965,53966,53967,53968,53969,53970,53971,53972,53973,53974,53975,53976,53977,53978,53979,53980,53981,53982,53983,53984,53985,53986,53987,53988,53989,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54000,54001,54002,54003,54004,54005,54006,54007,54008,54009,54010,54011,54012,54013,54014,54015,54016,54017,54018,54019,54020,54021,54022,54023,54024,54025,54026,54027,54028,54029,54030,54031,54032,54033,54034,54035,54036,54037,54038,54039,54040,54041,54042,54043,54044,54045,54046,54047,54048,54049,54050,54051,54052,54053,54054,54055,54056,54057,54058,54059,54060,54061,54062,54063,54064,54065,54066,54067,54068,54069,54070,54071,54072,54073,54074,54075,54076,54077,54078,54079,54080,54081,54082,54083,54084,54085,54086,54087,54088,54089,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112'/>
+  </group>
+  <group name='303'>
+    <ids val='54113,54114,54115,54116,54117,54118,54119,54120,54121,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54140,54141,54142,54143,54144,54145,54146,54147,54148,54149,54150,54151,54152,54153,54154,54155,54156,54157,54158,54159,54160,54161,54162,54163,54164,54165,54166,54167,54168,54169,54170,54171,54172,54173,54174,54175,54176,54177,54178,54179,54180,54181,54182,54183,54184,54185,54186,54187,54188,54189,54190,54191,54192,54193,54194,54195,54196,54197,54198,54199,54200,54201,54202,54203,54204,54205,54206,54207,54208,54209,54210,54211,54212,54213,54214,54215,54216,54217,54218,54219,54220,54221,54222,54223,54224,54225,54226,54227,54228,54229,54230,54231,54232,54233,54234,54235,54236,54237,54238,54239,54240,54241,54242,54243,54244,54245,54246,54247,54248,54249,54250,54251,54252,54253,54254,54255,54256,54257,54258,54259,54260,54261,54262,54263,54264,54265,54266,54267,54268,54269,54270,54271,54272,54273,54274,54275,54276,54277,54278,54279,54280,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,54295,54296,54297,54298,54299,54300,54301,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,54328,54329,54330,54331,54332,54333,54334,54335,54336,54337,54338,54339,54340,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,54356,54357,54358,54359,54360,54361,54362,54363,54364,54365,54366,54367,54368,54369,54370,54371,54372,54373,54374,54375,54376,54377,54378,54379,54380,54381,54382,54383,54384,54385,54386,54387,54388,54389,54390,54391,54392,54393,54394,54395,54396,54397,54398,54399,54400,54401,54402,54403,54404,54405,54406,54407,54408,54409,54410,54411,54412,54413,54414,54415,54416'/>
+  </group>
+  <group name='303'>
+    <ids val='54417,54418,54419,54420,54421,54422,54423,54424,54425,54426,54427,54428,54429,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54441,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54476,54477,54478,54479,54480,54481,54482,54483,54484,54485,54486,54487,54488,54489,54490,54491,54492,54493,54494,54495,54496,54497,54498,54499,54500,54501,54502,54503,54504,54505,54506,54507,54508,54509,54510,54511,54512,54513,54514,54515,54516,54517,54518,54519,54520,54521,54522,54523,54524,54525,54526,54527,54528,54529,54530,54531,54532,54533,54534,54535,54536,54537,54538,54539,54540,54541,54542,54543,54544,54545,54546,54547,54548,54549,54550,54551,54552,54553,54554,54555,54556,54557,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,54584,54585,54586,54587,54588,54589,54590,54591,54592,54593,54594,54595,54596,54597,54598,54599,54600,54601,54602,54603,54604,54605,54606,54607,54608,54609,54610,54611,54612,54613,54614,54615,54616,54617,54618,54619,54620,54621,54622,54623,54624,54625,54626,54627,54628,54629,54630,54631,54632,54633,54634,54635,54636,54637,54638,54639,54640,54641,54642,54643,54644,54645,54646,54647,54648,54649,54650,54651,54652,54653,54654,54655,54656,54657,54658,54659,54660,54661,54662,54663,54664,54665,54666,54667,54668,54669,54670,54671,54672,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54693,54694,54695,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720'/>
+  </group>
+  <group name='303'>
+    <ids val='54721,54722,54723,54724,54725,54726,54727,54728,54729,54730,54731,54732,54733,54734,54735,54736,54737,54738,54739,54740,54741,54742,54743,54744,54745,54746,54747,54748,54749,54750,54751,54752,54753,54754,54755,54756,54757,54758,54759,54760,54761,54762,54763,54764,54765,54766,54767,54768,54769,54770,54771,54772,54773,54774,54775,54776,54777,54778,54779,54780,54781,54782,54783,54784,54785,54786,54787,54788,54789,54790,54791,54792,54793,54794,54795,54796,54797,54798,54799,54800,54801,54802,54803,54804,54805,54806,54807,54808,54809,54810,54811,54812,54813,54814,54815,54816,54817,54818,54819,54820,54821,54822,54823,54824,54825,54826,54827,54828,54829,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54840,54841,54842,54843,54844,54845,54846,54847,54848,54849,54850,54851,54852,54853,54854,54855,54856,54857,54858,54859,54860,54861,54862,54863,54864,54865,54866,54867,54868,54869,54870,54871,54872,54873,54874,54875,54876,54877,54878,54879,54880,54881,54882,54883,54884,54885,54886,54887,54888,54889,54890,54891,54892,54893,54894,54895,54896,54897,54898,54899,54900,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,54913,54914,54915,54916,54917,54918,54919,54920,54921,54922,54923,54924,54925,54926,54927,54928,54929,54930,54931,54932,54933,54934,54935,54936,54937,54938,54939,54940,54941,54942,54943,54944,54945,54946,54947,54948,54949,54950,54951,54952,54953,54954,54955,54956,54957,54958,54959,54960,54961,54962,54963,54964,54965,54966,54967,54968,54969,54970,54971,54972,54973,54974,54975,54976,54977,54978,54979,54980,54981,54982,54983,54984,54985,54986,54987,54988,54989,54990,54991,54992,54993,54994,54995,54996,54997,54998,54999,55000,55001,55002,55003,55004,55005,55006,55007,55008,55009,55010,55011,55012,55013,55014,55015,55016,55017,55018,55019,55020,55021,55022,55023,55024'/>
+  </group>
+  <group name='303'>
+    <ids val='55025,55026,55027,55028,55029,55030,55031,55032,55033,55034,55035,55036,55037,55038,55039,55040,55041,55042,55043,55044,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55057,55058,55059,55060,55061,55062,55063,55064,55065,55066,55067,55068,55069,55070,55071,55072,55073,55074,55075,55076,55077,55078,55079,55080,55081,55082,55083,55084,55085,55086,55087,55088,55089,55090,55091,55092,55093,55094,55095,55096,55097,55098,55099,55100,55101,55102,55103,55104,55105,55106,55107,55108,55109,55110,55111,55112,55113,55114,55115,55116,55117,55118,55119,55120,55121,55122,55123,55124,55125,55126,55127,55128,55129,55130,55131,55132,55133,55134,55135,55136,55137,55138,55139,55140,55141,55142,55143,55144,55145,55146,55147,55148,55149,55150,55151,55152,55153,55154,55155,55156,55157,55158,55159,55160,55161,55162,55163,55164,55165,55166,55167,55168,55169,55170,55171,55172,55173,55174,55175,55176,55177,55178,55179,55180,55181,55182,55183,55184,55185,55186,55187,55188,55189,55190,55191,55192,55193,55194,55195,55196,55197,55198,55199,55200,55201,55202,55203,55204,55205,55206,55207,55208,55209,55210,55211,55212,55213,55214,55215,55216,55217,55218,55219,55220,55221,55222,55223,55224,55225,55226,55227,55228,55229,55230,55231,55232,55233,55234,55235,55236,55237,55238,55239,55240,55241,55242,55243,55244,55245,55246,55247,55248,55249,55250,55251,55252,55253,55254,55255,55256,55257,55258,55259,55260,55261,55262,55263,55264,55265,55266,55267,55268,55269,55270,55271,55272,55273,55274,55275,55276,55277,55278,55279,55280,55281,55282,55283,55284,55285,55286,55287,55288,55289,55290,55291,55292,55293,55294,55295,55296,55297,55298,55299,55300,55301,55302,55303,55304,55305,55306,55307,55308,55309,55310,55311,55312,55313,55314,55315,55316,55317,55318,55319,55320,55321,55322,55323,55324,55325,55326,55327,55328'/>
+  </group>
+  <group name='303'>
+    <ids val='55329,55330,55331,55332,55333,55334,55335,55336,55337,55338,55339,55340,55341,55342,55343,55344,55345,55346,55347,55348,55349,55350,55351,55352,55353,55354,55355,55356,55357,55358,55359,55360,55361,55362,55363,55364,55365,55366,55367,55368,55369,55370,55371,55372,55373,55374,55375,55376,55377,55378,55379,55380,55381,55382,55383,55384,55385,55386,55387,55388,55389,55390,55391,55392,55393,55394,55395,55396,55397,55398,55399,55400,55401,55402,55403,55404,55405,55406,55407,55408,55409,55410,55411,55412,55413,55414,55415,55416,55417,55418,55419,55420,55421,55422,55423,55424,55425,55426,55427,55428,55429,55430,55431,55432,55433,55434,55435,55436,55437,55438,55439,55440,55441,55442,55443,55444,55445,55446,55447,55448,55449,55450,55451,55452,55453,55454,55455,55456,55457,55458,55459,55460,55461,55462,55463,55464,55465,55466,55467,55468,55469,55470,55471,55472,55473,55474,55475,55476,55477,55478,55479,55480,55481,55482,55483,55484,55485,55486,55487,55488,55489,55490,55491,55492,55493,55494,55495,55496,55497,55498,55499,55500,55501,55502,55503,55504,55505,55506,55507,55508,55509,55510,55511,55512,55513,55514,55515,55516,55517,55518,55519,55520,55521,55522,55523,55524,55525,55526,55527,55528,55529,55530,55531,55532,55533,55534,55535,55536,55537,55538,55539,55540,55541,55542,55543,55544,55545,55546,55547,55548,55549,55550,55551,55552,55553,55554,55555,55556,55557,55558,55559,55560,55561,55562,55563,55564,55565,55566,55567,55568,55569,55570,55571,55572,55573,55574,55575,55576,55577,55578,55579,55580,55581,55582,55583,55584,55585,55586,55587,55588,55589,55590,55591,55592,55593,55594,55595,55596,55597,55598,55599,55600,55601,55602,55603,55604,55605,55606,55607,55608,55609,55610,55611,55612,55613,55614,55615,55616,55617,55618,55619,55620,55621,55622,55623,55624,55625,55626,55627,55628,55629,55630,55631,55632'/>
+  </group>
+  <group name='303'>
+    <ids val='55633,55634,55635,55636,55637,55638,55639,55640,55641,55642,55643,55644,55645,55646,55647,55648,55649,55650,55651,55652,55653,55654,55655,55656,55657,55658,55659,55660,55661,55662,55663,55664,55665,55666,55667,55668,55669,55670,55671,55672,55673,55674,55675,55676,55677,55678,55679,55680,55681,55682,55683,55684,55685,55686,55687,55688,55689,55690,55691,55692,55693,55694,55695,55696,55697,55698,55699,55700,55701,55702,55703,55704,55705,55706,55707,55708,55709,55710,55711,55712,55713,55714,55715,55716,55717,55718,55719,55720,55721,55722,55723,55724,55725,55726,55727,55728,55729,55730,55731,55732,55733,55734,55735,55736,55737,55738,55739,55740,55741,55742,55743,55744,55745,55746,55747,55748,55749,55750,55751,55752,55753,55754,55755,55756,55757,55758,55759,55760,55761,55762,55763,55764,55765,55766,55767,55768,55769,55770,55771,55772,55773,55774,55775,55776,55777,55778,55779,55780,55781,55782,55783,55784,55785,55786,55787,55788,55789,55790,55791,55792,55793,55794,55795,55796,55797,55798,55799,55800,55801,55802,55803,55804,55805,55806,55807,55808,55809,55810,55811,55812,55813,55814,55815,55816,55817,55818,55819,55820,55821,55822,55823,55824,55825,55826,55827,55828,55829,55830,55831,55832,55833,55834,55835,55836,55837,55838,55839,55840,55841,55842,55843,55844,55845,55846,55847,55848,55849,55850,55851,55852,55853,55854,55855,55856,55857,55858,55859,55860,55861,55862,55863,55864,55865,55866,55867,55868,55869,55870,55871,55872,55873,55874,55875,55876,55877,55878,55879,55880,55881,55882,55883,55884,55885,55886,55887,55888,55889,55890,55891,55892,55893,55894,55895,55896,55897,55898,55899,55900,55901,55902,55903,55904,55905,55906,55907,55908,55909,55910,55911,55912,55913,55914,55915,55916,55917,55918,55919,55920,55921,55922,55923,55924,55925,55926,55927,55928,55929,55930,55931,55932,55933,55934,55935,55936'/>
+  </group>
+  <group name='303'>
+    <ids val='55937,55938,55939,55940,55941,55942,55943,55944,55945,55946,55947,55948,55949,55950,55951,55952,55953,55954,55955,55956,55957,55958,55959,55960,55961,55962,55963,55964,55965,55966,55967,55968,55969,55970,55971,55972,55973,55974,55975,55976,55977,55978,55979,55980,55981,55982,55983,55984,55985,55986,55987,55988,55989,55990,55991,55992,55993,55994,55995,55996,55997,55998,55999,56000,56001,56002,56003,56004,56005,56006,56007,56008,56009,56010,56011,56012,56013,56014,56015,56016,56017,56018,56019,56020,56021,56022,56023,56024,56025,56026,56027,56028,56029,56030,56031,56032,56033,56034,56035,56036,56037,56038,56039,56040,56041,56042,56043,56044,56045,56046,56047,56048,56049,56050,56051,56052,56053,56054,56055,56056,56057,56058,56059,56060,56061,56062,56063,56064,56065,56066,56067,56068,56069,56070,56071,56072,56073,56074,56075,56076,56077,56078,56079,56080,56081,56082,56083,56084,56085,56086,56087,56088,56089,56090,56091,56092,56093,56094,56095,56096,56097,56098,56099,56100,56101,56102,56103,56104,56105,56106,56107,56108,56109,56110,56111,56112,56113,56114,56115,56116,56117,56118,56119,56120,56121,56122,56123,56124,56125,56126,56127,56128,56129,56130,56131,56132,56133,56134,56135,56136,56137,56138,56139,56140,56141,56142,56143,56144,56145,56146,56147,56148,56149,56150,56151,56152,56153,56154,56155,56156,56157,56158,56159,56160,56161,56162,56163,56164,56165,56166,56167,56168,56169,56170,56171,56172,56173,56174,56175,56176,56177,56178,56179,56180,56181,56182,56183,56184,56185,56186,56187,56188,56189,56190,56191,56192,56193,56194,56195,56196,56197,56198,56199,56200,56201,56202,56203,56204,56205,56206,56207,56208,56209,56210,56211,56212,56213,56214,56215,56216,56217,56218,56219,56220,56221,56222,56223,56224,56225,56226,56227,56228,56229,56230,56231,56232,56233,56234,56235,56236,56237,56238,56239,56240'/>
+  </group>
+  <group name='303'>
+    <ids val='56241,56242,56243,56244,56245,56246,56247,56248,56249,56250,56251,56252,56253,56254,56255,56256,56257,56258,56259,56260,56261,56262,56263,56264,56265,56266,56267,56268,56269,56270,56271,56272,56273,56274,56275,56276,56277,56278,56279,56280,56281,56282,56283,56284,56285,56286,56287,56288,56289,56290,56291,56292,56293,56294,56295,56296,56297,56298,56299,56300,56301,56302,56303,56304,56305,56306,56307,56308,56309,56310,56311,56312,56313,56314,56315,56316,56317,56318,56319,56320,56321,56322,56323,56324,56325,56326,56327,56328,56329,56330,56331,56332,56333,56334,56335,56336,56337,56338,56339,56340,56341,56342,56343,56344,56345,56346,56347,56348,56349,56350,56351,56352,56353,56354,56355,56356,56357,56358,56359,56360,56361,56362,56363,56364,56365,56366,56367,56368,56369,56370,56371,56372,56373,56374,56375,56376,56377,56378,56379,56380,56381,56382,56383,56384,56385,56386,56387,56388,56389,56390,56391,56392,56393,56394,56395,56396,56397,56398,56399,56400,56401,56402,56403,56404,56405,56406,56407,56408,56409,56410,56411,56412,56413,56414,56415,56416,56417,56418,56419,56420,56421,56422,56423,56424,56425,56426,56427,56428,56429,56430,56431,56432,56433,56434,56435,56436,56437,56438,56439,56440,56441,56442,56443,56444,56445,56446,56447,56448,56449,56450,56451,56452,56453,56454,56455,56456,56457,56458,56459,56460,56461,56462,56463,56464,56465,56466,56467,56468,56469,56470,56471,56472,56473,56474,56475,56476,56477,56478,56479,56480,56481,56482,56483,56484,56485,56486,56487,56488,56489,56490,56491,56492,56493,56494,56495,56496,56497,56498,56499,56500,56501,56502,56503,56504,56505,56506,56507,56508,56509,56510,56511,56512,56513,56514,56515,56516,56517,56518,56519,56520,56521,56522,56523,56524,56525,56526,56527,56528,56529,56530,56531,56532,56533,56534,56535,56536,56537,56538,56539,56540,56541,56542,56543,56544'/>
+  </group>
+  <group name='303'>
+    <ids val='56545,56546,56547,56548,56549,56550,56551,56552,56553,56554,56555,56556,56557,56558,56559,56560,56561,56562,56563,56564,56565,56566,56567,56568,56569,56570,56571,56572,56573,56574,56575,56576,56577,56578,56579,56580,56581,56582,56583,56584,56585,56586,56587,56588,56589,56590,56591,56592,56593,56594,56595,56596,56597,56598,56599,56600,56601,56602,56603,56604,56605,56606,56607,56608,56609,56610,56611,56612,56613,56614,56615,56616,56617,56618,56619,56620,56621,56622,56623,56624,56625,56626,56627,56628,56629,56630,56631,56632,56633,56634,56635,56636,56637,56638,56639,56640,56641,56642,56643,56644,56645,56646,56647,56648,56649,56650,56651,56652,56653,56654,56655,56656,56657,56658,56659,56660,56661,56662,56663,56664,56665,56666,56667,56668,56669,56670,56671,56672,56673,56674,56675,56676,56677,56678,56679,56680,56681,56682,56683,56684,56685,56686,56687,56688,56689,56690,56691,56692,56693,56694,56695,56696,56697,56698,56699,56700,56701,56702,56703,56704,56705,56706,56707,56708,56709,56710,56711,56712,56713,56714,56715,56716,56717,56718,56719,56720,56721,56722,56723,56724,56725,56726,56727,56728,56729,56730,56731,56732,56733,56734,56735,56736,56737,56738,56739,56740,56741,56742,56743,56744,56745,56746,56747,56748,56749,56750,56751,56752,56753,56754,56755,56756,56757,56758,56759,56760,56761,56762,56763,56764,56765,56766,56767,56768,56769,56770,56771,56772,56773,56774,56775,56776,56777,56778,56779,56780,56781,56782,56783,56784,56785,56786,56787,56788,56789,56790,56791,56792,56793,56794,56795,56796,56797,56798,56799,56800,56801,56802,56803,56804,56805,56806,56807,56808,56809,56810,56811,56812,56813,56814,56815,56816,56817,56818,56819,56820,56821,56822,56823,56824,56825,56826,56827,56828,56829,56830,56831,56832,56833,56834,56835,56836,56837,56838,56839,56840,56841,56842,56843,56844,56845,56846,56847,56848'/>
+  </group>
+  <group name='303'>
+    <ids val='56849,56850,56851,56852,56853,56854,56855,56856,56857,56858,56859,56860,56861,56862,56863,56864,56865,56866,56867,56868,56869,56870,56871,56872,56873,56874,56875,56876,56877,56878,56879,56880,56881,56882,56883,56884,56885,56886,56887,56888,56889,56890,56891,56892,56893,56894,56895,56896,56897,56898,56899,56900,56901,56902,56903,56904,56905,56906,56907,56908,56909,56910,56911,56912,56913,56914,56915,56916,56917,56918,56919,56920,56921,56922,56923,56924,56925,56926,56927,56928,56929,56930,56931,56932,56933,56934,56935,56936,56937,56938,56939,56940,56941,56942,56943,56944,56945,56946,56947,56948,56949,56950,56951,56952,56953,56954,56955,56956,56957,56958,56959,56960,56961,56962,56963,56964,56965,56966,56967,56968,56969,56970,56971,56972,56973,56974,56975,56976,56977,56978,56979,56980,56981,56982,56983,56984,56985,56986,56987,56988,56989,56990,56991,56992,56993,56994,56995,56996,56997,56998,56999,57000,57001,57002,57003,57004,57005,57006,57007,57008,57009,57010,57011,57012,57013,57014,57015,57016,57017,57018,57019,57020,57021,57022,57023,57024,57025,57026,57027,57028,57029,57030,57031,57032,57033,57034,57035,57036,57037,57038,57039,57040,57041,57042,57043,57044,57045,57046,57047,57048,57049,57050,57051,57052,57053,57054,57055,57056,57057,57058,57059,57060,57061,57062,57063,57064,57065,57066,57067,57068,57069,57070,57071,57072,57073,57074,57075,57076,57077,57078,57079,57080,57081,57082,57083,57084,57085,57086,57087,57088,57089,57090,57091,57092,57093,57094,57095,57096,57097,57098,57099,57100,57101,57102,57103,57104,57105,57106,57107,57108,57109,57110,57111,57112,57113,57114,57115,57116,57117,57118,57119,57120,57121,57122,57123,57124,57125,57126,57127,57128,57129,57130,57131,57132,57133,57134,57135,57136,57137,57138,57139,57140,57141,57142,57143,57144,57145,57146,57147,57148,57149,57150,57151,57152'/>
+  </group>
+  <group name='303'>
+    <ids val='57153,57154,57155,57156,57157,57158,57159,57160,57161,57162,57163,57164,57165,57166,57167,57168,57169,57170,57171,57172,57173,57174,57175,57176,57177,57178,57179,57180,57181,57182,57183,57184,57185,57186,57187,57188,57189,57190,57191,57192,57193,57194,57195,57196,57197,57198,57199,57200,57201,57202,57203,57204,57205,57206,57207,57208,57209,57210,57211,57212,57213,57214,57215,57216,57217,57218,57219,57220,57221,57222,57223,57224,57225,57226,57227,57228,57229,57230,57231,57232,57233,57234,57235,57236,57237,57238,57239,57240,57241,57242,57243,57244,57245,57246,57247,57248,57249,57250,57251,57252,57253,57254,57255,57256,57257,57258,57259,57260,57261,57262,57263,57264,57265,57266,57267,57268,57269,57270,57271,57272,57273,57274,57275,57276,57277,57278,57279,57280,57281,57282,57283,57284,57285,57286,57287,57288,57289,57290,57291,57292,57293,57294,57295,57296,57297,57298,57299,57300,57301,57302,57303,57304,57305,57306,57307,57308,57309,57310,57311,57312,57313,57314,57315,57316,57317,57318,57319,57320,57321,57322,57323,57324,57325,57326,57327,57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456'/>
+  </group>
+  <group name='303'>
+    <ids val='57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760'/>
+  </group>
+  <group name='303'>
+    <ids val='57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064'/>
+  </group>
+  <group name='303'>
+    <ids val='58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368'/>
+  </group>
+  <group name='303'>
+    <ids val='58369,58370,58371,58372,58373,58374,58375,58376,58377,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672'/>
+  </group>
+  <group name='303'>
+    <ids val='58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,58853,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976'/>
+  </group>
+  <group name='303'>
+    <ids val='58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,59238,59239,59240,59241,59242,59243,59244,59245,59246,59247,59248,59249,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,59261,59262,59263,59264,59265,59266,59267,59268,59269,59270,59271,59272,59273,59274,59275,59276,59277,59278,59279,59280'/>
+  </group>
+  <group name='303'>
+    <ids val='59281,59282,59283,59284,59285,59286,59287,59288,59289,59290,59291,59292,59293,59294,59295,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,59335,59336,59337,59338,59339,59340,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,59362,59363,59364,59365,59366,59367,59368,59369,59370,59371,59372,59373,59374,59375,59376,59377,59378,59379,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,59408,59409,59410,59411,59412,59413,59414,59415,59416,59417,59418,59419,59420,59421,59422,59423,59424,59425,59426,59427,59428,59429,59430,59431,59432,59433,59434,59435,59436,59437,59438,59439,59440,59441,59442,59443,59444,59445,59446,59447,59448,59449,59450,59451,59452,59453,59454,59455,59456,59457,59458,59459,59460,59461,59462,59463,59464,59465,59466,59467,59468,59469,59470,59471,59472,59473,59474,59475,59476,59477,59478,59479,59480,59481,59482,59483,59484,59485,59486,59487,59488,59489,59490,59491,59492,59493,59494,59495,59496,59497,59498,59499,59500,59501,59502,59503,59504,59505,59506,59507,59508,59509,59510,59511,59512,59513,59514,59515,59516,59517,59518,59519,59520,59521,59522,59523,59524,59525,59526,59527,59528,59529,59530,59531,59532,59533,59534,59535,59536,59537,59538,59539,59540,59541,59542,59543,59544,59545,59546,59547,59548,59549,59550,59551,59552,59553,59554,59555,59556,59557,59558,59559,59560,59561,59562,59563,59564,59565,59566,59567,59568,59569,59570,59571,59572,59573,59574,59575,59576,59577,59578,59579,59580,59581,59582,59583,59584'/>
+  </group>
+  <group name='303'>
+    <ids val='59585,59586,59587,59588,59589,59590,59591,59592,59593,59594,59595,59596,59597,59598,59599,59600,59601,59602,59603,59604,59605,59606,59607,59608,59609,59610,59611,59612,59613,59614,59615,59616,59617,59618,59619,59620,59621,59622,59623,59624,59625,59626,59627,59628,59629,59630,59631,59632,59633,59634,59635,59636,59637,59638,59639,59640,59641,59642,59643,59644,59645,59646,59647,59648,59649,59650,59651,59652,59653,59654,59655,59656,59657,59658,59659,59660,59661,59662,59663,59664,59665,59666,59667,59668,59669,59670,59671,59672,59673,59674,59675,59676,59677,59678,59679,59680,59681,59682,59683,59684,59685,59686,59687,59688,59689,59690,59691,59692,59693,59694,59695,59696,59697,59698,59699,59700,59701,59702,59703,59704,59705,59706,59707,59708,59709,59710,59711,59712,59713,59714,59715,59716,59717,59718,59719,59720,59721,59722,59723,59724,59725,59726,59727,59728,59729,59730,59731,59732,59733,59734,59735,59736,59737,59738,59739,59740,59741,59742,59743,59744,59745,59746,59747,59748,59749,59750,59751,59752,59753,59754,59755,59756,59757,59758,59759,59760,59761,59762,59763,59764,59765,59766,59767,59768,59769,59770,59771,59772,59773,59774,59775,59776,59777,59778,59779,59780,59781,59782,59783,59784,59785,59786,59787,59788,59789,59790,59791,59792,59793,59794,59795,59796,59797,59798,59799,59800,59801,59802,59803,59804,59805,59806,59807,59808,59809,59810,59811,59812,59813,59814,59815,59816,59817,59818,59819,59820,59821,59822,59823,59824,59825,59826,59827,59828,59829,59830,59831,59832,59833,59834,59835,59836,59837,59838,59839,59840,59841,59842,59843,59844,59845,59846,59847,59848,59849,59850,59851,59852,59853,59854,59855,59856,59857,59858,59859,59860,59861,59862,59863,59864,59865,59866,59867,59868,59869,59870,59871,59872,59873,59874,59875,59876,59877,59878,59879,59880,59881,59882,59883,59884,59885,59886,59887,59888'/>
+  </group>
+  <group name='303'>
+    <ids val='59889,59890,59891,59892,59893,59894,59895,59896,59897,59898,59899,59900,59901,59902,59903,59904,59905,59906,59907,59908,59909,59910,59911,59912,59913,59914,59915,59916,59917,59918,59919,59920,59921,59922,59923,59924,59925,59926,59927,59928,59929,59930,59931,59932,59933,59934,59935,59936,59937,59938,59939,59940,59941,59942,59943,59944,59945,59946,59947,59948,59949,59950,59951,59952,59953,59954,59955,59956,59957,59958,59959,59960,59961,59962,59963,59964,59965,59966,59967,59968,59969,59970,59971,59972,59973,59974,59975,59976,59977,59978,59979,59980,59981,59982,59983,59984,59985,59986,59987,59988,59989,59990,59991,59992,59993,59994,59995,59996,59997,59998,59999,60000,60001,60002,60003,60004,60005,60006,60007,60008,60009,60010,60011,60012,60013,60014,60015,60016,60017,60018,60019,60020,60021,60022,60023,60024,60025,60026,60027,60028,60029,60030,60031,60032,60033,60034,60035,60036,60037,60038,60039,60040,60041,60042,60043,60044,60045,60046,60047,60048,60049,60050,60051,60052,60053,60054,60055,60056,60057,60058,60059,60060,60061,60062,60063,60064,60065,60066,60067,60068,60069,60070,60071,60072,60073,60074,60075,60076,60077,60078,60079,60080,60081,60082,60083,60084,60085,60086,60087,60088,60089,60090,60091,60092,60093,60094,60095,60096,60097,60098,60099,60100,60101,60102,60103,60104,60105,60106,60107,60108,60109,60110,60111,60112,60113,60114,60115,60116,60117,60118,60119,60120,60121,60122,60123,60124,60125,60126,60127,60128,60129,60130,60131,60132,60133,60134,60135,60136,60137,60138,60139,60140,60141,60142,60143,60144,60145,60146,60147,60148,60149,60150,60151,60152,60153,60154,60155,60156,60157,60158,60159,60160,60161,60162,60163,60164,60165,60166,60167,60168,60169,60170,60171,60172,60173,60174,60175,60176,60177,60178,60179,60180,60181,60182,60183,60184,60185,60186,60187,60188,60189,60190,60191,60192'/>
+  </group>
+  <group name='303'>
+    <ids val='60193,60194,60195,60196,60197,60198,60199,60200,60201,60202,60203,60204,60205,60206,60207,60208,60209,60210,60211,60212,60213,60214,60215,60216,60217,60218,60219,60220,60221,60222,60223,60224,60225,60226,60227,60228,60229,60230,60231,60232,60233,60234,60235,60236,60237,60238,60239,60240,60241,60242,60243,60244,60245,60246,60247,60248,60249,60250,60251,60252,60253,60254,60255,60256,60257,60258,60259,60260,60261,60262,60263,60264,60265,60266,60267,60268,60269,60270,60271,60272,60273,60274,60275,60276,60277,60278,60279,60280,60281,60282,60283,60284,60285,60286,60287,60288,60289,60290,60291,60292,60293,60294,60295,60296,60297,60298,60299,60300,60301,60302,60303,60304,60305,60306,60307,60308,60309,60310,60311,60312,60313,60314,60315,60316,60317,60318,60319,60320,60321,60322,60323,60324,60325,60326,60327,60328,60329,60330,60331,60332,60333,60334,60335,60336,60337,60338,60339,60340,60341,60342,60343,60344,60345,60346,60347,60348,60349,60350,60351,60352,60353,60354,60355,60356,60357,60358,60359,60360,60361,60362,60363,60364,60365,60366,60367,60368,60369,60370,60371,60372,60373,60374,60375,60376,60377,60378,60379,60380,60381,60382,60383,60384,60385,60386,60387,60388,60389,60390,60391,60392,60393,60394,60395,60396,60397,60398,60399,60400,60401,60402,60403,60404,60405,60406,60407,60408,60409,60410,60411,60412,60413,60414,60415,60416,60417,60418,60419,60420,60421,60422,60423,60424,60425,60426,60427,60428,60429,60430,60431,60432,60433,60434,60435,60436,60437,60438,60439,60440,60441,60442,60443,60444,60445,60446,60447,60448,60449,60450,60451,60452,60453,60454,60455,60456,60457,60458,60459,60460,60461,60462,60463,60464,60465,60466,60467,60468,60469,60470,60471,60472,60473,60474,60475,60476,60477,60478,60479,60480,60481,60482,60483,60484,60485,60486,60487,60488,60489,60490,60491,60492,60493,60494,60495,60496'/>
+  </group>
+  <group name='303'>
+    <ids val='60497,60498,60499,60500,60501,60502,60503,60504,60505,60506,60507,60508,60509,60510,60511,60512,60513,60514,60515,60516,60517,60518,60519,60520,60521,60522,60523,60524,60525,60526,60527,60528,60529,60530,60531,60532,60533,60534,60535,60536,60537,60538,60539,60540,60541,60542,60543,60544,60545,60546,60547,60548,60549,60550,60551,60552,60553,60554,60555,60556,60557,60558,60559,60560,60561,60562,60563,60564,60565,60566,60567,60568,60569,60570,60571,60572,60573,60574,60575,60576,60577,60578,60579,60580,60581,60582,60583,60584,60585,60586,60587,60588,60589,60590,60591,60592,60593,60594,60595,60596,60597,60598,60599,60600,60601,60602,60603,60604,60605,60606,60607,60608,60609,60610,60611,60612,60613,60614,60615,60616,60617,60618,60619,60620,60621,60622,60623,60624,60625,60626,60627,60628,60629,60630,60631,60632,60633,60634,60635,60636,60637,60638,60639,60640,60641,60642,60643,60644,60645,60646,60647,60648,60649,60650,60651,60652,60653,60654,60655,60656,60657,60658,60659,60660,60661,60662,60663,60664,60665,60666,60667,60668,60669,60670,60671,60672,60673,60674,60675,60676,60677,60678,60679,60680,60681,60682,60683,60684,60685,60686,60687,60688,60689,60690,60691,60692,60693,60694,60695,60696,60697,60698,60699,60700,60701,60702,60703,60704,60705,60706,60707,60708,60709,60710,60711,60712,60713,60714,60715,60716,60717,60718,60719,60720,60721,60722,60723,60724,60725,60726,60727,60728,60729,60730,60731,60732,60733,60734,60735,60736,60737,60738,60739,60740,60741,60742,60743,60744,60745,60746,60747,60748,60749,60750,60751,60752,60753,60754,60755,60756,60757,60758,60759,60760,60761,60762,60763,60764,60765,60766,60767,60768,60769,60770,60771,60772,60773,60774,60775,60776,60777,60778,60779,60780,60781,60782,60783,60784,60785,60786,60787,60788,60789,60790,60791,60792,60793,60794,60795,60796,60797,60798,60799,60800'/>
+  </group>
+  <group name='303'>
+    <ids val='60801,60802,60803,60804,60805,60806,60807,60808,60809,60810,60811,60812,60813,60814,60815,60816,60817,60818,60819,60820,60821,60822,60823,60824,60825,60826,60827,60828,60829,60830,60831,60832,60833,60834,60835,60836,60837,60838,60839,60840,60841,60842,60843,60844,60845,60846,60847,60848,60849,60850,60851,60852,60853,60854,60855,60856,60857,60858,60859,60860,60861,60862,60863,60864,60865,60866,60867,60868,60869,60870,60871,60872,60873,60874,60875,60876,60877,60878,60879,60880,60881,60882,60883,60884,60885,60886,60887,60888,60889,60890,60891,60892,60893,60894,60895,60896,60897,60898,60899,60900,60901,60902,60903,60904,60905,60906,60907,60908,60909,60910,60911,60912,60913,60914,60915,60916,60917,60918,60919,60920,60921,60922,60923,60924,60925,60926,60927,60928,60929,60930,60931,60932,60933,60934,60935,60936,60937,60938,60939,60940,60941,60942,60943,60944,60945,60946,60947,60948,60949,60950,60951,60952,60953,60954,60955,60956,60957,60958,60959,60960,60961,60962,60963,60964,60965,60966,60967,60968,60969,60970,60971,60972,60973,60974,60975,60976,60977,60978,60979,60980,60981,60982,60983,60984,60985,60986,60987,60988,60989,60990,60991,60992,60993,60994,60995,60996,60997,60998,60999,61000,61001,61002,61003,61004,61005,61006,61007,61008,61009,61010,61011,61012,61013,61014,61015,61016,61017,61018,61019,61020,61021,61022,61023,61024,61025,61026,61027,61028,61029,61030,61031,61032,61033,61034,61035,61036,61037,61038,61039,61040,61041,61042,61043,61044,61045,61046,61047,61048,61049,61050,61051,61052,61053,61054,61055,61056,61057,61058,61059,61060,61061,61062,61063,61064,61065,61066,61067,61068,61069,61070,61071,61072,61073,61074,61075,61076,61077,61078,61079,61080,61081,61082,61083,61084,61085,61086,61087,61088,61089,61090,61091,61092,61093,61094,61095,61096,61097,61098,61099,61100,61101,61102,61103,61104'/>
+  </group>
+  <group name='303'>
+    <ids val='61105,61106,61107,61108,61109,61110,61111,61112,61113,61114,61115,61116,61117,61118,61119,61120,61121,61122,61123,61124,61125,61126,61127,61128,61129,61130,61131,61132,61133,61134,61135,61136,61137,61138,61139,61140,61141,61142,61143,61144,61145,61146,61147,61148,61149,61150,61151,61152,61153,61154,61155,61156,61157,61158,61159,61160,61161,61162,61163,61164,61165,61166,61167,61168,61169,61170,61171,61172,61173,61174,61175,61176,61177,61178,61179,61180,61181,61182,61183,61184,61185,61186,61187,61188,61189,61190,61191,61192,61193,61194,61195,61196,61197,61198,61199,61200,61201,61202,61203,61204,61205,61206,61207,61208,61209,61210,61211,61212,61213,61214,61215,61216,61217,61218,61219,61220,61221,61222,61223,61224,61225,61226,61227,61228,61229,61230,61231,61232,61233,61234,61235,61236,61237,61238,61239,61240,61241,61242,61243,61244,61245,61246,61247,61248,61249,61250,61251,61252,61253,61254,61255,61256,61257,61258,61259,61260,61261,61262,61263,61264,61265,61266,61267,61268,61269,61270,61271,61272,61273,61274,61275,61276,61277,61278,61279,61280,61281,61282,61283,61284,61285,61286,61287,61288,61289,61290,61291,61292,61293,61294,61295,61296,61297,61298,61299,61300,61301,61302,61303,61304,61305,61306,61307,61308,61309,61310,61311,61312,61313,61314,61315,61316,61317,61318,61319,61320,61321,61322,61323,61324,61325,61326,61327,61328,61329,61330,61331,61332,61333,61334,61335,61336,61337,61338,61339,61340,61341,61342,61343,61344,61345,61346,61347,61348,61349,61350,61351,61352,61353,61354,61355,61356,61357,61358,61359,61360,61361,61362,61363,61364,61365,61366,61367,61368,61369,61370,61371,61372,61373,61374,61375,61376,61377,61378,61379,61380,61381,61382,61383,61384,61385,61386,61387,61388,61389,61390,61391,61392,61393,61394,61395,61396,61397,61398,61399,61400,61401,61402,61403,61404,61405,61406,61407,61408'/>
+  </group>
+  <group name='303'>
+    <ids val='61409,61410,61411,61412,61413,61414,61415,61416,61417,61418,61419,61420,61421,61422,61423,61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439,61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455,61456,61457,61458,61459,61460,61461,61462,61463,61464,61465,61466,61467,61468,61469,61470,61471,61472,61473,61474,61475,61476,61477,61478,61479,61480,61481,61482,61483,61484,61485,61486,61487,61488,61489,61490,61491,61492,61493,61494,61495,61496,61497,61498,61499,61500,61501,61502,61503,61504,61505,61506,61507,61508,61509,61510,61511,61512,61513,61514,61515,61516,61517,61518,61519,61520,61521,61522,61523,61524,61525,61526,61527,61528,61529,61530,61531,61532,61533,61534,61535,61536,61537,61538,61539,61540,61541,61542,61543,61544,61545,61546,61547,61548,61549,61550,61551,61552,61553,61554,61555,61556,61557,61558,61559,61560,61561,61562,61563,61564,61565,61566,61567,61568,61569,61570,61571,61572,61573,61574,61575,61576,61577,61578,61579,61580,61581,61582,61583,61584,61585,61586,61587,61588,61589,61590,61591,61592,61593,61594,61595,61596,61597,61598,61599,61600,61601,61602,61603,61604,61605,61606,61607,61608,61609,61610,61611,61612,61613,61614,61615,61616,61617,61618,61619,61620,61621,61622,61623,61624,61625,61626,61627,61628,61629,61630,61631,61632,61633,61634,61635,61636,61637,61638,61639,61640,61641,61642,61643,61644,61645,61646,61647,61648,61649,61650,61651,61652,61653,61654,61655,61656,61657,61658,61659,61660,61661,61662,61663,61664,61665,61666,61667,61668,61669,61670,61671,61672,61673,61674,61675,61676,61677,61678,61679,61680,61681,61682,61683,61684,61685,61686,61687,61688,61689,61690,61691,61692,61693,61694,61695,61696,61697,61698,61699,61700,61701,61702,61703,61704,61705,61706,61707,61708,61709,61710,61711,61712'/>
+  </group>
+  <group name='303'>
+    <ids val='61713,61714,61715,61716,61717,61718,61719,61720,61721,61722,61723,61724,61725,61726,61727,61728,61729,61730,61731,61732,61733,61734,61735,61736,61737,61738,61739,61740,61741,61742,61743,61744,61745,61746,61747,61748,61749,61750,61751,61752,61753,61754,61755,61756,61757,61758,61759,61760,61761,61762,61763,61764,61765,61766,61767,61768,61769,61770,61771,61772,61773,61774,61775,61776,61777,61778,61779,61780,61781,61782,61783,61784,61785,61786,61787,61788,61789,61790,61791,61792,61793,61794,61795,61796,61797,61798,61799,61800,61801,61802,61803,61804,61805,61806,61807,61808,61809,61810,61811,61812,61813,61814,61815,61816,61817,61818,61819,61820,61821,61822,61823,61824,61825,61826,61827,61828,61829,61830,61831,61832,61833,61834,61835,61836,61837,61838,61839,61840,61841,61842,61843,61844,61845,61846,61847,61848,61849,61850,61851,61852,61853,61854,61855,61856,61857,61858,61859,61860,61861,61862,61863,61864,61865,61866,61867,61868,61869,61870,61871,61872,61873,61874,61875,61876,61877,61878,61879,61880,61881,61882,61883,61884,61885,61886,61887,61888,61889,61890,61891,61892,61893,61894,61895,61896,61897,61898,61899,61900,61901,61902,61903,61904,61905,61906,61907,61908,61909,61910,61911,61912,61913,61914,61915,61916,61917,61918,61919,61920,61921,61922,61923,61924,61925,61926,61927,61928,61929,61930,61931,61932,61933,61934,61935,61936,61937,61938,61939,61940,61941,61942,61943,61944,61945,61946,61947,61948,61949,61950,61951,61952,61953,61954,61955,61956,61957,61958,61959,61960,61961,61962,61963,61964,61965,61966,61967,61968,61969,61970,61971,61972,61973,61974,61975,61976,61977,61978,61979,61980,61981,61982,61983,61984,61985,61986,61987,61988,61989,61990,61991,61992,61993,61994,61995,61996,61997,61998,61999,62000,62001,62002,62003,62004,62005,62006,62007,62008,62009,62010,62011,62012,62013,62014,62015,62016'/>
+  </group>
+  <group name='303'>
+    <ids val='62017,62018,62019,62020,62021,62022,62023,62024,62025,62026,62027,62028,62029,62030,62031,62032,62033,62034,62035,62036,62037,62038,62039,62040,62041,62042,62043,62044,62045,62046,62047,62048,62049,62050,62051,62052,62053,62054,62055,62056,62057,62058,62059,62060,62061,62062,62063,62064,62065,62066,62067,62068,62069,62070,62071,62072,62073,62074,62075,62076,62077,62078,62079,62080,62081,62082,62083,62084,62085,62086,62087,62088,62089,62090,62091,62092,62093,62094,62095,62096,62097,62098,62099,62100,62101,62102,62103,62104,62105,62106,62107,62108,62109,62110,62111,62112,62113,62114,62115,62116,62117,62118,62119,62120,62121,62122,62123,62124,62125,62126,62127,62128,62129,62130,62131,62132,62133,62134,62135,62136,62137,62138,62139,62140,62141,62142,62143,62144,62145,62146,62147,62148,62149,62150,62151,62152,62153,62154,62155,62156,62157,62158,62159,62160,62161,62162,62163,62164,62165,62166,62167,62168,62169,62170,62171,62172,62173,62174,62175,62176,62177,62178,62179,62180,62181,62182,62183,62184,62185,62186,62187,62188,62189,62190,62191,62192,62193,62194,62195,62196,62197,62198,62199,62200,62201,62202,62203,62204,62205,62206,62207,62208,62209,62210,62211,62212,62213,62214,62215,62216,62217,62218,62219,62220,62221,62222,62223,62224,62225,62226,62227,62228,62229,62230,62231,62232,62233,62234,62235,62236,62237,62238,62239,62240,62241,62242,62243,62244,62245,62246,62247,62248,62249,62250,62251,62252,62253,62254,62255,62256,62257,62258,62259,62260,62261,62262,62263,62264,62265,62266,62267,62268,62269,62270,62271,62272,62273,62274,62275,62276,62277,62278,62279,62280,62281,62282,62283,62284,62285,62286,62287,62288,62289,62290,62291,62292,62293,62294,62295,62296,62297,62298,62299,62300,62301,62302,62303,62304,62305,62306,62307,62308,62309,62310,62311,62312,62313,62314,62315,62316,62317,62318,62319,62320'/>
+  </group>
+  <group name='303'>
+    <ids val='62321,62322,62323,62324,62325,62326,62327,62328,62329,62330,62331,62332,62333,62334,62335,62336,62337,62338,62339,62340,62341,62342,62343,62344,62345,62346,62347,62348,62349,62350,62351,62352,62353,62354,62355,62356,62357,62358,62359,62360,62361,62362,62363,62364,62365,62366,62367,62368,62369,62370,62371,62372,62373,62374,62375,62376,62377,62378,62379,62380,62381,62382,62383,62384,62385,62386,62387,62388,62389,62390,62391,62392,62393,62394,62395,62396,62397,62398,62399,62400,62401,62402,62403,62404,62405,62406,62407,62408,62409,62410,62411,62412,62413,62414,62415,62416,62417,62418,62419,62420,62421,62422,62423,62424,62425,62426,62427,62428,62429,62430,62431,62432,62433,62434,62435,62436,62437,62438,62439,62440,62441,62442,62443,62444,62445,62446,62447,62448,62449,62450,62451,62452,62453,62454,62455,62456,62457,62458,62459,62460,62461,62462,62463,62464,62465,62466,62467,62468,62469,62470,62471,62472,62473,62474,62475,62476,62477,62478,62479,62480,62481,62482,62483,62484,62485,62486,62487,62488,62489,62490,62491,62492,62493,62494,62495,62496,62497,62498,62499,62500,62501,62502,62503,62504,62505,62506,62507,62508,62509,62510,62511,62512,62513,62514,62515,62516,62517,62518,62519,62520,62521,62522,62523,62524,62525,62526,62527,62528,62529,62530,62531,62532,62533,62534,62535,62536,62537,62538,62539,62540,62541,62542,62543,62544,62545,62546,62547,62548,62549,62550,62551,62552,62553,62554,62555,62556,62557,62558,62559,62560,62561,62562,62563,62564,62565,62566,62567,62568,62569,62570,62571,62572,62573,62574,62575,62576,62577,62578,62579,62580,62581,62582,62583,62584,62585,62586,62587,62588,62589,62590,62591,62592,62593,62594,62595,62596,62597,62598,62599,62600,62601,62602,62603,62604,62605,62606,62607,62608,62609,62610,62611,62612,62613,62614,62615,62616,62617,62618,62619,62620,62621,62622,62623,62624'/>
+  </group>
+  <group name='303'>
+    <ids val='62625,62626,62627,62628,62629,62630,62631,62632,62633,62634,62635,62636,62637,62638,62639,62640,62641,62642,62643,62644,62645,62646,62647,62648,62649,62650,62651,62652,62653,62654,62655,62656,62657,62658,62659,62660,62661,62662,62663,62664,62665,62666,62667,62668,62669,62670,62671,62672,62673,62674,62675,62676,62677,62678,62679,62680,62681,62682,62683,62684,62685,62686,62687,62688,62689,62690,62691,62692,62693,62694,62695,62696,62697,62698,62699,62700,62701,62702,62703,62704,62705,62706,62707,62708,62709,62710,62711,62712,62713,62714,62715,62716,62717,62718,62719,62720,62721,62722,62723,62724,62725,62726,62727,62728,62729,62730,62731,62732,62733,62734,62735,62736,62737,62738,62739,62740,62741,62742,62743,62744,62745,62746,62747,62748,62749,62750,62751,62752,62753,62754,62755,62756,62757,62758,62759,62760,62761,62762,62763,62764,62765,62766,62767,62768,62769,62770,62771,62772,62773,62774,62775,62776,62777,62778,62779,62780,62781,62782,62783,62784,62785,62786,62787,62788,62789,62790,62791,62792,62793,62794,62795,62796,62797,62798,62799,62800,62801,62802,62803,62804,62805,62806,62807,62808,62809,62810,62811,62812,62813,62814,62815,62816,62817,62818,62819,62820,62821,62822,62823,62824,62825,62826,62827,62828,62829,62830,62831,62832,62833,62834,62835,62836,62837,62838,62839,62840,62841,62842,62843,62844,62845,62846,62847,62848,62849,62850,62851,62852,62853,62854,62855,62856,62857,62858,62859,62860,62861,62862,62863,62864,62865,62866,62867,62868,62869,62870,62871,62872,62873,62874,62875,62876,62877,62878,62879,62880,62881,62882,62883,62884,62885,62886,62887,62888,62889,62890,62891,62892,62893,62894,62895,62896,62897,62898,62899,62900,62901,62902,62903,62904,62905,62906,62907,62908,62909,62910,62911,62912,62913,62914,62915,62916,62917,62918,62919,62920,62921,62922,62923,62924,62925,62926,62927,62928'/>
+  </group>
+  <group name='303'>
+    <ids val='62929,62930,62931,62932,62933,62934,62935,62936,62937,62938,62939,62940,62941,62942,62943,62944,62945,62946,62947,62948,62949,62950,62951,62952,62953,62954,62955,62956,62957,62958,62959,62960,62961,62962,62963,62964,62965,62966,62967,62968,62969,62970,62971,62972,62973,62974,62975,62976,62977,62978,62979,62980,62981,62982,62983,62984,62985,62986,62987,62988,62989,62990,62991,62992,62993,62994,62995,62996,62997,62998,62999,63000,63001,63002,63003,63004,63005,63006,63007,63008,63009,63010,63011,63012,63013,63014,63015,63016,63017,63018,63019,63020,63021,63022,63023,63024,63025,63026,63027,63028,63029,63030,63031,63032,63033,63034,63035,63036,63037,63038,63039,63040,63041,63042,63043,63044,63045,63046,63047,63048,63049,63050,63051,63052,63053,63054,63055,63056,63057,63058,63059,63060,63061,63062,63063,63064,63065,63066,63067,63068,63069,63070,63071,63072,63073,63074,63075,63076,63077,63078,63079,63080,63081,63082,63083,63084,63085,63086,63087,63088,63089,63090,63091,63092,63093,63094,63095,63096,63097,63098,63099,63100,63101,63102,63103,63104,63105,63106,63107,63108,63109,63110,63111,63112,63113,63114,63115,63116,63117,63118,63119,63120,63121,63122,63123,63124,63125,63126,63127,63128,63129,63130,63131,63132,63133,63134,63135,63136,63137,63138,63139,63140,63141,63142,63143,63144,63145,63146,63147,63148,63149,63150,63151,63152,63153,63154,63155,63156,63157,63158,63159,63160,63161,63162,63163,63164,63165,63166,63167,63168,63169,63170,63171,63172,63173,63174,63175,63176,63177,63178,63179,63180,63181,63182,63183,63184,63185,63186,63187,63188,63189,63190,63191,63192,63193,63194,63195,63196,63197,63198,63199,63200,63201,63202,63203,63204,63205,63206,63207,63208,63209,63210,63211,63212,63213,63214,63215,63216,63217,63218,63219,63220,63221,63222,63223,63224,63225,63226,63227,63228,63229,63230,63231,63232'/>
+  </group>
+  <group name='303'>
+    <ids val='63233,63234,63235,63236,63237,63238,63239,63240,63241,63242,63243,63244,63245,63246,63247,63248,63249,63250,63251,63252,63253,63254,63255,63256,63257,63258,63259,63260,63261,63262,63263,63264,63265,63266,63267,63268,63269,63270,63271,63272,63273,63274,63275,63276,63277,63278,63279,63280,63281,63282,63283,63284,63285,63286,63287,63288,63289,63290,63291,63292,63293,63294,63295,63296,63297,63298,63299,63300,63301,63302,63303,63304,63305,63306,63307,63308,63309,63310,63311,63312,63313,63314,63315,63316,63317,63318,63319,63320,63321,63322,63323,63324,63325,63326,63327,63328,63329,63330,63331,63332,63333,63334,63335,63336,63337,63338,63339,63340,63341,63342,63343,63344,63345,63346,63347,63348,63349,63350,63351,63352,63353,63354,63355,63356,63357,63358,63359,63360,63361,63362,63363,63364,63365,63366,63367,63368,63369,63370,63371,63372,63373,63374,63375,63376,63377,63378,63379,63380,63381,63382,63383,63384,63385,63386,63387,63388,63389,63390,63391,63392,63393,63394,63395,63396,63397,63398,63399,63400,63401,63402,63403,63404,63405,63406,63407,63408,63409,63410,63411,63412,63413,63414,63415,63416,63417,63418,63419,63420,63421,63422,63423,63424,63425,63426,63427,63428,63429,63430,63431,63432,63433,63434,63435,63436,63437,63438,63439,63440,63441,63442,63443,63444,63445,63446,63447,63448,63449,63450,63451,63452,63453,63454,63455,63456,63457,63458,63459,63460,63461,63462,63463,63464,63465,63466,63467,63468,63469,63470,63471,63472,63473,63474,63475,63476,63477,63478,63479,63480,63481,63482,63483,63484,63485,63486,63487,63488,63489,63490,63491,63492,63493,63494,63495,63496,63497,63498,63499,63500,63501,63502,63503,63504,63505,63506,63507,63508,63509,63510,63511,63512,63513,63514,63515,63516,63517,63518,63519,63520,63521,63522,63523,63524,63525,63526,63527,63528,63529,63530,63531,63532,63533,63534,63535,63536'/>
+  </group>
+  <group name='303'>
+    <ids val='63537,63538,63539,63540,63541,63542,63543,63544,63545,63546,63547,63548,63549,63550,63551,63552,63553,63554,63555,63556,63557,63558,63559,63560,63561,63562,63563,63564,63565,63566,63567,63568,63569,63570,63571,63572,63573,63574,63575,63576,63577,63578,63579,63580,63581,63582,63583,63584,63585,63586,63587,63588,63589,63590,63591,63592,63593,63594,63595,63596,63597,63598,63599,63600,63601,63602,63603,63604,63605,63606,63607,63608,63609,63610,63611,63612,63613,63614,63615,63616,63617,63618,63619,63620,63621,63622,63623,63624,63625,63626,63627,63628,63629,63630,63631,63632,63633,63634,63635,63636,63637,63638,63639,63640,63641,63642,63643,63644,63645,63646,63647,63648,63649,63650,63651,63652,63653,63654,63655,63656,63657,63658,63659,63660,63661,63662,63663,63664,63665,63666,63667,63668,63669,63670,63671,63672,63673,63674,63675,63676,63677,63678,63679,63680,63681,63682,63683,63684,63685,63686,63687,63688,63689,63690,63691,63692,63693,63694,63695,63696,63697,63698,63699,63700,63701,63702,63703,63704,63705,63706,63707,63708,63709,63710,63711,63712,63713,63714,63715,63716,63717,63718,63719,63720,63721,63722,63723,63724,63725,63726,63727,63728,63729,63730,63731,63732,63733,63734,63735,63736,63737,63738,63739,63740,63741,63742,63743,63744,63745,63746,63747,63748,63749,63750,63751,63752,63753,63754,63755,63756,63757,63758,63759,63760,63761,63762,63763,63764,63765,63766,63767,63768,63769,63770,63771,63772,63773,63774,63775,63776,63777,63778,63779,63780,63781,63782,63783,63784,63785,63786,63787,63788,63789,63790,63791,63792,63793,63794,63795,63796,63797,63798,63799,63800,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,63812,63813,63814,63815,63816,63817,63818,63819,63820,63821,63822,63823,63824,63825,63826,63827,63828,63829,63830,63831,63832,63833,63834,63835,63836,63837,63838,63839,63840'/>
+  </group>
+  <group name='303'>
+    <ids val='63841,63842,63843,63844,63845,63846,63847,63848,63849,63850,63851,63852,63853,63854,63855,63856,63857,63858,63859,63860,63861,63862,63863,63864,63865,63866,63867,63868,63869,63870,63871,63872,63873,63874,63875,63876,63877,63878,63879,63880,63881,63882,63883,63884,63885,63886,63887,63888,63889,63890,63891,63892,63893,63894,63895,63896,63897,63898,63899,63900,63901,63902,63903,63904,63905,63906,63907,63908,63909,63910,63911,63912,63913,63914,63915,63916,63917,63918,63919,63920,63921,63922,63923,63924,63925,63926,63927,63928,63929,63930,63931,63932,63933,63934,63935,63936,63937,63938,63939,63940,63941,63942,63943,63944,63945,63946,63947,63948,63949,63950,63951,63952,63953,63954,63955,63956,63957,63958,63959,63960,63961,63962,63963,63964,63965,63966,63967,63968,63969,63970,63971,63972,63973,63974,63975,63976,63977,63978,63979,63980,63981,63982,63983,63984,63985,63986,63987,63988,63989,63990,63991,63992,63993,63994,63995,63996,63997,63998,63999,64000,64001,64002,64003,64004,64005,64006,64007,64008,64009,64010,64011,64012,64013,64014,64015,64016,64017,64018,64019,64020,64021,64022,64023,64024,64025,64026,64027,64028,64029,64030,64031,64032,64033,64034,64035,64036,64037,64038,64039,64040,64041,64042,64043,64044,64045,64046,64047,64048,64049,64050,64051,64052,64053,64054,64055,64056,64057,64058,64059,64060,64061,64062,64063,64064,64065,64066,64067,64068,64069,64070,64071,64072,64073,64074,64075,64076,64077,64078,64079,64080,64081,64082,64083,64084,64085,64086,64087,64088,64089,64090,64091,64092,64093,64094,64095,64096,64097,64098,64099,64100,64101,64102,64103,64104,64105,64106,64107,64108,64109,64110,64111,64112,64113,64114,64115,64116,64117,64118,64119,64120,64121,64122,64123,64124,64125,64126,64127,64128,64129,64130,64131,64132,64133,64134,64135,64136,64137,64138,64139,64140,64141,64142,64143,64144'/>
+  </group>
+  <group name='303'>
+    <ids val='64145,64146,64147,64148,64149,64150,64151,64152,64153,64154,64155,64156,64157,64158,64159,64160,64161,64162,64163,64164,64165,64166,64167,64168,64169,64170,64171,64172,64173,64174,64175,64176,64177,64178,64179,64180,64181,64182,64183,64184,64185,64186,64187,64188,64189,64190,64191,64192,64193,64194,64195,64196,64197,64198,64199,64200,64201,64202,64203,64204,64205,64206,64207,64208,64209,64210,64211,64212,64213,64214,64215,64216,64217,64218,64219,64220,64221,64222,64223,64224,64225,64226,64227,64228,64229,64230,64231,64232,64233,64234,64235,64236,64237,64238,64239,64240,64241,64242,64243,64244,64245,64246,64247,64248,64249,64250,64251,64252,64253,64254,64255,64256,64257,64258,64259,64260,64261,64262,64263,64264,64265,64266,64267,64268,64269,64270,64271,64272,64273,64274,64275,64276,64277,64278,64279,64280,64281,64282,64283,64284,64285,64286,64287,64288,64289,64290,64291,64292,64293,64294,64295,64296,64297,64298,64299,64300,64301,64302,64303,64304,64305,64306,64307,64308,64309,64310,64311,64312,64313,64314,64315,64316,64317,64318,64319,64320,64321,64322,64323,64324,64325,64326,64327,64328,64329,64330,64331,64332,64333,64334,64335,64336,64337,64338,64339,64340,64341,64342,64343,64344,64345,64346,64347,64348,64349,64350,64351,64352,64353,64354,64355,64356,64357,64358,64359,64360,64361,64362,64363,64364,64365,64366,64367,64368,64369,64370,64371,64372,64373,64374,64375,64376,64377,64378,64379,64380,64381,64382,64383,64384,64385,64386,64387,64388,64389,64390,64391,64392,64393,64394,64395,64396,64397,64398,64399,64400,64401,64402,64403,64404,64405,64406,64407,64408,64409,64410,64411,64412,64413,64414,64415,64416,64417,64418,64419,64420,64421,64422,64423,64424,64425,64426,64427,64428,64429,64430,64431,64432,64433,64434,64435,64436,64437,64438,64439,64440,64441,64442,64443,64444,64445,64446,64447,64448'/>
+  </group>
+  <group name='303'>
+    <ids val='64449,64450,64451,64452,64453,64454,64455,64456,64457,64458,64459,64460,64461,64462,64463,64464,64465,64466,64467,64468,64469,64470,64471,64472,64473,64474,64475,64476,64477,64478,64479,64480,64481,64482,64483,64484,64485,64486,64487,64488,64489,64490,64491,64492,64493,64494,64495,64496,64497,64498,64499,64500,64501,64502,64503,64504,64505,64506,64507,64508,64509,64510,64511,64512,64513,64514,64515,64516,64517,64518,64519,64520,64521,64522,64523,64524,64525,64526,64527,64528,64529,64530,64531,64532,64533,64534,64535,64536,64537,64538,64539,64540,64541,64542,64543,64544,64545,64546,64547,64548,64549,64550,64551,64552,64553,64554,64555,64556,64557,64558,64559,64560,64561,64562,64563,64564,64565,64566,64567,64568,64569,64570,64571,64572,64573,64574,64575,64576,64577,64578,64579,64580,64581,64582,64583,64584,64585,64586,64587,64588,64589,64590,64591,64592,64593,64594,64595,64596,64597,64598,64599,64600,64601,64602,64603,64604,64605,64606,64607,64608,64609,64610,64611,64612,64613,64614,64615,64616,64617,64618,64619,64620,64621,64622,64623,64624,64625,64626,64627,64628,64629,64630,64631,64632,64633,64634,64635,64636,64637,64638,64639,64640,64641,64642,64643,64644,64645,64646,64647,64648,64649,64650,64651,64652,64653,64654,64655,64656,64657,64658,64659,64660,64661,64662,64663,64664,64665,64666,64667,64668,64669,64670,64671,64672,64673,64674,64675,64676,64677,64678,64679,64680,64681,64682,64683,64684,64685,64686,64687,64688,64689,64690,64691,64692,64693,64694,64695,64696,64697,64698,64699,64700,64701,64702,64703,64704,64705,64706,64707,64708,64709,64710,64711,64712,64713,64714,64715,64716,64717,64718,64719,64720,64721,64722,64723,64724,64725,64726,64727,64728,64729,64730,64731,64732,64733,64734,64735,64736,64737,64738,64739,64740,64741,64742,64743,64744,64745,64746,64747,64748,64749,64750,64751,64752'/>
+  </group>
+  <group name='303'>
+    <ids val='64753,64754,64755,64756,64757,64758,64759,64760,64761,64762,64763,64764,64765,64766,64767,64768,64769,64770,64771,64772,64773,64774,64775,64776,64777,64778,64779,64780,64781,64782,64783,64784,64785,64786,64787,64788,64789,64790,64791,64792,64793,64794,64795,64796,64797,64798,64799,64800,64801,64802,64803,64804,64805,64806,64807,64808,64809,64810,64811,64812,64813,64814,64815,64816,64817,64818,64819,64820,64821,64822,64823,64824,64825,64826,64827,64828,64829,64830,64831,64832,64833,64834,64835,64836,64837,64838,64839,64840,64841,64842,64843,64844,64845,64846,64847,64848,64849,64850,64851,64852,64853,64854,64855,64856,64857,64858,64859,64860,64861,64862,64863,64864,64865,64866,64867,64868,64869,64870,64871,64872,64873,64874,64875,64876,64877,64878,64879,64880,64881,64882,64883,64884,64885,64886,64887,64888,64889,64890,64891,64892,64893,64894,64895,64896,64897,64898,64899,64900,64901,64902,64903,64904,64905,64906,64907,64908,64909,64910,64911,64912,64913,64914,64915,64916,64917,64918,64919,64920,64921,64922,64923,64924,64925,64926,64927,64928,64929,64930,64931,64932,64933,64934,64935,64936,64937,64938,64939,64940,64941,64942,64943,64944,64945,64946,64947,64948,64949,64950,64951,64952,64953,64954,64955,64956,64957,64958,64959,64960,64961,64962,64963,64964,64965,64966,64967,64968,64969,64970,64971,64972,64973,64974,64975,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65008,65009,65010,65011,65012,65013,65014,65015,65016,65017,65018,65019,65020,65021,65022,65023,65024,65025,65026,65027,65028,65029,65030,65031,65032,65033,65034,65035,65036,65037,65038,65039,65040,65041,65042,65043,65044,65045,65046,65047,65048,65049,65050,65051,65052,65053,65054,65055,65056'/>
+  </group>
+  <group name='303'>
+    <ids val='65057,65058,65059,65060,65061,65062,65063,65064,65065,65066,65067,65068,65069,65070,65071,65072,65073,65074,65075,65076,65077,65078,65079,65080,65081,65082,65083,65084,65085,65086,65087,65088,65089,65090,65091,65092,65093,65094,65095,65096,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65107,65108,65109,65110,65111,65112,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65127,65128,65129,65130,65131,65132,65133,65134,65135,65136,65137,65138,65139,65140,65141,65142,65143,65144,65145,65146,65147,65148,65149,65150,65151,65152,65153,65154,65155,65156,65157,65158,65159,65160,65161,65162,65163,65164,65165,65166,65167,65168,65169,65170,65171,65172,65173,65174,65175,65176,65177,65178,65179,65180,65181,65182,65183,65184,65185,65186,65187,65188,65189,65190,65191,65192,65193,65194,65195,65196,65197,65198,65199,65200,65201,65202,65203,65204,65205,65206,65207,65208,65209,65210,65211,65212,65213,65214,65215,65216,65217,65218,65219,65220,65221,65222,65223,65224,65225,65226,65227,65228,65229,65230,65231,65232,65233,65234,65235,65236,65237,65238,65239,65240,65241,65242,65243,65244,65245,65246,65247,65248,65249,65250,65251,65252,65253,65254,65255,65256,65257,65258,65259,65260,65261,65262,65263,65264,65265,65266,65267,65268,65269,65270,65271,65272,65273,65274,65275,65276,65277,65278,65279,65280,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360'/>
+  </group>
+  <group name='303'>
+    <ids val='65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65374,65375,65376,65377,65378,65379,65380,65381,65382,65383,65384,65385,65386,65387,65388,65389,65390,65391,65392,65393,65394,65395,65396,65397,65398,65399,65400,65401,65402,65403,65404,65405,65406,65407,65408,65409,65410,65411,65412,65413,65414,65415,65416,65417,65418,65419,65420,65421,65422,65423,65424,65425,65426,65427,65428,65429,65430,65431,65432,65433,65434,65435,65436,65437,65438,65439,65440,65441,65442,65443,65444,65445,65446,65447,65448,65449,65450,65451,65452,65453,65454,65455,65456,65457,65458,65459,65460,65461,65462,65463,65464,65465,65466,65467,65468,65469,65470,65471,65472,65473,65474,65475,65476,65477,65478,65479,65480,65481,65482,65483,65484,65485,65486,65487,65488,65489,65490,65491,65492,65493,65494,65495,65496,65497,65498,65499,65500,65501,65502,65503,65504,65505,65506,65507,65508,65509,65510,65511,65512,65513,65514,65515,65516,65517,65518,65519,65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535,65536,65537,65538,65539,65540,65541,65542,65543,65544,65545,65546,65547,65548,65549,65550,65551,65552,65553,65554,65555,65556,65557,65558,65559,65560,65561,65562,65563,65564,65565,65566,65567,65568,65569,65570,65571,65572,65573,65574,65575,65576,65577,65578,65579,65580,65581,65582,65583,65584,65585,65586,65587,65588,65589,65590,65591,65592,65593,65594,65595,65596,65597,65598,65599,65600,65601,65602,65603,65604,65605,65606,65607,65608,65609,65610,65611,65612,65613,65614,65615,65616,65617,65618,65619,65620,65621,65622,65623,65624,65625,65626,65627,65628,65629,65630,65631,65632,65633,65634,65635,65636,65637,65638,65639,65640,65641,65642,65643,65644,65645,65646,65647,65648,65649,65650,65651,65652,65653,65654,65655,65656,65657,65658,65659,65660,65661,65662,65663,65664'/>
+  </group>
+  <group name='303'>
+    <ids val='65665,65666,65667,65668,65669,65670,65671,65672,65673,65674,65675,65676,65677,65678,65679,65680,65681,65682,65683,65684,65685,65686,65687,65688,65689,65690,65691,65692,65693,65694,65695,65696,65697,65698,65699,65700,65701,65702,65703,65704,65705,65706,65707,65708,65709,65710,65711,65712,65713,65714,65715,65716,65717,65718,65719,65720,65721,65722,65723,65724,65725,65726,65727,65728,65729,65730,65731,65732,65733,65734,65735,65736,65737,65738,65739,65740,65741,65742,65743,65744,65745,65746,65747,65748,65749,65750,65751,65752,65753,65754,65755,65756,65757,65758,65759,65760,65761,65762,65763,65764,65765,65766,65767,65768,65769,65770,65771,65772,65773,65774,65775,65776,65777,65778,65779,65780,65781,65782,65783,65784,65785,65786,65787,65788,65789,65790,65791,65792,65793,65794,65795,65796,65797,65798,65799,65800,65801,65802,65803,65804,65805,65806,65807,65808,65809,65810,65811,65812,65813,65814,65815,65816,65817,65818,65819,65820,65821,65822,65823,65824,65825,65826,65827,65828,65829,65830,65831,65832,65833,65834,65835,65836,65837,65838,65839,65840,65841,65842,65843,65844,65845,65846,65847,65848,65849,65850,65851,65852,65853,65854,65855,65856,65857,65858,65859,65860,65861,65862,65863,65864,65865,65866,65867,65868,65869,65870,65871,65872,65873,65874,65875,65876,65877,65878,65879,65880,65881,65882,65883,65884,65885,65886,65887,65888,65889,65890,65891,65892,65893,65894,65895,65896,65897,65898,65899,65900,65901,65902,65903,65904,65905,65906,65907,65908,65909,65910,65911,65912,65913,65914,65915,65916,65917,65918,65919,65920,65921,65922,65923,65924,65925,65926,65927,65928,65929,65930,65931,65932,65933,65934,65935,65936,65937,65938,65939,65940,65941,65942,65943,65944,65945,65946,65947,65948,65949,65950,65951,65952,65953,65954,65955,65956,65957,65958,65959,65960,65961,65962,65963,65964,65965,65966,65967,65968'/>
+  </group>
+  <group name='303'>
+    <ids val='65969,65970,65971,65972,65973,65974,65975,65976,65977,65978,65979,65980,65981,65982,65983,65984,65985,65986,65987,65988,65989,65990,65991,65992,65993,65994,65995,65996,65997,65998,65999,66000,66001,66002,66003,66004,66005,66006,66007,66008,66009,66010,66011,66012,66013,66014,66015,66016,66017,66018,66019,66020,66021,66022,66023,66024,66025,66026,66027,66028,66029,66030,66031,66032,66033,66034,66035,66036,66037,66038,66039,66040,66041,66042,66043,66044,66045,66046,66047,66048,66049,66050,66051,66052,66053,66054,66055,66056,66057,66058,66059,66060,66061,66062,66063,66064,66065,66066,66067,66068,66069,66070,66071,66072,66073,66074,66075,66076,66077,66078,66079,66080,66081,66082,66083,66084,66085,66086,66087,66088,66089,66090,66091,66092,66093,66094,66095,66096,66097,66098,66099,66100,66101,66102,66103,66104,66105,66106,66107,66108,66109,66110,66111,66112,66113,66114,66115,66116,66117,66118,66119,66120,66121,66122,66123,66124,66125,66126,66127,66128,66129,66130,66131,66132,66133,66134,66135,66136,66137,66138,66139,66140,66141,66142,66143,66144,66145,66146,66147,66148,66149,66150,66151,66152,66153,66154,66155,66156,66157,66158,66159,66160,66161,66162,66163,66164,66165,66166,66167,66168,66169,66170,66171,66172,66173,66174,66175,66176,66177,66178,66179,66180,66181,66182,66183,66184,66185,66186,66187,66188,66189,66190,66191,66192,66193,66194,66195,66196,66197,66198,66199,66200,66201,66202,66203,66204,66205,66206,66207,66208,66209,66210,66211,66212,66213,66214,66215,66216,66217,66218,66219,66220,66221,66222,66223,66224,66225,66226,66227,66228,66229,66230,66231,66232,66233,66234,66235,66236,66237,66238,66239,66240,66241,66242,66243,66244,66245,66246,66247,66248,66249,66250,66251,66252,66253,66254,66255,66256,66257,66258,66259,66260,66261,66262,66263,66264,66265,66266,66267,66268,66269,66270,66271,66272'/>
+  </group>
+  <group name='303'>
+    <ids val='66273,66274,66275,66276,66277,66278,66279,66280,66281,66282,66283,66284,66285,66286,66287,66288,66289,66290,66291,66292,66293,66294,66295,66296,66297,66298,66299,66300,66301,66302,66303,66304,66305,66306,66307,66308,66309,66310,66311,66312,66313,66314,66315,66316,66317,66318,66319,66320,66321,66322,66323,66324,66325,66326,66327,66328,66329,66330,66331,66332,66333,66334,66335,66336,66337,66338,66339,66340,66341,66342,66343,66344,66345,66346,66347,66348,66349,66350,66351,66352,66353,66354,66355,66356,66357,66358,66359,66360,66361,66362,66363,66364,66365,66366,66367,66368,66369,66370,66371,66372,66373,66374,66375,66376,66377,66378,66379,66380,66381,66382,66383,66384,66385,66386,66387,66388,66389,66390,66391,66392,66393,66394,66395,66396,66397,66398,66399,66400,66401,66402,66403,66404,66405,66406,66407,66408,66409,66410,66411,66412,66413,66414,66415,66416,66417,66418,66419,66420,66421,66422,66423,66424,66425,66426,66427,66428,66429,66430,66431,66432,66433,66434,66435,66436,66437,66438,66439,66440,66441,66442,66443,66444,66445,66446,66447,66448,66449,66450,66451,66452,66453,66454,66455,66456,66457,66458,66459,66460,66461,66462,66463,66464,66465,66466,66467,66468,66469,66470,66471,66472,66473,66474,66475,66476,66477,66478,66479,66480,66481,66482,66483,66484,66485,66486,66487,66488,66489,66490,66491,66492,66493,66494,66495,66496,66497,66498,66499,66500,66501,66502,66503,66504,66505,66506,66507,66508,66509,66510,66511,66512,66513,66514,66515,66516,66517,66518,66519,66520,66521,66522,66523,66524,66525,66526,66527,66528,66529,66530,66531,66532,66533,66534,66535,66536,66537,66538,66539,66540,66541,66542,66543,66544,66545,66546,66547,66548,66549,66550,66551,66552,66553,66554,66555,66556,66557,66558,66559,66560,66561,66562,66563,66564,66565,66566,66567,66568,66569,66570,66571,66572,66573,66574,66575,66576'/>
+  </group>
+  <group name='303'>
+    <ids val='66577,66578,66579,66580,66581,66582,66583,66584,66585,66586,66587,66588,66589,66590,66591,66592,66593,66594,66595,66596,66597,66598,66599,66600,66601,66602,66603,66604,66605,66606,66607,66608,66609,66610,66611,66612,66613,66614,66615,66616,66617,66618,66619,66620,66621,66622,66623,66624,66625,66626,66627,66628,66629,66630,66631,66632,66633,66634,66635,66636,66637,66638,66639,66640,66641,66642,66643,66644,66645,66646,66647,66648,66649,66650,66651,66652,66653,66654,66655,66656,66657,66658,66659,66660,66661,66662,66663,66664,66665,66666,66667,66668,66669,66670,66671,66672,66673,66674,66675,66676,66677,66678,66679,66680,66681,66682,66683,66684,66685,66686,66687,66688,66689,66690,66691,66692,66693,66694,66695,66696,66697,66698,66699,66700,66701,66702,66703,66704,66705,66706,66707,66708,66709,66710,66711,66712,66713,66714,66715,66716,66717,66718,66719,66720,66721,66722,66723,66724,66725,66726,66727,66728,66729,66730,66731,66732,66733,66734,66735,66736,66737,66738,66739,66740,66741,66742,66743,66744,66745,66746,66747,66748,66749,66750,66751,66752,66753,66754,66755,66756,66757,66758,66759,66760,66761,66762,66763,66764,66765,66766,66767,66768,66769,66770,66771,66772,66773,66774,66775,66776,66777,66778,66779,66780,66781,66782,66783,66784,66785,66786,66787,66788,66789,66790,66791,66792,66793,66794,66795,66796,66797,66798,66799,66800,66801,66802,66803,66804,66805,66806,66807,66808,66809,66810,66811,66812,66813,66814,66815,66816,66817,66818,66819,66820,66821,66822,66823,66824,66825,66826,66827,66828,66829,66830,66831,66832,66833,66834,66835,66836,66837,66838,66839,66840,66841,66842,66843,66844,66845,66846,66847,66848,66849,66850,66851,66852,66853,66854,66855,66856,66857,66858,66859,66860,66861,66862,66863,66864,66865,66866,66867,66868,66869,66870,66871,66872,66873,66874,66875,66876,66877,66878,66879,66880'/>
+  </group>
+  <group name='303'>
+    <ids val='66881,66882,66883,66884,66885,66886,66887,66888,66889,66890,66891,66892,66893,66894,66895,66896,66897,66898,66899,66900,66901,66902,66903,66904,66905,66906,66907,66908,66909,66910,66911,66912,66913,66914,66915,66916,66917,66918,66919,66920,66921,66922,66923,66924,66925,66926,66927,66928,66929,66930,66931,66932,66933,66934,66935,66936,66937,66938,66939,66940,66941,66942,66943,66944,66945,66946,66947,66948,66949,66950,66951,66952,66953,66954,66955,66956,66957,66958,66959,66960,66961,66962,66963,66964,66965,66966,66967,66968,66969,66970,66971,66972,66973,66974,66975,66976,66977,66978,66979,66980,66981,66982,66983,66984,66985,66986,66987,66988,66989,66990,66991,66992,66993,66994,66995,66996,66997,66998,66999,67000,67001,67002,67003,67004,67005,67006,67007,67008,67009,67010,67011,67012,67013,67014,67015,67016,67017,67018,67019,67020,67021,67022,67023,67024,67025,67026,67027,67028,67029,67030,67031,67032,67033,67034,67035,67036,67037,67038,67039,67040,67041,67042,67043,67044,67045,67046,67047,67048,67049,67050,67051,67052,67053,67054,67055,67056,67057,67058,67059,67060,67061,67062,67063,67064,67065,67066,67067,67068,67069,67070,67071,67072,67073,67074,67075,67076,67077,67078,67079,67080,67081,67082,67083,67084,67085,67086,67087,67088,67089,67090,67091,67092,67093,67094,67095,67096,67097,67098,67099,67100,67101,67102,67103,67104,67105,67106,67107,67108,67109,67110,67111,67112,67113,67114,67115,67116,67117,67118,67119,67120,67121,67122,67123,67124,67125,67126,67127,67128,67129,67130,67131,67132,67133,67134,67135,67136,67137,67138,67139,67140,67141,67142,67143,67144,67145,67146,67147,67148,67149,67150,67151,67152,67153,67154,67155,67156,67157,67158,67159,67160,67161,67162,67163,67164,67165,67166,67167,67168,67169,67170,67171,67172,67173,67174,67175,67176,67177,67178,67179,67180,67181,67182,67183,67184'/>
+  </group>
+  <group name='303'>
+    <ids val='67185,67186,67187,67188,67189,67190,67191,67192,67193,67194,67195,67196,67197,67198,67199,67200,67201,67202,67203,67204,67205,67206,67207,67208,67209,67210,67211,67212,67213,67214,67215,67216,67217,67218,67219,67220,67221,67222,67223,67224,67225,67226,67227,67228,67229,67230,67231,67232,67233,67234,67235,67236,67237,67238,67239,67240,67241,67242,67243,67244,67245,67246,67247,67248,67249,67250,67251,67252,67253,67254,67255,67256,67257,67258,67259,67260,67261,67262,67263,67264,67265,67266,67267,67268,67269,67270,67271,67272,67273,67274,67275,67276,67277,67278,67279,67280,67281,67282,67283,67284,67285,67286,67287,67288,67289,67290,67291,67292,67293,67294,67295,67296,67297,67298,67299,67300,67301,67302,67303,67304,67305,67306,67307,67308,67309,67310,67311,67312,67313,67314,67315,67316,67317,67318,67319,67320,67321,67322,67323,67324,67325,67326,67327,67328,67329,67330,67331,67332,67333,67334,67335,67336,67337,67338,67339,67340,67341,67342,67343,67344,67345,67346,67347,67348,67349,67350,67351,67352,67353,67354,67355,67356,67357,67358,67359,67360,67361,67362,67363,67364,67365,67366,67367,67368,67369,67370,67371,67372,67373,67374,67375,67376,67377,67378,67379,67380,67381,67382,67383,67384,67385,67386,67387,67388,67389,67390,67391,67392,67393,67394,67395,67396,67397,67398,67399,67400,67401,67402,67403,67404,67405,67406,67407,67408,67409,67410,67411,67412,67413,67414,67415,67416,67417,67418,67419,67420,67421,67422,67423,67424,67425,67426,67427,67428,67429,67430,67431,67432,67433,67434,67435,67436,67437,67438,67439,67440,67441,67442,67443,67444,67445,67446,67447,67448,67449,67450,67451,67452,67453,67454,67455,67456,67457,67458,67459,67460,67461,67462,67463,67464,67465,67466,67467,67468,67469,67470,67471,67472,67473,67474,67475,67476,67477,67478,67479,67480,67481,67482,67483,67484,67485,67486,67487,67488'/>
+  </group>
+  <group name='303'>
+    <ids val='67489,67490,67491,67492,67493,67494,67495,67496,67497,67498,67499,67500,67501,67502,67503,67504,67505,67506,67507,67508,67509,67510,67511,67512,67513,67514,67515,67516,67517,67518,67519,67520,67521,67522,67523,67524,67525,67526,67527,67528,67529,67530,67531,67532,67533,67534,67535,67536,67537,67538,67539,67540,67541,67542,67543,67544,67545,67546,67547,67548,67549,67550,67551,67552,67553,67554,67555,67556,67557,67558,67559,67560,67561,67562,67563,67564,67565,67566,67567,67568,67569,67570,67571,67572,67573,67574,67575,67576,67577,67578,67579,67580,67581,67582,67583,67584,67585,67586,67587,67588,67589,67590,67591,67592,67593,67594,67595,67596,67597,67598,67599,67600,67601,67602,67603,67604,67605,67606,67607,67608,67609,67610,67611,67612,67613,67614,67615,67616,67617,67618,67619,67620,67621,67622,67623,67624,67625,67626,67627,67628,67629,67630,67631,67632,67633,67634,67635,67636,67637,67638,67639,67640,67641,67642,67643,67644,67645,67646,67647,67648,67649,67650,67651,67652,67653,67654,67655,67656,67657,67658,67659,67660,67661,67662,67663,67664,67665,67666,67667,67668,67669,67670,67671,67672,67673,67674,67675,67676,67677,67678,67679,67680,67681,67682,67683,67684,67685,67686,67687,67688,67689,67690,67691,67692,67693,67694,67695,67696,67697,67698,67699,67700,67701,67702,67703,67704,67705,67706,67707,67708,67709,67710,67711,67712,67713,67714,67715,67716,67717,67718,67719,67720,67721,67722,67723,67724,67725,67726,67727,67728,67729,67730,67731,67732,67733,67734,67735,67736,67737,67738,67739,67740,67741,67742,67743,67744,67745,67746,67747,67748,67749,67750,67751,67752,67753,67754,67755,67756,67757,67758,67759,67760,67761,67762,67763,67764,67765,67766,67767,67768,67769,67770,67771,67772,67773,67774,67775,67776,67777,67778,67779,67780,67781,67782,67783,67784,67785,67786,67787,67788,67789,67790,67791,67792'/>
+  </group>
+  <group name='303'>
+    <ids val='67793,67794,67795,67796,67797,67798,67799,67800,67801,67802,67803,67804,67805,67806,67807,67808,67809,67810,67811,67812,67813,67814,67815,67816,67817,67818,67819,67820,67821,67822,67823,67824,67825,67826,67827,67828,67829,67830,67831,67832,67833,67834,67835,67836,67837,67838,67839,67840,67841,67842,67843,67844,67845,67846,67847,67848,67849,67850,67851,67852,67853,67854,67855,67856,67857,67858,67859,67860,67861,67862,67863,67864,67865,67866,67867,67868,67869,67870,67871,67872,67873,67874,67875,67876,67877,67878,67879,67880,67881,67882,67883,67884,67885,67886,67887,67888,67889,67890,67891,67892,67893,67894,67895,67896,67897,67898,67899,67900,67901,67902,67903,67904,67905,67906,67907,67908,67909,67910,67911,67912,67913,67914,67915,67916,67917,67918,67919,67920,67921,67922,67923,67924,67925,67926,67927,67928,67929,67930,67931,67932,67933,67934,67935,67936,67937,67938,67939,67940,67941,67942,67943,67944,67945,67946,67947,67948,67949,67950,67951,67952,67953,67954,67955,67956,67957,67958,67959,67960,67961,67962,67963,67964,67965,67966,67967,67968,67969,67970,67971,67972,67973,67974,67975,67976,67977,67978,67979,67980,67981,67982,67983,67984,67985,67986,67987,67988,67989,67990,67991,67992,67993,67994,67995,67996,67997,67998,67999,68000,68001,68002,68003,68004,68005,68006,68007,68008,68009,68010,68011,68012,68013,68014,68015,68016,68017,68018,68019,68020,68021,68022,68023,68024,68025,68026,68027,68028,68029,68030,68031,68032,68033,68034,68035,68036,68037,68038,68039,68040,68041,68042,68043,68044,68045,68046,68047,68048,68049,68050,68051,68052,68053,68054,68055,68056,68057,68058,68059,68060,68061,68062,68063,68064,68065,68066,68067,68068,68069,68070,68071,68072,68073,68074,68075,68076,68077,68078,68079,68080,68081,68082,68083,68084,68085,68086,68087,68088,68089,68090,68091,68092,68093,68094,68095,68096'/>
+  </group>
+  <group name='303'>
+    <ids val='68097,68098,68099,68100,68101,68102,68103,68104,68105,68106,68107,68108,68109,68110,68111,68112,68113,68114,68115,68116,68117,68118,68119,68120,68121,68122,68123,68124,68125,68126,68127,68128,68129,68130,68131,68132,68133,68134,68135,68136,68137,68138,68139,68140,68141,68142,68143,68144,68145,68146,68147,68148,68149,68150,68151,68152,68153,68154,68155,68156,68157,68158,68159,68160,68161,68162,68163,68164,68165,68166,68167,68168,68169,68170,68171,68172,68173,68174,68175,68176,68177,68178,68179,68180,68181,68182,68183,68184,68185,68186,68187,68188,68189,68190,68191,68192,68193,68194,68195,68196,68197,68198,68199,68200,68201,68202,68203,68204,68205,68206,68207,68208,68209,68210,68211,68212,68213,68214,68215,68216,68217,68218,68219,68220,68221,68222,68223,68224,68225,68226,68227,68228,68229,68230,68231,68232,68233,68234,68235,68236,68237,68238,68239,68240,68241,68242,68243,68244,68245,68246,68247,68248,68249,68250,68251,68252,68253,68254,68255,68256,68257,68258,68259,68260,68261,68262,68263,68264,68265,68266,68267,68268,68269,68270,68271,68272,68273,68274,68275,68276,68277,68278,68279,68280,68281,68282,68283,68284,68285,68286,68287,68288,68289,68290,68291,68292,68293,68294,68295,68296,68297,68298,68299,68300,68301,68302,68303,68304,68305,68306,68307,68308,68309,68310,68311,68312,68313,68314,68315,68316,68317,68318,68319,68320,68321,68322,68323,68324,68325,68326,68327,68328,68329,68330,68331,68332,68333,68334,68335,68336,68337,68338,68339,68340,68341,68342,68343,68344,68345,68346,68347,68348,68349,68350,68351,68352,68353,68354,68355,68356,68357,68358,68359,68360,68361,68362,68363,68364,68365,68366,68367,68368,68369,68370,68371,68372,68373,68374,68375,68376,68377,68378,68379,68380,68381,68382,68383,68384,68385,68386,68387,68388,68389,68390,68391,68392,68393,68394,68395,68396,68397,68398,68399,68400'/>
+  </group>
+  <group name='303'>
+    <ids val='68401,68402,68403,68404,68405,68406,68407,68408,68409,68410,68411,68412,68413,68414,68415,68416,68417,68418,68419,68420,68421,68422,68423,68424,68425,68426,68427,68428,68429,68430,68431,68432,68433,68434,68435,68436,68437,68438,68439,68440,68441,68442,68443,68444,68445,68446,68447,68448,68449,68450,68451,68452,68453,68454,68455,68456,68457,68458,68459,68460,68461,68462,68463,68464,68465,68466,68467,68468,68469,68470,68471,68472,68473,68474,68475,68476,68477,68478,68479,68480,68481,68482,68483,68484,68485,68486,68487,68488,68489,68490,68491,68492,68493,68494,68495,68496,68497,68498,68499,68500,68501,68502,68503,68504,68505,68506,68507,68508,68509,68510,68511,68512,68513,68514,68515,68516,68517,68518,68519,68520,68521,68522,68523,68524,68525,68526,68527,68528,68529,68530,68531,68532,68533,68534,68535,68536,68537,68538,68539,68540,68541,68542,68543,68544,68545,68546,68547,68548,68549,68550,68551,68552,68553,68554,68555,68556,68557,68558,68559,68560,68561,68562,68563,68564,68565,68566,68567,68568,68569,68570,68571,68572,68573,68574,68575,68576,68577,68578,68579,68580,68581,68582,68583,68584,68585,68586,68587,68588,68589,68590,68591,68592,68593,68594,68595,68596,68597,68598,68599,68600,68601,68602,68603,68604,68605,68606,68607,68608,68609,68610,68611,68612,68613,68614,68615,68616,68617,68618,68619,68620,68621,68622,68623,68624,68625,68626,68627,68628,68629,68630,68631,68632,68633,68634,68635,68636,68637,68638,68639,68640,68641,68642,68643,68644,68645,68646,68647,68648,68649,68650,68651,68652,68653,68654,68655,68656,68657,68658,68659,68660,68661,68662,68663,68664,68665,68666,68667,68668,68669,68670,68671,68672,68673,68674,68675,68676,68677,68678,68679,68680,68681,68682,68683,68684,68685,68686,68687,68688,68689,68690,68691,68692,68693,68694,68695,68696,68697,68698,68699,68700,68701,68702,68703,68704'/>
+  </group>
+  <group name='303'>
+    <ids val='68705,68706,68707,68708,68709,68710,68711,68712,68713,68714,68715,68716,68717,68718,68719,68720,68721,68722,68723,68724,68725,68726,68727,68728,68729,68730,68731,68732,68733,68734,68735,68736,68737,68738,68739,68740,68741,68742,68743,68744,68745,68746,68747,68748,68749,68750,68751,68752,68753,68754,68755,68756,68757,68758,68759,68760,68761,68762,68763,68764,68765,68766,68767,68768,68769,68770,68771,68772,68773,68774,68775,68776,68777,68778,68779,68780,68781,68782,68783,68784,68785,68786,68787,68788,68789,68790,68791,68792,68793,68794,68795,68796,68797,68798,68799,68800,68801,68802,68803,68804,68805,68806,68807,68808,68809,68810,68811,68812,68813,68814,68815,68816,68817,68818,68819,68820,68821,68822,68823,68824,68825,68826,68827,68828,68829,68830,68831,68832,68833,68834,68835,68836,68837,68838,68839,68840,68841,68842,68843,68844,68845,68846,68847,68848,68849,68850,68851,68852,68853,68854,68855,68856,68857,68858,68859,68860,68861,68862,68863,68864,68865,68866,68867,68868,68869,68870,68871,68872,68873,68874,68875,68876,68877,68878,68879,68880,68881,68882,68883,68884,68885,68886,68887,68888,68889,68890,68891,68892,68893,68894,68895,68896,68897,68898,68899,68900,68901,68902,68903,68904,68905,68906,68907,68908,68909,68910,68911,68912,68913,68914,68915,68916,68917,68918,68919,68920,68921,68922,68923,68924,68925,68926,68927,68928,68929,68930,68931,68932,68933,68934,68935,68936,68937,68938,68939,68940,68941,68942,68943,68944,68945,68946,68947,68948,68949,68950,68951,68952,68953,68954,68955,68956,68957,68958,68959,68960,68961,68962,68963,68964,68965,68966,68967,68968,68969,68970,68971,68972,68973,68974,68975,68976,68977,68978,68979,68980,68981,68982,68983,68984,68985,68986,68987,68988,68989,68990,68991,68992,68993,68994,68995,68996,68997,68998,68999,69000,69001,69002,69003,69004,69005,69006,69007,69008'/>
+  </group>
+  <group name='303'>
+    <ids val='69009,69010,69011,69012,69013,69014,69015,69016,69017,69018,69019,69020,69021,69022,69023,69024,69025,69026,69027,69028,69029,69030,69031,69032,69033,69034,69035,69036,69037,69038,69039,69040,69041,69042,69043,69044,69045,69046,69047,69048,69049,69050,69051,69052,69053,69054,69055,69056,69057,69058,69059,69060,69061,69062,69063,69064,69065,69066,69067,69068,69069,69070,69071,69072,69073,69074,69075,69076,69077,69078,69079,69080,69081,69082,69083,69084,69085,69086,69087,69088,69089,69090,69091,69092,69093,69094,69095,69096,69097,69098,69099,69100,69101,69102,69103,69104,69105,69106,69107,69108,69109,69110,69111,69112,69113,69114,69115,69116,69117,69118,69119,69120,69121,69122,69123,69124,69125,69126,69127,69128,69129,69130,69131,69132,69133,69134,69135,69136,69137,69138,69139,69140,69141,69142,69143,69144,69145,69146,69147,69148,69149,69150,69151,69152,69153,69154,69155,69156,69157,69158,69159,69160,69161,69162,69163,69164,69165,69166,69167,69168,69169,69170,69171,69172,69173,69174,69175,69176,69177,69178,69179,69180,69181,69182,69183,69184,69185,69186,69187,69188,69189,69190,69191,69192,69193,69194,69195,69196,69197,69198,69199,69200,69201,69202,69203,69204,69205,69206,69207,69208,69209,69210,69211,69212,69213,69214,69215,69216,69217,69218,69219,69220,69221,69222,69223,69224,69225,69226,69227,69228,69229,69230,69231,69232,69233,69234,69235,69236,69237,69238,69239,69240,69241,69242,69243,69244,69245,69246,69247,69248,69249,69250,69251,69252,69253,69254,69255,69256,69257,69258,69259,69260,69261,69262,69263,69264,69265,69266,69267,69268,69269,69270,69271,69272,69273,69274,69275,69276,69277,69278,69279,69280,69281,69282,69283,69284,69285,69286,69287,69288,69289,69290,69291,69292,69293,69294,69295,69296,69297,69298,69299,69300,69301,69302,69303,69304,69305,69306,69307,69308,69309,69310,69311,69312'/>
+  </group>
+  <group name='303'>
+    <ids val='69313,69314,69315,69316,69317,69318,69319,69320,69321,69322,69323,69324,69325,69326,69327,69328,69329,69330,69331,69332,69333,69334,69335,69336,69337,69338,69339,69340,69341,69342,69343,69344,69345,69346,69347,69348,69349,69350,69351,69352,69353,69354,69355,69356,69357,69358,69359,69360,69361,69362,69363,69364,69365,69366,69367,69368,69369,69370,69371,69372,69373,69374,69375,69376,69377,69378,69379,69380,69381,69382,69383,69384,69385,69386,69387,69388,69389,69390,69391,69392,69393,69394,69395,69396,69397,69398,69399,69400,69401,69402,69403,69404,69405,69406,69407,69408,69409,69410,69411,69412,69413,69414,69415,69416,69417,69418,69419,69420,69421,69422,69423,69424,69425,69426,69427,69428,69429,69430,69431,69432,69433,69434,69435,69436,69437,69438,69439,69440,69441,69442,69443,69444,69445,69446,69447,69448,69449,69450,69451,69452,69453,69454,69455,69456,69457,69458,69459,69460,69461,69462,69463,69464,69465,69466,69467,69468,69469,69470,69471,69472,69473,69474,69475,69476,69477,69478,69479,69480,69481,69482,69483,69484,69485,69486,69487,69488,69489,69490,69491,69492,69493,69494,69495,69496,69497,69498,69499,69500,69501,69502,69503,69504,69505,69506,69507,69508,69509,69510,69511,69512,69513,69514,69515,69516,69517,69518,69519,69520,69521,69522,69523,69524,69525,69526,69527,69528,69529,69530,69531,69532,69533,69534,69535,69536,69537,69538,69539,69540,69541,69542,69543,69544,69545,69546,69547,69548,69549,69550,69551,69552,69553,69554,69555,69556,69557,69558,69559,69560,69561,69562,69563,69564,69565,69566,69567,69568,69569,69570,69571,69572,69573,69574,69575,69576,69577,69578,69579,69580,69581,69582,69583,69584,69585,69586,69587,69588,69589,69590,69591,69592,69593,69594,69595,69596,69597,69598,69599,69600,69601,69602,69603,69604,69605,69606,69607,69608,69609,69610,69611,69612,69613,69614,69615,69616'/>
+  </group>
+  <group name='303'>
+    <ids val='69617,69618,69619,69620,69621,69622,69623,69624,69625,69626,69627,69628,69629,69630,69631,69632,69633,69634,69635,69636,69637,69638,69639,69640,69641,69642,69643,69644,69645,69646,69647,69648,69649,69650,69651,69652,69653,69654,69655,69656,69657,69658,69659,69660,69661,69662,69663,69664,69665,69666,69667,69668,69669,69670,69671,69672,69673,69674,69675,69676,69677,69678,69679,69680,69681,69682,69683,69684,69685,69686,69687,69688,69689,69690,69691,69692,69693,69694,69695,69696,69697,69698,69699,69700,69701,69702,69703,69704,69705,69706,69707,69708,69709,69710,69711,69712,69713,69714,69715,69716,69717,69718,69719,69720,69721,69722,69723,69724,69725,69726,69727,69728,69729,69730,69731,69732,69733,69734,69735,69736,69737,69738,69739,69740,69741,69742,69743,69744,69745,69746,69747,69748,69749,69750,69751,69752,69753,69754,69755,69756,69757,69758,69759,69760,69761,69762,69763,69764,69765,69766,69767,69768,69769,69770,69771,69772,69773,69774,69775,69776,69777,69778,69779,69780,69781,69782,69783,69784,69785,69786,69787,69788,69789,69790,69791,69792,69793,69794,69795,69796,69797,69798,69799,69800,69801,69802,69803,69804,69805,69806,69807,69808,69809,69810,69811,69812,69813,69814,69815,69816,69817,69818,69819,69820,69821,69822,69823,69824,69825,69826,69827,69828,69829,69830,69831,69832,69833,69834,69835,69836,69837,69838,69839,69840,69841,69842,69843,69844,69845,69846,69847,69848,69849,69850,69851,69852,69853,69854,69855,69856,69857,69858,69859,69860,69861,69862,69863,69864,69865,69866,69867,69868,69869,69870,69871,69872,69873,69874,69875,69876,69877,69878,69879,69880,69881,69882,69883,69884,69885,69886,69887,69888,69889,69890,69891,69892,69893,69894,69895,69896,69897,69898,69899,69900,69901,69902,69903,69904,69905,69906,69907,69908,69909,69910,69911,69912,69913,69914,69915,69916,69917,69918,69919,69920'/>
+  </group>
+  <group name='303'>
+    <ids val='69921,69922,69923,69924,69925,69926,69927,69928,69929,69930,69931,69932,69933,69934,69935,69936,69937,69938,69939,69940,69941,69942,69943,69944,69945,69946,69947,69948,69949,69950,69951,69952,69953,69954,69955,69956,69957,69958,69959,69960,69961,69962,69963,69964,69965,69966,69967,69968,69969,69970,69971,69972,69973,69974,69975,69976,69977,69978,69979,69980,69981,69982,69983,69984,69985,69986,69987,69988,69989,69990,69991,69992,69993,69994,69995,69996,69997,69998,69999,70000,70001,70002,70003,70004,70005,70006,70007,70008,70009,70010,70011,70012,70013,70014,70015,70016,70017,70018,70019,70020,70021,70022,70023,70024,70025,70026,70027,70028,70029,70030,70031,70032,70033,70034,70035,70036,70037,70038,70039,70040,70041,70042,70043,70044,70045,70046,70047,70048,70049,70050,70051,70052,70053,70054,70055,70056,70057,70058,70059,70060,70061,70062,70063,70064,70065,70066,70067,70068,70069,70070,70071,70072,70073,70074,70075,70076,70077,70078,70079,70080,70081,70082,70083,70084,70085,70086,70087,70088,70089,70090,70091,70092,70093,70094,70095,70096,70097,70098,70099,70100,70101,70102,70103,70104,70105,70106,70107,70108,70109,70110,70111,70112,70113,70114,70115,70116,70117,70118,70119,70120,70121,70122,70123,70124,70125,70126,70127,70128,70129,70130,70131,70132,70133,70134,70135,70136,70137,70138,70139,70140,70141,70142,70143,70144,70145,70146,70147,70148,70149,70150,70151,70152,70153,70154,70155,70156,70157,70158,70159,70160,70161,70162,70163,70164,70165,70166,70167,70168,70169,70170,70171,70172,70173,70174,70175,70176,70177,70178,70179,70180,70181,70182,70183,70184,70185,70186,70187,70188,70189,70190,70191,70192,70193,70194,70195,70196,70197,70198,70199,70200,70201,70202,70203,70204,70205,70206,70207,70208,70209,70210,70211,70212,70213,70214,70215,70216,70217,70218,70219,70220,70221,70222,70223,70224'/>
+  </group>
+  <group name='303'>
+    <ids val='70225,70226,70227,70228,70229,70230,70231,70232,70233,70234,70235,70236,70237,70238,70239,70240,70241,70242,70243,70244,70245,70246,70247,70248,70249,70250,70251,70252,70253,70254,70255,70256,70257,70258,70259,70260,70261,70262,70263,70264,70265,70266,70267,70268,70269,70270,70271,70272,70273,70274,70275,70276,70277,70278,70279,70280,70281,70282,70283,70284,70285,70286,70287,70288,70289,70290,70291,70292,70293,70294,70295,70296,70297,70298,70299,70300,70301,70302,70303,70304,70305,70306,70307,70308,70309,70310,70311,70312,70313,70314,70315,70316,70317,70318,70319,70320,70321,70322,70323,70324,70325,70326,70327,70328,70329,70330,70331,70332,70333,70334,70335,70336,70337,70338,70339,70340,70341,70342,70343,70344,70345,70346,70347,70348,70349,70350,70351,70352,70353,70354,70355,70356,70357,70358,70359,70360,70361,70362,70363,70364,70365,70366,70367,70368,70369,70370,70371,70372,70373,70374,70375,70376,70377,70378,70379,70380,70381,70382,70383,70384,70385,70386,70387,70388,70389,70390,70391,70392,70393,70394,70395,70396,70397,70398,70399,70400,70401,70402,70403,70404,70405,70406,70407,70408,70409,70410,70411,70412,70413,70414,70415,70416,70417,70418,70419,70420,70421,70422,70423,70424,70425,70426,70427,70428,70429,70430,70431,70432,70433,70434,70435,70436,70437,70438,70439,70440,70441,70442,70443,70444,70445,70446,70447,70448,70449,70450,70451,70452,70453,70454,70455,70456,70457,70458,70459,70460,70461,70462,70463,70464,70465,70466,70467,70468,70469,70470,70471,70472,70473,70474,70475,70476,70477,70478,70479,70480,70481,70482,70483,70484,70485,70486,70487,70488,70489,70490,70491,70492,70493,70494,70495,70496,70497,70498,70499,70500,70501,70502,70503,70504,70505,70506,70507,70508,70509,70510,70511,70512,70513,70514,70515,70516,70517,70518,70519,70520,70521,70522,70523,70524,70525,70526,70527,70528'/>
+  </group>
+  <group name='303'>
+    <ids val='70529,70530,70531,70532,70533,70534,70535,70536,70537,70538,70539,70540,70541,70542,70543,70544,70545,70546,70547,70548,70549,70550,70551,70552,70553,70554,70555,70556,70557,70558,70559,70560,70561,70562,70563,70564,70565,70566,70567,70568,70569,70570,70571,70572,70573,70574,70575,70576,70577,70578,70579,70580,70581,70582,70583,70584,70585,70586,70587,70588,70589,70590,70591,70592,70593,70594,70595,70596,70597,70598,70599,70600,70601,70602,70603,70604,70605,70606,70607,70608,70609,70610,70611,70612,70613,70614,70615,70616,70617,70618,70619,70620,70621,70622,70623,70624,70625,70626,70627,70628,70629,70630,70631,70632,70633,70634,70635,70636,70637,70638,70639,70640,70641,70642,70643,70644,70645,70646,70647,70648,70649,70650,70651,70652,70653,70654,70655,70656,70657,70658,70659,70660,70661,70662,70663,70664,70665,70666,70667,70668,70669,70670,70671,70672,70673,70674,70675,70676,70677,70678,70679,70680,70681,70682,70683,70684,70685,70686,70687,70688,70689,70690,70691,70692,70693,70694,70695,70696,70697,70698,70699,70700,70701,70702,70703,70704,70705,70706,70707,70708,70709,70710,70711,70712,70713,70714,70715,70716,70717,70718,70719,70720,70721,70722,70723,70724,70725,70726,70727,70728,70729,70730,70731,70732,70733,70734,70735,70736,70737,70738,70739,70740,70741,70742,70743,70744,70745,70746,70747,70748,70749,70750,70751,70752,70753,70754,70755,70756,70757,70758,70759,70760,70761,70762,70763,70764,70765,70766,70767,70768,70769,70770,70771,70772,70773,70774,70775,70776,70777,70778,70779,70780,70781,70782,70783,70784,70785,70786,70787,70788,70789,70790,70791,70792,70793,70794,70795,70796,70797,70798,70799,70800,70801,70802,70803,70804,70805,70806,70807,70808,70809,70810,70811,70812,70813,70814,70815,70816,70817,70818,70819,70820,70821,70822,70823,70824,70825,70826,70827,70828,70829,70830,70831,70832'/>
+  </group>
+  <group name='303'>
+    <ids val='70833,70834,70835,70836,70837,70838,70839,70840,70841,70842,70843,70844,70845,70846,70847,70848,70849,70850,70851,70852,70853,70854,70855,70856,70857,70858,70859,70860,70861,70862,70863,70864,70865,70866,70867,70868,70869,70870,70871,70872,70873,70874,70875,70876,70877,70878,70879,70880,70881,70882,70883,70884,70885,70886,70887,70888,70889,70890,70891,70892,70893,70894,70895,70896,70897,70898,70899,70900,70901,70902,70903,70904,70905,70906,70907,70908,70909,70910,70911,70912,70913,70914,70915,70916,70917,70918,70919,70920,70921,70922,70923,70924,70925,70926,70927,70928,70929,70930,70931,70932,70933,70934,70935,70936,70937,70938,70939,70940,70941,70942,70943,70944,70945,70946,70947,70948,70949,70950,70951,70952,70953,70954,70955,70956,70957,70958,70959,70960,70961,70962,70963,70964,70965,70966,70967,70968,70969,70970,70971,70972,70973,70974,70975,70976,70977,70978,70979,70980,70981,70982,70983,70984,70985,70986,70987,70988,70989,70990,70991,70992,70993,70994,70995,70996,70997,70998,70999,71000,71001,71002,71003,71004,71005,71006,71007,71008,71009,71010,71011,71012,71013,71014,71015,71016,71017,71018,71019,71020,71021,71022,71023,71024,71025,71026,71027,71028,71029,71030,71031,71032,71033,71034,71035,71036,71037,71038,71039,71040,71041,71042,71043,71044,71045,71046,71047,71048,71049,71050,71051,71052,71053,71054,71055,71056,71057,71058,71059,71060,71061,71062,71063,71064,71065,71066,71067,71068,71069,71070,71071,71072,71073,71074,71075,71076,71077,71078,71079,71080,71081,71082,71083,71084,71085,71086,71087,71088,71089,71090,71091,71092,71093,71094,71095,71096,71097,71098,71099,71100,71101,71102,71103,71104,71105,71106,71107,71108,71109,71110,71111,71112,71113,71114,71115,71116,71117,71118,71119,71120,71121,71122,71123,71124,71125,71126,71127,71128,71129,71130,71131,71132,71133,71134,71135,71136'/>
+  </group>
+  <group name='303'>
+    <ids val='71137,71138,71139,71140,71141,71142,71143,71144,71145,71146,71147,71148,71149,71150,71151,71152,71153,71154,71155,71156,71157,71158,71159,71160,71161,71162,71163,71164,71165,71166,71167,71168,71169,71170,71171,71172,71173,71174,71175,71176,71177,71178,71179,71180,71181,71182,71183,71184,71185,71186,71187,71188,71189,71190,71191,71192,71193,71194,71195,71196,71197,71198,71199,71200,71201,71202,71203,71204,71205,71206,71207,71208,71209,71210,71211,71212,71213,71214,71215,71216,71217,71218,71219,71220,71221,71222,71223,71224,71225,71226,71227,71228,71229,71230,71231,71232,71233,71234,71235,71236,71237,71238,71239,71240,71241,71242,71243,71244,71245,71246,71247,71248,71249,71250,71251,71252,71253,71254,71255,71256,71257,71258,71259,71260,71261,71262,71263,71264,71265,71266,71267,71268,71269,71270,71271,71272,71273,71274,71275,71276,71277,71278,71279,71280,71281,71282,71283,71284,71285,71286,71287,71288,71289,71290,71291,71292,71293,71294,71295,71296,71297,71298,71299,71300,71301,71302,71303,71304,71305,71306,71307,71308,71309,71310,71311,71312,71313,71314,71315,71316,71317,71318,71319,71320,71321,71322,71323,71324,71325,71326,71327,71328,71329,71330,71331,71332,71333,71334,71335,71336,71337,71338,71339,71340,71341,71342,71343,71344,71345,71346,71347,71348,71349,71350,71351,71352,71353,71354,71355,71356,71357,71358,71359,71360,71361,71362,71363,71364,71365,71366,71367,71368,71369,71370,71371,71372,71373,71374,71375,71376,71377,71378,71379,71380,71381,71382,71383,71384,71385,71386,71387,71388,71389,71390,71391,71392,71393,71394,71395,71396,71397,71398,71399,71400,71401,71402,71403,71404,71405,71406,71407,71408,71409,71410,71411,71412,71413,71414,71415,71416,71417,71418,71419,71420,71421,71422,71423,71424,71425,71426,71427,71428,71429,71430,71431,71432,71433,71434,71435,71436,71437,71438,71439,71440'/>
+  </group>
+  <group name='303'>
+    <ids val='71441,71442,71443,71444,71445,71446,71447,71448,71449,71450,71451,71452,71453,71454,71455,71456,71457,71458,71459,71460,71461,71462,71463,71464,71465,71466,71467,71468,71469,71470,71471,71472,71473,71474,71475,71476,71477,71478,71479,71480,71481,71482,71483,71484,71485,71486,71487,71488,71489,71490,71491,71492,71493,71494,71495,71496,71497,71498,71499,71500,71501,71502,71503,71504,71505,71506,71507,71508,71509,71510,71511,71512,71513,71514,71515,71516,71517,71518,71519,71520,71521,71522,71523,71524,71525,71526,71527,71528,71529,71530,71531,71532,71533,71534,71535,71536,71537,71538,71539,71540,71541,71542,71543,71544,71545,71546,71547,71548,71549,71550,71551,71552,71553,71554,71555,71556,71557,71558,71559,71560,71561,71562,71563,71564,71565,71566,71567,71568,71569,71570,71571,71572,71573,71574,71575,71576,71577,71578,71579,71580,71581,71582,71583,71584,71585,71586,71587,71588,71589,71590,71591,71592,71593,71594,71595,71596,71597,71598,71599,71600,71601,71602,71603,71604,71605,71606,71607,71608,71609,71610,71611,71612,71613,71614,71615,71616,71617,71618,71619,71620,71621,71622,71623,71624,71625,71626,71627,71628,71629,71630,71631,71632,71633,71634,71635,71636,71637,71638,71639,71640,71641,71642,71643,71644,71645,71646,71647,71648,71649,71650,71651,71652,71653,71654,71655,71656,71657,71658,71659,71660,71661,71662,71663,71664,71665,71666,71667,71668,71669,71670,71671,71672,71673,71674,71675,71676,71677,71678,71679,71680,71681,71682,71683,71684,71685,71686,71687,71688,71689,71690,71691,71692,71693,71694,71695,71696,71697,71698,71699,71700,71701,71702,71703,71704,71705,71706,71707,71708,71709,71710,71711,71712,71713,71714,71715,71716,71717,71718,71719,71720,71721,71722,71723,71724,71725,71726,71727,71728,71729,71730,71731,71732,71733,71734,71735,71736,71737,71738,71739,71740,71741,71742,71743,71744'/>
+  </group>
+  <group name='303'>
+    <ids val='71745,71746,71747,71748,71749,71750,71751,71752,71753,71754,71755,71756,71757,71758,71759,71760,71761,71762,71763,71764,71765,71766,71767,71768,71769,71770,71771,71772,71773,71774,71775,71776,71777,71778,71779,71780,71781,71782,71783,71784,71785,71786,71787,71788,71789,71790,71791,71792,71793,71794,71795,71796,71797,71798,71799,71800,71801,71802,71803,71804,71805,71806,71807,71808,71809,71810,71811,71812,71813,71814,71815,71816,71817,71818,71819,71820,71821,71822,71823,71824,71825,71826,71827,71828,71829,71830,71831,71832,71833,71834,71835,71836,71837,71838,71839,71840,71841,71842,71843,71844,71845,71846,71847,71848,71849,71850,71851,71852,71853,71854,71855,71856,71857,71858,71859,71860,71861,71862,71863,71864,71865,71866,71867,71868,71869,71870,71871,71872,71873,71874,71875,71876,71877,71878,71879,71880,71881,71882,71883,71884,71885,71886,71887,71888,71889,71890,71891,71892,71893,71894,71895,71896,71897,71898,71899,71900,71901,71902,71903,71904,71905,71906,71907,71908,71909,71910,71911,71912,71913,71914,71915,71916,71917,71918,71919,71920,71921,71922,71923,71924,71925,71926,71927,71928,71929,71930,71931,71932,71933,71934,71935,71936,71937,71938,71939,71940,71941,71942,71943,71944,71945,71946,71947,71948,71949,71950,71951,71952,71953,71954,71955,71956,71957,71958,71959,71960,71961,71962,71963,71964,71965,71966,71967,71968,71969,71970,71971,71972,71973,71974,71975,71976,71977,71978,71979,71980,71981,71982,71983,71984,71985,71986,71987,71988,71989,71990,71991,71992,71993,71994,71995,71996,71997,71998,71999,72000,72001,72002,72003,72004,72005,72006,72007,72008,72009,72010,72011,72012,72013,72014,72015,72016,72017,72018,72019,72020,72021,72022,72023,72024,72025,72026,72027,72028,72029,72030,72031,72032,72033,72034,72035,72036,72037,72038,72039,72040,72041,72042,72043,72044,72045,72046,72047,72048'/>
+  </group>
+  <group name='303'>
+    <ids val='72049,72050,72051,72052,72053,72054,72055,72056,72057,72058,72059,72060,72061,72062,72063,72064,72065,72066,72067,72068,72069,72070,72071,72072,72073,72074,72075,72076,72077,72078,72079,72080,72081,72082,72083,72084,72085,72086,72087,72088,72089,72090,72091,72092,72093,72094,72095,72096,72097,72098,72099,72100,72101,72102,72103,72104,72105,72106,72107,72108,72109,72110,72111,72112,72113,72114,72115,72116,72117,72118,72119,72120,72121,72122,72123,72124,72125,72126,72127,72128,72129,72130,72131,72132,72133,72134,72135,72136,72137,72138,72139,72140,72141,72142,72143,72144,72145,72146,72147,72148,72149,72150,72151,72152,72153,72154,72155,72156,72157,72158,72159,72160,72161,72162,72163,72164,72165,72166,72167,72168,72169,72170,72171,72172,72173,72174,72175,72176,72177,72178,72179,72180,72181,72182,72183,72184,72185,72186,72187,72188,72189,72190,72191,72192,72193,72194,72195,72196,72197,72198,72199,72200,72201,72202,72203,72204,72205,72206,72207,72208,72209,72210,72211,72212,72213,72214,72215,72216,72217,72218,72219,72220,72221,72222,72223,72224,72225,72226,72227,72228,72229,72230,72231,72232,72233,72234,72235,72236,72237,72238,72239,72240,72241,72242,72243,72244,72245,72246,72247,72248,72249,72250,72251,72252,72253,72254,72255,72256,72257,72258,72259,72260,72261,72262,72263,72264,72265,72266,72267,72268,72269,72270,72271,72272,72273,72274,72275,72276,72277,72278,72279,72280,72281,72282,72283,72284,72285,72286,72287,72288,72289,72290,72291,72292,72293,72294,72295,72296,72297,72298,72299,72300,72301,72302,72303,72304,72305,72306,72307,72308,72309,72310,72311,72312,72313,72314,72315,72316,72317,72318,72319,72320,72321,72322,72323,72324,72325,72326,72327,72328,72329,72330,72331,72332,72333,72334,72335,72336,72337,72338,72339,72340,72341,72342,72343,72344,72345,72346,72347,72348,72349,72350,72351,72352'/>
+  </group>
+  <group name='303'>
+    <ids val='72353,72354,72355,72356,72357,72358,72359,72360,72361,72362,72363,72364,72365,72366,72367,72368,72369,72370,72371,72372,72373,72374,72375,72376,72377,72378,72379,72380,72381,72382,72383,72384,72385,72386,72387,72388,72389,72390,72391,72392,72393,72394,72395,72396,72397,72398,72399,72400,72401,72402,72403,72404,72405,72406,72407,72408,72409,72410,72411,72412,72413,72414,72415,72416,72417,72418,72419,72420,72421,72422,72423,72424,72425,72426,72427,72428,72429,72430,72431,72432,72433,72434,72435,72436,72437,72438,72439,72440,72441,72442,72443,72444,72445,72446,72447,72448,72449,72450,72451,72452,72453,72454,72455,72456,72457,72458,72459,72460,72461,72462,72463,72464,72465,72466,72467,72468,72469,72470,72471,72472,72473,72474,72475,72476,72477,72478,72479,72480,72481,72482,72483,72484,72485,72486,72487,72488,72489,72490,72491,72492,72493,72494,72495,72496,72497,72498,72499,72500,72501,72502,72503,72504,72505,72506,72507,72508,72509,72510,72511,72512,72513,72514,72515,72516,72517,72518,72519,72520,72521,72522,72523,72524,72525,72526,72527,72528,72529,72530,72531,72532,72533,72534,72535,72536,72537,72538,72539,72540,72541,72542,72543,72544,72545,72546,72547,72548,72549,72550,72551,72552,72553,72554,72555,72556,72557,72558,72559,72560,72561,72562,72563,72564,72565,72566,72567,72568,72569,72570,72571,72572,72573,72574,72575,72576,72577,72578,72579,72580,72581,72582,72583,72584,72585,72586,72587,72588,72589,72590,72591,72592,72593,72594,72595,72596,72597,72598,72599,72600,72601,72602,72603,72604,72605,72606,72607,72608,72609,72610,72611,72612,72613,72614,72615,72616,72617,72618,72619,72620,72621,72622,72623,72624,72625,72626,72627,72628,72629,72630,72631,72632,72633,72634,72635,72636,72637,72638,72639,72640,72641,72642,72643,72644,72645,72646,72647,72648,72649,72650,72651,72652,72653,72654,72655,72656'/>
+  </group>
+  <group name='303'>
+    <ids val='72657,72658,72659,72660,72661,72662,72663,72664,72665,72666,72667,72668,72669,72670,72671,72672,72673,72674,72675,72676,72677,72678,72679,72680,72681,72682,72683,72684,72685,72686,72687,72688,72689,72690,72691,72692,72693,72694,72695,72696,72697,72698,72699,72700,72701,72702,72703,72704,72705,72706,72707,72708,72709,72710,72711,72712,72713,72714,72715,72716,72717,72718,72719,72720,72721,72722,72723,72724,72725,72726,72727,72728,72729,72730,72731,72732,72733,72734,72735,72736,72737,72738,72739,72740,72741,72742,72743,72744,72745,72746,72747,72748,72749,72750,72751,72752,72753,72754,72755,72756,72757,72758,72759,72760,72761,72762,72763,72764,72765,72766,72767,72768,72769,72770,72771,72772,72773,72774,72775,72776,72777,72778,72779,72780,72781,72782,72783,72784,72785,72786,72787,72788,72789,72790,72791,72792,72793,72794,72795,72796,72797,72798,72799,72800,72801,72802,72803,72804,72805,72806,72807,72808,72809,72810,72811,72812,72813,72814,72815,72816,72817,72818,72819,72820,72821,72822,72823,72824,72825,72826,72827,72828,72829,72830,72831,72832,72833,72834,72835,72836,72837,72838,72839,72840,72841,72842,72843,72844,72845,72846,72847,72848,72849,72850,72851,72852,72853,72854,72855,72856,72857,72858,72859,72860,72861,72862,72863,72864,72865,72866,72867,72868,72869,72870,72871,72872,72873,72874,72875,72876,72877,72878,72879,72880,72881,72882,72883,72884,72885,72886,72887,72888,72889,72890,72891,72892,72893,72894,72895,72896,72897,72898,72899,72900,72901,72902,72903,72904,72905,72906,72907,72908,72909,72910,72911,72912,72913,72914,72915,72916,72917,72918,72919,72920,72921,72922,72923,72924,72925,72926,72927,72928,72929,72930,72931,72932,72933,72934,72935,72936,72937,72938,72939,72940,72941,72942,72943,72944,72945,72946,72947,72948,72949,72950,72951,72952,72953,72954,72955,72956,72957,72958,72959,72960'/>
+  </group>
+  <group name='303'>
+    <ids val='72961,72962,72963,72964,72965,72966,72967,72968,72969,72970,72971,72972,72973,72974,72975,72976,72977,72978,72979,72980,72981,72982,72983,72984,72985,72986,72987,72988,72989,72990,72991,72992,72993,72994,72995,72996,72997,72998,72999,73000,73001,73002,73003,73004,73005,73006,73007,73008,73009,73010,73011,73012,73013,73014,73015,73016,73017,73018,73019,73020,73021,73022,73023,73024,73025,73026,73027,73028,73029,73030,73031,73032,73033,73034,73035,73036,73037,73038,73039,73040,73041,73042,73043,73044,73045,73046,73047,73048,73049,73050,73051,73052,73053,73054,73055,73056,73057,73058,73059,73060,73061,73062,73063,73064,73065,73066,73067,73068,73069,73070,73071,73072,73073,73074,73075,73076,73077,73078,73079,73080,73081,73082,73083,73084,73085,73086,73087,73088,73089,73090,73091,73092,73093,73094,73095,73096,73097,73098,73099,73100,73101,73102,73103,73104,73105,73106,73107,73108,73109,73110,73111,73112,73113,73114,73115,73116,73117,73118,73119,73120,73121,73122,73123,73124,73125,73126,73127,73128,73129,73130,73131,73132,73133,73134,73135,73136,73137,73138,73139,73140,73141,73142,73143,73144,73145,73146,73147,73148,73149,73150,73151,73152,73153,73154,73155,73156,73157,73158,73159,73160,73161,73162,73163,73164,73165,73166,73167,73168,73169,73170,73171,73172,73173,73174,73175,73176,73177,73178,73179,73180,73181,73182,73183,73184,73185,73186,73187,73188,73189,73190,73191,73192,73193,73194,73195,73196,73197,73198,73199,73200,73201,73202,73203,73204,73205,73206,73207,73208,73209,73210,73211,73212,73213,73214,73215,73216,73217,73218,73219,73220,73221,73222,73223,73224,73225,73226,73227,73228,73229,73230,73231,73232,73233,73234,73235,73236,73237,73238,73239,73240,73241,73242,73243,73244,73245,73246,73247,73248,73249,73250,73251,73252,73253,73254,73255,73256,73257,73258,73259,73260,73261,73262,73263,73264'/>
+  </group>
+  <group name='303'>
+    <ids val='73265,73266,73267,73268,73269,73270,73271,73272,73273,73274,73275,73276,73277,73278,73279,73280,73281,73282,73283,73284,73285,73286,73287,73288,73289,73290,73291,73292,73293,73294,73295,73296,73297,73298,73299,73300,73301,73302,73303,73304,73305,73306,73307,73308,73309,73310,73311,73312,73313,73314,73315,73316,73317,73318,73319,73320,73321,73322,73323,73324,73325,73326,73327,73328,73329,73330,73331,73332,73333,73334,73335,73336,73337,73338,73339,73340,73341,73342,73343,73344,73345,73346,73347,73348,73349,73350,73351,73352,73353,73354,73355,73356,73357,73358,73359,73360,73361,73362,73363,73364,73365,73366,73367,73368,73369,73370,73371,73372,73373,73374,73375,73376,73377,73378,73379,73380,73381,73382,73383,73384,73385,73386,73387,73388,73389,73390,73391,73392,73393,73394,73395,73396,73397,73398,73399,73400,73401,73402,73403,73404,73405,73406,73407,73408,73409,73410,73411,73412,73413,73414,73415,73416,73417,73418,73419,73420,73421,73422,73423,73424,73425,73426,73427,73428,73429,73430,73431,73432,73433,73434,73435,73436,73437,73438,73439,73440,73441,73442,73443,73444,73445,73446,73447,73448,73449,73450,73451,73452,73453,73454,73455,73456,73457,73458,73459,73460,73461,73462,73463,73464,73465,73466,73467,73468,73469,73470,73471,73472,73473,73474,73475,73476,73477,73478,73479,73480,73481,73482,73483,73484,73485,73486,73487,73488,73489,73490,73491,73492,73493,73494,73495,73496,73497,73498,73499,73500,73501,73502,73503,73504,73505,73506,73507,73508,73509,73510,73511,73512,73513,73514,73515,73516,73517,73518,73519,73520,73521,73522,73523,73524,73525,73526,73527,73528,73529,73530,73531,73532,73533,73534,73535,73536,73537,73538,73539,73540,73541,73542,73543,73544,73545,73546,73547,73548,73549,73550,73551,73552,73553,73554,73555,73556,73557,73558,73559,73560,73561,73562,73563,73564,73565,73566,73567,73568'/>
+  </group>
+  <group name='303'>
+    <ids val='73569,73570,73571,73572,73573,73574,73575,73576,73577,73578,73579,73580,73581,73582,73583,73584,73585,73586,73587,73588,73589,73590,73591,73592,73593,73594,73595,73596,73597,73598,73599,73600,73601,73602,73603,73604,73605,73606,73607,73608,73609,73610,73611,73612,73613,73614,73615,73616,73617,73618,73619,73620,73621,73622,73623,73624,73625,73626,73627,73628,73629,73630,73631,73632,73633,73634,73635,73636,73637,73638,73639,73640,73641,73642,73643,73644,73645,73646,73647,73648,73649,73650,73651,73652,73653,73654,73655,73656,73657,73658,73659,73660,73661,73662,73663,73664,73665,73666,73667,73668,73669,73670,73671,73672,73673,73674,73675,73676,73677,73678,73679,73680,73681,73682,73683,73684,73685,73686,73687,73688,73689,73690,73691,73692,73693,73694,73695,73696,73697,73698,73699,73700,73701,73702,73703,73704,73705,73706,73707,73708,73709,73710,73711,73712,73713,73714,73715,73716,73717,73718,73719,73720,73721,73722,73723,73724,73725,73726,73727,73728,73729,73730,73731,73732,73733,73734,73735,73736,73737,73738,73739,73740,73741,73742,73743,73744,73745,73746,73747,73748,73749,73750,73751,73752,73753,73754,73755,73756,73757,73758,73759,73760,73761,73762,73763,73764,73765,73766,73767,73768,73769,73770,73771,73772,73773,73774,73775,73776,73777,73778,73779,73780,73781,73782,73783,73784,73785,73786,73787,73788,73789,73790,73791,73792,73793,73794,73795,73796,73797,73798,73799,73800,73801,73802,73803,73804,73805,73806,73807,73808,73809,73810,73811,73812,73813,73814,73815,73816,73817,73818,73819,73820,73821,73822,73823,73824,73825,73826,73827,73828,73829,73830,73831,73832,73833,73834,73835,73836,73837,73838,73839,73840,73841,73842,73843,73844,73845,73846,73847,73848,73849,73850,73851,73852,73853,73854,73855,73856,73857,73858,73859,73860,73861,73862,73863,73864,73865,73866,73867,73868,73869,73870,73871,73872'/>
+  </group>
+  <group name='303'>
+    <ids val='73873,73874,73875,73876,73877,73878,73879,73880,73881,73882,73883,73884,73885,73886,73887,73888,73889,73890,73891,73892,73893,73894,73895,73896,73897,73898,73899,73900,73901,73902,73903,73904,73905,73906,73907,73908,73909,73910,73911,73912,73913,73914,73915,73916,73917,73918,73919,73920,73921,73922,73923,73924,73925,73926,73927,73928,73929,73930,73931,73932,73933,73934,73935,73936,73937,73938,73939,73940,73941,73942,73943,73944,73945,73946,73947,73948,73949,73950,73951,73952,73953,73954,73955,73956,73957,73958,73959,73960,73961,73962,73963,73964,73965,73966,73967,73968,73969,73970,73971,73972,73973,73974,73975,73976,73977,73978,73979,73980,73981,73982,73983,73984,73985,73986,73987,73988,73989,73990,73991,73992,73993,73994,73995,73996,73997,73998,73999,74000,74001,74002,74003,74004,74005,74006,74007,74008,74009,74010,74011,74012,74013,74014,74015,74016,74017,74018,74019,74020,74021,74022,74023,74024,74025,74026,74027,74028,74029,74030,74031,74032,74033,74034,74035,74036,74037,74038,74039,74040,74041,74042,74043,74044,74045,74046,74047,74048,74049,74050,74051,74052,74053,74054,74055,74056,74057,74058,74059,74060,74061,74062,74063,74064,74065,74066,74067,74068,74069,74070,74071,74072,74073,74074,74075,74076,74077,74078,74079,74080,74081,74082,74083,74084,74085,74086,74087,74088,74089,74090,74091,74092,74093,74094,74095,74096,74097,74098,74099,74100,74101,74102,74103,74104,74105,74106,74107,74108,74109,74110,74111,74112,74113,74114,74115,74116,74117,74118,74119,74120,74121,74122,74123,74124,74125,74126,74127,74128,74129,74130,74131,74132,74133,74134,74135,74136,74137,74138,74139,74140,74141,74142,74143,74144,74145,74146,74147,74148,74149,74150,74151,74152,74153,74154,74155,74156,74157,74158,74159,74160,74161,74162,74163,74164,74165,74166,74167,74168,74169,74170,74171,74172,74173,74174,74175,74176'/>
+  </group>
+  <group name='303'>
+    <ids val='74177,74178,74179,74180,74181,74182,74183,74184,74185,74186,74187,74188,74189,74190,74191,74192,74193,74194,74195,74196,74197,74198,74199,74200,74201,74202,74203,74204,74205,74206,74207,74208,74209,74210,74211,74212,74213,74214,74215,74216,74217,74218,74219,74220,74221,74222,74223,74224,74225,74226,74227,74228,74229,74230,74231,74232,74233,74234,74235,74236,74237,74238,74239,74240,74241,74242,74243,74244,74245,74246,74247,74248,74249,74250,74251,74252,74253,74254,74255,74256,74257,74258,74259,74260,74261,74262,74263,74264,74265,74266,74267,74268,74269,74270,74271,74272,74273,74274,74275,74276,74277,74278,74279,74280,74281,74282,74283,74284,74285,74286,74287,74288,74289,74290,74291,74292,74293,74294,74295,74296,74297,74298,74299,74300,74301,74302,74303,74304,74305,74306,74307,74308,74309,74310,74311,74312,74313,74314,74315,74316,74317,74318,74319,74320,74321,74322,74323,74324,74325,74326,74327,74328,74329,74330,74331,74332,74333,74334,74335,74336,74337,74338,74339,74340,74341,74342,74343,74344,74345,74346,74347,74348,74349,74350,74351,74352,74353,74354,74355,74356,74357,74358,74359,74360,74361,74362,74363,74364,74365,74366,74367,74368,74369,74370,74371,74372,74373,74374,74375,74376,74377,74378,74379,74380,74381,74382,74383,74384,74385,74386,74387,74388,74389,74390,74391,74392,74393,74394,74395,74396,74397,74398,74399,74400,74401,74402,74403,74404,74405,74406,74407,74408,74409,74410,74411,74412,74413,74414,74415,74416,74417,74418,74419,74420,74421,74422,74423,74424,74425,74426,74427,74428,74429,74430,74431,74432,74433,74434,74435,74436,74437,74438,74439,74440,74441,74442,74443,74444,74445,74446,74447,74448,74449,74450,74451,74452,74453,74454,74455,74456,74457,74458,74459,74460,74461,74462,74463,74464,74465,74466,74467,74468,74469,74470,74471,74472,74473,74474,74475,74476,74477,74478,74479,74480'/>
+  </group>
+  <group name='303'>
+    <ids val='74481,74482,74483,74484,74485,74486,74487,74488,74489,74490,74491,74492,74493,74494,74495,74496,74497,74498,74499,74500,74501,74502,74503,74504,74505,74506,74507,74508,74509,74510,74511,74512,74513,74514,74515,74516,74517,74518,74519,74520,74521,74522,74523,74524,74525,74526,74527,74528,74529,74530,74531,74532,74533,74534,74535,74536,74537,74538,74539,74540,74541,74542,74543,74544,74545,74546,74547,74548,74549,74550,74551,74552,74553,74554,74555,74556,74557,74558,74559,74560,74561,74562,74563,74564,74565,74566,74567,74568,74569,74570,74571,74572,74573,74574,74575,74576,74577,74578,74579,74580,74581,74582,74583,74584,74585,74586,74587,74588,74589,74590,74591,74592,74593,74594,74595,74596,74597,74598,74599,74600,74601,74602,74603,74604,74605,74606,74607,74608,74609,74610,74611,74612,74613,74614,74615,74616,74617,74618,74619,74620,74621,74622,74623,74624,74625,74626,74627,74628,74629,74630,74631,74632,74633,74634,74635,74636,74637,74638,74639,74640,74641,74642,74643,74644,74645,74646,74647,74648,74649,74650,74651,74652,74653,74654,74655,74656,74657,74658,74659,74660,74661,74662,74663,74664,74665,74666,74667,74668,74669,74670,74671,74672,74673,74674,74675,74676,74677,74678,74679,74680,74681,74682,74683,74684,74685,74686,74687,74688,74689,74690,74691,74692,74693,74694,74695,74696,74697,74698,74699,74700,74701,74702,74703,74704,74705,74706,74707,74708,74709,74710,74711,74712,74713,74714,74715,74716,74717,74718,74719,74720,74721,74722,74723,74724,74725,74726,74727,74728,74729,74730,74731,74732,74733,74734,74735,74736,74737,74738,74739,74740,74741,74742,74743,74744,74745,74746,74747,74748,74749,74750,74751,74752,74753,74754,74755,74756,74757,74758,74759,74760,74761,74762,74763,74764,74765,74766,74767,74768,74769,74770,74771,74772,74773,74774,74775,74776,74777,74778,74779,74780,74781,74782,74783,74784'/>
+  </group>
+  <group name='303'>
+    <ids val='74785,74786,74787,74788,74789,74790,74791,74792,74793,74794,74795,74796,74797,74798,74799,74800,74801,74802,74803,74804,74805,74806,74807,74808,74809,74810,74811,74812,74813,74814,74815,74816,74817,74818,74819,74820,74821,74822,74823,74824,74825,74826,74827,74828,74829,74830,74831,74832,74833,74834,74835,74836,74837,74838,74839,74840,74841,74842,74843,74844,74845,74846,74847,74848,74849,74850,74851,74852,74853,74854,74855,74856,74857,74858,74859,74860,74861,74862,74863,74864,74865,74866,74867,74868,74869,74870,74871,74872,74873,74874,74875,74876,74877,74878,74879,74880,74881,74882,74883,74884,74885,74886,74887,74888,74889,74890,74891,74892,74893,74894,74895,74896,74897,74898,74899,74900,74901,74902,74903,74904,74905,74906,74907,74908,74909,74910,74911,74912,74913,74914,74915,74916,74917,74918,74919,74920,74921,74922,74923,74924,74925,74926,74927,74928,74929,74930,74931,74932,74933,74934,74935,74936,74937,74938,74939,74940,74941,74942,74943,74944,74945,74946,74947,74948,74949,74950,74951,74952,74953,74954,74955,74956,74957,74958,74959,74960,74961,74962,74963,74964,74965,74966,74967,74968,74969,74970,74971,74972,74973,74974,74975,74976,74977,74978,74979,74980,74981,74982,74983,74984,74985,74986,74987,74988,74989,74990,74991,74992,74993,74994,74995,74996,74997,74998,74999,75000,75001,75002,75003,75004,75005,75006,75007,75008,75009,75010,75011,75012,75013,75014,75015,75016,75017,75018,75019,75020,75021,75022,75023,75024,75025,75026,75027,75028,75029,75030,75031,75032,75033,75034,75035,75036,75037,75038,75039,75040,75041,75042,75043,75044,75045,75046,75047,75048,75049,75050,75051,75052,75053,75054,75055,75056,75057,75058,75059,75060,75061,75062,75063,75064,75065,75066,75067,75068,75069,75070,75071,75072,75073,75074,75075,75076,75077,75078,75079,75080,75081,75082,75083,75084,75085,75086,75087,75088'/>
+  </group>
+  <group name='303'>
+    <ids val='75089,75090,75091,75092,75093,75094,75095,75096,75097,75098,75099,75100,75101,75102,75103,75104,75105,75106,75107,75108,75109,75110,75111,75112,75113,75114,75115,75116,75117,75118,75119,75120,75121,75122,75123,75124,75125,75126,75127,75128,75129,75130,75131,75132,75133,75134,75135,75136,75137,75138,75139,75140,75141,75142,75143,75144,75145,75146,75147,75148,75149,75150,75151,75152,75153,75154,75155,75156,75157,75158,75159,75160,75161,75162,75163,75164,75165,75166,75167,75168,75169,75170,75171,75172,75173,75174,75175,75176,75177,75178,75179,75180,75181,75182,75183,75184,75185,75186,75187,75188,75189,75190,75191,75192,75193,75194,75195,75196,75197,75198,75199,75200,75201,75202,75203,75204,75205,75206,75207,75208,75209,75210,75211,75212,75213,75214,75215,75216,75217,75218,75219,75220,75221,75222,75223,75224,75225,75226,75227,75228,75229,75230,75231,75232,75233,75234,75235,75236,75237,75238,75239,75240,75241,75242,75243,75244,75245,75246,75247,75248,75249,75250,75251,75252,75253,75254,75255,75256,75257,75258,75259,75260,75261,75262,75263,75264,75265,75266,75267,75268,75269,75270,75271,75272,75273,75274,75275,75276,75277,75278,75279,75280,75281,75282,75283,75284,75285,75286,75287,75288,75289,75290,75291,75292,75293,75294,75295,75296,75297,75298,75299,75300,75301,75302,75303,75304,75305,75306,75307,75308,75309,75310,75311,75312,75313,75314,75315,75316,75317,75318,75319,75320,75321,75322,75323,75324,75325,75326,75327,75328,75329,75330,75331,75332,75333,75334,75335,75336,75337,75338,75339,75340,75341,75342,75343,75344,75345,75346,75347,75348,75349,75350,75351,75352,75353,75354,75355,75356,75357,75358,75359,75360,75361,75362,75363,75364,75365,75366,75367,75368,75369,75370,75371,75372,75373,75374,75375,75376,75377,75378,75379,75380,75381,75382,75383,75384,75385,75386,75387,75388,75389,75390,75391,75392'/>
+  </group>
+  <group name='303'>
+    <ids val='75393,75394,75395,75396,75397,75398,75399,75400,75401,75402,75403,75404,75405,75406,75407,75408,75409,75410,75411,75412,75413,75414,75415,75416,75417,75418,75419,75420,75421,75422,75423,75424,75425,75426,75427,75428,75429,75430,75431,75432,75433,75434,75435,75436,75437,75438,75439,75440,75441,75442,75443,75444,75445,75446,75447,75448,75449,75450,75451,75452,75453,75454,75455,75456,75457,75458,75459,75460,75461,75462,75463,75464,75465,75466,75467,75468,75469,75470,75471,75472,75473,75474,75475,75476,75477,75478,75479,75480,75481,75482,75483,75484,75485,75486,75487,75488,75489,75490,75491,75492,75493,75494,75495,75496,75497,75498,75499,75500,75501,75502,75503,75504,75505,75506,75507,75508,75509,75510,75511,75512,75513,75514,75515,75516,75517,75518,75519,75520,75521,75522,75523,75524,75525,75526,75527,75528,75529,75530,75531,75532,75533,75534,75535,75536,75537,75538,75539,75540,75541,75542,75543,75544,75545,75546,75547,75548,75549,75550,75551,75552,75553,75554,75555,75556,75557,75558,75559,75560,75561,75562,75563,75564,75565,75566,75567,75568,75569,75570,75571,75572,75573,75574,75575,75576,75577,75578,75579,75580,75581,75582,75583,75584,75585,75586,75587,75588,75589,75590,75591,75592,75593,75594,75595,75596,75597,75598,75599,75600,75601,75602,75603,75604,75605,75606,75607,75608,75609,75610,75611,75612,75613,75614,75615,75616,75617,75618,75619,75620,75621,75622,75623,75624,75625,75626,75627,75628,75629,75630,75631,75632,75633,75634,75635,75636,75637,75638,75639,75640,75641,75642,75643,75644,75645,75646,75647,75648,75649,75650,75651,75652,75653,75654,75655,75656,75657,75658,75659,75660,75661,75662,75663,75664,75665,75666,75667,75668,75669,75670,75671,75672,75673,75674,75675,75676,75677,75678,75679,75680,75681,75682,75683,75684,75685,75686,75687,75688,75689,75690,75691,75692,75693,75694,75695,75696'/>
+  </group>
+  <group name='303'>
+    <ids val='75697,75698,75699,75700,75701,75702,75703,75704,75705,75706,75707,75708,75709,75710,75711,75712,75713,75714,75715,75716,75717,75718,75719,75720,75721,75722,75723,75724,75725,75726,75727,75728,75729,75730,75731,75732,75733,75734,75735,75736,75737,75738,75739,75740,75741,75742,75743,75744,75745,75746,75747,75748,75749,75750,75751,75752,75753,75754,75755,75756,75757,75758,75759,75760,75761,75762,75763,75764,75765,75766,75767,75768,75769,75770,75771,75772,75773,75774,75775,75776,75777,75778,75779,75780,75781,75782,75783,75784,75785,75786,75787,75788,75789,75790,75791,75792,75793,75794,75795,75796,75797,75798,75799,75800,75801,75802,75803,75804,75805,75806,75807,75808,75809,75810,75811,75812,75813,75814,75815,75816,75817,75818,75819,75820,75821,75822,75823,75824,75825,75826,75827,75828,75829,75830,75831,75832,75833,75834,75835,75836,75837,75838,75839,75840,75841,75842,75843,75844,75845,75846,75847,75848,75849,75850,75851,75852,75853,75854,75855,75856,75857,75858,75859,75860,75861,75862,75863,75864,75865,75866,75867,75868,75869,75870,75871,75872,75873,75874,75875,75876,75877,75878,75879,75880,75881,75882,75883,75884,75885,75886,75887,75888,75889,75890,75891,75892,75893,75894,75895,75896,75897,75898,75899,75900,75901,75902,75903,75904,75905,75906,75907,75908,75909,75910,75911,75912,75913,75914,75915,75916,75917,75918,75919,75920,75921,75922,75923,75924,75925,75926,75927,75928,75929,75930,75931,75932,75933,75934,75935,75936,75937,75938,75939,75940,75941,75942,75943,75944,75945,75946,75947,75948,75949,75950,75951,75952,75953,75954,75955,75956,75957,75958,75959,75960,75961,75962,75963,75964,75965,75966,75967,75968,75969,75970,75971,75972,75973,75974,75975,75976,75977,75978,75979,75980,75981,75982,75983,75984,75985,75986,75987,75988,75989,75990,75991,75992,75993,75994,75995,75996,75997,75998,75999,76000'/>
+  </group>
+  <group name='303'>
+    <ids val='76001,76002,76003,76004,76005,76006,76007,76008,76009,76010,76011,76012,76013,76014,76015,76016,76017,76018,76019,76020,76021,76022,76023,76024,76025,76026,76027,76028,76029,76030,76031,76032,76033,76034,76035,76036,76037,76038,76039,76040,76041,76042,76043,76044,76045,76046,76047,76048,76049,76050,76051,76052,76053,76054,76055,76056,76057,76058,76059,76060,76061,76062,76063,76064,76065,76066,76067,76068,76069,76070,76071,76072,76073,76074,76075,76076,76077,76078,76079,76080,76081,76082,76083,76084,76085,76086,76087,76088,76089,76090,76091,76092,76093,76094,76095,76096,76097,76098,76099,76100,76101,76102,76103,76104,76105,76106,76107,76108,76109,76110,76111,76112,76113,76114,76115,76116,76117,76118,76119,76120,76121,76122,76123,76124,76125,76126,76127,76128,76129,76130,76131,76132,76133,76134,76135,76136,76137,76138,76139,76140,76141,76142,76143,76144,76145,76146,76147,76148,76149,76150,76151,76152,76153,76154,76155,76156,76157,76158,76159,76160,76161,76162,76163,76164,76165,76166,76167,76168,76169,76170,76171,76172,76173,76174,76175,76176,76177,76178,76179,76180,76181,76182,76183,76184,76185,76186,76187,76188,76189,76190,76191,76192,76193,76194,76195,76196,76197,76198,76199,76200,76201,76202,76203,76204,76205,76206,76207,76208,76209,76210,76211,76212,76213,76214,76215,76216,76217,76218,76219,76220,76221,76222,76223,76224,76225,76226,76227,76228,76229,76230,76231,76232,76233,76234,76235,76236,76237,76238,76239,76240,76241,76242,76243,76244,76245,76246,76247,76248,76249,76250,76251,76252,76253,76254,76255,76256,76257,76258,76259,76260,76261,76262,76263,76264,76265,76266,76267,76268,76269,76270,76271,76272,76273,76274,76275,76276,76277,76278,76279,76280,76281,76282,76283,76284,76285,76286,76287,76288,76289,76290,76291,76292,76293,76294,76295,76296,76297,76298,76299,76300,76301,76302,76303,76304'/>
+  </group>
+  <group name='303'>
+    <ids val='76305,76306,76307,76308,76309,76310,76311,76312,76313,76314,76315,76316,76317,76318,76319,76320,76321,76322,76323,76324,76325,76326,76327,76328,76329,76330,76331,76332,76333,76334,76335,76336,76337,76338,76339,76340,76341,76342,76343,76344,76345,76346,76347,76348,76349,76350,76351,76352,76353,76354,76355,76356,76357,76358,76359,76360,76361,76362,76363,76364,76365,76366,76367,76368,76369,76370,76371,76372,76373,76374,76375,76376,76377,76378,76379,76380,76381,76382,76383,76384,76385,76386,76387,76388,76389,76390,76391,76392,76393,76394,76395,76396,76397,76398,76399,76400,76401,76402,76403,76404,76405,76406,76407,76408,76409,76410,76411,76412,76413,76414,76415,76416,76417,76418,76419,76420,76421,76422,76423,76424,76425,76426,76427,76428,76429,76430,76431,76432,76433,76434,76435,76436,76437,76438,76439,76440,76441,76442,76443,76444,76445,76446,76447,76448,76449,76450,76451,76452,76453,76454,76455,76456,76457,76458,76459,76460,76461,76462,76463,76464,76465,76466,76467,76468,76469,76470,76471,76472,76473,76474,76475,76476,76477,76478,76479,76480,76481,76482,76483,76484,76485,76486,76487,76488,76489,76490,76491,76492,76493,76494,76495,76496,76497,76498,76499,76500,76501,76502,76503,76504,76505,76506,76507,76508,76509,76510,76511,76512,76513,76514,76515,76516,76517,76518,76519,76520,76521,76522,76523,76524,76525,76526,76527,76528,76529,76530,76531,76532,76533,76534,76535,76536,76537,76538,76539,76540,76541,76542,76543,76544,76545,76546,76547,76548,76549,76550,76551,76552,76553,76554,76555,76556,76557,76558,76559,76560,76561,76562,76563,76564,76565,76566,76567,76568,76569,76570,76571,76572,76573,76574,76575,76576,76577,76578,76579,76580,76581,76582,76583,76584,76585,76586,76587,76588,76589,76590,76591,76592,76593,76594,76595,76596,76597,76598,76599,76600,76601,76602,76603,76604,76605,76606,76607,76608'/>
+  </group>
+  <group name='303'>
+    <ids val='76609,76610,76611,76612,76613,76614,76615,76616,76617,76618,76619,76620,76621,76622,76623,76624,76625,76626,76627,76628,76629,76630,76631,76632,76633,76634,76635,76636,76637,76638,76639,76640,76641,76642,76643,76644,76645,76646,76647,76648,76649,76650,76651,76652,76653,76654,76655,76656,76657,76658,76659,76660,76661,76662,76663,76664,76665,76666,76667,76668,76669,76670,76671,76672,76673,76674,76675,76676,76677,76678,76679,76680,76681,76682,76683,76684,76685,76686,76687,76688,76689,76690,76691,76692,76693,76694,76695,76696,76697,76698,76699,76700,76701,76702,76703,76704,76705,76706,76707,76708,76709,76710,76711,76712,76713,76714,76715,76716,76717,76718,76719,76720,76721,76722,76723,76724,76725,76726,76727,76728,76729,76730,76731,76732,76733,76734,76735,76736,76737,76738,76739,76740,76741,76742,76743,76744,76745,76746,76747,76748,76749,76750,76751,76752,76753,76754,76755,76756,76757,76758,76759,76760,76761,76762,76763,76764,76765,76766,76767,76768,76769,76770,76771,76772,76773,76774,76775,76776,76777,76778,76779,76780,76781,76782,76783,76784,76785,76786,76787,76788,76789,76790,76791,76792,76793,76794,76795,76796,76797,76798,76799,76800,76801,76802,76803,76804,76805,76806,76807,76808,76809,76810,76811,76812,76813,76814,76815,76816,76817,76818,76819,76820,76821,76822,76823,76824,76825,76826,76827,76828,76829,76830,76831,76832,76833,76834,76835,76836,76837,76838,76839,76840,76841,76842,76843,76844,76845,76846,76847,76848,76849,76850,76851,76852,76853,76854,76855,76856,76857,76858,76859,76860,76861,76862,76863,76864,76865,76866,76867,76868,76869,76870,76871,76872,76873,76874,76875,76876,76877,76878,76879,76880,76881,76882,76883,76884,76885,76886,76887,76888,76889,76890,76891,76892,76893,76894,76895,76896,76897,76898,76899,76900,76901,76902,76903,76904,76905,76906,76907,76908,76909,76910,76911,76912'/>
+  </group>
+  <group name='303'>
+    <ids val='76913,76914,76915,76916,76917,76918,76919,76920,76921,76922,76923,76924,76925,76926,76927,76928,76929,76930,76931,76932,76933,76934,76935,76936,76937,76938,76939,76940,76941,76942,76943,76944,76945,76946,76947,76948,76949,76950,76951,76952,76953,76954,76955,76956,76957,76958,76959,76960,76961,76962,76963,76964,76965,76966,76967,76968,76969,76970,76971,76972,76973,76974,76975,76976,76977,76978,76979,76980,76981,76982,76983,76984,76985,76986,76987,76988,76989,76990,76991,76992,76993,76994,76995,76996,76997,76998,76999,77000,77001,77002,77003,77004,77005,77006,77007,77008,77009,77010,77011,77012,77013,77014,77015,77016,77017,77018,77019,77020,77021,77022,77023,77024,77025,77026,77027,77028,77029,77030,77031,77032,77033,77034,77035,77036,77037,77038,77039,77040,77041,77042,77043,77044,77045,77046,77047,77048,77049,77050,77051,77052,77053,77054,77055,77056,77057,77058,77059,77060,77061,77062,77063,77064,77065,77066,77067,77068,77069,77070,77071,77072,77073,77074,77075,77076,77077,77078,77079,77080,77081,77082,77083,77084,77085,77086,77087,77088,77089,77090,77091,77092,77093,77094,77095,77096,77097,77098,77099,77100,77101,77102,77103,77104,77105,77106,77107,77108,77109,77110,77111,77112,77113,77114,77115,77116,77117,77118,77119,77120,77121,77122,77123,77124,77125,77126,77127,77128,77129,77130,77131,77132,77133,77134,77135,77136,77137,77138,77139,77140,77141,77142,77143,77144,77145,77146,77147,77148,77149,77150,77151,77152,77153,77154,77155,77156,77157,77158,77159,77160,77161,77162,77163,77164,77165,77166,77167,77168,77169,77170,77171,77172,77173,77174,77175,77176,77177,77178,77179,77180,77181,77182,77183,77184,77185,77186,77187,77188,77189,77190,77191,77192,77193,77194,77195,77196,77197,77198,77199,77200,77201,77202,77203,77204,77205,77206,77207,77208,77209,77210,77211,77212,77213,77214,77215,77216'/>
+  </group>
+  <group name='303'>
+    <ids val='77217,77218,77219,77220,77221,77222,77223,77224,77225,77226,77227,77228,77229,77230,77231,77232,77233,77234,77235,77236,77237,77238,77239,77240,77241,77242,77243,77244,77245,77246,77247,77248,77249,77250,77251,77252,77253,77254,77255,77256,77257,77258,77259,77260,77261,77262,77263,77264,77265,77266,77267,77268,77269,77270,77271,77272,77273,77274,77275,77276,77277,77278,77279,77280,77281,77282,77283,77284,77285,77286,77287,77288,77289,77290,77291,77292,77293,77294,77295,77296,77297,77298,77299,77300,77301,77302,77303,77304,77305,77306,77307,77308,77309,77310,77311,77312,77313,77314,77315,77316,77317,77318,77319,77320,77321,77322,77323,77324,77325,77326,77327,77328,77329,77330,77331,77332,77333,77334,77335,77336,77337,77338,77339,77340,77341,77342,77343,77344,77345,77346,77347,77348,77349,77350,77351,77352,77353,77354,77355,77356,77357,77358,77359,77360,77361,77362,77363,77364,77365,77366,77367,77368,77369,77370,77371,77372,77373,77374,77375,77376,77377,77378,77379,77380,77381,77382,77383,77384,77385,77386,77387,77388,77389,77390,77391,77392,77393,77394,77395,77396,77397,77398,77399,77400,77401,77402,77403,77404,77405,77406,77407,77408,77409,77410,77411,77412,77413,77414,77415,77416,77417,77418,77419,77420,77421,77422,77423,77424,77425,77426,77427,77428,77429,77430,77431,77432,77433,77434,77435,77436,77437,77438,77439,77440,77441,77442,77443,77444,77445,77446,77447,77448,77449,77450,77451,77452,77453,77454,77455,77456,77457,77458,77459,77460,77461,77462,77463,77464,77465,77466,77467,77468,77469,77470,77471,77472,77473,77474,77475,77476,77477,77478,77479,77480,77481,77482,77483,77484,77485,77486,77487,77488,77489,77490,77491,77492,77493,77494,77495,77496,77497,77498,77499,77500,77501,77502,77503,77504,77505,77506,77507,77508,77509,77510,77511,77512,77513,77514,77515,77516,77517,77518,77519,77520'/>
+  </group>
+  <group name='303'>
+    <ids val='77521,77522,77523,77524,77525,77526,77527,77528,77529,77530,77531,77532,77533,77534,77535,77536,77537,77538,77539,77540,77541,77542,77543,77544,77545,77546,77547,77548,77549,77550,77551,77552,77553,77554,77555,77556,77557,77558,77559,77560,77561,77562,77563,77564,77565,77566,77567,77568,77569,77570,77571,77572,77573,77574,77575,77576,77577,77578,77579,77580,77581,77582,77583,77584,77585,77586,77587,77588,77589,77590,77591,77592,77593,77594,77595,77596,77597,77598,77599,77600,77601,77602,77603,77604,77605,77606,77607,77608,77609,77610,77611,77612,77613,77614,77615,77616,77617,77618,77619,77620,77621,77622,77623,77624,77625,77626,77627,77628,77629,77630,77631,77632,77633,77634,77635,77636,77637,77638,77639,77640,77641,77642,77643,77644,77645,77646,77647,77648,77649,77650,77651,77652,77653,77654,77655,77656,77657,77658,77659,77660,77661,77662,77663,77664,77665,77666,77667,77668,77669,77670,77671,77672,77673,77674,77675,77676,77677,77678,77679,77680,77681,77682,77683,77684,77685,77686,77687,77688,77689,77690,77691,77692,77693,77694,77695,77696,77697,77698,77699,77700,77701,77702,77703,77704,77705,77706,77707,77708,77709,77710,77711,77712,77713,77714,77715,77716,77717,77718,77719,77720,77721,77722,77723,77724,77725,77726,77727,77728,77729,77730,77731,77732,77733,77734,77735,77736,77737,77738,77739,77740,77741,77742,77743,77744,77745,77746,77747,77748,77749,77750,77751,77752,77753,77754,77755,77756,77757,77758,77759,77760,77761,77762,77763,77764,77765,77766,77767,77768,77769,77770,77771,77772,77773,77774,77775,77776,77777,77778,77779,77780,77781,77782,77783,77784,77785,77786,77787,77788,77789,77790,77791,77792,77793,77794,77795,77796,77797,77798,77799,77800,77801,77802,77803,77804,77805,77806,77807,77808,77809,77810,77811,77812,77813,77814,77815,77816,77817,77818,77819,77820,77821,77822,77823,77824'/>
+  </group>
+</detector-grouping>
diff --git a/Code/Mantid/scripts/LargeScaleStructures/REF_L_geometry.py b/Code/Mantid/scripts/LargeScaleStructures/REF_L_geometry.py
index 6d3d4025dd4fe1e4fc4281c6502af98199cc7a58..f0beaa1ca094efabc0deec61c0f96b739d72d777 100644
--- a/Code/Mantid/scripts/LargeScaleStructures/REF_L_geometry.py
+++ b/Code/Mantid/scripts/LargeScaleStructures/REF_L_geometry.py
@@ -1,27 +1,29 @@
 from geometry_writer import MantidGeom
 import math
 
-NUM_PIXELS_PER_TUBE = 256
-NUM_TUBES = 304
+NUM_PIXELS_PER_TUBE = 304
+NUM_TUBES = 256
 PIXEL_WIDTH = 0.0007
 PIXEL_HEIGHT = 0.0007
 
 def create_grouping(workspace=None):
     # This should be read from the
-    npix_x = 304
-    npix_y = 256
+    npix_x = 256
+    npix_y = 304
+
+    ## Integrated over X
     if workspace is not None:
         if mtd[workspace].getInstrument().hasParameter("number-of-x-pixels"):
             npix_x = int(mtd[workspace].getInstrument().getNumberParameter("number-of-x-pixels")[0])
         if mtd[workspace].getInstrument().hasParameter("number-of-y-pixels"):
             npix_y = int(mtd[workspace].getInstrument().getNumberParameter("number-of-y-pixels")[0])
 
-    f = open("REFL_Detector_Grouping_Sum_X.xml",'w')
+    f = open("REFL_Detector_Grouping_Sum_X_rot.xml",'w')
     f.write("<detector-grouping description=\"Integrated over X\">\n")
 
     for y in range(npix_y):
         # index = max_y * x + y
-        indices = range(y, npix_x*(npix_y-1), npix_y)
+        indices = range(y, npix_x*(npix_y), npix_y)
 
         # Detector IDs start at zero, but spectrum numbers start at 1
         # Grouping works on spectrum numbers
@@ -34,6 +36,26 @@ def create_grouping(workspace=None):
     f.write("</detector-grouping>\n")
     f.close()
 
+    ## Integrated over Y
+    f = open("REFL_Detector_Grouping_Sum_Y_rot.xml",'w')
+    f.write("<detector-grouping description=\"Integrated over Y\">\n")
+
+    for x in range(npix_x):
+        # index = max_y * x + y
+        indices = range(x*npix_y,(x+1)*npix_y)
+
+        # Detector IDs start at zero, but spectrum numbers start at 1
+        # Grouping works on spectrum numbers
+        indices_lst = [str(i+1) for i in indices]
+        indices_str = ','.join(indices_lst)
+        f.write("  <group name='%d'>\n" % 303)
+        f.write("    <ids val='%s'/>\n" % indices_str)
+        f.write("  </group>\n")
+
+    f.write("</detector-grouping>\n")
+    f.close()
+
+
 def create_geometry(file_name=None, pixel_width=None, pixel_height=None):
     inst_name = "REF_L"
     short_name = "REF_L"
@@ -77,4 +99,5 @@ def create_geometry(file_name=None, pixel_width=None, pixel_height=None):
     det.writeGeom(xml_outfile)
 
 if __name__ == "__main__":
-    create_geometry()
\ No newline at end of file
+    #create_geometry()
+    create_grouping()
\ No newline at end of file
diff --git a/Code/Mantid/scripts/LargeScaleStructures/ScalingFactorCalculation/sfCalculator.py b/Code/Mantid/scripts/LargeScaleStructures/ScalingFactorCalculation/sfCalculator.py
index 288c12a68457199e9d2cb143ea436fb86037a5ff..8fc284bffaec34f6812a7242ab7ddf7fac3f4fdd 100644
--- a/Code/Mantid/scripts/LargeScaleStructures/ScalingFactorCalculation/sfCalculator.py
+++ b/Code/Mantid/scripts/LargeScaleStructures/ScalingFactorCalculation/sfCalculator.py
@@ -146,9 +146,17 @@ class sfCalculator():
             self.back_pixel_max = self.d_back_pixel_max
 
         nexus_file_numerator = file
-        LoadEventNexus(Filename=nexus_file_numerator,
-                       OutputWorkspace='EventDataWks')
+        ws_event_data = LoadEventNexus(Filename=nexus_file_numerator,
+                                       OutputWorkspace='EventDataWks')
         mt1 = mtd['EventDataWks']
+        
+        is_nexus_detector_rotated_flag = wks_utility.isNexusTakeAfterRefDate(ws_event_data.getRun().getProperty('run_start').value)
+        if is_nexus_detector_rotated_flag:
+            self.alpha_pixel_nbr = 304
+            self.beta_pixel_nbr = 256
+        else:
+            self.alpha_pixel_nbr = 256
+            self.beta_pixel_nbr = 304
 
         proton_charge = self._getProtonCharge(mt1)
         rebin(InputWorkspace='EventDataWks',
diff --git a/Code/Mantid/scripts/SANS/ISISCommandInterface.py b/Code/Mantid/scripts/SANS/ISISCommandInterface.py
index c94dcc85e0bb80280238aaac897b5274ccd0ffd4..f3cd45cac67a1255d9fc631afdc5b711955a50eb 100644
--- a/Code/Mantid/scripts/SANS/ISISCommandInterface.py
+++ b/Code/Mantid/scripts/SANS/ISISCommandInterface.py
@@ -560,56 +560,56 @@ def _fitRescaleAndShift(rAnds, frontData, rearData):
         Fit rear data to FRONTnew(Q) = ( FRONT(Q) + SHIFT )xRESCALE,
         FRONT(Q) is the frontData argument. Returns scale and shift
 
+        Note SHIFT is shift of a constant back, not the Shift parameter in
+        TabulatedFunction.
+
         @param rAnds: A DetectorBank -> _RescaleAndShift structure
         @param frontData: Reduced front data
         @param rearData: Reduced rear data
     """
     if rAnds.fitScale==False and rAnds.fitShift==False:
         return rAnds.scale, rAnds.shift
-    #TODO: we should allow the user to add constraints?
+
     if rAnds.fitScale==False:
         if rAnds.qRangeUserSelected:
             Fit(InputWorkspace=rearData,
                 Function='name=TabulatedFunction, Workspace="'+str(frontData)+'"'
-                +";name=FlatBackground", Ties='f0.Scaling='+str(rAnds.scale),
+                +";name=FlatBackground", 
+                Ties='f0.Scaling='+str(rAnds.scale)+',f0.Shift=0.0',
                 Output="__fitRescaleAndShift", StartX=rAnds.qMin, EndX=rAnds.qMax)
         else:
             Fit(InputWorkspace=rearData,
                 Function='name=TabulatedFunction, Workspace="'+str(frontData)+'"'
-                +";name=FlatBackground", Ties='f0.Scaling='+str(rAnds.scale),
+                +";name=FlatBackground", 
+                Ties='f0.Scaling='+str(rAnds.scale)+',f0.Shift=0.0',
                 Output="__fitRescaleAndShift")
     elif rAnds.fitShift==False:
         if rAnds.qRangeUserSelected:
-            function_input = 'name=TabulatedFunction, Workspace="'+str(frontData)+'"' +";name=FlatBackground"
-            ties = 'f1.A0='+str(rAnds.shift*rAnds.scale)
-            logger.warning('function input ' + str(function_input))
-
             Fit(InputWorkspace=rearData,
                 Function='name=TabulatedFunction, Workspace="'+str(frontData)+'"'
-                +";name=FlatBackground", Ties='f1.A0='+str(rAnds.shift*rAnds.scale),
+                +";name=FlatBackground", 
+                Ties='f1.A0='+str(rAnds.shift*rAnds.scale)+',f0.Shift=0.0',
                 Output="__fitRescaleAndShift", StartX=rAnds.qMin, EndX=rAnds.qMax)
         else:
             Fit(InputWorkspace=rearData,
                 Function='name=TabulatedFunction, Workspace="'+str(frontData)+'"'
-                +";name=FlatBackground", Ties='f1.A0='+str(rAnds.shift*rAnds.scale),
+                +";name=FlatBackground", 
+                Ties='f1.A0='+str(rAnds.shift*rAnds.scale)+',f0.Shift=0.0',
                 Output="__fitRescaleAndShift")
     else:
         if rAnds.qRangeUserSelected:
             Fit(InputWorkspace=rearData,
                 Function='name=TabulatedFunction, Workspace="'+str(frontData)+'"'
-                +";name=FlatBackground",
+                +";name=FlatBackground", Ties=',f0.Shift=0.0',
                 Output="__fitRescaleAndShift", StartX=rAnds.qMin, EndX=rAnds.qMax)
         else:
             Fit(InputWorkspace=rearData, Function='name=TabulatedFunction, Workspace="'+str(frontData)+'"'
-                +";name=FlatBackground",Output="__fitRescaleAndShift")
+                +";name=FlatBackground", Ties=',f0.Shift=0.0', Output="__fitRescaleAndShift")
 
     param = mtd['__fitRescaleAndShift_Parameters']
 
-    row1 = param.row(0).items()
-    row2 = param.row(1).items()
-    row3 = param.row(2).items()
-    scale = row1[1][1]
-    chiSquared = row3[1][1]
+    scale = param.row(0).items()[1][1]
+    chiSquared = param.row(3).items()[1][1]
 
     fitSuccess = True
     if not chiSquared > 0:
@@ -622,7 +622,7 @@ def _fitRescaleAndShift(rAnds, frontData, rearData):
     if fitSuccess == False:
         return rAnds.scale, rAnds.shift
 
-    shift = row2[1][1] / scale
+    shift =  param.row(2).items()[1][1] / scale
 
     delete_workspaces('__fitRescaleAndShift_Parameters')
     delete_workspaces('__fitRescaleAndShift_NormalisedCovarianceMatrix')
diff --git a/Code/Mantid/scripts/reduction/instruments/reflectometer/data_manipulation.py b/Code/Mantid/scripts/reduction/instruments/reflectometer/data_manipulation.py
index 26e8f99eee9b4ea1981ec2c095eda2cdce71a30e..636b843bc7087c634dd3a8bdaada6b13ea937255 100644
--- a/Code/Mantid/scripts/reduction/instruments/reflectometer/data_manipulation.py
+++ b/Code/Mantid/scripts/reduction/instruments/reflectometer/data_manipulation.py
@@ -95,14 +95,24 @@ def counts_vs_pixel_distribution(file_path, is_pixel_y=True, callback=None,
 
             instr_dir = config.getInstrumentDirectory()
 
+            # check date of input file
+            date = mtd['ws'].getRun().getProperty('run_start').value
+            nexus_acquisition = date.split('T')[0]
+            if nexus_acquisition > '2014-10-01':
+                geo_base_file_x = "REFL_Detector_Grouping_Sum_X_rot.xml"
+                geo_base_file_y = "REFL_Detector_Grouping_Sum_Y_rot.xml"
+            else:
+                geo_base_file_x = "REFL_Detector_Grouping_Sum_X.xml"
+                geo_base_file_y = "REFL_Detector_Grouping_Sum_Y.xml"
+                
             if is_pixel_y:
                 grouping_file = os.path.join(instr_dir, "Grouping",
-                                             "REFL_Detector_Grouping_Sum_X.xml")
+                                             geo_base_file_x)
                 GroupDetectors(InputWorkspace=ws, OutputWorkspace=ws_output,
                                MapFile=grouping_file)
             else:
                 grouping_file = os.path.join(instr_dir, "Grouping",
-                                             "REFL_Detector_Grouping_Sum_Y.xml")
+                                             geo_base_file_y)
                 GroupDetectors(InputWorkspace=ws, OutputWorkspace=ws_output,
                                MapFile=grouping_file)
 
diff --git a/Code/Mantid/scripts/reduction/instruments/reflectometer/wks_utility.py b/Code/Mantid/scripts/reduction/instruments/reflectometer/wks_utility.py
index aac80c05959adf15432c2f6795ae13e94c3ce61b..ece19eda8badb2b3e2d31b3fec46db2647a72084 100644
--- a/Code/Mantid/scripts/reduction/instruments/reflectometer/wks_utility.py
+++ b/Code/Mantid/scripts/reduction/instruments/reflectometer/wks_utility.py
@@ -7,6 +7,7 @@ import sys
 
 h = 6.626e-34 #m^2 kg s^-1
 m = 1.675e-27 #kg
+ref_date = '2014-10-01' #when the detector has been rotated
 
 def getSequenceRuns(run_numbers):
     """
@@ -1003,7 +1004,8 @@ def normalizeNeXus(inputWorkspace, type):
 
 def integrateOverLowResRange(mt1,
                             dataLowResRange,
-                            type):
+                            type,
+                            is_nexus_detector_rotated_flag):
     """
         This creates the integrated workspace over the low resolution range leaving
         us with a [256,nbr TOF] workspace
@@ -1021,19 +1023,25 @@ def integrateOverLowResRange(mt1,
     fromXpixel = min(dataLowResRange) - 1
     toXpixel = max(dataLowResRange) - 1
 
-    _y_axis = zeros((256, len(_tof_axis) - 1))
-    _y_error_axis = zeros((256, len(_tof_axis) - 1))
+    if is_nexus_detector_rotated_flag:
+        sz_y_axis = 304
+        sz_x_axis = 256
+    else:
+        sz_y_axis = 256
+        sz_x_axis = 304
+
+    _y_axis = zeros((sz_y_axis, len(_tof_axis) - 1))
+    _y_error_axis = zeros((sz_y_axis, len(_tof_axis) - 1))
 
     x_size = toXpixel - fromXpixel + 1
     x_range = arange(x_size) + fromXpixel
 
-    y_range = range(256)
+    y_range = range(sz_y_axis)
 
     for x in x_range:
         for y in y_range:
-            _index = int((256) * x + y)
+            _index = int((sz_y_axis) * x + y)
             _y_axis[y, :] += mt1.readY(_index)[:].copy()
-
             _tmp_error_axis = mt1.readE(_index)[:].copy()
             # 0 -> 1
 #             index_where_0 = where(_tmp_error_axis == 0)
@@ -1050,7 +1058,7 @@ def substractBackground(tof_axis, y_axis, y_error_axis,
                         peakRange, backFlag, backRange,
                         error_0, type):
     """
-    shape of y_axis : [256, nbr_tof]
+    shape of y_axis : [sz_y_axis, nbr_tof]
     This routine will calculate the background, remove it from the peak
     and will return only the range of peak  -> [peak_size, nbr_tof]
 
@@ -1561,12 +1569,19 @@ def divideArrays(num_array, num_error_array, den_array, den_error_array):
 
     return [ratio_array, ratio_error_array]
 
-def getCentralPixel(ws_event_data, dataPeakRange):
+def getCentralPixel(ws_event_data, dataPeakRange, is_new_geometry):
     """
     This function will calculate the central pixel position
     """
 
-    pixelXtof_data = getPixelXTOF(ws_event_data, maxX=304, maxY=256)
+    if is_new_geometry:
+        _maxX = 256
+        _maxY = 304
+    else:
+        _maxX = 304
+        _maxY = 256
+
+    pixelXtof_data = getPixelXTOF(ws_event_data, maxX=_maxX, maxY=_maxY)
     pixelXtof_1d = pixelXtof_data.sum(axis=1)
     # Keep only range of pixels
     pixelXtof_roi = pixelXtof_1d[dataPeakRange[0]:dataPeakRange[1]]
@@ -1744,7 +1759,6 @@ def convertToQWithoutCorrection(tof_axis,
                y_axis,
                y_error_axis,
                peak_range = None,
-               central_pixel = None,
                source_to_detector_distance = None,
                sample_to_detector_distance = None,
                theta = None,
@@ -2029,7 +2043,16 @@ def cleanupData1D(final_data_y_axis, final_data_y_error_axis):
 
     return [final_data_y_axis, final_data_y_error_axis]
 
-
+def isNexusTakeAfterRefDate(nexus_date):
+   '''
+   This function parses the output.date and returns true if this date is after the ref date
+   '''
+   nexus_date_acquistion = nexus_date.split('T')[0]
+   
+   if nexus_date_acquistion > ref_date:
+     return True
+   else:
+     return False
 
 
 
diff --git a/Test/AutoTestData/ILLD17-161876-Ni.nxs b/Test/AutoTestData/ILLD17-161876-Ni.nxs
new file mode 100644
index 0000000000000000000000000000000000000000..680b6e001b52f7fab827f74808ce8099410b4ace
Binary files /dev/null and b/Test/AutoTestData/ILLD17-161876-Ni.nxs differ
diff --git a/Test/AutoTestData/ILLD17_111686.nxs b/Test/AutoTestData/ILLD17_111686.nxs
deleted file mode 100644
index 5ff9a291b6584284202f583b8bfcf6352b271faa..0000000000000000000000000000000000000000
Binary files a/Test/AutoTestData/ILLD17_111686.nxs and /dev/null differ
diff --git a/Test/AutoTestData/NXSPEData.nxspe b/Test/AutoTestData/NXSPEData.nxspe
new file mode 100644
index 0000000000000000000000000000000000000000..b5c0fed5d77cf97740a12a5f3688becf54605d1e
Binary files /dev/null and b/Test/AutoTestData/NXSPEData.nxspe differ
diff --git a/Test/AutoTestData/UsageData/GEM_Definition.vtp b/Test/AutoTestData/UsageData/GEM_Definition.vtp
new file mode 100644
index 0000000000000000000000000000000000000000..d6415ab3b95141b2e810b9d735603aef0ff1a448
--- /dev/null
+++ b/Test/AutoTestData/UsageData/GEM_Definition.vtp
@@ -0,0 +1,2047 @@
+<VTKFile byte_order="LittleEndian" type="PolyData" version="1.0">
+	<PolyData>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="64">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0101667 -0.0582343 0 -0.00533706 -0.0595284 0 -0.00533706 -0.0595284 0.001 -0.0101667 -0.0582343 0.001 -0.0101667 -0.0582343 0 -0.00533706 -0.0595284 0 -0.0025 -5.51091e-17 0 -0.00591826 -0.0390708 0 -0.00335619 -0.01961 0 -0.0101667 0.0582343 0 -0.00335619 0.01961 0 -0.00591826 0.0390708 0 -0.00533706 0.0595284 0 0.0025 -5.63338e-17 0 0.00162478 0.0200458 0 -0.000994217 0.0399391 0 -0.000994217 -0.0399391 0 0.00162478 -0.0200458 0 -0.00533706 -0.0595284 0 -0.00533706 -0.0595284 0.001 0.0025 -5.63338e-17 0.001 -0.000994217 -0.0399391 0.001 0.00162478 -0.0200458 0.001 0.0025 -5.63338e-17 0 -0.000994217 -0.0399391 0 0.00162478 -0.0200458 0 -0.0101667 -0.0582343 0.001 -0.00533706 -0.0595284 0.001 -0.0025 -5.51091e-17 0.001 -0.00591826 -0.0390708 0.001 -0.00335619 -0.01961 0.001 -0.0101667 0.0582343 0.001 -0.00335619 0.01961 0.001 -0.00591826 0.0390708 0.001 -0.00533706 0.0595284 0.001 0.0025 -5.63338e-17 0.001 0.00162478 0.0200458 0.001 -0.000994217 0.0399391 0.001 -0.000994217 -0.0399391 0.001 0.00162478 -0.0200458 0.001 -0.0101667 -0.0582343 0 -0.0101667 -0.0582343 0.001 -0.0025 -5.51091e-17 0.001 -0.00591826 -0.0390708 0.001 -0.00335619 -0.01961 0.001 -0.0025 -5.51091e-17 0 -0.00591826 -0.0390708 0 -0.00335619 -0.01961 0 -0.0025 -5.51091e-17 0 -0.0025 -5.51091e-17 0.001 -0.0101667 0.0582343 0.001 -0.00335619 0.01961 0.001 -0.00591826 0.0390708 0.001 -0.0101667 0.0582343 0 -0.00335619 0.01961 0 -0.00591826 0.0390708 0 -0.0101667 0.0582343 0 -0.00533706 0.0595284 0 -0.00533706 0.0595284 0.001 -0.0101667 0.0582343 0.001 0.0025 -5.63338e-17 0 0.0025 -5.63338e-17 0.001 -0.00533706 0.0595284 0.001 0.00162478 0.0200458 0.001 -0.000994217 0.0399391 0.001 -0.00533706 0.0595284 0 0.00162478 0.0200458 0 -0.000994217 0.0399391 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="65">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0103371 -0.0595284 0 -0.00550743 -0.0608225 0 -0.00550743 -0.0608225 0.001 -0.0103371 -0.0595284 0.001 -0.0103371 -0.0595284 0 -0.00550743 -0.0608225 0 -0.0025 -5.63338e-17 0 -0.00599422 -0.0399391 0 -0.00337522 -0.0200458 0 -0.0103371 0.0595284 0 -0.00337522 0.0200458 0 -0.00599422 0.0399391 0 -0.00550743 0.0608225 0 0.0025 -5.75584e-17 0 0.00160575 0.0204816 0 -0.00107018 0.0408073 0 -0.00107018 -0.0408073 0 0.00160575 -0.0204816 0 -0.00550743 -0.0608225 0 -0.00550743 -0.0608225 0.001 0.0025 -5.75584e-17 0.001 -0.00107018 -0.0408073 0.001 0.00160575 -0.0204816 0.001 0.0025 -5.75584e-17 0 -0.00107018 -0.0408073 0 0.00160575 -0.0204816 0 -0.0103371 -0.0595284 0.001 -0.00550743 -0.0608225 0.001 -0.0025 -5.63338e-17 0.001 -0.00599422 -0.0399391 0.001 -0.00337522 -0.0200458 0.001 -0.0103371 0.0595284 0.001 -0.00337522 0.0200458 0.001 -0.00599422 0.0399391 0.001 -0.00550743 0.0608225 0.001 0.0025 -5.75584e-17 0.001 0.00160575 0.0204816 0.001 -0.00107018 0.0408073 0.001 -0.00107018 -0.0408073 0.001 0.00160575 -0.0204816 0.001 -0.0103371 -0.0595284 0 -0.0103371 -0.0595284 0.001 -0.0025 -5.63338e-17 0.001 -0.00599422 -0.0399391 0.001 -0.00337522 -0.0200458 0.001 -0.0025 -5.63338e-17 0 -0.00599422 -0.0399391 0 -0.00337522 -0.0200458 0 -0.0025 -5.63338e-17 0 -0.0025 -5.63338e-17 0.001 -0.0103371 0.0595284 0.001 -0.00337522 0.0200458 0.001 -0.00599422 0.0399391 0.001 -0.0103371 0.0595284 0 -0.00337522 0.0200458 0 -0.00599422 0.0399391 0 -0.0103371 0.0595284 0 -0.00550743 0.0608225 0 -0.00550743 0.0608225 0.001 -0.0103371 0.0595284 0.001 0.0025 -5.75584e-17 0 0.0025 -5.75584e-17 0.001 -0.00550743 0.0608225 0.001 0.00160575 0.0204816 0.001 -0.00107018 0.0408073 0.001 -0.00550743 0.0608225 0 0.00160575 0.0204816 0 -0.00107018 0.0408073 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="74">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0118602 -0.0710976 0 -0.00703055 -0.0723917 0 -0.00703055 -0.0723917 0.001 -0.0118602 -0.0710976 0.001 -0.0118602 -0.0710976 0 -0.00703055 -0.0723917 0 -0.0025 -6.72821e-17 0 -0.00667331 -0.0477012 0 -0.00354532 -0.0239417 0 -0.0118602 0.0710976 0 -0.00354532 0.0239417 0 -0.00667331 0.0477012 0 -0.00703055 0.0723917 0 0.0025 -6.85067e-17 0 0.00143566 0.0243775 0 -0.00174927 0.0485694 0 -0.00174927 -0.0485694 0 0.00143566 -0.0243775 0 -0.00703055 -0.0723917 0 -0.00703055 -0.0723917 0.001 0.0025 -6.85067e-17 0.001 -0.00174927 -0.0485694 0.001 0.00143566 -0.0243775 0.001 0.0025 -6.85067e-17 0 -0.00174927 -0.0485694 0 0.00143566 -0.0243775 0 -0.0118602 -0.0710976 0.001 -0.00703055 -0.0723917 0.001 -0.0025 -6.72821e-17 0.001 -0.00667331 -0.0477012 0.001 -0.00354532 -0.0239417 0.001 -0.0118602 0.0710976 0.001 -0.00354532 0.0239417 0.001 -0.00667331 0.0477012 0.001 -0.00703055 0.0723917 0.001 0.0025 -6.85067e-17 0.001 0.00143566 0.0243775 0.001 -0.00174927 0.0485694 0.001 -0.00174927 -0.0485694 0.001 0.00143566 -0.0243775 0.001 -0.0118602 -0.0710976 0 -0.0118602 -0.0710976 0.001 -0.0025 -6.72821e-17 0.001 -0.00667331 -0.0477012 0.001 -0.00354532 -0.0239417 0.001 -0.0025 -6.72821e-17 0 -0.00667331 -0.0477012 0 -0.00354532 -0.0239417 0 -0.0025 -6.72821e-17 0 -0.0025 -6.72821e-17 0.001 -0.0118602 0.0710976 0.001 -0.00354532 0.0239417 0.001 -0.00667331 0.0477012 0.001 -0.0118602 0.0710976 0 -0.00354532 0.0239417 0 -0.00667331 0.0477012 0 -0.0118602 0.0710976 0 -0.00703055 0.0723917 0 -0.00703055 0.0723917 0.001 -0.0118602 0.0710976 0.001 0.0025 -6.85067e-17 0 0.0025 -6.85067e-17 0.001 -0.00703055 0.0723917 0.001 0.00143566 0.0243775 0.001 -0.00174927 0.0485694 0.001 -0.00703055 0.0723917 0 0.00143566 0.0243775 0 -0.00174927 0.0485694 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="75">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0120305 -0.0723917 0 -0.00720092 -0.0736858 0 -0.00720092 -0.0736858 0.001 -0.0120305 -0.0723917 0.001 -0.0120305 -0.0723917 0 -0.00720092 -0.0736858 0 -0.0025 -6.85067e-17 0 -0.00674927 -0.0485694 0 -0.00356434 -0.0243775 0 -0.0120305 0.0723917 0 -0.00356434 0.0243775 0 -0.00674927 0.0485694 0 -0.00720092 0.0736858 0 0.0025 -6.97314e-17 0 0.00141663 0.0248132 0 -0.00182523 0.0494376 0 -0.00182523 -0.0494376 0 0.00141663 -0.0248132 0 -0.00720092 -0.0736858 0 -0.00720092 -0.0736858 0.001 0.0025 -6.97314e-17 0.001 -0.00182523 -0.0494376 0.001 0.00141663 -0.0248132 0.001 0.0025 -6.97314e-17 0 -0.00182523 -0.0494376 0 0.00141663 -0.0248132 0 -0.0120305 -0.0723917 0.001 -0.00720092 -0.0736858 0.001 -0.0025 -6.85067e-17 0.001 -0.00674927 -0.0485694 0.001 -0.00356434 -0.0243775 0.001 -0.0120305 0.0723917 0.001 -0.00356434 0.0243775 0.001 -0.00674927 0.0485694 0.001 -0.00720092 0.0736858 0.001 0.0025 -6.97314e-17 0.001 0.00141663 0.0248132 0.001 -0.00182523 0.0494376 0.001 -0.00182523 -0.0494376 0.001 0.00141663 -0.0248132 0.001 -0.0120305 -0.0723917 0 -0.0120305 -0.0723917 0.001 -0.0025 -6.85067e-17 0.001 -0.00674927 -0.0485694 0.001 -0.00356434 -0.0243775 0.001 -0.0025 -6.85067e-17 0 -0.00674927 -0.0485694 0 -0.00356434 -0.0243775 0 -0.0025 -6.85067e-17 0 -0.0025 -6.85067e-17 0.001 -0.0120305 0.0723917 0.001 -0.00356434 0.0243775 0.001 -0.00674927 0.0485694 0.001 -0.0120305 0.0723917 0 -0.00356434 0.0243775 0 -0.00674927 0.0485694 0 -0.0120305 0.0723917 0 -0.00720092 0.0736858 0 -0.00720092 0.0736858 0.001 -0.0120305 0.0723917 0.001 0.0025 -6.97314e-17 0 0.0025 -6.97314e-17 0.001 -0.00720092 0.0736858 0.001 0.00141663 0.0248132 0.001 -0.00182523 0.0494376 0.001 -0.00720092 0.0736858 0 0.00141663 0.0248132 0 -0.00182523 0.0494376 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="76">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0121975 -0.0736599 0 -0.00736788 -0.074954 0 -0.00736788 -0.074954 0.001 -0.0121975 -0.0736599 0.001 -0.0121975 -0.0736599 0 -0.00736788 -0.074954 0 -0.0025 -6.97069e-17 0 -0.00682371 -0.0494203 0 -0.00358299 -0.0248045 0 -0.0121975 0.0736599 0 -0.00358299 0.0248045 0 -0.00682371 0.0494203 0 -0.00736788 0.074954 0 0.0025 -7.09315e-17 0 0.00139798 0.0252403 0 -0.00189967 0.0502885 0 -0.00189967 -0.0502885 0 0.00139798 -0.0252403 0 -0.00736788 -0.074954 0 -0.00736788 -0.074954 0.001 0.0025 -7.09315e-17 0.001 -0.00189967 -0.0502885 0.001 0.00139798 -0.0252403 0.001 0.0025 -7.09315e-17 0 -0.00189967 -0.0502885 0 0.00139798 -0.0252403 0 -0.0121975 -0.0736599 0.001 -0.00736788 -0.074954 0.001 -0.0025 -6.97069e-17 0.001 -0.00682371 -0.0494203 0.001 -0.00358299 -0.0248045 0.001 -0.0121975 0.0736599 0.001 -0.00358299 0.0248045 0.001 -0.00682371 0.0494203 0.001 -0.00736788 0.074954 0.001 0.0025 -7.09315e-17 0.001 0.00139798 0.0252403 0.001 -0.00189967 0.0502885 0.001 -0.00189967 -0.0502885 0.001 0.00139798 -0.0252403 0.001 -0.0121975 -0.0736599 0 -0.0121975 -0.0736599 0.001 -0.0025 -6.97069e-17 0.001 -0.00682371 -0.0494203 0.001 -0.00358299 -0.0248045 0.001 -0.0025 -6.97069e-17 0 -0.00682371 -0.0494203 0 -0.00358299 -0.0248045 0 -0.0025 -6.97069e-17 0 -0.0025 -6.97069e-17 0.001 -0.0121975 0.0736599 0.001 -0.00358299 0.0248045 0.001 -0.00682371 0.0494203 0.001 -0.0121975 0.0736599 0 -0.00358299 0.0248045 0 -0.00682371 0.0494203 0 -0.0121975 0.0736599 0 -0.00736788 0.074954 0 -0.00736788 0.074954 0.001 -0.0121975 0.0736599 0.001 0.0025 -7.09315e-17 0 0.0025 -7.09315e-17 0.001 -0.00736788 0.074954 0.001 0.00139798 0.0252403 0.001 -0.00189967 0.0502885 0.001 -0.00736788 0.074954 0 0.00139798 0.0252403 0 -0.00189967 0.0502885 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="77">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0123679 -0.074954 0 -0.00753825 -0.0762481 0 -0.00753825 -0.0762481 0.001 -0.0123679 -0.074954 0.001 -0.0123679 -0.074954 0 -0.00753825 -0.0762481 0 -0.0025 -7.09315e-17 0 -0.00689967 -0.0502885 0 -0.00360202 -0.0252403 0 -0.0123679 0.074954 0 -0.00360202 0.0252403 0 -0.00689967 0.0502885 0 -0.00753825 0.0762481 0 0.0025 -7.21562e-17 0 0.00137896 0.0256761 0 -0.00197564 0.0511568 0 -0.00197564 -0.0511568 0 0.00137896 -0.0256761 0 -0.00753825 -0.0762481 0 -0.00753825 -0.0762481 0.001 0.0025 -7.21562e-17 0.001 -0.00197564 -0.0511568 0.001 0.00137896 -0.0256761 0.001 0.0025 -7.21562e-17 0 -0.00197564 -0.0511568 0 0.00137896 -0.0256761 0 -0.0123679 -0.074954 0.001 -0.00753825 -0.0762481 0.001 -0.0025 -7.09315e-17 0.001 -0.00689967 -0.0502885 0.001 -0.00360202 -0.0252403 0.001 -0.0123679 0.074954 0.001 -0.00360202 0.0252403 0.001 -0.00689967 0.0502885 0.001 -0.00753825 0.0762481 0.001 0.0025 -7.21562e-17 0.001 0.00137896 0.0256761 0.001 -0.00197564 0.0511568 0.001 -0.00197564 -0.0511568 0.001 0.00137896 -0.0256761 0.001 -0.0123679 -0.074954 0 -0.0123679 -0.074954 0.001 -0.0025 -7.09315e-17 0.001 -0.00689967 -0.0502885 0.001 -0.00360202 -0.0252403 0.001 -0.0025 -7.09315e-17 0 -0.00689967 -0.0502885 0 -0.00360202 -0.0252403 0 -0.0025 -7.09315e-17 0 -0.0025 -7.09315e-17 0.001 -0.0123679 0.074954 0.001 -0.00360202 0.0252403 0.001 -0.00689967 0.0502885 0.001 -0.0123679 0.074954 0 -0.00360202 0.0252403 0 -0.00689967 0.0502885 0 -0.0123679 0.074954 0 -0.00753825 0.0762481 0 -0.00753825 0.0762481 0.001 -0.0123679 0.074954 0.001 0.0025 -7.21562e-17 0 0.0025 -7.21562e-17 0.001 -0.00753825 0.0762481 0.001 0.00137896 0.0256761 0.001 -0.00197564 0.0511568 0.001 -0.00753825 0.0762481 0 0.00137896 0.0256761 0 -0.00197564 0.0511568 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="78">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0125383 -0.0762481 0 -0.00770862 -0.0775422 0 -0.00770862 -0.0775422 0.001 -0.0125383 -0.0762481 0.001 -0.0125383 -0.0762481 0 -0.00770862 -0.0775422 0 -0.0025 -7.21562e-17 0 -0.00697564 -0.0511568 0 -0.00362104 -0.0256761 0 -0.0125383 0.0762481 0 -0.00362104 0.0256761 0 -0.00697564 0.0511568 0 -0.00770862 0.0775422 0 0.0025 -7.33808e-17 0 0.00135993 0.0261119 0 -0.0020516 0.052025 0 -0.0020516 -0.052025 0 0.00135993 -0.0261119 0 -0.00770862 -0.0775422 0 -0.00770862 -0.0775422 0.001 0.0025 -7.33808e-17 0.001 -0.0020516 -0.052025 0.001 0.00135993 -0.0261119 0.001 0.0025 -7.33808e-17 0 -0.0020516 -0.052025 0 0.00135993 -0.0261119 0 -0.0125383 -0.0762481 0.001 -0.00770862 -0.0775422 0.001 -0.0025 -7.21562e-17 0.001 -0.00697564 -0.0511568 0.001 -0.00362104 -0.0256761 0.001 -0.0125383 0.0762481 0.001 -0.00362104 0.0256761 0.001 -0.00697564 0.0511568 0.001 -0.00770862 0.0775422 0.001 0.0025 -7.33808e-17 0.001 0.00135993 0.0261119 0.001 -0.0020516 0.052025 0.001 -0.0020516 -0.052025 0.001 0.00135993 -0.0261119 0.001 -0.0125383 -0.0762481 0 -0.0125383 -0.0762481 0.001 -0.0025 -7.21562e-17 0.001 -0.00697564 -0.0511568 0.001 -0.00362104 -0.0256761 0.001 -0.0025 -7.21562e-17 0 -0.00697564 -0.0511568 0 -0.00362104 -0.0256761 0 -0.0025 -7.21562e-17 0 -0.0025 -7.21562e-17 0.001 -0.0125383 0.0762481 0.001 -0.00362104 0.0256761 0.001 -0.00697564 0.0511568 0.001 -0.0125383 0.0762481 0 -0.00362104 0.0256761 0 -0.00697564 0.0511568 0 -0.0125383 0.0762481 0 -0.00770862 0.0775422 0 -0.00770862 0.0775422 0.001 -0.0125383 0.0762481 0.001 0.0025 -7.33808e-17 0 0.0025 -7.33808e-17 0.001 -0.00770862 0.0775422 0.001 0.00135993 0.0261119 0.001 -0.0020516 0.052025 0.001 -0.00770862 0.0775422 0 0.00135993 0.0261119 0 -0.0020516 0.052025 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="79">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0127052 -0.0775163 0 -0.00787559 -0.0788104 0 -0.00787559 -0.0788104 0.001 -0.0127052 -0.0775163 0.001 -0.0127052 -0.0775163 0 -0.00787559 -0.0788104 0 -0.0025 -7.33563e-17 0 -0.00705008 -0.0520076 0 -0.00363969 -0.0261031 0 -0.0127052 0.0775163 0 -0.00363969 0.0261031 0 -0.00705008 0.0520076 0 -0.00787559 0.0788104 0 0.0025 -7.4581e-17 0 0.00134129 0.0265389 0 -0.00212604 0.0528759 0 -0.00212604 -0.0528759 0 0.00134129 -0.0265389 0 -0.00787559 -0.0788104 0 -0.00787559 -0.0788104 0.001 0.0025 -7.4581e-17 0.001 -0.00212604 -0.0528759 0.001 0.00134129 -0.0265389 0.001 0.0025 -7.4581e-17 0 -0.00212604 -0.0528759 0 0.00134129 -0.0265389 0 -0.0127052 -0.0775163 0.001 -0.00787559 -0.0788104 0.001 -0.0025 -7.33563e-17 0.001 -0.00705008 -0.0520076 0.001 -0.00363969 -0.0261031 0.001 -0.0127052 0.0775163 0.001 -0.00363969 0.0261031 0.001 -0.00705008 0.0520076 0.001 -0.00787559 0.0788104 0.001 0.0025 -7.4581e-17 0.001 0.00134129 0.0265389 0.001 -0.00212604 0.0528759 0.001 -0.00212604 -0.0528759 0.001 0.00134129 -0.0265389 0.001 -0.0127052 -0.0775163 0 -0.0127052 -0.0775163 0.001 -0.0025 -7.33563e-17 0.001 -0.00705008 -0.0520076 0.001 -0.00363969 -0.0261031 0.001 -0.0025 -7.33563e-17 0 -0.00705008 -0.0520076 0 -0.00363969 -0.0261031 0 -0.0025 -7.33563e-17 0 -0.0025 -7.33563e-17 0.001 -0.0127052 0.0775163 0.001 -0.00363969 0.0261031 0.001 -0.00705008 0.0520076 0.001 -0.0127052 0.0775163 0 -0.00363969 0.0261031 0 -0.00705008 0.0520076 0 -0.0127052 0.0775163 0 -0.00787559 0.0788104 0 -0.00787559 0.0788104 0.001 -0.0127052 0.0775163 0.001 0.0025 -7.4581e-17 0 0.0025 -7.4581e-17 0.001 -0.00787559 0.0788104 0.001 0.00134129 0.0265389 0.001 -0.00212604 0.0528759 0.001 -0.00787559 0.0788104 0 0.00134129 0.0265389 0 -0.00212604 0.0528759 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="80">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0128756 -0.0788104 0 -0.00804596 -0.0801045 0 -0.00804596 -0.0801045 0.001 -0.0128756 -0.0788104 0.001 -0.0128756 -0.0788104 0 -0.00804596 -0.0801045 0 -0.0025 -7.4581e-17 0 -0.00712604 -0.0528759 0 -0.00365871 -0.0265389 0 -0.0128756 0.0788104 0 -0.00365871 0.0265389 0 -0.00712604 0.0528759 0 -0.00804596 0.0801045 0 0.0025 -7.58056e-17 0 0.00132226 0.0269747 0 -0.002202 0.0537441 0 -0.002202 -0.0537441 0 0.00132226 -0.0269747 0 -0.00804596 -0.0801045 0 -0.00804596 -0.0801045 0.001 0.0025 -7.58056e-17 0.001 -0.002202 -0.0537441 0.001 0.00132226 -0.0269747 0.001 0.0025 -7.58056e-17 0 -0.002202 -0.0537441 0 0.00132226 -0.0269747 0 -0.0128756 -0.0788104 0.001 -0.00804596 -0.0801045 0.001 -0.0025 -7.4581e-17 0.001 -0.00712604 -0.0528759 0.001 -0.00365871 -0.0265389 0.001 -0.0128756 0.0788104 0.001 -0.00365871 0.0265389 0.001 -0.00712604 0.0528759 0.001 -0.00804596 0.0801045 0.001 0.0025 -7.58056e-17 0.001 0.00132226 0.0269747 0.001 -0.002202 0.0537441 0.001 -0.002202 -0.0537441 0.001 0.00132226 -0.0269747 0.001 -0.0128756 -0.0788104 0 -0.0128756 -0.0788104 0.001 -0.0025 -7.4581e-17 0.001 -0.00712604 -0.0528759 0.001 -0.00365871 -0.0265389 0.001 -0.0025 -7.4581e-17 0 -0.00712604 -0.0528759 0 -0.00365871 -0.0265389 0 -0.0025 -7.4581e-17 0 -0.0025 -7.4581e-17 0.001 -0.0128756 0.0788104 0.001 -0.00365871 0.0265389 0.001 -0.00712604 0.0528759 0.001 -0.0128756 0.0788104 0 -0.00365871 0.0265389 0 -0.00712604 0.0528759 0 -0.0128756 0.0788104 0 -0.00804596 0.0801045 0 -0.00804596 0.0801045 0.001 -0.0128756 0.0788104 0.001 0.0025 -7.58056e-17 0 0.0025 -7.58056e-17 0.001 -0.00804596 0.0801045 0.001 0.00132226 0.0269747 0.001 -0.002202 0.0537441 0.001 -0.00804596 0.0801045 0 0.00132226 0.0269747 0 -0.002202 0.0537441 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="81">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0130425 -0.0800786 0 -0.00821292 -0.0813727 0 -0.00821292 -0.0813727 0.001 -0.0130425 -0.0800786 0.001 -0.0130425 -0.0800786 0 -0.00821292 -0.0813727 0 -0.0025 -7.57811e-17 0 -0.00720048 -0.0537267 0 -0.00367736 -0.026966 0 -0.0130425 0.0800786 0 -0.00367736 0.026966 0 -0.00720048 0.0537267 0 -0.00821292 0.0813727 0 0.0025 -7.70058e-17 0 0.00130361 0.0274018 0 -0.00227644 0.054595 0 -0.00227644 -0.054595 0 0.00130361 -0.0274018 0 -0.00821292 -0.0813727 0 -0.00821292 -0.0813727 0.001 0.0025 -7.70058e-17 0.001 -0.00227644 -0.054595 0.001 0.00130361 -0.0274018 0.001 0.0025 -7.70058e-17 0 -0.00227644 -0.054595 0 0.00130361 -0.0274018 0 -0.0130425 -0.0800786 0.001 -0.00821292 -0.0813727 0.001 -0.0025 -7.57811e-17 0.001 -0.00720048 -0.0537267 0.001 -0.00367736 -0.026966 0.001 -0.0130425 0.0800786 0.001 -0.00367736 0.026966 0.001 -0.00720048 0.0537267 0.001 -0.00821292 0.0813727 0.001 0.0025 -7.70058e-17 0.001 0.00130361 0.0274018 0.001 -0.00227644 0.054595 0.001 -0.00227644 -0.054595 0.001 0.00130361 -0.0274018 0.001 -0.0130425 -0.0800786 0 -0.0130425 -0.0800786 0.001 -0.0025 -7.57811e-17 0.001 -0.00720048 -0.0537267 0.001 -0.00367736 -0.026966 0.001 -0.0025 -7.57811e-17 0 -0.00720048 -0.0537267 0 -0.00367736 -0.026966 0 -0.0025 -7.57811e-17 0 -0.0025 -7.57811e-17 0.001 -0.0130425 0.0800786 0.001 -0.00367736 0.026966 0.001 -0.00720048 0.0537267 0.001 -0.0130425 0.0800786 0 -0.00367736 0.026966 0 -0.00720048 0.0537267 0 -0.0130425 0.0800786 0 -0.00821292 0.0813727 0 -0.00821292 0.0813727 0.001 -0.0130425 0.0800786 0.001 0.0025 -7.70058e-17 0 0.0025 -7.70058e-17 0.001 -0.00821292 0.0813727 0.001 0.00130361 0.0274018 0.001 -0.00227644 0.054595 0.001 -0.00821292 0.0813727 0 0.00130361 0.0274018 0 -0.00227644 0.054595 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="82">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0132129 -0.0813727 0 -0.00838329 -0.0826668 0 -0.00838329 -0.0826668 0.001 -0.0132129 -0.0813727 0.001 -0.0132129 -0.0813727 0 -0.00838329 -0.0826668 0 -0.0025 -7.70058e-17 0 -0.00727644 -0.054595 0 -0.00369639 -0.0274018 0 -0.0132129 0.0813727 0 -0.00369639 0.0274018 0 -0.00727644 0.054595 0 -0.00838329 0.0826668 0 0.0025 -7.82304e-17 0 0.00128459 0.0278375 0 -0.0023524 0.0554632 0 -0.0023524 -0.0554632 0 0.00128459 -0.0278375 0 -0.00838329 -0.0826668 0 -0.00838329 -0.0826668 0.001 0.0025 -7.82304e-17 0.001 -0.0023524 -0.0554632 0.001 0.00128459 -0.0278375 0.001 0.0025 -7.82304e-17 0 -0.0023524 -0.0554632 0 0.00128459 -0.0278375 0 -0.0132129 -0.0813727 0.001 -0.00838329 -0.0826668 0.001 -0.0025 -7.70058e-17 0.001 -0.00727644 -0.054595 0.001 -0.00369639 -0.0274018 0.001 -0.0132129 0.0813727 0.001 -0.00369639 0.0274018 0.001 -0.00727644 0.054595 0.001 -0.00838329 0.0826668 0.001 0.0025 -7.82304e-17 0.001 0.00128459 0.0278375 0.001 -0.0023524 0.0554632 0.001 -0.0023524 -0.0554632 0.001 0.00128459 -0.0278375 0.001 -0.0132129 -0.0813727 0 -0.0132129 -0.0813727 0.001 -0.0025 -7.70058e-17 0.001 -0.00727644 -0.054595 0.001 -0.00369639 -0.0274018 0.001 -0.0025 -7.70058e-17 0 -0.00727644 -0.054595 0 -0.00369639 -0.0274018 0 -0.0025 -7.70058e-17 0 -0.0025 -7.70058e-17 0.001 -0.0132129 0.0813727 0.001 -0.00369639 0.0274018 0.001 -0.00727644 0.054595 0.001 -0.0132129 0.0813727 0 -0.00369639 0.0274018 0 -0.00727644 0.054595 0 -0.0132129 0.0813727 0 -0.00838329 0.0826668 0 -0.00838329 0.0826668 0.001 -0.0132129 0.0813727 0.001 0.0025 -7.82304e-17 0 0.0025 -7.82304e-17 0.001 -0.00838329 0.0826668 0.001 0.00128459 0.0278375 0.001 -0.0023524 0.0554632 0.001 -0.00838329 0.0826668 0 0.00128459 0.0278375 0 -0.0023524 0.0554632 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="83">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0133833 -0.0826668 0 -0.00855366 -0.0839609 0 -0.00855366 -0.0839609 0.001 -0.0133833 -0.0826668 0.001 -0.0133833 -0.0826668 0 -0.00855366 -0.0839609 0 -0.0025 -7.82304e-17 0 -0.0073524 -0.0554632 0 -0.00371541 -0.0278375 0 -0.0133833 0.0826668 0 -0.00371541 0.0278375 0 -0.0073524 0.0554632 0 -0.00855366 0.0839609 0 0.0025 -7.94551e-17 0 0.00126556 0.0282733 0 -0.00242836 0.0563315 0 -0.00242836 -0.0563315 0 0.00126556 -0.0282733 0 -0.00855366 -0.0839609 0 -0.00855366 -0.0839609 0.001 0.0025 -7.94551e-17 0.001 -0.00242836 -0.0563315 0.001 0.00126556 -0.0282733 0.001 0.0025 -7.94551e-17 0 -0.00242836 -0.0563315 0 0.00126556 -0.0282733 0 -0.0133833 -0.0826668 0.001 -0.00855366 -0.0839609 0.001 -0.0025 -7.82304e-17 0.001 -0.0073524 -0.0554632 0.001 -0.00371541 -0.0278375 0.001 -0.0133833 0.0826668 0.001 -0.00371541 0.0278375 0.001 -0.0073524 0.0554632 0.001 -0.00855366 0.0839609 0.001 0.0025 -7.94551e-17 0.001 0.00126556 0.0282733 0.001 -0.00242836 0.0563315 0.001 -0.00242836 -0.0563315 0.001 0.00126556 -0.0282733 0.001 -0.0133833 -0.0826668 0 -0.0133833 -0.0826668 0.001 -0.0025 -7.82304e-17 0.001 -0.0073524 -0.0554632 0.001 -0.00371541 -0.0278375 0.001 -0.0025 -7.82304e-17 0 -0.0073524 -0.0554632 0 -0.00371541 -0.0278375 0 -0.0025 -7.82304e-17 0 -0.0025 -7.82304e-17 0.001 -0.0133833 0.0826668 0.001 -0.00371541 0.0278375 0.001 -0.0073524 0.0554632 0.001 -0.0133833 0.0826668 0 -0.00371541 0.0278375 0 -0.0073524 0.0554632 0 -0.0133833 0.0826668 0 -0.00855366 0.0839609 0 -0.00855366 0.0839609 0.001 -0.0133833 0.0826668 0.001 0.0025 -7.94551e-17 0 0.0025 -7.94551e-17 0.001 -0.00855366 0.0839609 0.001 0.00126556 0.0282733 0.001 -0.00242836 0.0563315 0.001 -0.00855366 0.0839609 0 0.00126556 0.0282733 0 -0.00242836 0.0563315 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="66">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.010504 -0.0607966 0 -0.00567439 -0.0620907 0 -0.00567439 -0.0620907 0.001 -0.010504 -0.0607966 0.001 -0.010504 -0.0607966 0 -0.00567439 -0.0620907 0 -0.0025 -5.75339e-17 0 -0.00606866 -0.04079 0 -0.00339387 -0.0204729 0 -0.010504 0.0607966 0 -0.00339387 0.0204729 0 -0.00606866 0.04079 0 -0.00567439 0.0620907 0 0.0025 -5.87586e-17 0 0.00158711 0.0209087 0 -0.00114462 0.0416582 0 -0.00114462 -0.0416582 0 0.00158711 -0.0209087 0 -0.00567439 -0.0620907 0 -0.00567439 -0.0620907 0.001 0.0025 -5.87586e-17 0.001 -0.00114462 -0.0416582 0.001 0.00158711 -0.0209087 0.001 0.0025 -5.87586e-17 0 -0.00114462 -0.0416582 0 0.00158711 -0.0209087 0 -0.010504 -0.0607966 0.001 -0.00567439 -0.0620907 0.001 -0.0025 -5.75339e-17 0.001 -0.00606866 -0.04079 0.001 -0.00339387 -0.0204729 0.001 -0.010504 0.0607966 0.001 -0.00339387 0.0204729 0.001 -0.00606866 0.04079 0.001 -0.00567439 0.0620907 0.001 0.0025 -5.87586e-17 0.001 0.00158711 0.0209087 0.001 -0.00114462 0.0416582 0.001 -0.00114462 -0.0416582 0.001 0.00158711 -0.0209087 0.001 -0.010504 -0.0607966 0 -0.010504 -0.0607966 0.001 -0.0025 -5.75339e-17 0.001 -0.00606866 -0.04079 0.001 -0.00339387 -0.0204729 0.001 -0.0025 -5.75339e-17 0 -0.00606866 -0.04079 0 -0.00339387 -0.0204729 0 -0.0025 -5.75339e-17 0 -0.0025 -5.75339e-17 0.001 -0.010504 0.0607966 0.001 -0.00339387 0.0204729 0.001 -0.00606866 0.04079 0.001 -0.010504 0.0607966 0 -0.00339387 0.0204729 0 -0.00606866 0.04079 0 -0.010504 0.0607966 0 -0.00567439 0.0620907 0 -0.00567439 0.0620907 0.001 -0.010504 0.0607966 0.001 0.0025 -5.87586e-17 0 0.0025 -5.87586e-17 0.001 -0.00567439 0.0620907 0.001 0.00158711 0.0209087 0.001 -0.00114462 0.0416582 0.001 -0.00567439 0.0620907 0 0.00158711 0.0209087 0 -0.00114462 0.0416582 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="84">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0135503 -0.083935 0 -0.00872063 -0.0852291 0 -0.00872063 -0.0852291 0.001 -0.0135503 -0.083935 0.001 -0.0135503 -0.083935 0 -0.00872063 -0.0852291 0 -0.0025 -7.94306e-17 0 -0.00742685 -0.0563141 0 -0.00373406 -0.0282646 0 -0.0135503 0.083935 0 -0.00373406 0.0282646 0 -0.00742685 0.0563141 0 -0.00872063 0.0852291 0 0.0025 -8.06552e-17 0 0.00124691 0.0287004 0 -0.00250281 0.0571823 0 -0.00250281 -0.0571823 0 0.00124691 -0.0287004 0 -0.00872063 -0.0852291 0 -0.00872063 -0.0852291 0.001 0.0025 -8.06552e-17 0.001 -0.00250281 -0.0571823 0.001 0.00124691 -0.0287004 0.001 0.0025 -8.06552e-17 0 -0.00250281 -0.0571823 0 0.00124691 -0.0287004 0 -0.0135503 -0.083935 0.001 -0.00872063 -0.0852291 0.001 -0.0025 -7.94306e-17 0.001 -0.00742685 -0.0563141 0.001 -0.00373406 -0.0282646 0.001 -0.0135503 0.083935 0.001 -0.00373406 0.0282646 0.001 -0.00742685 0.0563141 0.001 -0.00872063 0.0852291 0.001 0.0025 -8.06552e-17 0.001 0.00124691 0.0287004 0.001 -0.00250281 0.0571823 0.001 -0.00250281 -0.0571823 0.001 0.00124691 -0.0287004 0.001 -0.0135503 -0.083935 0 -0.0135503 -0.083935 0.001 -0.0025 -7.94306e-17 0.001 -0.00742685 -0.0563141 0.001 -0.00373406 -0.0282646 0.001 -0.0025 -7.94306e-17 0 -0.00742685 -0.0563141 0 -0.00373406 -0.0282646 0 -0.0025 -7.94306e-17 0 -0.0025 -7.94306e-17 0.001 -0.0135503 0.083935 0.001 -0.00373406 0.0282646 0.001 -0.00742685 0.0563141 0.001 -0.0135503 0.083935 0 -0.00373406 0.0282646 0 -0.00742685 0.0563141 0 -0.0135503 0.083935 0 -0.00872063 0.0852291 0 -0.00872063 0.0852291 0.001 -0.0135503 0.083935 0.001 0.0025 -8.06552e-17 0 0.0025 -8.06552e-17 0.001 -0.00872063 0.0852291 0.001 0.00124691 0.0287004 0.001 -0.00250281 0.0571823 0.001 -0.00872063 0.0852291 0 0.00124691 0.0287004 0 -0.00250281 0.0571823 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="85">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0137206 -0.0852291 0 -0.008891 -0.0865232 0 -0.008891 -0.0865232 0.001 -0.0137206 -0.0852291 0.001 -0.0137206 -0.0852291 0 -0.008891 -0.0865232 0 -0.0025 -8.06552e-17 0 -0.00750281 -0.0571823 0 -0.00375309 -0.0287004 0 -0.0137206 0.0852291 0 -0.00375309 0.0287004 0 -0.00750281 0.0571823 0 -0.008891 0.0865232 0 0.0025 -8.18799e-17 0 0.00122789 0.0291362 0 -0.00257877 0.0580506 0 -0.00257877 -0.0580506 0 0.00122789 -0.0291362 0 -0.008891 -0.0865232 0 -0.008891 -0.0865232 0.001 0.0025 -8.18799e-17 0.001 -0.00257877 -0.0580506 0.001 0.00122789 -0.0291362 0.001 0.0025 -8.18799e-17 0 -0.00257877 -0.0580506 0 0.00122789 -0.0291362 0 -0.0137206 -0.0852291 0.001 -0.008891 -0.0865232 0.001 -0.0025 -8.06552e-17 0.001 -0.00750281 -0.0571823 0.001 -0.00375309 -0.0287004 0.001 -0.0137206 0.0852291 0.001 -0.00375309 0.0287004 0.001 -0.00750281 0.0571823 0.001 -0.008891 0.0865232 0.001 0.0025 -8.18799e-17 0.001 0.00122789 0.0291362 0.001 -0.00257877 0.0580506 0.001 -0.00257877 -0.0580506 0.001 0.00122789 -0.0291362 0.001 -0.0137206 -0.0852291 0 -0.0137206 -0.0852291 0.001 -0.0025 -8.06552e-17 0.001 -0.00750281 -0.0571823 0.001 -0.00375309 -0.0287004 0.001 -0.0025 -8.06552e-17 0 -0.00750281 -0.0571823 0 -0.00375309 -0.0287004 0 -0.0025 -8.06552e-17 0 -0.0025 -8.06552e-17 0.001 -0.0137206 0.0852291 0.001 -0.00375309 0.0287004 0.001 -0.00750281 0.0571823 0.001 -0.0137206 0.0852291 0 -0.00375309 0.0287004 0 -0.00750281 0.0571823 0 -0.0137206 0.0852291 0 -0.008891 0.0865232 0 -0.008891 0.0865232 0.001 -0.0137206 0.0852291 0.001 0.0025 -8.18799e-17 0 0.0025 -8.18799e-17 0.001 -0.008891 0.0865232 0.001 0.00122789 0.0291362 0.001 -0.00257877 0.0580506 0.001 -0.008891 0.0865232 0 0.00122789 0.0291362 0 -0.00257877 0.0580506 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="86">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0138876 -0.0864973 0 -0.00905796 -0.0877914 0 -0.00905796 -0.0877914 0.001 -0.0138876 -0.0864973 0.001 -0.0138876 -0.0864973 0 -0.00905796 -0.0877914 0 -0.0025 -8.18554e-17 0 -0.00757725 -0.0580332 0 -0.00377173 -0.0291274 0 -0.0138876 0.0864973 0 -0.00377173 0.0291274 0 -0.00757725 0.0580332 0 -0.00905796 0.0877914 0 0.0025 -8.308e-17 0 0.00120924 0.0295632 0 -0.00265321 0.0589015 0 -0.00265321 -0.0589015 0 0.00120924 -0.0295632 0 -0.00905796 -0.0877914 0 -0.00905796 -0.0877914 0.001 0.0025 -8.308e-17 0.001 -0.00265321 -0.0589015 0.001 0.00120924 -0.0295632 0.001 0.0025 -8.308e-17 0 -0.00265321 -0.0589015 0 0.00120924 -0.0295632 0 -0.0138876 -0.0864973 0.001 -0.00905796 -0.0877914 0.001 -0.0025 -8.18554e-17 0.001 -0.00757725 -0.0580332 0.001 -0.00377173 -0.0291274 0.001 -0.0138876 0.0864973 0.001 -0.00377173 0.0291274 0.001 -0.00757725 0.0580332 0.001 -0.00905796 0.0877914 0.001 0.0025 -8.308e-17 0.001 0.00120924 0.0295632 0.001 -0.00265321 0.0589015 0.001 -0.00265321 -0.0589015 0.001 0.00120924 -0.0295632 0.001 -0.0138876 -0.0864973 0 -0.0138876 -0.0864973 0.001 -0.0025 -8.18554e-17 0.001 -0.00757725 -0.0580332 0.001 -0.00377173 -0.0291274 0.001 -0.0025 -8.18554e-17 0 -0.00757725 -0.0580332 0 -0.00377173 -0.0291274 0 -0.0025 -8.18554e-17 0 -0.0025 -8.18554e-17 0.001 -0.0138876 0.0864973 0.001 -0.00377173 0.0291274 0.001 -0.00757725 0.0580332 0.001 -0.0138876 0.0864973 0 -0.00377173 0.0291274 0 -0.00757725 0.0580332 0 -0.0138876 0.0864973 0 -0.00905796 0.0877914 0 -0.00905796 0.0877914 0.001 -0.0138876 0.0864973 0.001 0.0025 -8.308e-17 0 0.0025 -8.308e-17 0.001 -0.00905796 0.0877914 0.001 0.00120924 0.0295632 0.001 -0.00265321 0.0589015 0.001 -0.00905796 0.0877914 0 0.00120924 0.0295632 0 -0.00265321 0.0589015 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="87">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.014058 -0.0877914 0 -0.00922833 -0.0890855 0 -0.00922833 -0.0890855 0.001 -0.014058 -0.0877914 0.001 -0.014058 -0.0877914 0 -0.00922833 -0.0890855 0 -0.0025 -8.308e-17 0 -0.00765321 -0.0589015 0 -0.00379076 -0.0295632 0 -0.014058 0.0877914 0 -0.00379076 0.0295632 0 -0.00765321 0.0589015 0 -0.00922833 0.0890855 0 0.0025 -8.43047e-17 0 0.00119022 0.029999 0 -0.00272917 0.0597697 0 -0.00272917 -0.0597697 0 0.00119022 -0.029999 0 -0.00922833 -0.0890855 0 -0.00922833 -0.0890855 0.001 0.0025 -8.43047e-17 0.001 -0.00272917 -0.0597697 0.001 0.00119022 -0.029999 0.001 0.0025 -8.43047e-17 0 -0.00272917 -0.0597697 0 0.00119022 -0.029999 0 -0.014058 -0.0877914 0.001 -0.00922833 -0.0890855 0.001 -0.0025 -8.308e-17 0.001 -0.00765321 -0.0589015 0.001 -0.00379076 -0.0295632 0.001 -0.014058 0.0877914 0.001 -0.00379076 0.0295632 0.001 -0.00765321 0.0589015 0.001 -0.00922833 0.0890855 0.001 0.0025 -8.43047e-17 0.001 0.00119022 0.029999 0.001 -0.00272917 0.0597697 0.001 -0.00272917 -0.0597697 0.001 0.00119022 -0.029999 0.001 -0.014058 -0.0877914 0 -0.014058 -0.0877914 0.001 -0.0025 -8.308e-17 0.001 -0.00765321 -0.0589015 0.001 -0.00379076 -0.0295632 0.001 -0.0025 -8.308e-17 0 -0.00765321 -0.0589015 0 -0.00379076 -0.0295632 0 -0.0025 -8.308e-17 0 -0.0025 -8.308e-17 0.001 -0.014058 0.0877914 0.001 -0.00379076 0.0295632 0.001 -0.00765321 0.0589015 0.001 -0.014058 0.0877914 0 -0.00379076 0.0295632 0 -0.00765321 0.0589015 0 -0.014058 0.0877914 0 -0.00922833 0.0890855 0 -0.00922833 0.0890855 0.001 -0.014058 0.0877914 0.001 0.0025 -8.43047e-17 0 0.0025 -8.43047e-17 0.001 -0.00922833 0.0890855 0.001 0.00119022 0.029999 0.001 -0.00272917 0.0597697 0.001 -0.00922833 0.0890855 0 0.00119022 0.029999 0 -0.00272917 0.0597697 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="88">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0142249 -0.0890596 0 -0.00939529 -0.0903537 0 -0.00939529 -0.0903537 0.001 -0.0142249 -0.0890596 0.001 -0.0142249 -0.0890596 0 -0.00939529 -0.0903537 0 -0.0025 -8.42802e-17 0 -0.00772765 -0.0597523 0 -0.0038094 -0.0299903 0 -0.0142249 0.0890596 0 -0.0038094 0.0299903 0 -0.00772765 0.0597523 0 -0.00939529 0.0903537 0 0.0025 -8.55048e-17 0 0.00117157 0.0304261 0 -0.00280361 0.0606206 0 -0.00280361 -0.0606206 0 0.00117157 -0.0304261 0 -0.00939529 -0.0903537 0 -0.00939529 -0.0903537 0.001 0.0025 -8.55048e-17 0.001 -0.00280361 -0.0606206 0.001 0.00117157 -0.0304261 0.001 0.0025 -8.55048e-17 0 -0.00280361 -0.0606206 0 0.00117157 -0.0304261 0 -0.0142249 -0.0890596 0.001 -0.00939529 -0.0903537 0.001 -0.0025 -8.42802e-17 0.001 -0.00772765 -0.0597523 0.001 -0.0038094 -0.0299903 0.001 -0.0142249 0.0890596 0.001 -0.0038094 0.0299903 0.001 -0.00772765 0.0597523 0.001 -0.00939529 0.0903537 0.001 0.0025 -8.55048e-17 0.001 0.00117157 0.0304261 0.001 -0.00280361 0.0606206 0.001 -0.00280361 -0.0606206 0.001 0.00117157 -0.0304261 0.001 -0.0142249 -0.0890596 0 -0.0142249 -0.0890596 0.001 -0.0025 -8.42802e-17 0.001 -0.00772765 -0.0597523 0.001 -0.0038094 -0.0299903 0.001 -0.0025 -8.42802e-17 0 -0.00772765 -0.0597523 0 -0.0038094 -0.0299903 0 -0.0025 -8.42802e-17 0 -0.0025 -8.42802e-17 0.001 -0.0142249 0.0890596 0.001 -0.0038094 0.0299903 0.001 -0.00772765 0.0597523 0.001 -0.0142249 0.0890596 0 -0.0038094 0.0299903 0 -0.00772765 0.0597523 0 -0.0142249 0.0890596 0 -0.00939529 0.0903537 0 -0.00939529 0.0903537 0.001 -0.0142249 0.0890596 0.001 0.0025 -8.55048e-17 0 0.0025 -8.55048e-17 0.001 -0.00939529 0.0903537 0.001 0.00117157 0.0304261 0.001 -0.00280361 0.0606206 0.001 -0.00939529 0.0903537 0 0.00117157 0.0304261 0 -0.00280361 0.0606206 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="89">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0143953 -0.0903537 0 -0.00956566 -0.0916478 0 -0.00956566 -0.0916478 0.001 -0.0143953 -0.0903537 0.001 -0.0143953 -0.0903537 0 -0.00956566 -0.0916478 0 -0.0025 -8.55048e-17 0 -0.00780361 -0.0606206 0 -0.00382843 -0.0304261 0 -0.0143953 0.0903537 0 -0.00382843 0.0304261 0 -0.00780361 0.0606206 0 -0.00956566 0.0916478 0 0.0025 -8.67295e-17 0 0.00115254 0.0308618 0 -0.00287957 0.0614888 0 -0.00287957 -0.0614888 0 0.00115254 -0.0308618 0 -0.00956566 -0.0916478 0 -0.00956566 -0.0916478 0.001 0.0025 -8.67295e-17 0.001 -0.00287957 -0.0614888 0.001 0.00115254 -0.0308618 0.001 0.0025 -8.67295e-17 0 -0.00287957 -0.0614888 0 0.00115254 -0.0308618 0 -0.0143953 -0.0903537 0.001 -0.00956566 -0.0916478 0.001 -0.0025 -8.55048e-17 0.001 -0.00780361 -0.0606206 0.001 -0.00382843 -0.0304261 0.001 -0.0143953 0.0903537 0.001 -0.00382843 0.0304261 0.001 -0.00780361 0.0606206 0.001 -0.00956566 0.0916478 0.001 0.0025 -8.67295e-17 0.001 0.00115254 0.0308618 0.001 -0.00287957 0.0614888 0.001 -0.00287957 -0.0614888 0.001 0.00115254 -0.0308618 0.001 -0.0143953 -0.0903537 0 -0.0143953 -0.0903537 0.001 -0.0025 -8.55048e-17 0.001 -0.00780361 -0.0606206 0.001 -0.00382843 -0.0304261 0.001 -0.0025 -8.55048e-17 0 -0.00780361 -0.0606206 0 -0.00382843 -0.0304261 0 -0.0025 -8.55048e-17 0 -0.0025 -8.55048e-17 0.001 -0.0143953 0.0903537 0.001 -0.00382843 0.0304261 0.001 -0.00780361 0.0606206 0.001 -0.0143953 0.0903537 0 -0.00382843 0.0304261 0 -0.00780361 0.0606206 0 -0.0143953 0.0903537 0 -0.00956566 0.0916478 0 -0.00956566 0.0916478 0.001 -0.0143953 0.0903537 0.001 0.0025 -8.67295e-17 0 0.0025 -8.67295e-17 0.001 -0.00956566 0.0916478 0.001 0.00115254 0.0308618 0.001 -0.00287957 0.0614888 0.001 -0.00956566 0.0916478 0 0.00115254 0.0308618 0 -0.00287957 0.0614888 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="90">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0145623 -0.0916219 0 -0.00973263 -0.092916 0 -0.00973263 -0.092916 0.001 -0.0145623 -0.0916219 0.001 -0.0145623 -0.0916219 0 -0.00973263 -0.092916 0 -0.0025 -8.6705e-17 0 -0.00787806 -0.0614715 0 -0.00384708 -0.0308531 0 -0.0145623 0.0916219 0 -0.00384708 0.0308531 0 -0.00787806 0.0614715 0 -0.00973263 0.092916 0 0.0025 -8.79296e-17 0 0.0011339 0.0312889 0 -0.00295402 0.0623397 0 -0.00295402 -0.0623397 0 0.0011339 -0.0312889 0 -0.00973263 -0.092916 0 -0.00973263 -0.092916 0.001 0.0025 -8.79296e-17 0.001 -0.00295402 -0.0623397 0.001 0.0011339 -0.0312889 0.001 0.0025 -8.79296e-17 0 -0.00295402 -0.0623397 0 0.0011339 -0.0312889 0 -0.0145623 -0.0916219 0.001 -0.00973263 -0.092916 0.001 -0.0025 -8.6705e-17 0.001 -0.00787806 -0.0614715 0.001 -0.00384708 -0.0308531 0.001 -0.0145623 0.0916219 0.001 -0.00384708 0.0308531 0.001 -0.00787806 0.0614715 0.001 -0.00973263 0.092916 0.001 0.0025 -8.79296e-17 0.001 0.0011339 0.0312889 0.001 -0.00295402 0.0623397 0.001 -0.00295402 -0.0623397 0.001 0.0011339 -0.0312889 0.001 -0.0145623 -0.0916219 0 -0.0145623 -0.0916219 0.001 -0.0025 -8.6705e-17 0.001 -0.00787806 -0.0614715 0.001 -0.00384708 -0.0308531 0.001 -0.0025 -8.6705e-17 0 -0.00787806 -0.0614715 0 -0.00384708 -0.0308531 0 -0.0025 -8.6705e-17 0 -0.0025 -8.6705e-17 0.001 -0.0145623 0.0916219 0.001 -0.00384708 0.0308531 0.001 -0.00787806 0.0614715 0.001 -0.0145623 0.0916219 0 -0.00384708 0.0308531 0 -0.00787806 0.0614715 0 -0.0145623 0.0916219 0 -0.00973263 0.092916 0 -0.00973263 0.092916 0.001 -0.0145623 0.0916219 0.001 0.0025 -8.79296e-17 0 0.0025 -8.79296e-17 0.001 -0.00973263 0.092916 0.001 0.0011339 0.0312889 0.001 -0.00295402 0.0623397 0.001 -0.00973263 0.092916 0 0.0011339 0.0312889 0 -0.00295402 0.0623397 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="91">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0147326 -0.092916 0 -0.009903 -0.0942101 0 -0.009903 -0.0942101 0.001 -0.0147326 -0.092916 0.001 -0.0147326 -0.092916 0 -0.009903 -0.0942101 0 -0.0025 -8.79296e-17 0 -0.00795402 -0.0623397 0 -0.0038661 -0.0312889 0 -0.0147326 0.092916 0 -0.0038661 0.0312889 0 -0.00795402 0.0623397 0 -0.009903 0.0942101 0 0.0025 -8.91543e-17 0 0.00111487 0.0317247 0 -0.00302998 0.0632079 0 -0.00302998 -0.0632079 0 0.00111487 -0.0317247 0 -0.009903 -0.0942101 0 -0.009903 -0.0942101 0.001 0.0025 -8.91543e-17 0.001 -0.00302998 -0.0632079 0.001 0.00111487 -0.0317247 0.001 0.0025 -8.91543e-17 0 -0.00302998 -0.0632079 0 0.00111487 -0.0317247 0 -0.0147326 -0.092916 0.001 -0.009903 -0.0942101 0.001 -0.0025 -8.79296e-17 0.001 -0.00795402 -0.0623397 0.001 -0.0038661 -0.0312889 0.001 -0.0147326 0.092916 0.001 -0.0038661 0.0312889 0.001 -0.00795402 0.0623397 0.001 -0.009903 0.0942101 0.001 0.0025 -8.91543e-17 0.001 0.00111487 0.0317247 0.001 -0.00302998 0.0632079 0.001 -0.00302998 -0.0632079 0.001 0.00111487 -0.0317247 0.001 -0.0147326 -0.092916 0 -0.0147326 -0.092916 0.001 -0.0025 -8.79296e-17 0.001 -0.00795402 -0.0623397 0.001 -0.0038661 -0.0312889 0.001 -0.0025 -8.79296e-17 0 -0.00795402 -0.0623397 0 -0.0038661 -0.0312889 0 -0.0025 -8.79296e-17 0 -0.0025 -8.79296e-17 0.001 -0.0147326 0.092916 0.001 -0.0038661 0.0312889 0.001 -0.00795402 0.0623397 0.001 -0.0147326 0.092916 0 -0.0038661 0.0312889 0 -0.00795402 0.0623397 0 -0.0147326 0.092916 0 -0.009903 0.0942101 0 -0.009903 0.0942101 0.001 -0.0147326 0.092916 0.001 0.0025 -8.91543e-17 0 0.0025 -8.91543e-17 0.001 -0.009903 0.0942101 0.001 0.00111487 0.0317247 0.001 -0.00302998 0.0632079 0.001 -0.009903 0.0942101 0 0.00111487 0.0317247 0 -0.00302998 0.0632079 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="92">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0148996 -0.0941843 0 -0.01007 -0.0954783 0 -0.01007 -0.0954783 0.001 -0.0148996 -0.0941843 0.001 -0.0148996 -0.0941843 0 -0.01007 -0.0954783 0 -0.0025 -8.91298e-17 0 -0.00802846 -0.0631906 0 -0.00388475 -0.031716 0 -0.0148996 0.0941843 0 -0.00388475 0.031716 0 -0.00802846 0.0631906 0 -0.01007 0.0954783 0 0.0025 -9.03544e-17 0 0.00109622 0.0321518 0 -0.00310442 0.0640588 0 -0.00310442 -0.0640588 0 0.00109622 -0.0321518 0 -0.01007 -0.0954783 0 -0.01007 -0.0954783 0.001 0.0025 -9.03544e-17 0.001 -0.00310442 -0.0640588 0.001 0.00109622 -0.0321518 0.001 0.0025 -9.03544e-17 0 -0.00310442 -0.0640588 0 0.00109622 -0.0321518 0 -0.0148996 -0.0941843 0.001 -0.01007 -0.0954783 0.001 -0.0025 -8.91298e-17 0.001 -0.00802846 -0.0631906 0.001 -0.00388475 -0.031716 0.001 -0.0148996 0.0941843 0.001 -0.00388475 0.031716 0.001 -0.00802846 0.0631906 0.001 -0.01007 0.0954783 0.001 0.0025 -9.03544e-17 0.001 0.00109622 0.0321518 0.001 -0.00310442 0.0640588 0.001 -0.00310442 -0.0640588 0.001 0.00109622 -0.0321518 0.001 -0.0148996 -0.0941843 0 -0.0148996 -0.0941843 0.001 -0.0025 -8.91298e-17 0.001 -0.00802846 -0.0631906 0.001 -0.00388475 -0.031716 0.001 -0.0025 -8.91298e-17 0 -0.00802846 -0.0631906 0 -0.00388475 -0.031716 0 -0.0025 -8.91298e-17 0 -0.0025 -8.91298e-17 0.001 -0.0148996 0.0941843 0.001 -0.00388475 0.031716 0.001 -0.00802846 0.0631906 0.001 -0.0148996 0.0941843 0 -0.00388475 0.031716 0 -0.00802846 0.0631906 0 -0.0148996 0.0941843 0 -0.01007 0.0954783 0 -0.01007 0.0954783 0.001 -0.0148996 0.0941843 0.001 0.0025 -9.03544e-17 0 0.0025 -9.03544e-17 0.001 -0.01007 0.0954783 0.001 0.00109622 0.0321518 0.001 -0.00310442 0.0640588 0.001 -0.01007 0.0954783 0 0.00109622 0.0321518 0 -0.00310442 0.0640588 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="93">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0150666 -0.0954525 0 -0.0102369 -0.0967466 0 -0.0102369 -0.0967466 0.001 -0.0150666 -0.0954525 0.001 -0.0150666 -0.0954525 0 -0.0102369 -0.0967466 0 -0.0025 -9.03299e-17 0 -0.0081029 -0.0640414 0 -0.0039034 -0.032143 0 -0.0150666 0.0954525 0 -0.0039034 0.032143 0 -0.0081029 0.0640414 0 -0.0102369 0.0967466 0 0.0025 -9.15546e-17 0 0.00107758 0.0325788 0 -0.00317886 0.0649097 0 -0.00317886 -0.0649097 0 0.00107758 -0.0325788 0 -0.0102369 -0.0967466 0 -0.0102369 -0.0967466 0.001 0.0025 -9.15546e-17 0.001 -0.00317886 -0.0649097 0.001 0.00107758 -0.0325788 0.001 0.0025 -9.15546e-17 0 -0.00317886 -0.0649097 0 0.00107758 -0.0325788 0 -0.0150666 -0.0954525 0.001 -0.0102369 -0.0967466 0.001 -0.0025 -9.03299e-17 0.001 -0.0081029 -0.0640414 0.001 -0.0039034 -0.032143 0.001 -0.0150666 0.0954525 0.001 -0.0039034 0.032143 0.001 -0.0081029 0.0640414 0.001 -0.0102369 0.0967466 0.001 0.0025 -9.15546e-17 0.001 0.00107758 0.0325788 0.001 -0.00317886 0.0649097 0.001 -0.00317886 -0.0649097 0.001 0.00107758 -0.0325788 0.001 -0.0150666 -0.0954525 0 -0.0150666 -0.0954525 0.001 -0.0025 -9.03299e-17 0.001 -0.0081029 -0.0640414 0.001 -0.0039034 -0.032143 0.001 -0.0025 -9.03299e-17 0 -0.0081029 -0.0640414 0 -0.0039034 -0.032143 0 -0.0025 -9.03299e-17 0 -0.0025 -9.03299e-17 0.001 -0.0150666 0.0954525 0.001 -0.0039034 0.032143 0.001 -0.0081029 0.0640414 0.001 -0.0150666 0.0954525 0 -0.0039034 0.032143 0 -0.0081029 0.0640414 0 -0.0150666 0.0954525 0 -0.0102369 0.0967466 0 -0.0102369 0.0967466 0.001 -0.0150666 0.0954525 0.001 0.0025 -9.15546e-17 0 0.0025 -9.15546e-17 0.001 -0.0102369 0.0967466 0.001 0.00107758 0.0325788 0.001 -0.00317886 0.0649097 0.001 -0.0102369 0.0967466 0 0.00107758 0.0325788 0 -0.00317886 0.0649097 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="67">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0106744 -0.0620907 0 -0.00584477 -0.0633848 0 -0.00584477 -0.0633848 0.001 -0.0106744 -0.0620907 0.001 -0.0106744 -0.0620907 0 -0.00584477 -0.0633848 0 -0.0025 -5.87586e-17 0 -0.00614462 -0.0416582 0 -0.00341289 -0.0209087 0 -0.0106744 0.0620907 0 -0.00341289 0.0209087 0 -0.00614462 0.0416582 0 -0.00584477 0.0633848 0 0.0025 -5.99832e-17 0 0.00156808 0.0213444 0 -0.00122058 0.0425264 0 -0.00122058 -0.0425264 0 0.00156808 -0.0213444 0 -0.00584477 -0.0633848 0 -0.00584477 -0.0633848 0.001 0.0025 -5.99832e-17 0.001 -0.00122058 -0.0425264 0.001 0.00156808 -0.0213444 0.001 0.0025 -5.99832e-17 0 -0.00122058 -0.0425264 0 0.00156808 -0.0213444 0 -0.0106744 -0.0620907 0.001 -0.00584477 -0.0633848 0.001 -0.0025 -5.87586e-17 0.001 -0.00614462 -0.0416582 0.001 -0.00341289 -0.0209087 0.001 -0.0106744 0.0620907 0.001 -0.00341289 0.0209087 0.001 -0.00614462 0.0416582 0.001 -0.00584477 0.0633848 0.001 0.0025 -5.99832e-17 0.001 0.00156808 0.0213444 0.001 -0.00122058 0.0425264 0.001 -0.00122058 -0.0425264 0.001 0.00156808 -0.0213444 0.001 -0.0106744 -0.0620907 0 -0.0106744 -0.0620907 0.001 -0.0025 -5.87586e-17 0.001 -0.00614462 -0.0416582 0.001 -0.00341289 -0.0209087 0.001 -0.0025 -5.87586e-17 0 -0.00614462 -0.0416582 0 -0.00341289 -0.0209087 0 -0.0025 -5.87586e-17 0 -0.0025 -5.87586e-17 0.001 -0.0106744 0.0620907 0.001 -0.00341289 0.0209087 0.001 -0.00614462 0.0416582 0.001 -0.0106744 0.0620907 0 -0.00341289 0.0209087 0 -0.00614462 0.0416582 0 -0.0106744 0.0620907 0 -0.00584477 0.0633848 0 -0.00584477 0.0633848 0.001 -0.0106744 0.0620907 0.001 0.0025 -5.99832e-17 0 0.0025 -5.99832e-17 0.001 -0.00584477 0.0633848 0.001 0.00156808 0.0213444 0.001 -0.00122058 0.0425264 0.001 -0.00584477 0.0633848 0 0.00156808 0.0213444 0 -0.00122058 0.0425264 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="94">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0152369 -0.0967466 0 -0.0104073 -0.0980407 0 -0.0104073 -0.0980407 0.001 -0.0152369 -0.0967466 0.001 -0.0152369 -0.0967466 0 -0.0104073 -0.0980407 0 -0.0025 -9.15546e-17 0 -0.00817886 -0.0649097 0 -0.00392242 -0.0325788 0 -0.0152369 0.0967466 0 -0.00392242 0.0325788 0 -0.00817886 0.0649097 0 -0.0104073 0.0980407 0 0.0025 -9.27792e-17 0 0.00105855 0.0330146 0 -0.00325482 0.0657779 0 -0.00325482 -0.0657779 0 0.00105855 -0.0330146 0 -0.0104073 -0.0980407 0 -0.0104073 -0.0980407 0.001 0.0025 -9.27792e-17 0.001 -0.00325482 -0.0657779 0.001 0.00105855 -0.0330146 0.001 0.0025 -9.27792e-17 0 -0.00325482 -0.0657779 0 0.00105855 -0.0330146 0 -0.0152369 -0.0967466 0.001 -0.0104073 -0.0980407 0.001 -0.0025 -9.15546e-17 0.001 -0.00817886 -0.0649097 0.001 -0.00392242 -0.0325788 0.001 -0.0152369 0.0967466 0.001 -0.00392242 0.0325788 0.001 -0.00817886 0.0649097 0.001 -0.0104073 0.0980407 0.001 0.0025 -9.27792e-17 0.001 0.00105855 0.0330146 0.001 -0.00325482 0.0657779 0.001 -0.00325482 -0.0657779 0.001 0.00105855 -0.0330146 0.001 -0.0152369 -0.0967466 0 -0.0152369 -0.0967466 0.001 -0.0025 -9.15546e-17 0.001 -0.00817886 -0.0649097 0.001 -0.00392242 -0.0325788 0.001 -0.0025 -9.15546e-17 0 -0.00817886 -0.0649097 0 -0.00392242 -0.0325788 0 -0.0025 -9.15546e-17 0 -0.0025 -9.15546e-17 0.001 -0.0152369 0.0967466 0.001 -0.00392242 0.0325788 0.001 -0.00817886 0.0649097 0.001 -0.0152369 0.0967466 0 -0.00392242 0.0325788 0 -0.00817886 0.0649097 0 -0.0152369 0.0967466 0 -0.0104073 0.0980407 0 -0.0104073 0.0980407 0.001 -0.0152369 0.0967466 0.001 0.0025 -9.27792e-17 0 0.0025 -9.27792e-17 0.001 -0.0104073 0.0980407 0.001 0.00105855 0.0330146 0.001 -0.00325482 0.0657779 0.001 -0.0104073 0.0980407 0 0.00105855 0.0330146 0 -0.00325482 0.0657779 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="95">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0154039 -0.0980148 0 -0.0105743 -0.0993089 0 -0.0105743 -0.0993089 0.001 -0.0154039 -0.0980148 0.001 -0.0154039 -0.0980148 0 -0.0105743 -0.0993089 0 -0.0025 -9.27547e-17 0 -0.0082533 -0.0657606 0 -0.00394107 -0.0330059 0 -0.0154039 0.0980148 0 -0.00394107 0.0330059 0 -0.0082533 0.0657606 0 -0.0105743 0.0993089 0 0.0025 -9.39794e-17 0 0.00103991 0.0334417 0 -0.00332927 0.0666288 0 -0.00332927 -0.0666288 0 0.00103991 -0.0334417 0 -0.0105743 -0.0993089 0 -0.0105743 -0.0993089 0.001 0.0025 -9.39794e-17 0.001 -0.00332927 -0.0666288 0.001 0.00103991 -0.0334417 0.001 0.0025 -9.39794e-17 0 -0.00332927 -0.0666288 0 0.00103991 -0.0334417 0 -0.0154039 -0.0980148 0.001 -0.0105743 -0.0993089 0.001 -0.0025 -9.27547e-17 0.001 -0.0082533 -0.0657606 0.001 -0.00394107 -0.0330059 0.001 -0.0154039 0.0980148 0.001 -0.00394107 0.0330059 0.001 -0.0082533 0.0657606 0.001 -0.0105743 0.0993089 0.001 0.0025 -9.39794e-17 0.001 0.00103991 0.0334417 0.001 -0.00332927 0.0666288 0.001 -0.00332927 -0.0666288 0.001 0.00103991 -0.0334417 0.001 -0.0154039 -0.0980148 0 -0.0154039 -0.0980148 0.001 -0.0025 -9.27547e-17 0.001 -0.0082533 -0.0657606 0.001 -0.00394107 -0.0330059 0.001 -0.0025 -9.27547e-17 0 -0.0082533 -0.0657606 0 -0.00394107 -0.0330059 0 -0.0025 -9.27547e-17 0 -0.0025 -9.27547e-17 0.001 -0.0154039 0.0980148 0.001 -0.00394107 0.0330059 0.001 -0.0082533 0.0657606 0.001 -0.0154039 0.0980148 0 -0.00394107 0.0330059 0 -0.0082533 0.0657606 0 -0.0154039 0.0980148 0 -0.0105743 0.0993089 0 -0.0105743 0.0993089 0.001 -0.0154039 0.0980148 0.001 0.0025 -9.39794e-17 0 0.0025 -9.39794e-17 0.001 -0.0105743 0.0993089 0.001 0.00103991 0.0334417 0.001 -0.00332927 0.0666288 0.001 -0.0105743 0.0993089 0 0.00103991 0.0334417 0 -0.00332927 0.0666288 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="96">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0155709 -0.099283 0 -0.0107412 -0.100577 0 -0.0107412 -0.100577 0.001 -0.0155709 -0.099283 0.001 -0.0155709 -0.099283 0 -0.0107412 -0.100577 0 -0.0025 -9.39549e-17 0 -0.00832775 -0.0666114 0 -0.00395971 -0.0334329 0 -0.0155709 0.099283 0 -0.00395971 0.0334329 0 -0.00832775 0.0666114 0 -0.0107412 0.100577 0 0.0025 -9.51795e-17 0 0.00102126 0.0338687 0 -0.00340371 0.0674797 0 -0.00340371 -0.0674797 0 0.00102126 -0.0338687 0 -0.0107412 -0.100577 0 -0.0107412 -0.100577 0.001 0.0025 -9.51795e-17 0.001 -0.00340371 -0.0674797 0.001 0.00102126 -0.0338687 0.001 0.0025 -9.51795e-17 0 -0.00340371 -0.0674797 0 0.00102126 -0.0338687 0 -0.0155709 -0.099283 0.001 -0.0107412 -0.100577 0.001 -0.0025 -9.39549e-17 0.001 -0.00832775 -0.0666114 0.001 -0.00395971 -0.0334329 0.001 -0.0155709 0.099283 0.001 -0.00395971 0.0334329 0.001 -0.00832775 0.0666114 0.001 -0.0107412 0.100577 0.001 0.0025 -9.51795e-17 0.001 0.00102126 0.0338687 0.001 -0.00340371 0.0674797 0.001 -0.00340371 -0.0674797 0.001 0.00102126 -0.0338687 0.001 -0.0155709 -0.099283 0 -0.0155709 -0.099283 0.001 -0.0025 -9.39549e-17 0.001 -0.00832775 -0.0666114 0.001 -0.00395971 -0.0334329 0.001 -0.0025 -9.39549e-17 0 -0.00832775 -0.0666114 0 -0.00395971 -0.0334329 0 -0.0025 -9.39549e-17 0 -0.0025 -9.39549e-17 0.001 -0.0155709 0.099283 0.001 -0.00395971 0.0334329 0.001 -0.00832775 0.0666114 0.001 -0.0155709 0.099283 0 -0.00395971 0.0334329 0 -0.00832775 0.0666114 0 -0.0155709 0.099283 0 -0.0107412 0.100577 0 -0.0107412 0.100577 0.001 -0.0155709 0.099283 0.001 0.0025 -9.51795e-17 0 0.0025 -9.51795e-17 0.001 -0.0107412 0.100577 0.001 0.00102126 0.0338687 0.001 -0.00340371 0.0674797 0.001 -0.0107412 0.100577 0 0.00102126 0.0338687 0 -0.00340371 0.0674797 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="97">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0157412 -0.100577 0 -0.0109116 -0.101871 0 -0.0109116 -0.101871 0.001 -0.0157412 -0.100577 0.001 -0.0157412 -0.100577 0 -0.0109116 -0.101871 0 -0.0025 -9.51795e-17 0 -0.00840371 -0.0674797 0 -0.00397874 -0.0338687 0 -0.0157412 0.100577 0 -0.00397874 0.0338687 0 -0.00840371 0.0674797 0 -0.0109116 0.101871 0 0.0025 -9.64042e-17 0 0.00100223 0.0343045 0 -0.00347967 0.0683479 0 -0.00347967 -0.0683479 0 0.00100223 -0.0343045 0 -0.0109116 -0.101871 0 -0.0109116 -0.101871 0.001 0.0025 -9.64042e-17 0.001 -0.00347967 -0.0683479 0.001 0.00100223 -0.0343045 0.001 0.0025 -9.64042e-17 0 -0.00347967 -0.0683479 0 0.00100223 -0.0343045 0 -0.0157412 -0.100577 0.001 -0.0109116 -0.101871 0.001 -0.0025 -9.51795e-17 0.001 -0.00840371 -0.0674797 0.001 -0.00397874 -0.0338687 0.001 -0.0157412 0.100577 0.001 -0.00397874 0.0338687 0.001 -0.00840371 0.0674797 0.001 -0.0109116 0.101871 0.001 0.0025 -9.64042e-17 0.001 0.00100223 0.0343045 0.001 -0.00347967 0.0683479 0.001 -0.00347967 -0.0683479 0.001 0.00100223 -0.0343045 0.001 -0.0157412 -0.100577 0 -0.0157412 -0.100577 0.001 -0.0025 -9.51795e-17 0.001 -0.00840371 -0.0674797 0.001 -0.00397874 -0.0338687 0.001 -0.0025 -9.51795e-17 0 -0.00840371 -0.0674797 0 -0.00397874 -0.0338687 0 -0.0025 -9.51795e-17 0 -0.0025 -9.51795e-17 0.001 -0.0157412 0.100577 0.001 -0.00397874 0.0338687 0.001 -0.00840371 0.0674797 0.001 -0.0157412 0.100577 0 -0.00397874 0.0338687 0 -0.00840371 0.0674797 0 -0.0157412 0.100577 0 -0.0109116 0.101871 0 -0.0109116 0.101871 0.001 -0.0157412 0.100577 0.001 0.0025 -9.64042e-17 0 0.0025 -9.64042e-17 0.001 -0.0109116 0.101871 0.001 0.00100223 0.0343045 0.001 -0.00347967 0.0683479 0.001 -0.0109116 0.101871 0 0.00100223 0.0343045 0 -0.00347967 0.0683479 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="98">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0159082 -0.101845 0 -0.0110786 -0.103139 0 -0.0110786 -0.103139 0.001 -0.0159082 -0.101845 0.001 -0.0159082 -0.101845 0 -0.0110786 -0.103139 0 -0.0025 -9.63797e-17 0 -0.00847815 -0.0683306 0 -0.00399739 -0.0342958 0 -0.0159082 0.101845 0 -0.00399739 0.0342958 0 -0.00847815 0.0683306 0 -0.0110786 0.103139 0 0.0025 -9.76043e-17 0 0.000983587 0.0347316 0 -0.00355411 0.0691988 0 -0.00355411 -0.0691988 0 0.000983587 -0.0347316 0 -0.0110786 -0.103139 0 -0.0110786 -0.103139 0.001 0.0025 -9.76043e-17 0.001 -0.00355411 -0.0691988 0.001 0.000983587 -0.0347316 0.001 0.0025 -9.76043e-17 0 -0.00355411 -0.0691988 0 0.000983587 -0.0347316 0 -0.0159082 -0.101845 0.001 -0.0110786 -0.103139 0.001 -0.0025 -9.63797e-17 0.001 -0.00847815 -0.0683306 0.001 -0.00399739 -0.0342958 0.001 -0.0159082 0.101845 0.001 -0.00399739 0.0342958 0.001 -0.00847815 0.0683306 0.001 -0.0110786 0.103139 0.001 0.0025 -9.76043e-17 0.001 0.000983587 0.0347316 0.001 -0.00355411 0.0691988 0.001 -0.00355411 -0.0691988 0.001 0.000983587 -0.0347316 0.001 -0.0159082 -0.101845 0 -0.0159082 -0.101845 0.001 -0.0025 -9.63797e-17 0.001 -0.00847815 -0.0683306 0.001 -0.00399739 -0.0342958 0.001 -0.0025 -9.63797e-17 0 -0.00847815 -0.0683306 0 -0.00399739 -0.0342958 0 -0.0025 -9.63797e-17 0 -0.0025 -9.63797e-17 0.001 -0.0159082 0.101845 0.001 -0.00399739 0.0342958 0.001 -0.00847815 0.0683306 0.001 -0.0159082 0.101845 0 -0.00399739 0.0342958 0 -0.00847815 0.0683306 0 -0.0159082 0.101845 0 -0.0110786 0.103139 0 -0.0110786 0.103139 0.001 -0.0159082 0.101845 0.001 0.0025 -9.76043e-17 0 0.0025 -9.76043e-17 0.001 -0.0110786 0.103139 0.001 0.000983587 0.0347316 0.001 -0.00355411 0.0691988 0.001 -0.0110786 0.103139 0 0.000983587 0.0347316 0 -0.00355411 0.0691988 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="99">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0160752 -0.103114 0 -0.0112455 -0.104408 0 -0.0112455 -0.104408 0.001 -0.0160752 -0.103114 0.001 -0.0160752 -0.103114 0 -0.0112455 -0.104408 0 -0.0025 -9.75799e-17 0 -0.00855259 -0.0691814 0 -0.00401603 -0.0347228 0 -0.0160752 0.103114 0 -0.00401603 0.0347228 0 -0.00855259 0.0691814 0 -0.0112455 0.104408 0 0.0025 -9.88045e-17 0 0.000964941 0.0351586 0 -0.00362855 0.0700497 0 -0.00362855 -0.0700497 0 0.000964941 -0.0351586 0 -0.0112455 -0.104408 0 -0.0112455 -0.104408 0.001 0.0025 -9.88045e-17 0.001 -0.00362855 -0.0700497 0.001 0.000964941 -0.0351586 0.001 0.0025 -9.88045e-17 0 -0.00362855 -0.0700497 0 0.000964941 -0.0351586 0 -0.0160752 -0.103114 0.001 -0.0112455 -0.104408 0.001 -0.0025 -9.75799e-17 0.001 -0.00855259 -0.0691814 0.001 -0.00401603 -0.0347228 0.001 -0.0160752 0.103114 0.001 -0.00401603 0.0347228 0.001 -0.00855259 0.0691814 0.001 -0.0112455 0.104408 0.001 0.0025 -9.88045e-17 0.001 0.000964941 0.0351586 0.001 -0.00362855 0.0700497 0.001 -0.00362855 -0.0700497 0.001 0.000964941 -0.0351586 0.001 -0.0160752 -0.103114 0 -0.0160752 -0.103114 0.001 -0.0025 -9.75799e-17 0.001 -0.00855259 -0.0691814 0.001 -0.00401603 -0.0347228 0.001 -0.0025 -9.75799e-17 0 -0.00855259 -0.0691814 0 -0.00401603 -0.0347228 0 -0.0025 -9.75799e-17 0 -0.0025 -9.75799e-17 0.001 -0.0160752 0.103114 0.001 -0.00401603 0.0347228 0.001 -0.00855259 0.0691814 0.001 -0.0160752 0.103114 0 -0.00401603 0.0347228 0 -0.00855259 0.0691814 0 -0.0160752 0.103114 0 -0.0112455 0.104408 0 -0.0112455 0.104408 0.001 -0.0160752 0.103114 0.001 0.0025 -9.88045e-17 0 0.0025 -9.88045e-17 0.001 -0.0112455 0.104408 0.001 0.000964941 0.0351586 0.001 -0.00362855 0.0700497 0.001 -0.0112455 0.104408 0 0.000964941 0.0351586 0 -0.00362855 0.0700497 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="100">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0162455 -0.104408 0 -0.0114159 -0.105702 0 -0.0114159 -0.105702 0.001 -0.0162455 -0.104408 0.001 -0.0162455 -0.104408 0 -0.0114159 -0.105702 0 -0.0025 -9.88045e-17 0 -0.00862855 -0.0700497 0 -0.00403506 -0.0351586 0 -0.0162455 0.104408 0 -0.00403506 0.0351586 0 -0.00862855 0.0700497 0 -0.0114159 0.105702 0 0.0025 -1.00029e-16 0 0.000945915 0.0355944 0 -0.00370451 0.0709179 0 -0.00370451 -0.0709179 0 0.000945915 -0.0355944 0 -0.0114159 -0.105702 0 -0.0114159 -0.105702 0.001 0.0025 -1.00029e-16 0.001 -0.00370451 -0.0709179 0.001 0.000945915 -0.0355944 0.001 0.0025 -1.00029e-16 0 -0.00370451 -0.0709179 0 0.000945915 -0.0355944 0 -0.0162455 -0.104408 0.001 -0.0114159 -0.105702 0.001 -0.0025 -9.88045e-17 0.001 -0.00862855 -0.0700497 0.001 -0.00403506 -0.0351586 0.001 -0.0162455 0.104408 0.001 -0.00403506 0.0351586 0.001 -0.00862855 0.0700497 0.001 -0.0114159 0.105702 0.001 0.0025 -1.00029e-16 0.001 0.000945915 0.0355944 0.001 -0.00370451 0.0709179 0.001 -0.00370451 -0.0709179 0.001 0.000945915 -0.0355944 0.001 -0.0162455 -0.104408 0 -0.0162455 -0.104408 0.001 -0.0025 -9.88045e-17 0.001 -0.00862855 -0.0700497 0.001 -0.00403506 -0.0351586 0.001 -0.0025 -9.88045e-17 0 -0.00862855 -0.0700497 0 -0.00403506 -0.0351586 0 -0.0025 -9.88045e-17 0 -0.0025 -9.88045e-17 0.001 -0.0162455 0.104408 0.001 -0.00403506 0.0351586 0.001 -0.00862855 0.0700497 0.001 -0.0162455 0.104408 0 -0.00403506 0.0351586 0 -0.00862855 0.0700497 0 -0.0162455 0.104408 0 -0.0114159 0.105702 0 -0.0114159 0.105702 0.001 -0.0162455 0.104408 0.001 0.0025 -1.00029e-16 0 0.0025 -1.00029e-16 0.001 -0.0114159 0.105702 0.001 0.000945915 0.0355944 0.001 -0.00370451 0.0709179 0.001 -0.0114159 0.105702 0 0.000945915 0.0355944 0 -0.00370451 0.0709179 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="101">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0164125 -0.105676 0 -0.0115829 -0.10697 0 -0.0115829 -0.10697 0.001 -0.0164125 -0.105676 0.001 -0.0164125 -0.105676 0 -0.0115829 -0.10697 0 -0.0025 -1.00005e-16 0 -0.00870299 -0.0709006 0 -0.0040537 -0.0355857 0 -0.0164125 0.105676 0 -0.0040537 0.0355857 0 -0.00870299 0.0709006 0 -0.0115829 0.10697 0 0.0025 -1.01229e-16 0 0.000927269 0.0360215 0 -0.00377896 0.0717688 0 -0.00377896 -0.0717688 0 0.000927269 -0.0360215 0 -0.0115829 -0.10697 0 -0.0115829 -0.10697 0.001 0.0025 -1.01229e-16 0.001 -0.00377896 -0.0717688 0.001 0.000927269 -0.0360215 0.001 0.0025 -1.01229e-16 0 -0.00377896 -0.0717688 0 0.000927269 -0.0360215 0 -0.0164125 -0.105676 0.001 -0.0115829 -0.10697 0.001 -0.0025 -1.00005e-16 0.001 -0.00870299 -0.0709006 0.001 -0.0040537 -0.0355857 0.001 -0.0164125 0.105676 0.001 -0.0040537 0.0355857 0.001 -0.00870299 0.0709006 0.001 -0.0115829 0.10697 0.001 0.0025 -1.01229e-16 0.001 0.000927269 0.0360215 0.001 -0.00377896 0.0717688 0.001 -0.00377896 -0.0717688 0.001 0.000927269 -0.0360215 0.001 -0.0164125 -0.105676 0 -0.0164125 -0.105676 0.001 -0.0025 -1.00005e-16 0.001 -0.00870299 -0.0709006 0.001 -0.0040537 -0.0355857 0.001 -0.0025 -1.00005e-16 0 -0.00870299 -0.0709006 0 -0.0040537 -0.0355857 0 -0.0025 -1.00005e-16 0 -0.0025 -1.00005e-16 0.001 -0.0164125 0.105676 0.001 -0.0040537 0.0355857 0.001 -0.00870299 0.0709006 0.001 -0.0164125 0.105676 0 -0.0040537 0.0355857 0 -0.00870299 0.0709006 0 -0.0164125 0.105676 0 -0.0115829 0.10697 0 -0.0115829 0.10697 0.001 -0.0164125 0.105676 0.001 0.0025 -1.01229e-16 0 0.0025 -1.01229e-16 0.001 -0.0115829 0.10697 0.001 0.000927269 0.0360215 0.001 -0.00377896 0.0717688 0.001 -0.0115829 0.10697 0 0.000927269 0.0360215 0 -0.00377896 0.0717688 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="102">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0165794 -0.106944 0 -0.0117498 -0.108238 0 -0.0117498 -0.108238 0.001 -0.0165794 -0.106944 0.001 -0.0165794 -0.106944 0 -0.0117498 -0.108238 0 -0.0025 -1.01205e-16 0 -0.00877744 -0.0717514 0 -0.00407235 -0.0360128 0 -0.0165794 0.106944 0 -0.00407235 0.0360128 0 -0.00877744 0.0717514 0 -0.0117498 0.108238 0 0.0025 -1.02429e-16 0 0.000908623 0.0364485 0 -0.0038534 0.0726197 0 -0.0038534 -0.0726197 0 0.000908623 -0.0364485 0 -0.0117498 -0.108238 0 -0.0117498 -0.108238 0.001 0.0025 -1.02429e-16 0.001 -0.0038534 -0.0726197 0.001 0.000908623 -0.0364485 0.001 0.0025 -1.02429e-16 0 -0.0038534 -0.0726197 0 0.000908623 -0.0364485 0 -0.0165794 -0.106944 0.001 -0.0117498 -0.108238 0.001 -0.0025 -1.01205e-16 0.001 -0.00877744 -0.0717514 0.001 -0.00407235 -0.0360128 0.001 -0.0165794 0.106944 0.001 -0.00407235 0.0360128 0.001 -0.00877744 0.0717514 0.001 -0.0117498 0.108238 0.001 0.0025 -1.02429e-16 0.001 0.000908623 0.0364485 0.001 -0.0038534 0.0726197 0.001 -0.0038534 -0.0726197 0.001 0.000908623 -0.0364485 0.001 -0.0165794 -0.106944 0 -0.0165794 -0.106944 0.001 -0.0025 -1.01205e-16 0.001 -0.00877744 -0.0717514 0.001 -0.00407235 -0.0360128 0.001 -0.0025 -1.01205e-16 0 -0.00877744 -0.0717514 0 -0.00407235 -0.0360128 0 -0.0025 -1.01205e-16 0 -0.0025 -1.01205e-16 0.001 -0.0165794 0.106944 0.001 -0.00407235 0.0360128 0.001 -0.00877744 0.0717514 0.001 -0.0165794 0.106944 0 -0.00407235 0.0360128 0 -0.00877744 0.0717514 0 -0.0165794 0.106944 0 -0.0117498 0.108238 0 -0.0117498 0.108238 0.001 -0.0165794 0.106944 0.001 0.0025 -1.02429e-16 0 0.0025 -1.02429e-16 0.001 -0.0117498 0.108238 0.001 0.000908623 0.0364485 0.001 -0.0038534 0.0726197 0.001 -0.0117498 0.108238 0 0.000908623 0.0364485 0 -0.0038534 0.0726197 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="103">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0167464 -0.108212 0 -0.0119168 -0.109506 0 -0.0119168 -0.109506 0.001 -0.0167464 -0.108212 0.001 -0.0167464 -0.108212 0 -0.0119168 -0.109506 0 -0.0025 -1.02405e-16 0 -0.00885188 -0.0726023 0 -0.004091 -0.0364398 0 -0.0167464 0.108212 0 -0.004091 0.0364398 0 -0.00885188 0.0726023 0 -0.0119168 0.109506 0 0.0025 -1.0363e-16 0 0.000889977 0.0368756 0 -0.00392784 0.0734705 0 -0.00392784 -0.0734705 0 0.000889977 -0.0368756 0 -0.0119168 -0.109506 0 -0.0119168 -0.109506 0.001 0.0025 -1.0363e-16 0.001 -0.00392784 -0.0734705 0.001 0.000889977 -0.0368756 0.001 0.0025 -1.0363e-16 0 -0.00392784 -0.0734705 0 0.000889977 -0.0368756 0 -0.0167464 -0.108212 0.001 -0.0119168 -0.109506 0.001 -0.0025 -1.02405e-16 0.001 -0.00885188 -0.0726023 0.001 -0.004091 -0.0364398 0.001 -0.0167464 0.108212 0.001 -0.004091 0.0364398 0.001 -0.00885188 0.0726023 0.001 -0.0119168 0.109506 0.001 0.0025 -1.0363e-16 0.001 0.000889977 0.0368756 0.001 -0.00392784 0.0734705 0.001 -0.00392784 -0.0734705 0.001 0.000889977 -0.0368756 0.001 -0.0167464 -0.108212 0 -0.0167464 -0.108212 0.001 -0.0025 -1.02405e-16 0.001 -0.00885188 -0.0726023 0.001 -0.004091 -0.0364398 0.001 -0.0025 -1.02405e-16 0 -0.00885188 -0.0726023 0 -0.004091 -0.0364398 0 -0.0025 -1.02405e-16 0 -0.0025 -1.02405e-16 0.001 -0.0167464 0.108212 0.001 -0.004091 0.0364398 0.001 -0.00885188 0.0726023 0.001 -0.0167464 0.108212 0 -0.004091 0.0364398 0 -0.00885188 0.0726023 0 -0.0167464 0.108212 0 -0.0119168 0.109506 0 -0.0119168 0.109506 0.001 -0.0167464 0.108212 0.001 0.0025 -1.0363e-16 0 0.0025 -1.0363e-16 0.001 -0.0119168 0.109506 0.001 0.000889977 0.0368756 0.001 -0.00392784 0.0734705 0.001 -0.0119168 0.109506 0 0.000889977 0.0368756 0 -0.00392784 0.0734705 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="68">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0108448 -0.0633848 0 -0.00601514 -0.0646789 0 -0.00601514 -0.0646789 0.001 -0.0108448 -0.0633848 0.001 -0.0108448 -0.0633848 0 -0.00601514 -0.0646789 0 -0.0025 -5.99832e-17 0 -0.00622058 -0.0425264 0 -0.00343192 -0.0213444 0 -0.0108448 0.0633848 0 -0.00343192 0.0213444 0 -0.00622058 0.0425264 0 -0.00601514 0.0646789 0 0.0025 -6.12078e-17 0 0.00154906 0.0217802 0 -0.00129654 0.0433947 0 -0.00129654 -0.0433947 0 0.00154906 -0.0217802 0 -0.00601514 -0.0646789 0 -0.00601514 -0.0646789 0.001 0.0025 -6.12078e-17 0.001 -0.00129654 -0.0433947 0.001 0.00154906 -0.0217802 0.001 0.0025 -6.12078e-17 0 -0.00129654 -0.0433947 0 0.00154906 -0.0217802 0 -0.0108448 -0.0633848 0.001 -0.00601514 -0.0646789 0.001 -0.0025 -5.99832e-17 0.001 -0.00622058 -0.0425264 0.001 -0.00343192 -0.0213444 0.001 -0.0108448 0.0633848 0.001 -0.00343192 0.0213444 0.001 -0.00622058 0.0425264 0.001 -0.00601514 0.0646789 0.001 0.0025 -6.12078e-17 0.001 0.00154906 0.0217802 0.001 -0.00129654 0.0433947 0.001 -0.00129654 -0.0433947 0.001 0.00154906 -0.0217802 0.001 -0.0108448 -0.0633848 0 -0.0108448 -0.0633848 0.001 -0.0025 -5.99832e-17 0.001 -0.00622058 -0.0425264 0.001 -0.00343192 -0.0213444 0.001 -0.0025 -5.99832e-17 0 -0.00622058 -0.0425264 0 -0.00343192 -0.0213444 0 -0.0025 -5.99832e-17 0 -0.0025 -5.99832e-17 0.001 -0.0108448 0.0633848 0.001 -0.00343192 0.0213444 0.001 -0.00622058 0.0425264 0.001 -0.0108448 0.0633848 0 -0.00343192 0.0213444 0 -0.00622058 0.0425264 0 -0.0108448 0.0633848 0 -0.00601514 0.0646789 0 -0.00601514 0.0646789 0.001 -0.0108448 0.0633848 0.001 0.0025 -6.12078e-17 0 0.0025 -6.12078e-17 0.001 -0.00601514 0.0646789 0.001 0.00154906 0.0217802 0.001 -0.00129654 0.0433947 0.001 -0.00601514 0.0646789 0 0.00154906 0.0217802 0 -0.00129654 0.0433947 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="104">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0169168 -0.109506 0 -0.0120872 -0.1108 0 -0.0120872 -0.1108 0.001 -0.0169168 -0.109506 0.001 -0.0169168 -0.109506 0 -0.0120872 -0.1108 0 -0.0025 -1.0363e-16 0 -0.00892784 -0.0734705 0 -0.00411002 -0.0368756 0 -0.0169168 0.109506 0 -0.00411002 0.0368756 0 -0.00892784 0.0734705 0 -0.0120872 0.1108 0 0.0025 -1.04854e-16 0 0.00087095 0.0373114 0 -0.0040038 0.0743388 0 -0.0040038 -0.0743388 0 0.00087095 -0.0373114 0 -0.0120872 -0.1108 0 -0.0120872 -0.1108 0.001 0.0025 -1.04854e-16 0.001 -0.0040038 -0.0743388 0.001 0.00087095 -0.0373114 0.001 0.0025 -1.04854e-16 0 -0.0040038 -0.0743388 0 0.00087095 -0.0373114 0 -0.0169168 -0.109506 0.001 -0.0120872 -0.1108 0.001 -0.0025 -1.0363e-16 0.001 -0.00892784 -0.0734705 0.001 -0.00411002 -0.0368756 0.001 -0.0169168 0.109506 0.001 -0.00411002 0.0368756 0.001 -0.00892784 0.0734705 0.001 -0.0120872 0.1108 0.001 0.0025 -1.04854e-16 0.001 0.00087095 0.0373114 0.001 -0.0040038 0.0743388 0.001 -0.0040038 -0.0743388 0.001 0.00087095 -0.0373114 0.001 -0.0169168 -0.109506 0 -0.0169168 -0.109506 0.001 -0.0025 -1.0363e-16 0.001 -0.00892784 -0.0734705 0.001 -0.00411002 -0.0368756 0.001 -0.0025 -1.0363e-16 0 -0.00892784 -0.0734705 0 -0.00411002 -0.0368756 0 -0.0025 -1.0363e-16 0 -0.0025 -1.0363e-16 0.001 -0.0169168 0.109506 0.001 -0.00411002 0.0368756 0.001 -0.00892784 0.0734705 0.001 -0.0169168 0.109506 0 -0.00411002 0.0368756 0 -0.00892784 0.0734705 0 -0.0169168 0.109506 0 -0.0120872 0.1108 0 -0.0120872 0.1108 0.001 -0.0169168 0.109506 0.001 0.0025 -1.04854e-16 0 0.0025 -1.04854e-16 0.001 -0.0120872 0.1108 0.001 0.00087095 0.0373114 0.001 -0.0040038 0.0743388 0.001 -0.0120872 0.1108 0 0.00087095 0.0373114 0 -0.0040038 0.0743388 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="105">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0170837 -0.110775 0 -0.0122541 -0.112069 0 -0.0122541 -0.112069 0.001 -0.0170837 -0.110775 0.001 -0.0170837 -0.110775 0 -0.0122541 -0.112069 0 -0.0025 -1.0483e-16 0 -0.00900228 -0.0743214 0 -0.00412867 -0.0373027 0 -0.0170837 0.110775 0 -0.00412867 0.0373027 0 -0.00900228 0.0743214 0 -0.0122541 0.112069 0 0.0025 -1.06054e-16 0 0.000852304 0.0377384 0 -0.00407824 0.0751897 0 -0.00407824 -0.0751897 0 0.000852304 -0.0377384 0 -0.0122541 -0.112069 0 -0.0122541 -0.112069 0.001 0.0025 -1.06054e-16 0.001 -0.00407824 -0.0751897 0.001 0.000852304 -0.0377384 0.001 0.0025 -1.06054e-16 0 -0.00407824 -0.0751897 0 0.000852304 -0.0377384 0 -0.0170837 -0.110775 0.001 -0.0122541 -0.112069 0.001 -0.0025 -1.0483e-16 0.001 -0.00900228 -0.0743214 0.001 -0.00412867 -0.0373027 0.001 -0.0170837 0.110775 0.001 -0.00412867 0.0373027 0.001 -0.00900228 0.0743214 0.001 -0.0122541 0.112069 0.001 0.0025 -1.06054e-16 0.001 0.000852304 0.0377384 0.001 -0.00407824 0.0751897 0.001 -0.00407824 -0.0751897 0.001 0.000852304 -0.0377384 0.001 -0.0170837 -0.110775 0 -0.0170837 -0.110775 0.001 -0.0025 -1.0483e-16 0.001 -0.00900228 -0.0743214 0.001 -0.00412867 -0.0373027 0.001 -0.0025 -1.0483e-16 0 -0.00900228 -0.0743214 0 -0.00412867 -0.0373027 0 -0.0025 -1.0483e-16 0 -0.0025 -1.0483e-16 0.001 -0.0170837 0.110775 0.001 -0.00412867 0.0373027 0.001 -0.00900228 0.0743214 0.001 -0.0170837 0.110775 0 -0.00412867 0.0373027 0 -0.00900228 0.0743214 0 -0.0170837 0.110775 0 -0.0122541 0.112069 0 -0.0122541 0.112069 0.001 -0.0170837 0.110775 0.001 0.0025 -1.06054e-16 0 0.0025 -1.06054e-16 0.001 -0.0122541 0.112069 0.001 0.000852304 0.0377384 0.001 -0.00407824 0.0751897 0.001 -0.0122541 0.112069 0 0.000852304 0.0377384 0 -0.00407824 0.0751897 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="106">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0172507 -0.112043 0 -0.0124211 -0.113337 0 -0.0124211 -0.113337 0.001 -0.0172507 -0.112043 0.001 -0.0172507 -0.112043 0 -0.0124211 -0.113337 0 -0.0025 -1.0603e-16 0 -0.00907672 -0.0751723 0 -0.00414732 -0.0377297 0 -0.0172507 0.112043 0 -0.00414732 0.0377297 0 -0.00907672 0.0751723 0 -0.0124211 0.113337 0 0.0025 -1.07255e-16 0 0.000833658 0.0381655 0 -0.00415268 0.0760405 0 -0.00415268 -0.0760405 0 0.000833658 -0.0381655 0 -0.0124211 -0.113337 0 -0.0124211 -0.113337 0.001 0.0025 -1.07255e-16 0.001 -0.00415268 -0.0760405 0.001 0.000833658 -0.0381655 0.001 0.0025 -1.07255e-16 0 -0.00415268 -0.0760405 0 0.000833658 -0.0381655 0 -0.0172507 -0.112043 0.001 -0.0124211 -0.113337 0.001 -0.0025 -1.0603e-16 0.001 -0.00907672 -0.0751723 0.001 -0.00414732 -0.0377297 0.001 -0.0172507 0.112043 0.001 -0.00414732 0.0377297 0.001 -0.00907672 0.0751723 0.001 -0.0124211 0.113337 0.001 0.0025 -1.07255e-16 0.001 0.000833658 0.0381655 0.001 -0.00415268 0.0760405 0.001 -0.00415268 -0.0760405 0.001 0.000833658 -0.0381655 0.001 -0.0172507 -0.112043 0 -0.0172507 -0.112043 0.001 -0.0025 -1.0603e-16 0.001 -0.00907672 -0.0751723 0.001 -0.00414732 -0.0377297 0.001 -0.0025 -1.0603e-16 0 -0.00907672 -0.0751723 0 -0.00414732 -0.0377297 0 -0.0025 -1.0603e-16 0 -0.0025 -1.0603e-16 0.001 -0.0172507 0.112043 0.001 -0.00414732 0.0377297 0.001 -0.00907672 0.0751723 0.001 -0.0172507 0.112043 0 -0.00414732 0.0377297 0 -0.00907672 0.0751723 0 -0.0172507 0.112043 0 -0.0124211 0.113337 0 -0.0124211 0.113337 0.001 -0.0172507 0.112043 0.001 0.0025 -1.07255e-16 0 0.0025 -1.07255e-16 0.001 -0.0124211 0.113337 0.001 0.000833658 0.0381655 0.001 -0.00415268 0.0760405 0.001 -0.0124211 0.113337 0 0.000833658 0.0381655 0 -0.00415268 0.0760405 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="107">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0174177 -0.113311 0 -0.012588 -0.114605 0 -0.012588 -0.114605 0.001 -0.0174177 -0.113311 0.001 -0.0174177 -0.113311 0 -0.012588 -0.114605 0 -0.0025 -1.0723e-16 0 -0.00915117 -0.0760232 0 -0.00416596 -0.0381568 0 -0.0174177 0.113311 0 -0.00416596 0.0381568 0 -0.00915117 0.0760232 0 -0.012588 0.114605 0 0.0025 -1.08455e-16 0 0.000815012 0.0385926 0 -0.00422713 0.0768914 0 -0.00422713 -0.0768914 0 0.000815012 -0.0385926 0 -0.012588 -0.114605 0 -0.012588 -0.114605 0.001 0.0025 -1.08455e-16 0.001 -0.00422713 -0.0768914 0.001 0.000815012 -0.0385926 0.001 0.0025 -1.08455e-16 0 -0.00422713 -0.0768914 0 0.000815012 -0.0385926 0 -0.0174177 -0.113311 0.001 -0.012588 -0.114605 0.001 -0.0025 -1.0723e-16 0.001 -0.00915117 -0.0760232 0.001 -0.00416596 -0.0381568 0.001 -0.0174177 0.113311 0.001 -0.00416596 0.0381568 0.001 -0.00915117 0.0760232 0.001 -0.012588 0.114605 0.001 0.0025 -1.08455e-16 0.001 0.000815012 0.0385926 0.001 -0.00422713 0.0768914 0.001 -0.00422713 -0.0768914 0.001 0.000815012 -0.0385926 0.001 -0.0174177 -0.113311 0 -0.0174177 -0.113311 0.001 -0.0025 -1.0723e-16 0.001 -0.00915117 -0.0760232 0.001 -0.00416596 -0.0381568 0.001 -0.0025 -1.0723e-16 0 -0.00915117 -0.0760232 0 -0.00416596 -0.0381568 0 -0.0025 -1.0723e-16 0 -0.0025 -1.0723e-16 0.001 -0.0174177 0.113311 0.001 -0.00416596 0.0381568 0.001 -0.00915117 0.0760232 0.001 -0.0174177 0.113311 0 -0.00416596 0.0381568 0 -0.00915117 0.0760232 0 -0.0174177 0.113311 0 -0.012588 0.114605 0 -0.012588 0.114605 0.001 -0.0174177 0.113311 0.001 0.0025 -1.08455e-16 0 0.0025 -1.08455e-16 0.001 -0.012588 0.114605 0.001 0.000815012 0.0385926 0.001 -0.00422713 0.0768914 0.001 -0.012588 0.114605 0 0.000815012 0.0385926 0 -0.00422713 0.0768914 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="108">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0175846 -0.114579 0 -0.012755 -0.115873 0 -0.012755 -0.115873 0.001 -0.0175846 -0.114579 0.001 -0.0175846 -0.114579 0 -0.012755 -0.115873 0 -0.0025 -1.0843e-16 0 -0.00922561 -0.076874 0 -0.00418461 -0.0385838 0 -0.0175846 0.114579 0 -0.00418461 0.0385838 0 -0.00922561 0.076874 0 -0.012755 0.115873 0 0.0025 -1.09655e-16 0 0.000796366 0.0390196 0 -0.00430157 0.0777423 0 -0.00430157 -0.0777423 0 0.000796366 -0.0390196 0 -0.012755 -0.115873 0 -0.012755 -0.115873 0.001 0.0025 -1.09655e-16 0.001 -0.00430157 -0.0777423 0.001 0.000796366 -0.0390196 0.001 0.0025 -1.09655e-16 0 -0.00430157 -0.0777423 0 0.000796366 -0.0390196 0 -0.0175846 -0.114579 0.001 -0.012755 -0.115873 0.001 -0.0025 -1.0843e-16 0.001 -0.00922561 -0.076874 0.001 -0.00418461 -0.0385838 0.001 -0.0175846 0.114579 0.001 -0.00418461 0.0385838 0.001 -0.00922561 0.076874 0.001 -0.012755 0.115873 0.001 0.0025 -1.09655e-16 0.001 0.000796366 0.0390196 0.001 -0.00430157 0.0777423 0.001 -0.00430157 -0.0777423 0.001 0.000796366 -0.0390196 0.001 -0.0175846 -0.114579 0 -0.0175846 -0.114579 0.001 -0.0025 -1.0843e-16 0.001 -0.00922561 -0.076874 0.001 -0.00418461 -0.0385838 0.001 -0.0025 -1.0843e-16 0 -0.00922561 -0.076874 0 -0.00418461 -0.0385838 0 -0.0025 -1.0843e-16 0 -0.0025 -1.0843e-16 0.001 -0.0175846 0.114579 0.001 -0.00418461 0.0385838 0.001 -0.00922561 0.076874 0.001 -0.0175846 0.114579 0 -0.00418461 0.0385838 0 -0.00922561 0.076874 0 -0.0175846 0.114579 0 -0.012755 0.115873 0 -0.012755 0.115873 0.001 -0.0175846 0.114579 0.001 0.0025 -1.09655e-16 0 0.0025 -1.09655e-16 0.001 -0.012755 0.115873 0.001 0.000796366 0.0390196 0.001 -0.00430157 0.0777423 0.001 -0.012755 0.115873 0 0.000796366 0.0390196 0 -0.00430157 0.0777423 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="109">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0177516 -0.115847 0 -0.012922 -0.117141 0 -0.012922 -0.117141 0.001 -0.0177516 -0.115847 0.001 -0.0177516 -0.115847 0 -0.012922 -0.117141 0 -0.0025 -1.0963e-16 0 -0.00930005 -0.0777249 0 -0.00420325 -0.0390109 0 -0.0177516 0.115847 0 -0.00420325 0.0390109 0 -0.00930005 0.0777249 0 -0.012922 0.117141 0 0.0025 -1.10855e-16 0 0.00077772 0.0394467 0 -0.00437601 0.0785932 0 -0.00437601 -0.0785932 0 0.00077772 -0.0394467 0 -0.012922 -0.117141 0 -0.012922 -0.117141 0.001 0.0025 -1.10855e-16 0.001 -0.00437601 -0.0785932 0.001 0.00077772 -0.0394467 0.001 0.0025 -1.10855e-16 0 -0.00437601 -0.0785932 0 0.00077772 -0.0394467 0 -0.0177516 -0.115847 0.001 -0.012922 -0.117141 0.001 -0.0025 -1.0963e-16 0.001 -0.00930005 -0.0777249 0.001 -0.00420325 -0.0390109 0.001 -0.0177516 0.115847 0.001 -0.00420325 0.0390109 0.001 -0.00930005 0.0777249 0.001 -0.012922 0.117141 0.001 0.0025 -1.10855e-16 0.001 0.00077772 0.0394467 0.001 -0.00437601 0.0785932 0.001 -0.00437601 -0.0785932 0.001 0.00077772 -0.0394467 0.001 -0.0177516 -0.115847 0 -0.0177516 -0.115847 0.001 -0.0025 -1.0963e-16 0.001 -0.00930005 -0.0777249 0.001 -0.00420325 -0.0390109 0.001 -0.0025 -1.0963e-16 0 -0.00930005 -0.0777249 0 -0.00420325 -0.0390109 0 -0.0025 -1.0963e-16 0 -0.0025 -1.0963e-16 0.001 -0.0177516 0.115847 0.001 -0.00420325 0.0390109 0.001 -0.00930005 0.0777249 0.001 -0.0177516 0.115847 0 -0.00420325 0.0390109 0 -0.00930005 0.0777249 0 -0.0177516 0.115847 0 -0.012922 0.117141 0 -0.012922 0.117141 0.001 -0.0177516 0.115847 0.001 0.0025 -1.10855e-16 0 0.0025 -1.10855e-16 0.001 -0.012922 0.117141 0.001 0.00077772 0.0394467 0.001 -0.00437601 0.0785932 0.001 -0.012922 0.117141 0 0.00077772 0.0394467 0 -0.00437601 0.0785932 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="110">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0179186 -0.117116 0 -0.0130889 -0.11841 0 -0.0130889 -0.11841 0.001 -0.0179186 -0.117116 0.001 -0.0179186 -0.117116 0 -0.0130889 -0.11841 0 -0.0025 -1.10831e-16 0 -0.00937449 -0.0785758 0 -0.0042219 -0.039438 0 -0.0179186 0.117116 0 -0.0042219 0.039438 0 -0.00937449 0.0785758 0 -0.0130889 0.11841 0 0.0025 -1.12055e-16 0 0.000759074 0.0398738 0 -0.00445045 0.079444 0 -0.00445045 -0.079444 0 0.000759074 -0.0398738 0 -0.0130889 -0.11841 0 -0.0130889 -0.11841 0.001 0.0025 -1.12055e-16 0.001 -0.00445045 -0.079444 0.001 0.000759074 -0.0398738 0.001 0.0025 -1.12055e-16 0 -0.00445045 -0.079444 0 0.000759074 -0.0398738 0 -0.0179186 -0.117116 0.001 -0.0130889 -0.11841 0.001 -0.0025 -1.10831e-16 0.001 -0.00937449 -0.0785758 0.001 -0.0042219 -0.039438 0.001 -0.0179186 0.117116 0.001 -0.0042219 0.039438 0.001 -0.00937449 0.0785758 0.001 -0.0130889 0.11841 0.001 0.0025 -1.12055e-16 0.001 0.000759074 0.0398738 0.001 -0.00445045 0.079444 0.001 -0.00445045 -0.079444 0.001 0.000759074 -0.0398738 0.001 -0.0179186 -0.117116 0 -0.0179186 -0.117116 0.001 -0.0025 -1.10831e-16 0.001 -0.00937449 -0.0785758 0.001 -0.0042219 -0.039438 0.001 -0.0025 -1.10831e-16 0 -0.00937449 -0.0785758 0 -0.0042219 -0.039438 0 -0.0025 -1.10831e-16 0 -0.0025 -1.10831e-16 0.001 -0.0179186 0.117116 0.001 -0.0042219 0.039438 0.001 -0.00937449 0.0785758 0.001 -0.0179186 0.117116 0 -0.0042219 0.039438 0 -0.00937449 0.0785758 0 -0.0179186 0.117116 0 -0.0130889 0.11841 0 -0.0130889 0.11841 0.001 -0.0179186 0.117116 0.001 0.0025 -1.12055e-16 0 0.0025 -1.12055e-16 0.001 -0.0130889 0.11841 0.001 0.000759074 0.0398738 0.001 -0.00445045 0.079444 0.001 -0.0130889 0.11841 0 0.000759074 0.0398738 0 -0.00445045 0.079444 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="111">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0180889 -0.11841 0 -0.0132593 -0.119704 0 -0.0132593 -0.119704 0.001 -0.0180889 -0.11841 0.001 -0.0180889 -0.11841 0 -0.0132593 -0.119704 0 -0.0025 -1.12055e-16 0 -0.00945045 -0.079444 0 -0.00424093 -0.0398738 0 -0.0180889 0.11841 0 -0.00424093 0.0398738 0 -0.00945045 0.079444 0 -0.0132593 0.119704 0 0.0025 -1.1328e-16 0 0.000740048 0.0403095 0 -0.00452641 0.0803123 0 -0.00452641 -0.0803123 0 0.000740048 -0.0403095 0 -0.0132593 -0.119704 0 -0.0132593 -0.119704 0.001 0.0025 -1.1328e-16 0.001 -0.00452641 -0.0803123 0.001 0.000740048 -0.0403095 0.001 0.0025 -1.1328e-16 0 -0.00452641 -0.0803123 0 0.000740048 -0.0403095 0 -0.0180889 -0.11841 0.001 -0.0132593 -0.119704 0.001 -0.0025 -1.12055e-16 0.001 -0.00945045 -0.079444 0.001 -0.00424093 -0.0398738 0.001 -0.0180889 0.11841 0.001 -0.00424093 0.0398738 0.001 -0.00945045 0.079444 0.001 -0.0132593 0.119704 0.001 0.0025 -1.1328e-16 0.001 0.000740048 0.0403095 0.001 -0.00452641 0.0803123 0.001 -0.00452641 -0.0803123 0.001 0.000740048 -0.0403095 0.001 -0.0180889 -0.11841 0 -0.0180889 -0.11841 0.001 -0.0025 -1.12055e-16 0.001 -0.00945045 -0.079444 0.001 -0.00424093 -0.0398738 0.001 -0.0025 -1.12055e-16 0 -0.00945045 -0.079444 0 -0.00424093 -0.0398738 0 -0.0025 -1.12055e-16 0 -0.0025 -1.12055e-16 0.001 -0.0180889 0.11841 0.001 -0.00424093 0.0398738 0.001 -0.00945045 0.079444 0.001 -0.0180889 0.11841 0 -0.00424093 0.0398738 0 -0.00945045 0.079444 0 -0.0180889 0.11841 0 -0.0132593 0.119704 0 -0.0132593 0.119704 0.001 -0.0180889 0.11841 0.001 0.0025 -1.1328e-16 0 0.0025 -1.1328e-16 0.001 -0.0132593 0.119704 0.001 0.000740048 0.0403095 0.001 -0.00452641 0.0803123 0.001 -0.0132593 0.119704 0 0.000740048 0.0403095 0 -0.00452641 0.0803123 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="112">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0182559 -0.119678 0 -0.0134263 -0.120972 0 -0.0134263 -0.120972 0.001 -0.0182559 -0.119678 0.001 -0.0182559 -0.119678 0 -0.0134263 -0.120972 0 -0.0025 -1.13255e-16 0 -0.0095249 -0.0802949 0 -0.00425957 -0.0403008 0 -0.0182559 0.119678 0 -0.00425957 0.0403008 0 -0.0095249 0.0802949 0 -0.0134263 0.120972 0 0.0025 -1.1448e-16 0 0.000721402 0.0407366 0 -0.00460086 0.0811632 0 -0.00460086 -0.0811632 0 0.000721402 -0.0407366 0 -0.0134263 -0.120972 0 -0.0134263 -0.120972 0.001 0.0025 -1.1448e-16 0.001 -0.00460086 -0.0811632 0.001 0.000721402 -0.0407366 0.001 0.0025 -1.1448e-16 0 -0.00460086 -0.0811632 0 0.000721402 -0.0407366 0 -0.0182559 -0.119678 0.001 -0.0134263 -0.120972 0.001 -0.0025 -1.13255e-16 0.001 -0.0095249 -0.0802949 0.001 -0.00425957 -0.0403008 0.001 -0.0182559 0.119678 0.001 -0.00425957 0.0403008 0.001 -0.0095249 0.0802949 0.001 -0.0134263 0.120972 0.001 0.0025 -1.1448e-16 0.001 0.000721402 0.0407366 0.001 -0.00460086 0.0811632 0.001 -0.00460086 -0.0811632 0.001 0.000721402 -0.0407366 0.001 -0.0182559 -0.119678 0 -0.0182559 -0.119678 0.001 -0.0025 -1.13255e-16 0.001 -0.0095249 -0.0802949 0.001 -0.00425957 -0.0403008 0.001 -0.0025 -1.13255e-16 0 -0.0095249 -0.0802949 0 -0.00425957 -0.0403008 0 -0.0025 -1.13255e-16 0 -0.0025 -1.13255e-16 0.001 -0.0182559 0.119678 0.001 -0.00425957 0.0403008 0.001 -0.0095249 0.0802949 0.001 -0.0182559 0.119678 0 -0.00425957 0.0403008 0 -0.0095249 0.0802949 0 -0.0182559 0.119678 0 -0.0134263 0.120972 0 -0.0134263 0.120972 0.001 -0.0182559 0.119678 0.001 0.0025 -1.1448e-16 0 0.0025 -1.1448e-16 0.001 -0.0134263 0.120972 0.001 0.000721402 0.0407366 0.001 -0.00460086 0.0811632 0.001 -0.0134263 0.120972 0 0.000721402 0.0407366 0 -0.00460086 0.0811632 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="113">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0184229 -0.120946 0 -0.0135932 -0.12224 0 -0.0135932 -0.12224 0.001 -0.0184229 -0.120946 0.001 -0.0184229 -0.120946 0 -0.0135932 -0.12224 0 -0.0025 -1.14455e-16 0 -0.00959934 -0.0811458 0 -0.00427822 -0.0407279 0 -0.0184229 0.120946 0 -0.00427822 0.0407279 0 -0.00959934 0.0811458 0 -0.0135932 0.12224 0 0.0025 -1.1568e-16 0 0.000702756 0.0411637 0 -0.0046753 0.082014 0 -0.0046753 -0.082014 0 0.000702756 -0.0411637 0 -0.0135932 -0.12224 0 -0.0135932 -0.12224 0.001 0.0025 -1.1568e-16 0.001 -0.0046753 -0.082014 0.001 0.000702756 -0.0411637 0.001 0.0025 -1.1568e-16 0 -0.0046753 -0.082014 0 0.000702756 -0.0411637 0 -0.0184229 -0.120946 0.001 -0.0135932 -0.12224 0.001 -0.0025 -1.14455e-16 0.001 -0.00959934 -0.0811458 0.001 -0.00427822 -0.0407279 0.001 -0.0184229 0.120946 0.001 -0.00427822 0.0407279 0.001 -0.00959934 0.0811458 0.001 -0.0135932 0.12224 0.001 0.0025 -1.1568e-16 0.001 0.000702756 0.0411637 0.001 -0.0046753 0.082014 0.001 -0.0046753 -0.082014 0.001 0.000702756 -0.0411637 0.001 -0.0184229 -0.120946 0 -0.0184229 -0.120946 0.001 -0.0025 -1.14455e-16 0.001 -0.00959934 -0.0811458 0.001 -0.00427822 -0.0407279 0.001 -0.0025 -1.14455e-16 0 -0.00959934 -0.0811458 0 -0.00427822 -0.0407279 0 -0.0025 -1.14455e-16 0 -0.0025 -1.14455e-16 0.001 -0.0184229 0.120946 0.001 -0.00427822 0.0407279 0.001 -0.00959934 0.0811458 0.001 -0.0184229 0.120946 0 -0.00427822 0.0407279 0 -0.00959934 0.0811458 0 -0.0184229 0.120946 0 -0.0135932 0.12224 0 -0.0135932 0.12224 0.001 -0.0184229 0.120946 0.001 0.0025 -1.1568e-16 0 0.0025 -1.1568e-16 0.001 -0.0135932 0.12224 0.001 0.000702756 0.0411637 0.001 -0.0046753 0.082014 0.001 -0.0135932 0.12224 0 0.000702756 0.0411637 0 -0.0046753 0.082014 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="69">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0110151 -0.0646789 0 -0.00618551 -0.065973 0 -0.00618551 -0.065973 0.001 -0.0110151 -0.0646789 0.001 -0.0110151 -0.0646789 0 -0.00618551 -0.065973 0 -0.0025 -6.12078e-17 0 -0.00629654 -0.0433947 0 -0.00345094 -0.0217802 0 -0.0110151 0.0646789 0 -0.00345094 0.0217802 0 -0.00629654 0.0433947 0 -0.00618551 0.065973 0 0.0025 -6.24325e-17 0 0.00153003 0.022216 0 -0.0013725 0.0442629 0 -0.0013725 -0.0442629 0 0.00153003 -0.022216 0 -0.00618551 -0.065973 0 -0.00618551 -0.065973 0.001 0.0025 -6.24325e-17 0.001 -0.0013725 -0.0442629 0.001 0.00153003 -0.022216 0.001 0.0025 -6.24325e-17 0 -0.0013725 -0.0442629 0 0.00153003 -0.022216 0 -0.0110151 -0.0646789 0.001 -0.00618551 -0.065973 0.001 -0.0025 -6.12078e-17 0.001 -0.00629654 -0.0433947 0.001 -0.00345094 -0.0217802 0.001 -0.0110151 0.0646789 0.001 -0.00345094 0.0217802 0.001 -0.00629654 0.0433947 0.001 -0.00618551 0.065973 0.001 0.0025 -6.24325e-17 0.001 0.00153003 0.022216 0.001 -0.0013725 0.0442629 0.001 -0.0013725 -0.0442629 0.001 0.00153003 -0.022216 0.001 -0.0110151 -0.0646789 0 -0.0110151 -0.0646789 0.001 -0.0025 -6.12078e-17 0.001 -0.00629654 -0.0433947 0.001 -0.00345094 -0.0217802 0.001 -0.0025 -6.12078e-17 0 -0.00629654 -0.0433947 0 -0.00345094 -0.0217802 0 -0.0025 -6.12078e-17 0 -0.0025 -6.12078e-17 0.001 -0.0110151 0.0646789 0.001 -0.00345094 0.0217802 0.001 -0.00629654 0.0433947 0.001 -0.0110151 0.0646789 0 -0.00345094 0.0217802 0 -0.00629654 0.0433947 0 -0.0110151 0.0646789 0 -0.00618551 0.065973 0 -0.00618551 0.065973 0.001 -0.0110151 0.0646789 0.001 0.0025 -6.24325e-17 0 0.0025 -6.24325e-17 0.001 -0.00618551 0.065973 0.001 0.00153003 0.022216 0.001 -0.0013725 0.0442629 0.001 -0.00618551 0.065973 0 0.00153003 0.022216 0 -0.0013725 0.0442629 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="114">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0185898 -0.122214 0 -0.0137602 -0.123508 0 -0.0137602 -0.123508 0.001 -0.0185898 -0.122214 0.001 -0.0185898 -0.122214 0 -0.0137602 -0.123508 0 -0.0025 -1.15656e-16 0 -0.00967378 -0.0819967 0 -0.00429686 -0.0411549 0 -0.0185898 0.122214 0 -0.00429686 0.0411549 0 -0.00967378 0.0819967 0 -0.0137602 0.123508 0 0.0025 -1.1688e-16 0 0.00068411 0.0415907 0 -0.00474974 0.0828649 0 -0.00474974 -0.0828649 0 0.00068411 -0.0415907 0 -0.0137602 -0.123508 0 -0.0137602 -0.123508 0.001 0.0025 -1.1688e-16 0.001 -0.00474974 -0.0828649 0.001 0.00068411 -0.0415907 0.001 0.0025 -1.1688e-16 0 -0.00474974 -0.0828649 0 0.00068411 -0.0415907 0 -0.0185898 -0.122214 0.001 -0.0137602 -0.123508 0.001 -0.0025 -1.15656e-16 0.001 -0.00967378 -0.0819967 0.001 -0.00429686 -0.0411549 0.001 -0.0185898 0.122214 0.001 -0.00429686 0.0411549 0.001 -0.00967378 0.0819967 0.001 -0.0137602 0.123508 0.001 0.0025 -1.1688e-16 0.001 0.00068411 0.0415907 0.001 -0.00474974 0.0828649 0.001 -0.00474974 -0.0828649 0.001 0.00068411 -0.0415907 0.001 -0.0185898 -0.122214 0 -0.0185898 -0.122214 0.001 -0.0025 -1.15656e-16 0.001 -0.00967378 -0.0819967 0.001 -0.00429686 -0.0411549 0.001 -0.0025 -1.15656e-16 0 -0.00967378 -0.0819967 0 -0.00429686 -0.0411549 0 -0.0025 -1.15656e-16 0 -0.0025 -1.15656e-16 0.001 -0.0185898 0.122214 0.001 -0.00429686 0.0411549 0.001 -0.00967378 0.0819967 0.001 -0.0185898 0.122214 0 -0.00429686 0.0411549 0 -0.00967378 0.0819967 0 -0.0185898 0.122214 0 -0.0137602 0.123508 0 -0.0137602 0.123508 0.001 -0.0185898 0.122214 0.001 0.0025 -1.1688e-16 0 0.0025 -1.1688e-16 0.001 -0.0137602 0.123508 0.001 0.00068411 0.0415907 0.001 -0.00474974 0.0828649 0.001 -0.0137602 0.123508 0 0.00068411 0.0415907 0 -0.00474974 0.0828649 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="115">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0187568 -0.123483 0 -0.0139272 -0.124777 0 -0.0139272 -0.124777 0.001 -0.0187568 -0.123483 0.001 -0.0187568 -0.123483 0 -0.0139272 -0.124777 0 -0.0025 -1.16856e-16 0 -0.00974822 -0.0828475 0 -0.00431551 -0.041582 0 -0.0187568 0.123483 0 -0.00431551 0.041582 0 -0.00974822 0.0828475 0 -0.0139272 0.124777 0 0.0025 -1.1808e-16 0 0.000665464 0.0420178 0 -0.00482418 0.0837158 0 -0.00482418 -0.0837158 0 0.000665464 -0.0420178 0 -0.0139272 -0.124777 0 -0.0139272 -0.124777 0.001 0.0025 -1.1808e-16 0.001 -0.00482418 -0.0837158 0.001 0.000665464 -0.0420178 0.001 0.0025 -1.1808e-16 0 -0.00482418 -0.0837158 0 0.000665464 -0.0420178 0 -0.0187568 -0.123483 0.001 -0.0139272 -0.124777 0.001 -0.0025 -1.16856e-16 0.001 -0.00974822 -0.0828475 0.001 -0.00431551 -0.041582 0.001 -0.0187568 0.123483 0.001 -0.00431551 0.041582 0.001 -0.00974822 0.0828475 0.001 -0.0139272 0.124777 0.001 0.0025 -1.1808e-16 0.001 0.000665464 0.0420178 0.001 -0.00482418 0.0837158 0.001 -0.00482418 -0.0837158 0.001 0.000665464 -0.0420178 0.001 -0.0187568 -0.123483 0 -0.0187568 -0.123483 0.001 -0.0025 -1.16856e-16 0.001 -0.00974822 -0.0828475 0.001 -0.00431551 -0.041582 0.001 -0.0025 -1.16856e-16 0 -0.00974822 -0.0828475 0 -0.00431551 -0.041582 0 -0.0025 -1.16856e-16 0 -0.0025 -1.16856e-16 0.001 -0.0187568 0.123483 0.001 -0.00431551 0.041582 0.001 -0.00974822 0.0828475 0.001 -0.0187568 0.123483 0 -0.00431551 0.041582 0 -0.00974822 0.0828475 0 -0.0187568 0.123483 0 -0.0139272 0.124777 0 -0.0139272 0.124777 0.001 -0.0187568 0.123483 0.001 0.0025 -1.1808e-16 0 0.0025 -1.1808e-16 0.001 -0.0139272 0.124777 0.001 0.000665464 0.0420178 0.001 -0.00482418 0.0837158 0.001 -0.0139272 0.124777 0 0.000665464 0.0420178 0 -0.00482418 0.0837158 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="116">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0189238 -0.124751 0 -0.0140941 -0.126045 0 -0.0140941 -0.126045 0.001 -0.0189238 -0.124751 0.001 -0.0189238 -0.124751 0 -0.0140941 -0.126045 0 -0.0025 -1.18056e-16 0 -0.00982266 -0.0836984 0 -0.00433416 -0.0420091 0 -0.0189238 0.124751 0 -0.00433416 0.0420091 0 -0.00982266 0.0836984 0 -0.0140941 0.126045 0 0.0025 -1.19281e-16 0 0.000646818 0.0424448 0 -0.00489862 0.0845667 0 -0.00489862 -0.0845667 0 0.000646818 -0.0424448 0 -0.0140941 -0.126045 0 -0.0140941 -0.126045 0.001 0.0025 -1.19281e-16 0.001 -0.00489862 -0.0845667 0.001 0.000646818 -0.0424448 0.001 0.0025 -1.19281e-16 0 -0.00489862 -0.0845667 0 0.000646818 -0.0424448 0 -0.0189238 -0.124751 0.001 -0.0140941 -0.126045 0.001 -0.0025 -1.18056e-16 0.001 -0.00982266 -0.0836984 0.001 -0.00433416 -0.0420091 0.001 -0.0189238 0.124751 0.001 -0.00433416 0.0420091 0.001 -0.00982266 0.0836984 0.001 -0.0140941 0.126045 0.001 0.0025 -1.19281e-16 0.001 0.000646818 0.0424448 0.001 -0.00489862 0.0845667 0.001 -0.00489862 -0.0845667 0.001 0.000646818 -0.0424448 0.001 -0.0189238 -0.124751 0 -0.0189238 -0.124751 0.001 -0.0025 -1.18056e-16 0.001 -0.00982266 -0.0836984 0.001 -0.00433416 -0.0420091 0.001 -0.0025 -1.18056e-16 0 -0.00982266 -0.0836984 0 -0.00433416 -0.0420091 0 -0.0025 -1.18056e-16 0 -0.0025 -1.18056e-16 0.001 -0.0189238 0.124751 0.001 -0.00433416 0.0420091 0.001 -0.00982266 0.0836984 0.001 -0.0189238 0.124751 0 -0.00433416 0.0420091 0 -0.00982266 0.0836984 0 -0.0189238 0.124751 0 -0.0140941 0.126045 0 -0.0140941 0.126045 0.001 -0.0189238 0.124751 0.001 0.0025 -1.19281e-16 0 0.0025 -1.19281e-16 0.001 -0.0140941 0.126045 0.001 0.000646818 0.0424448 0.001 -0.00489862 0.0845667 0.001 -0.0140941 0.126045 0 0.000646818 0.0424448 0 -0.00489862 0.0845667 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="117">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0190907 -0.126019 0 -0.0142611 -0.127313 0 -0.0142611 -0.127313 0.001 -0.0190907 -0.126019 0.001 -0.0190907 -0.126019 0 -0.0142611 -0.127313 0 -0.0025 -1.19256e-16 0 -0.00989711 -0.0845493 0 -0.0043528 -0.0424361 0 -0.0190907 0.126019 0 -0.0043528 0.0424361 0 -0.00989711 0.0845493 0 -0.0142611 0.127313 0 0.0025 -1.20481e-16 0 0.000628172 0.0428719 0 -0.00497307 0.0854175 0 -0.00497307 -0.0854175 0 0.000628172 -0.0428719 0 -0.0142611 -0.127313 0 -0.0142611 -0.127313 0.001 0.0025 -1.20481e-16 0.001 -0.00497307 -0.0854175 0.001 0.000628172 -0.0428719 0.001 0.0025 -1.20481e-16 0 -0.00497307 -0.0854175 0 0.000628172 -0.0428719 0 -0.0190907 -0.126019 0.001 -0.0142611 -0.127313 0.001 -0.0025 -1.19256e-16 0.001 -0.00989711 -0.0845493 0.001 -0.0043528 -0.0424361 0.001 -0.0190907 0.126019 0.001 -0.0043528 0.0424361 0.001 -0.00989711 0.0845493 0.001 -0.0142611 0.127313 0.001 0.0025 -1.20481e-16 0.001 0.000628172 0.0428719 0.001 -0.00497307 0.0854175 0.001 -0.00497307 -0.0854175 0.001 0.000628172 -0.0428719 0.001 -0.0190907 -0.126019 0 -0.0190907 -0.126019 0.001 -0.0025 -1.19256e-16 0.001 -0.00989711 -0.0845493 0.001 -0.0043528 -0.0424361 0.001 -0.0025 -1.19256e-16 0 -0.00989711 -0.0845493 0 -0.0043528 -0.0424361 0 -0.0025 -1.19256e-16 0 -0.0025 -1.19256e-16 0.001 -0.0190907 0.126019 0.001 -0.0043528 0.0424361 0.001 -0.00989711 0.0845493 0.001 -0.0190907 0.126019 0 -0.0043528 0.0424361 0 -0.00989711 0.0845493 0 -0.0190907 0.126019 0 -0.0142611 0.127313 0 -0.0142611 0.127313 0.001 -0.0190907 0.126019 0.001 0.0025 -1.20481e-16 0 0.0025 -1.20481e-16 0.001 -0.0142611 0.127313 0.001 0.000628172 0.0428719 0.001 -0.00497307 0.0854175 0.001 -0.0142611 0.127313 0 0.000628172 0.0428719 0 -0.00497307 0.0854175 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="118">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0192543 -0.127261 0 -0.0144246 -0.128555 0 -0.0144246 -0.128555 0.001 -0.0192543 -0.127261 0.001 -0.0192543 -0.127261 0 -0.0144246 -0.128555 0 -0.0025 -1.20432e-16 0 -0.00997003 -0.0853828 0 -0.00437107 -0.0428545 0 -0.0192543 0.127261 0 -0.00437107 0.0428545 0 -0.00997003 0.0853828 0 -0.0144246 0.128555 0 0.0025 -1.21656e-16 0 0.000609907 0.0432903 0 -0.00504599 0.086251 0 -0.00504599 -0.086251 0 0.000609907 -0.0432903 0 -0.0144246 -0.128555 0 -0.0144246 -0.128555 0.001 0.0025 -1.21656e-16 0.001 -0.00504599 -0.086251 0.001 0.000609907 -0.0432903 0.001 0.0025 -1.21656e-16 0 -0.00504599 -0.086251 0 0.000609907 -0.0432903 0 -0.0192543 -0.127261 0.001 -0.0144246 -0.128555 0.001 -0.0025 -1.20432e-16 0.001 -0.00997003 -0.0853828 0.001 -0.00437107 -0.0428545 0.001 -0.0192543 0.127261 0.001 -0.00437107 0.0428545 0.001 -0.00997003 0.0853828 0.001 -0.0144246 0.128555 0.001 0.0025 -1.21656e-16 0.001 0.000609907 0.0432903 0.001 -0.00504599 0.086251 0.001 -0.00504599 -0.086251 0.001 0.000609907 -0.0432903 0.001 -0.0192543 -0.127261 0 -0.0192543 -0.127261 0.001 -0.0025 -1.20432e-16 0.001 -0.00997003 -0.0853828 0.001 -0.00437107 -0.0428545 0.001 -0.0025 -1.20432e-16 0 -0.00997003 -0.0853828 0 -0.00437107 -0.0428545 0 -0.0025 -1.20432e-16 0 -0.0025 -1.20432e-16 0.001 -0.0192543 0.127261 0.001 -0.00437107 0.0428545 0.001 -0.00997003 0.0853828 0.001 -0.0192543 0.127261 0 -0.00437107 0.0428545 0 -0.00997003 0.0853828 0 -0.0192543 0.127261 0 -0.0144246 0.128555 0 -0.0144246 0.128555 0.001 -0.0192543 0.127261 0.001 0.0025 -1.21656e-16 0 0.0025 -1.21656e-16 0.001 -0.0144246 0.128555 0.001 0.000609907 0.0432903 0.001 -0.00504599 0.086251 0.001 -0.0144246 0.128555 0 0.000609907 0.0432903 0 -0.00504599 0.086251 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="119">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0194212 -0.12853 0 -0.0145916 -0.129824 0 -0.0145916 -0.129824 0.001 -0.0194212 -0.12853 0.001 -0.0194212 -0.12853 0 -0.0145916 -0.129824 0 -0.0025 -1.21632e-16 0 -0.0100445 -0.0862337 0 -0.00438971 -0.0432815 0 -0.0194212 0.12853 0 -0.00438971 0.0432815 0 -0.0100445 0.0862337 0 -0.0145916 0.129824 0 0.0025 -1.22857e-16 0 0.000591261 0.0437173 0 -0.00512043 0.0871019 0 -0.00512043 -0.0871019 0 0.000591261 -0.0437173 0 -0.0145916 -0.129824 0 -0.0145916 -0.129824 0.001 0.0025 -1.22857e-16 0.001 -0.00512043 -0.0871019 0.001 0.000591261 -0.0437173 0.001 0.0025 -1.22857e-16 0 -0.00512043 -0.0871019 0 0.000591261 -0.0437173 0 -0.0194212 -0.12853 0.001 -0.0145916 -0.129824 0.001 -0.0025 -1.21632e-16 0.001 -0.0100445 -0.0862337 0.001 -0.00438971 -0.0432815 0.001 -0.0194212 0.12853 0.001 -0.00438971 0.0432815 0.001 -0.0100445 0.0862337 0.001 -0.0145916 0.129824 0.001 0.0025 -1.22857e-16 0.001 0.000591261 0.0437173 0.001 -0.00512043 0.0871019 0.001 -0.00512043 -0.0871019 0.001 0.000591261 -0.0437173 0.001 -0.0194212 -0.12853 0 -0.0194212 -0.12853 0.001 -0.0025 -1.21632e-16 0.001 -0.0100445 -0.0862337 0.001 -0.00438971 -0.0432815 0.001 -0.0025 -1.21632e-16 0 -0.0100445 -0.0862337 0 -0.00438971 -0.0432815 0 -0.0025 -1.21632e-16 0 -0.0025 -1.21632e-16 0.001 -0.0194212 0.12853 0.001 -0.00438971 0.0432815 0.001 -0.0100445 0.0862337 0.001 -0.0194212 0.12853 0 -0.00438971 0.0432815 0 -0.0100445 0.0862337 0 -0.0194212 0.12853 0 -0.0145916 0.129824 0 -0.0145916 0.129824 0.001 -0.0194212 0.12853 0.001 0.0025 -1.22857e-16 0 0.0025 -1.22857e-16 0.001 -0.0145916 0.129824 0.001 0.000591261 0.0437173 0.001 -0.00512043 0.0871019 0.001 -0.0145916 0.129824 0 0.000591261 0.0437173 0 -0.00512043 0.0871019 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="120">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0195882 -0.129798 0 -0.0147586 -0.131092 0 -0.0147586 -0.131092 0.001 -0.0195882 -0.129798 0.001 -0.0195882 -0.129798 0 -0.0147586 -0.131092 0 -0.0025 -1.22832e-16 0 -0.0101189 -0.0870846 0 -0.00440836 -0.0437086 0 -0.0195882 0.129798 0 -0.00440836 0.0437086 0 -0.0101189 0.0870846 0 -0.0147586 0.131092 0 0.0025 -1.24057e-16 0 0.000572615 0.0441444 0 -0.00519487 0.0879528 0 -0.00519487 -0.0879528 0 0.000572615 -0.0441444 0 -0.0147586 -0.131092 0 -0.0147586 -0.131092 0.001 0.0025 -1.24057e-16 0.001 -0.00519487 -0.0879528 0.001 0.000572615 -0.0441444 0.001 0.0025 -1.24057e-16 0 -0.00519487 -0.0879528 0 0.000572615 -0.0441444 0 -0.0195882 -0.129798 0.001 -0.0147586 -0.131092 0.001 -0.0025 -1.22832e-16 0.001 -0.0101189 -0.0870846 0.001 -0.00440836 -0.0437086 0.001 -0.0195882 0.129798 0.001 -0.00440836 0.0437086 0.001 -0.0101189 0.0870846 0.001 -0.0147586 0.131092 0.001 0.0025 -1.24057e-16 0.001 0.000572615 0.0441444 0.001 -0.00519487 0.0879528 0.001 -0.00519487 -0.0879528 0.001 0.000572615 -0.0441444 0.001 -0.0195882 -0.129798 0 -0.0195882 -0.129798 0.001 -0.0025 -1.22832e-16 0.001 -0.0101189 -0.0870846 0.001 -0.00440836 -0.0437086 0.001 -0.0025 -1.22832e-16 0 -0.0101189 -0.0870846 0 -0.00440836 -0.0437086 0 -0.0025 -1.22832e-16 0 -0.0025 -1.22832e-16 0.001 -0.0195882 0.129798 0.001 -0.00440836 0.0437086 0.001 -0.0101189 0.0870846 0.001 -0.0195882 0.129798 0 -0.00440836 0.0437086 0 -0.0101189 0.0870846 0 -0.0195882 0.129798 0 -0.0147586 0.131092 0 -0.0147586 0.131092 0.001 -0.0195882 0.129798 0.001 0.0025 -1.24057e-16 0 0.0025 -1.24057e-16 0.001 -0.0147586 0.131092 0.001 0.000572615 0.0441444 0.001 -0.00519487 0.0879528 0.001 -0.0147586 0.131092 0 0.000572615 0.0441444 0 -0.00519487 0.0879528 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="121">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0197552 -0.131066 0 -0.0149255 -0.13236 0 -0.0149255 -0.13236 0.001 -0.0197552 -0.131066 0.001 -0.0197552 -0.131066 0 -0.0149255 -0.13236 0 -0.0025 -1.24032e-16 0 -0.0101934 -0.0879354 0 -0.004427 -0.0441357 0 -0.0197552 0.131066 0 -0.004427 0.0441357 0 -0.0101934 0.0879354 0 -0.0149255 0.13236 0 0.0025 -1.25257e-16 0 0.000553969 0.0445714 0 -0.00526932 0.0888037 0 -0.00526932 -0.0888037 0 0.000553969 -0.0445714 0 -0.0149255 -0.13236 0 -0.0149255 -0.13236 0.001 0.0025 -1.25257e-16 0.001 -0.00526932 -0.0888037 0.001 0.000553969 -0.0445714 0.001 0.0025 -1.25257e-16 0 -0.00526932 -0.0888037 0 0.000553969 -0.0445714 0 -0.0197552 -0.131066 0.001 -0.0149255 -0.13236 0.001 -0.0025 -1.24032e-16 0.001 -0.0101934 -0.0879354 0.001 -0.004427 -0.0441357 0.001 -0.0197552 0.131066 0.001 -0.004427 0.0441357 0.001 -0.0101934 0.0879354 0.001 -0.0149255 0.13236 0.001 0.0025 -1.25257e-16 0.001 0.000553969 0.0445714 0.001 -0.00526932 0.0888037 0.001 -0.00526932 -0.0888037 0.001 0.000553969 -0.0445714 0.001 -0.0197552 -0.131066 0 -0.0197552 -0.131066 0.001 -0.0025 -1.24032e-16 0.001 -0.0101934 -0.0879354 0.001 -0.004427 -0.0441357 0.001 -0.0025 -1.24032e-16 0 -0.0101934 -0.0879354 0 -0.004427 -0.0441357 0 -0.0025 -1.24032e-16 0 -0.0025 -1.24032e-16 0.001 -0.0197552 0.131066 0.001 -0.004427 0.0441357 0.001 -0.0101934 0.0879354 0.001 -0.0197552 0.131066 0 -0.004427 0.0441357 0 -0.0101934 0.0879354 0 -0.0197552 0.131066 0 -0.0149255 0.13236 0 -0.0149255 0.13236 0.001 -0.0197552 0.131066 0.001 0.0025 -1.25257e-16 0 0.0025 -1.25257e-16 0.001 -0.0149255 0.13236 0.001 0.000553969 0.0445714 0.001 -0.00526932 0.0888037 0.001 -0.0149255 0.13236 0 0.000553969 0.0445714 0 -0.00526932 0.0888037 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="122">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0199221 -0.132334 0 -0.0150925 -0.133628 0 -0.0150925 -0.133628 0.001 -0.0199221 -0.132334 0.001 -0.0199221 -0.132334 0 -0.0150925 -0.133628 0 -0.0025 -1.25232e-16 0 -0.0102678 -0.0887863 0 -0.00444565 -0.0445627 0 -0.0199221 0.132334 0 -0.00444565 0.0445627 0 -0.0102678 0.0887863 0 -0.0150925 0.133628 0 0.0025 -1.26457e-16 0 0.000535323 0.0449985 0 -0.00534376 0.0896546 0 -0.00534376 -0.0896546 0 0.000535323 -0.0449985 0 -0.0150925 -0.133628 0 -0.0150925 -0.133628 0.001 0.0025 -1.26457e-16 0.001 -0.00534376 -0.0896546 0.001 0.000535323 -0.0449985 0.001 0.0025 -1.26457e-16 0 -0.00534376 -0.0896546 0 0.000535323 -0.0449985 0 -0.0199221 -0.132334 0.001 -0.0150925 -0.133628 0.001 -0.0025 -1.25232e-16 0.001 -0.0102678 -0.0887863 0.001 -0.00444565 -0.0445627 0.001 -0.0199221 0.132334 0.001 -0.00444565 0.0445627 0.001 -0.0102678 0.0887863 0.001 -0.0150925 0.133628 0.001 0.0025 -1.26457e-16 0.001 0.000535323 0.0449985 0.001 -0.00534376 0.0896546 0.001 -0.00534376 -0.0896546 0.001 0.000535323 -0.0449985 0.001 -0.0199221 -0.132334 0 -0.0199221 -0.132334 0.001 -0.0025 -1.25232e-16 0.001 -0.0102678 -0.0887863 0.001 -0.00444565 -0.0445627 0.001 -0.0025 -1.25232e-16 0 -0.0102678 -0.0887863 0 -0.00444565 -0.0445627 0 -0.0025 -1.25232e-16 0 -0.0025 -1.25232e-16 0.001 -0.0199221 0.132334 0.001 -0.00444565 0.0445627 0.001 -0.0102678 0.0887863 0.001 -0.0199221 0.132334 0 -0.00444565 0.0445627 0 -0.0102678 0.0887863 0 -0.0199221 0.132334 0 -0.0150925 0.133628 0 -0.0150925 0.133628 0.001 -0.0199221 0.132334 0.001 0.0025 -1.26457e-16 0 0.0025 -1.26457e-16 0.001 -0.0150925 0.133628 0.001 0.000535323 0.0449985 0.001 -0.00534376 0.0896546 0.001 -0.0150925 0.133628 0 0.000535323 0.0449985 0 -0.00534376 0.0896546 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="123">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0200891 -0.133602 0 -0.0152595 -0.134896 0 -0.0152595 -0.134896 0.001 -0.0200891 -0.133602 0.001 -0.0200891 -0.133602 0 -0.0152595 -0.134896 0 -0.0025 -1.26433e-16 0 -0.0103422 -0.0896372 0 -0.0044643 -0.0449898 0 -0.0200891 0.133602 0 -0.0044643 0.0449898 0 -0.0103422 0.0896372 0 -0.0152595 0.134896 0 0.0025 -1.27657e-16 0 0.000516677 0.0454256 0 -0.0054182 0.0905054 0 -0.0054182 -0.0905054 0 0.000516677 -0.0454256 0 -0.0152595 -0.134896 0 -0.0152595 -0.134896 0.001 0.0025 -1.27657e-16 0.001 -0.0054182 -0.0905054 0.001 0.000516677 -0.0454256 0.001 0.0025 -1.27657e-16 0 -0.0054182 -0.0905054 0 0.000516677 -0.0454256 0 -0.0200891 -0.133602 0.001 -0.0152595 -0.134896 0.001 -0.0025 -1.26433e-16 0.001 -0.0103422 -0.0896372 0.001 -0.0044643 -0.0449898 0.001 -0.0200891 0.133602 0.001 -0.0044643 0.0449898 0.001 -0.0103422 0.0896372 0.001 -0.0152595 0.134896 0.001 0.0025 -1.27657e-16 0.001 0.000516677 0.0454256 0.001 -0.0054182 0.0905054 0.001 -0.0054182 -0.0905054 0.001 0.000516677 -0.0454256 0.001 -0.0200891 -0.133602 0 -0.0200891 -0.133602 0.001 -0.0025 -1.26433e-16 0.001 -0.0103422 -0.0896372 0.001 -0.0044643 -0.0449898 0.001 -0.0025 -1.26433e-16 0 -0.0103422 -0.0896372 0 -0.0044643 -0.0449898 0 -0.0025 -1.26433e-16 0 -0.0025 -1.26433e-16 0.001 -0.0200891 0.133602 0.001 -0.0044643 0.0449898 0.001 -0.0103422 0.0896372 0.001 -0.0200891 0.133602 0 -0.0044643 0.0449898 0 -0.0103422 0.0896372 0 -0.0200891 0.133602 0 -0.0152595 0.134896 0 -0.0152595 0.134896 0.001 -0.0200891 0.133602 0.001 0.0025 -1.27657e-16 0 0.0025 -1.27657e-16 0.001 -0.0152595 0.134896 0.001 0.000516677 0.0454256 0.001 -0.0054182 0.0905054 0.001 -0.0152595 0.134896 0 0.000516677 0.0454256 0 -0.0054182 0.0905054 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="70">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0111821 -0.0659471 0 -0.00635247 -0.0672412 0 -0.00635247 -0.0672412 0.001 -0.0111821 -0.0659471 0.001 -0.0111821 -0.0659471 0 -0.00635247 -0.0672412 0 -0.0025 -6.2408e-17 0 -0.00637098 -0.0442456 0 -0.00346959 -0.0222073 0 -0.0111821 0.0659471 0 -0.00346959 0.0222073 0 -0.00637098 0.0442456 0 -0.00635247 0.0672412 0 0.0025 -6.36326e-17 0 0.00151138 0.0226431 0 -0.00144695 0.0451138 0 -0.00144695 -0.0451138 0 0.00151138 -0.0226431 0 -0.00635247 -0.0672412 0 -0.00635247 -0.0672412 0.001 0.0025 -6.36326e-17 0.001 -0.00144695 -0.0451138 0.001 0.00151138 -0.0226431 0.001 0.0025 -6.36326e-17 0 -0.00144695 -0.0451138 0 0.00151138 -0.0226431 0 -0.0111821 -0.0659471 0.001 -0.00635247 -0.0672412 0.001 -0.0025 -6.2408e-17 0.001 -0.00637098 -0.0442456 0.001 -0.00346959 -0.0222073 0.001 -0.0111821 0.0659471 0.001 -0.00346959 0.0222073 0.001 -0.00637098 0.0442456 0.001 -0.00635247 0.0672412 0.001 0.0025 -6.36326e-17 0.001 0.00151138 0.0226431 0.001 -0.00144695 0.0451138 0.001 -0.00144695 -0.0451138 0.001 0.00151138 -0.0226431 0.001 -0.0111821 -0.0659471 0 -0.0111821 -0.0659471 0.001 -0.0025 -6.2408e-17 0.001 -0.00637098 -0.0442456 0.001 -0.00346959 -0.0222073 0.001 -0.0025 -6.2408e-17 0 -0.00637098 -0.0442456 0 -0.00346959 -0.0222073 0 -0.0025 -6.2408e-17 0 -0.0025 -6.2408e-17 0.001 -0.0111821 0.0659471 0.001 -0.00346959 0.0222073 0.001 -0.00637098 0.0442456 0.001 -0.0111821 0.0659471 0 -0.00346959 0.0222073 0 -0.00637098 0.0442456 0 -0.0111821 0.0659471 0 -0.00635247 0.0672412 0 -0.00635247 0.0672412 0.001 -0.0111821 0.0659471 0.001 0.0025 -6.36326e-17 0 0.0025 -6.36326e-17 0.001 -0.00635247 0.0672412 0.001 0.00151138 0.0226431 0.001 -0.00144695 0.0451138 0.001 -0.00635247 0.0672412 0 0.00151138 0.0226431 0 -0.00144695 0.0451138 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="71">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0113525 -0.0672412 0 -0.00652284 -0.0685353 0 -0.00652284 -0.0685353 0.001 -0.0113525 -0.0672412 0.001 -0.0113525 -0.0672412 0 -0.00652284 -0.0685353 0 -0.0025 -6.36326e-17 0 -0.00644695 -0.0451138 0 -0.00348862 -0.0226431 0 -0.0113525 0.0672412 0 -0.00348862 0.0226431 0 -0.00644695 0.0451138 0 -0.00652284 0.0685353 0 0.0025 -6.48573e-17 0 0.00149236 0.0230788 0 -0.00152291 0.045982 0 -0.00152291 -0.045982 0 0.00149236 -0.0230788 0 -0.00652284 -0.0685353 0 -0.00652284 -0.0685353 0.001 0.0025 -6.48573e-17 0.001 -0.00152291 -0.045982 0.001 0.00149236 -0.0230788 0.001 0.0025 -6.48573e-17 0 -0.00152291 -0.045982 0 0.00149236 -0.0230788 0 -0.0113525 -0.0672412 0.001 -0.00652284 -0.0685353 0.001 -0.0025 -6.36326e-17 0.001 -0.00644695 -0.0451138 0.001 -0.00348862 -0.0226431 0.001 -0.0113525 0.0672412 0.001 -0.00348862 0.0226431 0.001 -0.00644695 0.0451138 0.001 -0.00652284 0.0685353 0.001 0.0025 -6.48573e-17 0.001 0.00149236 0.0230788 0.001 -0.00152291 0.045982 0.001 -0.00152291 -0.045982 0.001 0.00149236 -0.0230788 0.001 -0.0113525 -0.0672412 0 -0.0113525 -0.0672412 0.001 -0.0025 -6.36326e-17 0.001 -0.00644695 -0.0451138 0.001 -0.00348862 -0.0226431 0.001 -0.0025 -6.36326e-17 0 -0.00644695 -0.0451138 0 -0.00348862 -0.0226431 0 -0.0025 -6.36326e-17 0 -0.0025 -6.36326e-17 0.001 -0.0113525 0.0672412 0.001 -0.00348862 0.0226431 0.001 -0.00644695 0.0451138 0.001 -0.0113525 0.0672412 0 -0.00348862 0.0226431 0 -0.00644695 0.0451138 0 -0.0113525 0.0672412 0 -0.00652284 0.0685353 0 -0.00652284 0.0685353 0.001 -0.0113525 0.0672412 0.001 0.0025 -6.48573e-17 0 0.0025 -6.48573e-17 0.001 -0.00652284 0.0685353 0.001 0.00149236 0.0230788 0.001 -0.00152291 0.045982 0.001 -0.00652284 0.0685353 0 0.00149236 0.0230788 0 -0.00152291 0.045982 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="72">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0115228 -0.0685353 0 -0.00669321 -0.0698294 0 -0.00669321 -0.0698294 0.001 -0.0115228 -0.0685353 0.001 -0.0115228 -0.0685353 0 -0.00669321 -0.0698294 0 -0.0025 -6.48573e-17 0 -0.00652291 -0.045982 0 -0.00350764 -0.0230788 0 -0.0115228 0.0685353 0 -0.00350764 0.0230788 0 -0.00652291 0.045982 0 -0.00669321 0.0698294 0 0.0025 -6.60819e-17 0 0.00147333 0.0235146 0 -0.00159887 0.0468503 0 -0.00159887 -0.0468503 0 0.00147333 -0.0235146 0 -0.00669321 -0.0698294 0 -0.00669321 -0.0698294 0.001 0.0025 -6.60819e-17 0.001 -0.00159887 -0.0468503 0.001 0.00147333 -0.0235146 0.001 0.0025 -6.60819e-17 0 -0.00159887 -0.0468503 0 0.00147333 -0.0235146 0 -0.0115228 -0.0685353 0.001 -0.00669321 -0.0698294 0.001 -0.0025 -6.48573e-17 0.001 -0.00652291 -0.045982 0.001 -0.00350764 -0.0230788 0.001 -0.0115228 0.0685353 0.001 -0.00350764 0.0230788 0.001 -0.00652291 0.045982 0.001 -0.00669321 0.0698294 0.001 0.0025 -6.60819e-17 0.001 0.00147333 0.0235146 0.001 -0.00159887 0.0468503 0.001 -0.00159887 -0.0468503 0.001 0.00147333 -0.0235146 0.001 -0.0115228 -0.0685353 0 -0.0115228 -0.0685353 0.001 -0.0025 -6.48573e-17 0.001 -0.00652291 -0.045982 0.001 -0.00350764 -0.0230788 0.001 -0.0025 -6.48573e-17 0 -0.00652291 -0.045982 0 -0.00350764 -0.0230788 0 -0.0025 -6.48573e-17 0 -0.0025 -6.48573e-17 0.001 -0.0115228 0.0685353 0.001 -0.00350764 0.0230788 0.001 -0.00652291 0.045982 0.001 -0.0115228 0.0685353 0 -0.00350764 0.0230788 0 -0.00652291 0.045982 0 -0.0115228 0.0685353 0 -0.00669321 0.0698294 0 -0.00669321 0.0698294 0.001 -0.0115228 0.0685353 0.001 0.0025 -6.60819e-17 0 0.0025 -6.60819e-17 0.001 -0.00669321 0.0698294 0.001 0.00147333 0.0235146 0.001 -0.00159887 0.0468503 0.001 -0.00669321 0.0698294 0 0.00147333 0.0235146 0 -0.00159887 0.0468503 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="73">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0116898 -0.0698035 0 -0.00686018 -0.0710976 0 -0.00686018 -0.0710976 0.001 -0.0116898 -0.0698035 0.001 -0.0116898 -0.0698035 0 -0.00686018 -0.0710976 0 -0.0025 -6.60574e-17 0 -0.00659735 -0.0468329 0 -0.00352629 -0.0235059 0 -0.0116898 0.0698035 0 -0.00352629 0.0235059 0 -0.00659735 0.0468329 0 -0.00686018 0.0710976 0 0.0025 -6.72821e-17 0 0.00145468 0.0239417 0 -0.00167331 0.0477012 0 -0.00167331 -0.0477012 0 0.00145468 -0.0239417 0 -0.00686018 -0.0710976 0 -0.00686018 -0.0710976 0.001 0.0025 -6.72821e-17 0.001 -0.00167331 -0.0477012 0.001 0.00145468 -0.0239417 0.001 0.0025 -6.72821e-17 0 -0.00167331 -0.0477012 0 0.00145468 -0.0239417 0 -0.0116898 -0.0698035 0.001 -0.00686018 -0.0710976 0.001 -0.0025 -6.60574e-17 0.001 -0.00659735 -0.0468329 0.001 -0.00352629 -0.0235059 0.001 -0.0116898 0.0698035 0.001 -0.00352629 0.0235059 0.001 -0.00659735 0.0468329 0.001 -0.00686018 0.0710976 0.001 0.0025 -6.72821e-17 0.001 0.00145468 0.0239417 0.001 -0.00167331 0.0477012 0.001 -0.00167331 -0.0477012 0.001 0.00145468 -0.0239417 0.001 -0.0116898 -0.0698035 0 -0.0116898 -0.0698035 0.001 -0.0025 -6.60574e-17 0.001 -0.00659735 -0.0468329 0.001 -0.00352629 -0.0235059 0.001 -0.0025 -6.60574e-17 0 -0.00659735 -0.0468329 0 -0.00352629 -0.0235059 0 -0.0025 -6.60574e-17 0 -0.0025 -6.60574e-17 0.001 -0.0116898 0.0698035 0.001 -0.00352629 0.0235059 0.001 -0.00659735 0.0468329 0.001 -0.0116898 0.0698035 0 -0.00352629 0.0235059 0 -0.00659735 0.0468329 0 -0.0116898 0.0698035 0 -0.00686018 0.0710976 0 -0.00686018 0.0710976 0.001 -0.0116898 0.0698035 0.001 0.0025 -6.72821e-17 0 0.0025 -6.72821e-17 0.001 -0.00686018 0.0710976 0.001 0.00145468 0.0239417 0.001 -0.00167331 0.0477012 0.001 -0.00686018 0.0710976 0 0.00145468 0.0239417 0 -0.00167331 0.0477012 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="18">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0126711 -0.0772575 0 -0.00784151 -0.0785516 0 -0.00784151 -0.0785516 0.001 -0.0126711 -0.0772575 0.001 -0.0126711 -0.0772575 0 -0.00784151 -0.0785516 0 -0.0025 -7.31114e-17 0 -0.00703489 -0.051834 0 -0.00363588 -0.026016 0 -0.0126711 0.0772575 0 -0.00363588 0.026016 0 -0.00703489 0.051834 0 -0.00784151 0.0785516 0 0.0025 -7.43361e-17 0 0.00134509 0.0264518 0 -0.00211085 0.0527022 0 -0.00211085 -0.0527022 0 0.00134509 -0.0264518 0 -0.00784151 -0.0785516 0 -0.00784151 -0.0785516 0.001 0.0025 -7.43361e-17 0.001 -0.00211085 -0.0527022 0.001 0.00134509 -0.0264518 0.001 0.0025 -7.43361e-17 0 -0.00211085 -0.0527022 0 0.00134509 -0.0264518 0 -0.0126711 -0.0772575 0.001 -0.00784151 -0.0785516 0.001 -0.0025 -7.31114e-17 0.001 -0.00703489 -0.051834 0.001 -0.00363588 -0.026016 0.001 -0.0126711 0.0772575 0.001 -0.00363588 0.026016 0.001 -0.00703489 0.051834 0.001 -0.00784151 0.0785516 0.001 0.0025 -7.43361e-17 0.001 0.00134509 0.0264518 0.001 -0.00211085 0.0527022 0.001 -0.00211085 -0.0527022 0.001 0.00134509 -0.0264518 0.001 -0.0126711 -0.0772575 0 -0.0126711 -0.0772575 0.001 -0.0025 -7.31114e-17 0.001 -0.00703489 -0.051834 0.001 -0.00363588 -0.026016 0.001 -0.0025 -7.31114e-17 0 -0.00703489 -0.051834 0 -0.00363588 -0.026016 0 -0.0025 -7.31114e-17 0 -0.0025 -7.31114e-17 0.001 -0.0126711 0.0772575 0.001 -0.00363588 0.026016 0.001 -0.00703489 0.051834 0.001 -0.0126711 0.0772575 0 -0.00363588 0.026016 0 -0.00703489 0.051834 0 -0.0126711 0.0772575 0 -0.00784151 0.0785516 0 -0.00784151 0.0785516 0.001 -0.0126711 0.0772575 0.001 0.0025 -7.43361e-17 0 0.0025 -7.43361e-17 0.001 -0.00784151 0.0785516 0.001 0.00134509 0.0264518 0.001 -0.00211085 0.0527022 0.001 -0.00784151 0.0785516 0 0.00134509 0.0264518 0 -0.00211085 0.0527022 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="19">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0128722 -0.0787845 0 -0.00804255 -0.0800786 0 -0.00804255 -0.0800786 0.001 -0.0128722 -0.0787845 0.001 -0.0128722 -0.0787845 0 -0.00804255 -0.0800786 0 -0.0025 -7.45565e-17 0 -0.00712452 -0.0528585 0 -0.00365833 -0.0265302 0 -0.0128722 0.0787845 0 -0.00365833 0.0265302 0 -0.00712452 0.0528585 0 -0.00804255 0.0800786 0 0.0025 -7.57811e-17 0 0.00132264 0.026966 0 -0.00220048 0.0537267 0 -0.00220048 -0.0537267 0 0.00132264 -0.026966 0 -0.00804255 -0.0800786 0 -0.00804255 -0.0800786 0.001 0.0025 -7.57811e-17 0.001 -0.00220048 -0.0537267 0.001 0.00132264 -0.026966 0.001 0.0025 -7.57811e-17 0 -0.00220048 -0.0537267 0 0.00132264 -0.026966 0 -0.0128722 -0.0787845 0.001 -0.00804255 -0.0800786 0.001 -0.0025 -7.45565e-17 0.001 -0.00712452 -0.0528585 0.001 -0.00365833 -0.0265302 0.001 -0.0128722 0.0787845 0.001 -0.00365833 0.0265302 0.001 -0.00712452 0.0528585 0.001 -0.00804255 0.0800786 0.001 0.0025 -7.57811e-17 0.001 0.00132264 0.026966 0.001 -0.00220048 0.0537267 0.001 -0.00220048 -0.0537267 0.001 0.00132264 -0.026966 0.001 -0.0128722 -0.0787845 0 -0.0128722 -0.0787845 0.001 -0.0025 -7.45565e-17 0.001 -0.00712452 -0.0528585 0.001 -0.00365833 -0.0265302 0.001 -0.0025 -7.45565e-17 0 -0.00712452 -0.0528585 0 -0.00365833 -0.0265302 0 -0.0025 -7.45565e-17 0 -0.0025 -7.45565e-17 0.001 -0.0128722 0.0787845 0.001 -0.00365833 0.0265302 0.001 -0.00712452 0.0528585 0.001 -0.0128722 0.0787845 0 -0.00365833 0.0265302 0 -0.00712452 0.0528585 0 -0.0128722 0.0787845 0 -0.00804255 0.0800786 0 -0.00804255 0.0800786 0.001 -0.0128722 0.0787845 0.001 0.0025 -7.57811e-17 0 0.0025 -7.57811e-17 0.001 -0.00804255 0.0800786 0.001 0.00132264 0.026966 0.001 -0.00220048 0.0537267 0.001 -0.00804255 0.0800786 0 0.00132264 0.026966 0 -0.00220048 0.0537267 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="28">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0143544 -0.0900431 0 -0.00952478 -0.0913372 0 -0.00952478 -0.0913372 0.001 -0.0143544 -0.0900431 0.001 -0.0143544 -0.0900431 0 -0.00952478 -0.0913372 0 -0.0025 -8.52109e-17 0 -0.00778538 -0.0604122 0 -0.00382386 -0.0303215 0 -0.0143544 0.0900431 0 -0.00382386 0.0303215 0 -0.00778538 0.0604122 0 -0.00952478 0.0913372 0 0.0025 -8.64356e-17 0 0.00115711 0.0307573 0 -0.00286134 0.0612804 0 -0.00286134 -0.0612804 0 0.00115711 -0.0307573 0 -0.00952478 -0.0913372 0 -0.00952478 -0.0913372 0.001 0.0025 -8.64356e-17 0.001 -0.00286134 -0.0612804 0.001 0.00115711 -0.0307573 0.001 0.0025 -8.64356e-17 0 -0.00286134 -0.0612804 0 0.00115711 -0.0307573 0 -0.0143544 -0.0900431 0.001 -0.00952478 -0.0913372 0.001 -0.0025 -8.52109e-17 0.001 -0.00778538 -0.0604122 0.001 -0.00382386 -0.0303215 0.001 -0.0143544 0.0900431 0.001 -0.00382386 0.0303215 0.001 -0.00778538 0.0604122 0.001 -0.00952478 0.0913372 0.001 0.0025 -8.64356e-17 0.001 0.00115711 0.0307573 0.001 -0.00286134 0.0612804 0.001 -0.00286134 -0.0612804 0.001 0.00115711 -0.0307573 0.001 -0.0143544 -0.0900431 0 -0.0143544 -0.0900431 0.001 -0.0025 -8.52109e-17 0.001 -0.00778538 -0.0604122 0.001 -0.00382386 -0.0303215 0.001 -0.0025 -8.52109e-17 0 -0.00778538 -0.0604122 0 -0.00382386 -0.0303215 0 -0.0025 -8.52109e-17 0 -0.0025 -8.52109e-17 0.001 -0.0143544 0.0900431 0.001 -0.00382386 0.0303215 0.001 -0.00778538 0.0604122 0.001 -0.0143544 0.0900431 0 -0.00382386 0.0303215 0 -0.00778538 0.0604122 0 -0.0143544 0.0900431 0 -0.00952478 0.0913372 0 -0.00952478 0.0913372 0.001 -0.0143544 0.0900431 0.001 0.0025 -8.64356e-17 0 0.0025 -8.64356e-17 0.001 -0.00952478 0.0913372 0.001 0.00115711 0.0307573 0.001 -0.00286134 0.0612804 0.001 -0.00952478 0.0913372 0 0.00115711 0.0307573 0 -0.00286134 0.0612804 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="29">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0145589 -0.0915961 0 -0.00972922 -0.0928902 0 -0.00972922 -0.0928902 0.001 -0.0145589 -0.0915961 0.001 -0.0145589 -0.0915961 0 -0.00972922 -0.0928902 0 -0.0025 -8.66805e-17 0 -0.00787654 -0.0614541 0 -0.0038467 -0.0308444 0 -0.0145589 0.0915961 0 -0.0038467 0.0308444 0 -0.00787654 0.0614541 0 -0.00972922 0.0928902 0 0.0025 -8.79051e-17 0 0.00113428 0.0312802 0 -0.0029525 0.0623223 0 -0.0029525 -0.0623223 0 0.00113428 -0.0312802 0 -0.00972922 -0.0928902 0 -0.00972922 -0.0928902 0.001 0.0025 -8.79051e-17 0.001 -0.0029525 -0.0623223 0.001 0.00113428 -0.0312802 0.001 0.0025 -8.79051e-17 0 -0.0029525 -0.0623223 0 0.00113428 -0.0312802 0 -0.0145589 -0.0915961 0.001 -0.00972922 -0.0928902 0.001 -0.0025 -8.66805e-17 0.001 -0.00787654 -0.0614541 0.001 -0.0038467 -0.0308444 0.001 -0.0145589 0.0915961 0.001 -0.0038467 0.0308444 0.001 -0.00787654 0.0614541 0.001 -0.00972922 0.0928902 0.001 0.0025 -8.79051e-17 0.001 0.00113428 0.0312802 0.001 -0.0029525 0.0623223 0.001 -0.0029525 -0.0623223 0.001 0.00113428 -0.0312802 0.001 -0.0145589 -0.0915961 0 -0.0145589 -0.0915961 0.001 -0.0025 -8.66805e-17 0.001 -0.00787654 -0.0614541 0.001 -0.0038467 -0.0308444 0.001 -0.0025 -8.66805e-17 0 -0.00787654 -0.0614541 0 -0.0038467 -0.0308444 0 -0.0025 -8.66805e-17 0 -0.0025 -8.66805e-17 0.001 -0.0145589 0.0915961 0.001 -0.0038467 0.0308444 0.001 -0.00787654 0.0614541 0.001 -0.0145589 0.0915961 0 -0.0038467 0.0308444 0 -0.00787654 0.0614541 0 -0.0145589 0.0915961 0 -0.00972922 0.0928902 0 -0.00972922 0.0928902 0.001 -0.0145589 0.0915961 0.001 0.0025 -8.79051e-17 0 0.0025 -8.79051e-17 0.001 -0.00972922 0.0928902 0.001 0.00113428 0.0312802 0.001 -0.0029525 0.0623223 0.001 -0.00972922 0.0928902 0 0.00113428 0.0312802 0 -0.0029525 0.0623223 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="30">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0146883 -0.0925796 0 -0.0098587 -0.0938737 0 -0.0098587 -0.0938737 0.001 -0.0146883 -0.0925796 0.001 -0.0146883 -0.0925796 0 -0.0098587 -0.0938737 0 -0.0025 -8.76112e-17 0 -0.00793427 -0.062114 0 -0.00386116 -0.0311756 0 -0.0146883 0.0925796 0 -0.00386116 0.0311756 0 -0.00793427 0.062114 0 -0.0098587 0.0938737 0 0.0025 -8.88359e-17 0 0.00111982 0.0316114 0 -0.00301023 0.0629822 0 -0.00301023 -0.0629822 0 0.00111982 -0.0316114 0 -0.0098587 -0.0938737 0 -0.0098587 -0.0938737 0.001 0.0025 -8.88359e-17 0.001 -0.00301023 -0.0629822 0.001 0.00111982 -0.0316114 0.001 0.0025 -8.88359e-17 0 -0.00301023 -0.0629822 0 0.00111982 -0.0316114 0 -0.0146883 -0.0925796 0.001 -0.0098587 -0.0938737 0.001 -0.0025 -8.76112e-17 0.001 -0.00793427 -0.062114 0.001 -0.00386116 -0.0311756 0.001 -0.0146883 0.0925796 0.001 -0.00386116 0.0311756 0.001 -0.00793427 0.062114 0.001 -0.0098587 0.0938737 0.001 0.0025 -8.88359e-17 0.001 0.00111982 0.0316114 0.001 -0.00301023 0.0629822 0.001 -0.00301023 -0.0629822 0.001 0.00111982 -0.0316114 0.001 -0.0146883 -0.0925796 0 -0.0146883 -0.0925796 0.001 -0.0025 -8.76112e-17 0.001 -0.00793427 -0.062114 0.001 -0.00386116 -0.0311756 0.001 -0.0025 -8.76112e-17 0 -0.00793427 -0.062114 0 -0.00386116 -0.0311756 0 -0.0025 -8.76112e-17 0 -0.0025 -8.76112e-17 0.001 -0.0146883 0.0925796 0.001 -0.00386116 0.0311756 0.001 -0.00793427 0.062114 0.001 -0.0146883 0.0925796 0 -0.00386116 0.0311756 0 -0.00793427 0.062114 0 -0.0146883 0.0925796 0 -0.0098587 0.0938737 0 -0.0098587 0.0938737 0.001 -0.0146883 0.0925796 0.001 0.0025 -8.88359e-17 0 0.0025 -8.88359e-17 0.001 -0.0098587 0.0938737 0.001 0.00111982 0.0316114 0.001 -0.00301023 0.0629822 0.001 -0.0098587 0.0938737 0 0.00111982 0.0316114 0 -0.00301023 0.0629822 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="31">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0148962 -0.0941584 0 -0.0100666 -0.0954525 0 -0.0100666 -0.0954525 0.001 -0.0148962 -0.0941584 0.001 -0.0148962 -0.0941584 0 -0.0100666 -0.0954525 0 -0.0025 -8.91053e-17 0 -0.00802694 -0.0631732 0 -0.00388437 -0.0317073 0 -0.0148962 0.0941584 0 -0.00388437 0.0317073 0 -0.00802694 0.0631732 0 -0.0100666 0.0954525 0 0.0025 -9.03299e-17 0 0.0010966 0.032143 0 -0.0031029 0.0640414 0 -0.0031029 -0.0640414 0 0.0010966 -0.032143 0 -0.0100666 -0.0954525 0 -0.0100666 -0.0954525 0.001 0.0025 -9.03299e-17 0.001 -0.0031029 -0.0640414 0.001 0.0010966 -0.032143 0.001 0.0025 -9.03299e-17 0 -0.0031029 -0.0640414 0 0.0010966 -0.032143 0 -0.0148962 -0.0941584 0.001 -0.0100666 -0.0954525 0.001 -0.0025 -8.91053e-17 0.001 -0.00802694 -0.0631732 0.001 -0.00388437 -0.0317073 0.001 -0.0148962 0.0941584 0.001 -0.00388437 0.0317073 0.001 -0.00802694 0.0631732 0.001 -0.0100666 0.0954525 0.001 0.0025 -9.03299e-17 0.001 0.0010966 0.032143 0.001 -0.0031029 0.0640414 0.001 -0.0031029 -0.0640414 0.001 0.0010966 -0.032143 0.001 -0.0148962 -0.0941584 0 -0.0148962 -0.0941584 0.001 -0.0025 -8.91053e-17 0.001 -0.00802694 -0.0631732 0.001 -0.00388437 -0.0317073 0.001 -0.0025 -8.91053e-17 0 -0.00802694 -0.0631732 0 -0.00388437 -0.0317073 0 -0.0025 -8.91053e-17 0 -0.0025 -8.91053e-17 0.001 -0.0148962 0.0941584 0.001 -0.00388437 0.0317073 0.001 -0.00802694 0.0631732 0.001 -0.0148962 0.0941584 0 -0.00388437 0.0317073 0 -0.00802694 0.0631732 0 -0.0148962 0.0941584 0 -0.0100666 0.0954525 0 -0.0100666 0.0954525 0.001 -0.0148962 0.0941584 0.001 0.0025 -9.03299e-17 0 0.0025 -9.03299e-17 0.001 -0.0100666 0.0954525 0.001 0.0010966 0.032143 0.001 -0.0031029 0.0640414 0.001 -0.0100666 0.0954525 0 0.0010966 0.032143 0 -0.0031029 0.0640414 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="32">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0150257 -0.0951419 0 -0.010196 -0.096436 0 -0.010196 -0.096436 0.001 -0.0150257 -0.0951419 0.001 -0.0150257 -0.0951419 0 -0.010196 -0.096436 0 -0.0025 -9.0036e-17 0 -0.00808467 -0.0638331 0 -0.00389883 -0.0320385 0 -0.0150257 0.0951419 0 -0.00389883 0.0320385 0 -0.00808467 0.0638331 0 -0.010196 0.096436 0 0.0025 -9.12607e-17 0 0.00108214 0.0324742 0 -0.00316063 0.0647013 0 -0.00316063 -0.0647013 0 0.00108214 -0.0324742 0 -0.010196 -0.096436 0 -0.010196 -0.096436 0.001 0.0025 -9.12607e-17 0.001 -0.00316063 -0.0647013 0.001 0.00108214 -0.0324742 0.001 0.0025 -9.12607e-17 0 -0.00316063 -0.0647013 0 0.00108214 -0.0324742 0 -0.0150257 -0.0951419 0.001 -0.010196 -0.096436 0.001 -0.0025 -9.0036e-17 0.001 -0.00808467 -0.0638331 0.001 -0.00389883 -0.0320385 0.001 -0.0150257 0.0951419 0.001 -0.00389883 0.0320385 0.001 -0.00808467 0.0638331 0.001 -0.010196 0.096436 0.001 0.0025 -9.12607e-17 0.001 0.00108214 0.0324742 0.001 -0.00316063 0.0647013 0.001 -0.00316063 -0.0647013 0.001 0.00108214 -0.0324742 0.001 -0.0150257 -0.0951419 0 -0.0150257 -0.0951419 0.001 -0.0025 -9.0036e-17 0.001 -0.00808467 -0.0638331 0.001 -0.00389883 -0.0320385 0.001 -0.0025 -9.0036e-17 0 -0.00808467 -0.0638331 0 -0.00389883 -0.0320385 0 -0.0025 -9.0036e-17 0 -0.0025 -9.0036e-17 0.001 -0.0150257 0.0951419 0.001 -0.00389883 0.0320385 0.001 -0.00808467 0.0638331 0.001 -0.0150257 0.0951419 0 -0.00389883 0.0320385 0 -0.00808467 0.0638331 0 -0.0150257 0.0951419 0 -0.010196 0.096436 0 -0.010196 0.096436 0.001 -0.0150257 0.0951419 0.001 0.0025 -9.12607e-17 0 0.0025 -9.12607e-17 0.001 -0.010196 0.096436 0.001 0.00108214 0.0324742 0.001 -0.00316063 0.0647013 0.001 -0.010196 0.096436 0 0.00108214 0.0324742 0 -0.00316063 0.0647013 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="33">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0152335 -0.0967207 0 -0.0104039 -0.0980148 0 -0.0104039 -0.0980148 0.001 -0.0152335 -0.0967207 0.001 -0.0152335 -0.0967207 0 -0.0104039 -0.0980148 0 -0.0025 -9.15301e-17 0 -0.00817734 -0.0648923 0 -0.00392204 -0.0325701 0 -0.0152335 0.0967207 0 -0.00392204 0.0325701 0 -0.00817734 0.0648923 0 -0.0104039 0.0980148 0 0.0025 -9.27547e-17 0 0.00105893 0.0330059 0 -0.0032533 0.0657606 0 -0.0032533 -0.0657606 0 0.00105893 -0.0330059 0 -0.0104039 -0.0980148 0 -0.0104039 -0.0980148 0.001 0.0025 -9.27547e-17 0.001 -0.0032533 -0.0657606 0.001 0.00105893 -0.0330059 0.001 0.0025 -9.27547e-17 0 -0.0032533 -0.0657606 0 0.00105893 -0.0330059 0 -0.0152335 -0.0967207 0.001 -0.0104039 -0.0980148 0.001 -0.0025 -9.15301e-17 0.001 -0.00817734 -0.0648923 0.001 -0.00392204 -0.0325701 0.001 -0.0152335 0.0967207 0.001 -0.00392204 0.0325701 0.001 -0.00817734 0.0648923 0.001 -0.0104039 0.0980148 0.001 0.0025 -9.27547e-17 0.001 0.00105893 0.0330059 0.001 -0.0032533 0.0657606 0.001 -0.0032533 -0.0657606 0.001 0.00105893 -0.0330059 0.001 -0.0152335 -0.0967207 0 -0.0152335 -0.0967207 0.001 -0.0025 -9.15301e-17 0.001 -0.00817734 -0.0648923 0.001 -0.00392204 -0.0325701 0.001 -0.0025 -9.15301e-17 0 -0.00817734 -0.0648923 0 -0.00392204 -0.0325701 0 -0.0025 -9.15301e-17 0 -0.0025 -9.15301e-17 0.001 -0.0152335 0.0967207 0.001 -0.00392204 0.0325701 0.001 -0.00817734 0.0648923 0.001 -0.0152335 0.0967207 0 -0.00392204 0.0325701 0 -0.00817734 0.0648923 0 -0.0152335 0.0967207 0 -0.0104039 0.0980148 0 -0.0104039 0.0980148 0.001 -0.0152335 0.0967207 0.001 0.0025 -9.27547e-17 0 0.0025 -9.27547e-17 0.001 -0.0104039 0.0980148 0.001 0.00105893 0.0330059 0.001 -0.0032533 0.0657606 0.001 -0.0104039 0.0980148 0 0.00105893 0.0330059 0 -0.0032533 0.0657606 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="34">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0153596 -0.0976783 0 -0.01053 -0.0989724 0 -0.01053 -0.0989724 0.001 -0.0153596 -0.0976783 0.001 -0.0153596 -0.0976783 0 -0.01053 -0.0989724 0 -0.0025 -9.24363e-17 0 -0.00823355 -0.0655348 0 -0.00393612 -0.0328926 0 -0.0153596 0.0976783 0 -0.00393612 0.0328926 0 -0.00823355 0.0655348 0 -0.01053 0.0989724 0 0.0025 -9.3661e-17 0 0.00104485 0.0333284 0 -0.00330952 0.0664031 0 -0.00330952 -0.0664031 0 0.00104485 -0.0333284 0 -0.01053 -0.0989724 0 -0.01053 -0.0989724 0.001 0.0025 -9.3661e-17 0.001 -0.00330952 -0.0664031 0.001 0.00104485 -0.0333284 0.001 0.0025 -9.3661e-17 0 -0.00330952 -0.0664031 0 0.00104485 -0.0333284 0 -0.0153596 -0.0976783 0.001 -0.01053 -0.0989724 0.001 -0.0025 -9.24363e-17 0.001 -0.00823355 -0.0655348 0.001 -0.00393612 -0.0328926 0.001 -0.0153596 0.0976783 0.001 -0.00393612 0.0328926 0.001 -0.00823355 0.0655348 0.001 -0.01053 0.0989724 0.001 0.0025 -9.3661e-17 0.001 0.00104485 0.0333284 0.001 -0.00330952 0.0664031 0.001 -0.00330952 -0.0664031 0.001 0.00104485 -0.0333284 0.001 -0.0153596 -0.0976783 0 -0.0153596 -0.0976783 0.001 -0.0025 -9.24363e-17 0.001 -0.00823355 -0.0655348 0.001 -0.00393612 -0.0328926 0.001 -0.0025 -9.24363e-17 0 -0.00823355 -0.0655348 0 -0.00393612 -0.0328926 0 -0.0025 -9.24363e-17 0 -0.0025 -9.24363e-17 0.001 -0.0153596 0.0976783 0.001 -0.00393612 0.0328926 0.001 -0.00823355 0.0655348 0.001 -0.0153596 0.0976783 0 -0.00393612 0.0328926 0 -0.00823355 0.0655348 0 -0.0153596 0.0976783 0 -0.01053 0.0989724 0 -0.01053 0.0989724 0.001 -0.0153596 0.0976783 0.001 0.0025 -9.3661e-17 0 0.0025 -9.3661e-17 0.001 -0.01053 0.0989724 0.001 0.00104485 0.0333284 0.001 -0.00330952 0.0664031 0.001 -0.01053 0.0989724 0 0.00104485 0.0333284 0 -0.00330952 0.0664031 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="35">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0155709 -0.099283 0 -0.0107412 -0.100577 0 -0.0107412 -0.100577 0.001 -0.0155709 -0.099283 0.001 -0.0155709 -0.099283 0 -0.0107412 -0.100577 0 -0.0025 -9.39549e-17 0 -0.00832775 -0.0666114 0 -0.00395971 -0.0334329 0 -0.0155709 0.099283 0 -0.00395971 0.0334329 0 -0.00832775 0.0666114 0 -0.0107412 0.100577 0 0.0025 -9.51795e-17 0 0.00102126 0.0338687 0 -0.00340371 0.0674797 0 -0.00340371 -0.0674797 0 0.00102126 -0.0338687 0 -0.0107412 -0.100577 0 -0.0107412 -0.100577 0.001 0.0025 -9.51795e-17 0.001 -0.00340371 -0.0674797 0.001 0.00102126 -0.0338687 0.001 0.0025 -9.51795e-17 0 -0.00340371 -0.0674797 0 0.00102126 -0.0338687 0 -0.0155709 -0.099283 0.001 -0.0107412 -0.100577 0.001 -0.0025 -9.39549e-17 0.001 -0.00832775 -0.0666114 0.001 -0.00395971 -0.0334329 0.001 -0.0155709 0.099283 0.001 -0.00395971 0.0334329 0.001 -0.00832775 0.0666114 0.001 -0.0107412 0.100577 0.001 0.0025 -9.51795e-17 0.001 0.00102126 0.0338687 0.001 -0.00340371 0.0674797 0.001 -0.00340371 -0.0674797 0.001 0.00102126 -0.0338687 0.001 -0.0155709 -0.099283 0 -0.0155709 -0.099283 0.001 -0.0025 -9.39549e-17 0.001 -0.00832775 -0.0666114 0.001 -0.00395971 -0.0334329 0.001 -0.0025 -9.39549e-17 0 -0.00832775 -0.0666114 0 -0.00395971 -0.0334329 0 -0.0025 -9.39549e-17 0 -0.0025 -9.39549e-17 0.001 -0.0155709 0.099283 0.001 -0.00395971 0.0334329 0.001 -0.00832775 0.0666114 0.001 -0.0155709 0.099283 0 -0.00395971 0.0334329 0 -0.00832775 0.0666114 0 -0.0155709 0.099283 0 -0.0107412 0.100577 0 -0.0107412 0.100577 0.001 -0.0155709 0.099283 0.001 0.0025 -9.51795e-17 0 0.0025 -9.51795e-17 0.001 -0.0107412 0.100577 0.001 0.00102126 0.0338687 0.001 -0.00340371 0.0674797 0.001 -0.0107412 0.100577 0 0.00102126 0.0338687 0 -0.00340371 0.0674797 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="36">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0156935 -0.100215 0 -0.0108639 -0.101509 0 -0.0108639 -0.101509 0.001 -0.0156935 -0.100215 0.001 -0.0156935 -0.100215 0 -0.0108639 -0.101509 0 -0.0025 -9.48366e-17 0 -0.00838244 -0.0672366 0 -0.00397341 -0.0337467 0 -0.0156935 0.100215 0 -0.00397341 0.0337467 0 -0.00838244 0.0672366 0 -0.0108639 0.101509 0 0.0025 -9.60613e-17 0 0.00100756 0.0341825 0 -0.0034584 0.0681048 0 -0.0034584 -0.0681048 0 0.00100756 -0.0341825 0 -0.0108639 -0.101509 0 -0.0108639 -0.101509 0.001 0.0025 -9.60613e-17 0.001 -0.0034584 -0.0681048 0.001 0.00100756 -0.0341825 0.001 0.0025 -9.60613e-17 0 -0.0034584 -0.0681048 0 0.00100756 -0.0341825 0 -0.0156935 -0.100215 0.001 -0.0108639 -0.101509 0.001 -0.0025 -9.48366e-17 0.001 -0.00838244 -0.0672366 0.001 -0.00397341 -0.0337467 0.001 -0.0156935 0.100215 0.001 -0.00397341 0.0337467 0.001 -0.00838244 0.0672366 0.001 -0.0108639 0.101509 0.001 0.0025 -9.60613e-17 0.001 0.00100756 0.0341825 0.001 -0.0034584 0.0681048 0.001 -0.0034584 -0.0681048 0.001 0.00100756 -0.0341825 0.001 -0.0156935 -0.100215 0 -0.0156935 -0.100215 0.001 -0.0025 -9.48366e-17 0.001 -0.00838244 -0.0672366 0.001 -0.00397341 -0.0337467 0.001 -0.0025 -9.48366e-17 0 -0.00838244 -0.0672366 0 -0.00397341 -0.0337467 0 -0.0025 -9.48366e-17 0 -0.0025 -9.48366e-17 0.001 -0.0156935 0.100215 0.001 -0.00397341 0.0337467 0.001 -0.00838244 0.0672366 0.001 -0.0156935 0.100215 0 -0.00397341 0.0337467 0 -0.00838244 0.0672366 0 -0.0156935 0.100215 0 -0.0108639 0.101509 0 -0.0108639 0.101509 0.001 -0.0156935 0.100215 0.001 0.0025 -9.60613e-17 0 0.0025 -9.60613e-17 0.001 -0.0108639 0.101509 0.001 0.00100756 0.0341825 0.001 -0.0034584 0.0681048 0.001 -0.0108639 0.101509 0 0.00100756 0.0341825 0 -0.0034584 0.0681048 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="37">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0159048 -0.101819 0 -0.0110752 -0.103114 0 -0.0110752 -0.103114 0.001 -0.0159048 -0.101819 0.001 -0.0159048 -0.101819 0 -0.0110752 -0.103114 0 -0.0025 -9.63552e-17 0 -0.00847663 -0.0683132 0 -0.00399701 -0.0342871 0 -0.0159048 0.101819 0 -0.00399701 0.0342871 0 -0.00847663 0.0683132 0 -0.0110752 0.103114 0 0.0025 -9.75799e-17 0 0.000983968 0.0347228 0 -0.00355259 0.0691814 0 -0.00355259 -0.0691814 0 0.000983968 -0.0347228 0 -0.0110752 -0.103114 0 -0.0110752 -0.103114 0.001 0.0025 -9.75799e-17 0.001 -0.00355259 -0.0691814 0.001 0.000983968 -0.0347228 0.001 0.0025 -9.75799e-17 0 -0.00355259 -0.0691814 0 0.000983968 -0.0347228 0 -0.0159048 -0.101819 0.001 -0.0110752 -0.103114 0.001 -0.0025 -9.63552e-17 0.001 -0.00847663 -0.0683132 0.001 -0.00399701 -0.0342871 0.001 -0.0159048 0.101819 0.001 -0.00399701 0.0342871 0.001 -0.00847663 0.0683132 0.001 -0.0110752 0.103114 0.001 0.0025 -9.75799e-17 0.001 0.000983968 0.0347228 0.001 -0.00355259 0.0691814 0.001 -0.00355259 -0.0691814 0.001 0.000983968 -0.0347228 0.001 -0.0159048 -0.101819 0 -0.0159048 -0.101819 0.001 -0.0025 -9.63552e-17 0.001 -0.00847663 -0.0683132 0.001 -0.00399701 -0.0342871 0.001 -0.0025 -9.63552e-17 0 -0.00847663 -0.0683132 0 -0.00399701 -0.0342871 0 -0.0025 -9.63552e-17 0 -0.0025 -9.63552e-17 0.001 -0.0159048 0.101819 0.001 -0.00399701 0.0342871 0.001 -0.00847663 0.0683132 0.001 -0.0159048 0.101819 0 -0.00399701 0.0342871 0 -0.00847663 0.0683132 0 -0.0159048 0.101819 0 -0.0110752 0.103114 0 -0.0110752 0.103114 0.001 -0.0159048 0.101819 0.001 0.0025 -9.75799e-17 0 0.0025 -9.75799e-17 0.001 -0.0110752 0.103114 0.001 0.000983968 0.0347228 0.001 -0.00355259 0.0691814 0.001 -0.0110752 0.103114 0 0.000983968 0.0347228 0 -0.00355259 0.0691814 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="20">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0130085 -0.0798198 0 -0.00817885 -0.0811139 0 -0.00817885 -0.0811139 0.001 -0.0130085 -0.0798198 0.001 -0.0130085 -0.0798198 0 -0.00817885 -0.0811139 0 -0.0025 -7.55362e-17 0 -0.00718529 -0.0535531 0 -0.00367356 -0.0268788 0 -0.0130085 0.0798198 0 -0.00367356 0.0268788 0 -0.00718529 0.0535531 0 -0.00817885 0.0811139 0 0.0025 -7.67609e-17 0 0.00130742 0.0273146 0 -0.00226125 0.0544213 0 -0.00226125 -0.0544213 0 0.00130742 -0.0273146 0 -0.00817885 -0.0811139 0 -0.00817885 -0.0811139 0.001 0.0025 -7.67609e-17 0.001 -0.00226125 -0.0544213 0.001 0.00130742 -0.0273146 0.001 0.0025 -7.67609e-17 0 -0.00226125 -0.0544213 0 0.00130742 -0.0273146 0 -0.0130085 -0.0798198 0.001 -0.00817885 -0.0811139 0.001 -0.0025 -7.55362e-17 0.001 -0.00718529 -0.0535531 0.001 -0.00367356 -0.0268788 0.001 -0.0130085 0.0798198 0.001 -0.00367356 0.0268788 0.001 -0.00718529 0.0535531 0.001 -0.00817885 0.0811139 0.001 0.0025 -7.67609e-17 0.001 0.00130742 0.0273146 0.001 -0.00226125 0.0544213 0.001 -0.00226125 -0.0544213 0.001 0.00130742 -0.0273146 0.001 -0.0130085 -0.0798198 0 -0.0130085 -0.0798198 0.001 -0.0025 -7.55362e-17 0.001 -0.00718529 -0.0535531 0.001 -0.00367356 -0.0268788 0.001 -0.0025 -7.55362e-17 0 -0.00718529 -0.0535531 0 -0.00367356 -0.0268788 0 -0.0025 -7.55362e-17 0 -0.0025 -7.55362e-17 0.001 -0.0130085 0.0798198 0.001 -0.00367356 0.0268788 0.001 -0.00718529 0.0535531 0.001 -0.0130085 0.0798198 0 -0.00367356 0.0268788 0 -0.00718529 0.0535531 0 -0.0130085 0.0798198 0 -0.00817885 0.0811139 0 -0.00817885 0.0811139 0.001 -0.0130085 0.0798198 0.001 0.0025 -7.67609e-17 0 0.0025 -7.67609e-17 0.001 -0.00817885 0.0811139 0.001 0.00130742 0.0273146 0.001 -0.00226125 0.0544213 0.001 -0.00817885 0.0811139 0 0.00130742 0.0273146 0 -0.00226125 0.0544213 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="38">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0160309 -0.102777 0 -0.0112012 -0.104071 0 -0.0112012 -0.104071 0.001 -0.0160309 -0.102777 0.001 -0.0160309 -0.102777 0 -0.0112012 -0.104071 0 -0.0025 -9.72614e-17 0 -0.00853284 -0.0689557 0 -0.00401109 -0.0346095 0 -0.0160309 0.102777 0 -0.00401109 0.0346095 0 -0.00853284 0.0689557 0 -0.0112012 0.104071 0 0.0025 -9.84861e-17 0 0.000969888 0.0350453 0 -0.0036088 0.0698239 0 -0.0036088 -0.0698239 0 0.000969888 -0.0350453 0 -0.0112012 -0.104071 0 -0.0112012 -0.104071 0.001 0.0025 -9.84861e-17 0.001 -0.0036088 -0.0698239 0.001 0.000969888 -0.0350453 0.001 0.0025 -9.84861e-17 0 -0.0036088 -0.0698239 0 0.000969888 -0.0350453 0 -0.0160309 -0.102777 0.001 -0.0112012 -0.104071 0.001 -0.0025 -9.72614e-17 0.001 -0.00853284 -0.0689557 0.001 -0.00401109 -0.0346095 0.001 -0.0160309 0.102777 0.001 -0.00401109 0.0346095 0.001 -0.00853284 0.0689557 0.001 -0.0112012 0.104071 0.001 0.0025 -9.84861e-17 0.001 0.000969888 0.0350453 0.001 -0.0036088 0.0698239 0.001 -0.0036088 -0.0698239 0.001 0.000969888 -0.0350453 0.001 -0.0160309 -0.102777 0 -0.0160309 -0.102777 0.001 -0.0025 -9.72614e-17 0.001 -0.00853284 -0.0689557 0.001 -0.00401109 -0.0346095 0.001 -0.0025 -9.72614e-17 0 -0.00853284 -0.0689557 0 -0.00401109 -0.0346095 0 -0.0025 -9.72614e-17 0 -0.0025 -9.72614e-17 0.001 -0.0160309 0.102777 0.001 -0.00401109 0.0346095 0.001 -0.00853284 0.0689557 0.001 -0.0160309 0.102777 0 -0.00401109 0.0346095 0 -0.00853284 0.0689557 0 -0.0160309 0.102777 0 -0.0112012 0.104071 0 -0.0112012 0.104071 0.001 -0.0160309 0.102777 0.001 0.0025 -9.84861e-17 0 0.0025 -9.84861e-17 0.001 -0.0112012 0.104071 0.001 0.000969888 0.0350453 0.001 -0.0036088 0.0698239 0.001 -0.0112012 0.104071 0 0.000969888 0.0350453 0 -0.0036088 0.0698239 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="39">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0162421 -0.104382 0 -0.0114125 -0.105676 0 -0.0114125 -0.105676 0.001 -0.0162421 -0.104382 0.001 -0.0162421 -0.104382 0 -0.0114125 -0.105676 0 -0.0025 -9.878e-17 0 -0.00862703 -0.0700323 0 -0.00403468 -0.0351499 0 -0.0162421 0.104382 0 -0.00403468 0.0351499 0 -0.00862703 0.0700323 0 -0.0114125 0.105676 0 0.0025 -1.00005e-16 0 0.000946295 0.0355857 0 -0.00370299 0.0709006 0 -0.00370299 -0.0709006 0 0.000946295 -0.0355857 0 -0.0114125 -0.105676 0 -0.0114125 -0.105676 0.001 0.0025 -1.00005e-16 0.001 -0.00370299 -0.0709006 0.001 0.000946295 -0.0355857 0.001 0.0025 -1.00005e-16 0 -0.00370299 -0.0709006 0 0.000946295 -0.0355857 0 -0.0162421 -0.104382 0.001 -0.0114125 -0.105676 0.001 -0.0025 -9.878e-17 0.001 -0.00862703 -0.0700323 0.001 -0.00403468 -0.0351499 0.001 -0.0162421 0.104382 0.001 -0.00403468 0.0351499 0.001 -0.00862703 0.0700323 0.001 -0.0114125 0.105676 0.001 0.0025 -1.00005e-16 0.001 0.000946295 0.0355857 0.001 -0.00370299 0.0709006 0.001 -0.00370299 -0.0709006 0.001 0.000946295 -0.0355857 0.001 -0.0162421 -0.104382 0 -0.0162421 -0.104382 0.001 -0.0025 -9.878e-17 0.001 -0.00862703 -0.0700323 0.001 -0.00403468 -0.0351499 0.001 -0.0025 -9.878e-17 0 -0.00862703 -0.0700323 0 -0.00403468 -0.0351499 0 -0.0025 -9.878e-17 0 -0.0025 -9.878e-17 0.001 -0.0162421 0.104382 0.001 -0.00403468 0.0351499 0.001 -0.00862703 0.0700323 0.001 -0.0162421 0.104382 0 -0.00403468 0.0351499 0 -0.00862703 0.0700323 0 -0.0162421 0.104382 0 -0.0114125 0.105676 0 -0.0114125 0.105676 0.001 -0.0162421 0.104382 0.001 0.0025 -1.00005e-16 0 0.0025 -1.00005e-16 0.001 -0.0114125 0.105676 0.001 0.000946295 0.0355857 0.001 -0.00370299 0.0709006 0.001 -0.0114125 0.105676 0 0.000946295 0.0355857 0 -0.00370299 0.0709006 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="40">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0163648 -0.105313 0 -0.0115352 -0.106608 0 -0.0115352 -0.106608 0.001 -0.0163648 -0.105313 0.001 -0.0163648 -0.105313 0 -0.0115352 -0.106608 0 -0.0025 -9.96618e-17 0 -0.00868173 -0.0706574 0 -0.00404838 -0.0354637 0 -0.0163648 0.105313 0 -0.00404838 0.0354637 0 -0.00868173 0.0706574 0 -0.0115352 0.106608 0 0.0025 -1.00886e-16 0 0.000932596 0.0358995 0 -0.00375769 0.0715257 0 -0.00375769 -0.0715257 0 0.000932596 -0.0358995 0 -0.0115352 -0.106608 0 -0.0115352 -0.106608 0.001 0.0025 -1.00886e-16 0.001 -0.00375769 -0.0715257 0.001 0.000932596 -0.0358995 0.001 0.0025 -1.00886e-16 0 -0.00375769 -0.0715257 0 0.000932596 -0.0358995 0 -0.0163648 -0.105313 0.001 -0.0115352 -0.106608 0.001 -0.0025 -9.96618e-17 0.001 -0.00868173 -0.0706574 0.001 -0.00404838 -0.0354637 0.001 -0.0163648 0.105313 0.001 -0.00404838 0.0354637 0.001 -0.00868173 0.0706574 0.001 -0.0115352 0.106608 0.001 0.0025 -1.00886e-16 0.001 0.000932596 0.0358995 0.001 -0.00375769 0.0715257 0.001 -0.00375769 -0.0715257 0.001 0.000932596 -0.0358995 0.001 -0.0163648 -0.105313 0 -0.0163648 -0.105313 0.001 -0.0025 -9.96618e-17 0.001 -0.00868173 -0.0706574 0.001 -0.00404838 -0.0354637 0.001 -0.0025 -9.96618e-17 0 -0.00868173 -0.0706574 0 -0.00404838 -0.0354637 0 -0.0025 -9.96618e-17 0 -0.0025 -9.96618e-17 0.001 -0.0163648 0.105313 0.001 -0.00404838 0.0354637 0.001 -0.00868173 0.0706574 0.001 -0.0163648 0.105313 0 -0.00404838 0.0354637 0 -0.00868173 0.0706574 0 -0.0163648 0.105313 0 -0.0115352 0.106608 0 -0.0115352 0.106608 0.001 -0.0163648 0.105313 0.001 0.0025 -1.00886e-16 0 0.0025 -1.00886e-16 0.001 -0.0115352 0.106608 0.001 0.000932596 0.0358995 0.001 -0.00375769 0.0715257 0.001 -0.0115352 0.106608 0 0.000932596 0.0358995 0 -0.00375769 0.0715257 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="41">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.016576 -0.106918 0 -0.0117464 -0.108212 0 -0.0117464 -0.108212 0.001 -0.016576 -0.106918 0.001 -0.016576 -0.106918 0 -0.0117464 -0.108212 0 -0.0025 -1.0118e-16 0 -0.00877592 -0.0717341 0 -0.00407197 -0.036004 0 -0.016576 0.106918 0 -0.00407197 0.036004 0 -0.00877592 0.0717341 0 -0.0117464 0.108212 0 0.0025 -1.02405e-16 0 0.000909003 0.0364398 0 -0.00385188 0.0726023 0 -0.00385188 -0.0726023 0 0.000909003 -0.0364398 0 -0.0117464 -0.108212 0 -0.0117464 -0.108212 0.001 0.0025 -1.02405e-16 0.001 -0.00385188 -0.0726023 0.001 0.000909003 -0.0364398 0.001 0.0025 -1.02405e-16 0 -0.00385188 -0.0726023 0 0.000909003 -0.0364398 0 -0.016576 -0.106918 0.001 -0.0117464 -0.108212 0.001 -0.0025 -1.0118e-16 0.001 -0.00877592 -0.0717341 0.001 -0.00407197 -0.036004 0.001 -0.016576 0.106918 0.001 -0.00407197 0.036004 0.001 -0.00877592 0.0717341 0.001 -0.0117464 0.108212 0.001 0.0025 -1.02405e-16 0.001 0.000909003 0.0364398 0.001 -0.00385188 0.0726023 0.001 -0.00385188 -0.0726023 0.001 0.000909003 -0.0364398 0.001 -0.016576 -0.106918 0 -0.016576 -0.106918 0.001 -0.0025 -1.0118e-16 0.001 -0.00877592 -0.0717341 0.001 -0.00407197 -0.036004 0.001 -0.0025 -1.0118e-16 0 -0.00877592 -0.0717341 0 -0.00407197 -0.036004 0 -0.0025 -1.0118e-16 0 -0.0025 -1.0118e-16 0.001 -0.016576 0.106918 0.001 -0.00407197 0.036004 0.001 -0.00877592 0.0717341 0.001 -0.016576 0.106918 0 -0.00407197 0.036004 0 -0.00877592 0.0717341 0 -0.016576 0.106918 0 -0.0117464 0.108212 0 -0.0117464 0.108212 0.001 -0.016576 0.106918 0.001 0.0025 -1.02405e-16 0 0.0025 -1.02405e-16 0.001 -0.0117464 0.108212 0.001 0.000909003 0.0364398 0.001 -0.00385188 0.0726023 0.001 -0.0117464 0.108212 0 0.000909003 0.0364398 0 -0.00385188 0.0726023 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="42">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0166987 -0.10785 0 -0.0118691 -0.109144 0 -0.0118691 -0.109144 0.001 -0.0166987 -0.10785 0.001 -0.0166987 -0.10785 0 -0.0118691 -0.109144 0 -0.0025 -1.02062e-16 0 -0.00883061 -0.0723592 0 -0.00408567 -0.0363178 0 -0.0166987 0.10785 0 -0.00408567 0.0363178 0 -0.00883061 0.0723592 0 -0.0118691 0.109144 0 0.0025 -1.03287e-16 0 0.000895304 0.0367536 0 -0.00390657 0.0732274 0 -0.00390657 -0.0732274 0 0.000895304 -0.0367536 0 -0.0118691 -0.109144 0 -0.0118691 -0.109144 0.001 0.0025 -1.03287e-16 0.001 -0.00390657 -0.0732274 0.001 0.000895304 -0.0367536 0.001 0.0025 -1.03287e-16 0 -0.00390657 -0.0732274 0 0.000895304 -0.0367536 0 -0.0166987 -0.10785 0.001 -0.0118691 -0.109144 0.001 -0.0025 -1.02062e-16 0.001 -0.00883061 -0.0723592 0.001 -0.00408567 -0.0363178 0.001 -0.0166987 0.10785 0.001 -0.00408567 0.0363178 0.001 -0.00883061 0.0723592 0.001 -0.0118691 0.109144 0.001 0.0025 -1.03287e-16 0.001 0.000895304 0.0367536 0.001 -0.00390657 0.0732274 0.001 -0.00390657 -0.0732274 0.001 0.000895304 -0.0367536 0.001 -0.0166987 -0.10785 0 -0.0166987 -0.10785 0.001 -0.0025 -1.02062e-16 0.001 -0.00883061 -0.0723592 0.001 -0.00408567 -0.0363178 0.001 -0.0025 -1.02062e-16 0 -0.00883061 -0.0723592 0 -0.00408567 -0.0363178 0 -0.0025 -1.02062e-16 0 -0.0025 -1.02062e-16 0.001 -0.0166987 0.10785 0.001 -0.00408567 0.0363178 0.001 -0.00883061 0.0723592 0.001 -0.0166987 0.10785 0 -0.00408567 0.0363178 0 -0.00883061 0.0723592 0 -0.0166987 0.10785 0 -0.0118691 0.109144 0 -0.0118691 0.109144 0.001 -0.0166987 0.10785 0.001 0.0025 -1.03287e-16 0 0.0025 -1.03287e-16 0.001 -0.0118691 0.109144 0.001 0.000895304 0.0367536 0.001 -0.00390657 0.0732274 0.001 -0.0118691 0.109144 0 0.000895304 0.0367536 0 -0.00390657 0.0732274 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="43">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0169134 -0.10948 0 -0.0120837 -0.110775 0 -0.0120837 -0.110775 0.001 -0.0169134 -0.10948 0.001 -0.0169134 -0.10948 0 -0.0120837 -0.110775 0 -0.0025 -1.03605e-16 0 -0.00892632 -0.0734532 0 -0.00410964 -0.0368669 0 -0.0169134 0.10948 0 -0.00410964 0.0368669 0 -0.00892632 0.0734532 0 -0.0120837 0.110775 0 0.0025 -1.0483e-16 0 0.000871331 0.0373027 0 -0.00400228 0.0743214 0 -0.00400228 -0.0743214 0 0.000871331 -0.0373027 0 -0.0120837 -0.110775 0 -0.0120837 -0.110775 0.001 0.0025 -1.0483e-16 0.001 -0.00400228 -0.0743214 0.001 0.000871331 -0.0373027 0.001 0.0025 -1.0483e-16 0 -0.00400228 -0.0743214 0 0.000871331 -0.0373027 0 -0.0169134 -0.10948 0.001 -0.0120837 -0.110775 0.001 -0.0025 -1.03605e-16 0.001 -0.00892632 -0.0734532 0.001 -0.00410964 -0.0368669 0.001 -0.0169134 0.10948 0.001 -0.00410964 0.0368669 0.001 -0.00892632 0.0734532 0.001 -0.0120837 0.110775 0.001 0.0025 -1.0483e-16 0.001 0.000871331 0.0373027 0.001 -0.00400228 0.0743214 0.001 -0.00400228 -0.0743214 0.001 0.000871331 -0.0373027 0.001 -0.0169134 -0.10948 0 -0.0169134 -0.10948 0.001 -0.0025 -1.03605e-16 0.001 -0.00892632 -0.0734532 0.001 -0.00410964 -0.0368669 0.001 -0.0025 -1.03605e-16 0 -0.00892632 -0.0734532 0 -0.00410964 -0.0368669 0 -0.0025 -1.03605e-16 0 -0.0025 -1.03605e-16 0.001 -0.0169134 0.10948 0.001 -0.00410964 0.0368669 0.001 -0.00892632 0.0734532 0.001 -0.0169134 0.10948 0 -0.00410964 0.0368669 0 -0.00892632 0.0734532 0 -0.0169134 0.10948 0 -0.0120837 0.110775 0 -0.0120837 0.110775 0.001 -0.0169134 0.10948 0.001 0.0025 -1.0483e-16 0 0.0025 -1.0483e-16 0.001 -0.0120837 0.110775 0.001 0.000871331 0.0373027 0.001 -0.00400228 0.0743214 0.001 -0.0120837 0.110775 0 0.000871331 0.0373027 0 -0.00400228 0.0743214 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="44">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0170326 -0.110386 0 -0.012203 -0.11168 0 -0.012203 -0.11168 0.001 -0.0170326 -0.110386 0.001 -0.0170326 -0.110386 0 -0.012203 -0.11168 0 -0.0025 -1.04462e-16 0 -0.00897949 -0.0740609 0 -0.00412296 -0.0371719 0 -0.0170326 0.110386 0 -0.00412296 0.0371719 0 -0.00897949 0.0740609 0 -0.012203 0.11168 0 0.0025 -1.05687e-16 0 0.000858012 0.0376077 0 -0.00405545 0.0749292 0 -0.00405545 -0.0749292 0 0.000858012 -0.0376077 0 -0.012203 -0.11168 0 -0.012203 -0.11168 0.001 0.0025 -1.05687e-16 0.001 -0.00405545 -0.0749292 0.001 0.000858012 -0.0376077 0.001 0.0025 -1.05687e-16 0 -0.00405545 -0.0749292 0 0.000858012 -0.0376077 0 -0.0170326 -0.110386 0.001 -0.012203 -0.11168 0.001 -0.0025 -1.04462e-16 0.001 -0.00897949 -0.0740609 0.001 -0.00412296 -0.0371719 0.001 -0.0170326 0.110386 0.001 -0.00412296 0.0371719 0.001 -0.00897949 0.0740609 0.001 -0.012203 0.11168 0.001 0.0025 -1.05687e-16 0.001 0.000858012 0.0376077 0.001 -0.00405545 0.0749292 0.001 -0.00405545 -0.0749292 0.001 0.000858012 -0.0376077 0.001 -0.0170326 -0.110386 0 -0.0170326 -0.110386 0.001 -0.0025 -1.04462e-16 0.001 -0.00897949 -0.0740609 0.001 -0.00412296 -0.0371719 0.001 -0.0025 -1.04462e-16 0 -0.00897949 -0.0740609 0 -0.00412296 -0.0371719 0 -0.0025 -1.04462e-16 0 -0.0025 -1.04462e-16 0.001 -0.0170326 0.110386 0.001 -0.00412296 0.0371719 0.001 -0.00897949 0.0740609 0.001 -0.0170326 0.110386 0 -0.00412296 0.0371719 0 -0.00897949 0.0740609 0 -0.0170326 0.110386 0 -0.012203 0.11168 0 -0.012203 0.11168 0.001 -0.0170326 0.110386 0.001 0.0025 -1.05687e-16 0 0.0025 -1.05687e-16 0.001 -0.012203 0.11168 0.001 0.000858012 0.0376077 0.001 -0.00405545 0.0749292 0.001 -0.012203 0.11168 0 0.000858012 0.0376077 0 -0.00405545 0.0749292 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="45">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0172473 -0.112017 0 -0.0124177 -0.113311 0 -0.0124177 -0.113311 0.001 -0.0172473 -0.112017 0.001 -0.0172473 -0.112017 0 -0.0124177 -0.113311 0 -0.0025 -1.06005e-16 0 -0.0090752 -0.0751549 0 -0.00414693 -0.037721 0 -0.0172473 0.112017 0 -0.00414693 0.037721 0 -0.0090752 0.0751549 0 -0.0124177 0.113311 0 0.0025 -1.0723e-16 0 0.000834039 0.0381568 0 -0.00415117 0.0760232 0 -0.00415117 -0.0760232 0 0.000834039 -0.0381568 0 -0.0124177 -0.113311 0 -0.0124177 -0.113311 0.001 0.0025 -1.0723e-16 0.001 -0.00415117 -0.0760232 0.001 0.000834039 -0.0381568 0.001 0.0025 -1.0723e-16 0 -0.00415117 -0.0760232 0 0.000834039 -0.0381568 0 -0.0172473 -0.112017 0.001 -0.0124177 -0.113311 0.001 -0.0025 -1.06005e-16 0.001 -0.0090752 -0.0751549 0.001 -0.00414693 -0.037721 0.001 -0.0172473 0.112017 0.001 -0.00414693 0.037721 0.001 -0.0090752 0.0751549 0.001 -0.0124177 0.113311 0.001 0.0025 -1.0723e-16 0.001 0.000834039 0.0381568 0.001 -0.00415117 0.0760232 0.001 -0.00415117 -0.0760232 0.001 0.000834039 -0.0381568 0.001 -0.0172473 -0.112017 0 -0.0172473 -0.112017 0.001 -0.0025 -1.06005e-16 0.001 -0.0090752 -0.0751549 0.001 -0.00414693 -0.037721 0.001 -0.0025 -1.06005e-16 0 -0.0090752 -0.0751549 0 -0.00414693 -0.037721 0 -0.0025 -1.06005e-16 0 -0.0025 -1.06005e-16 0.001 -0.0172473 0.112017 0.001 -0.00414693 0.037721 0.001 -0.0090752 0.0751549 0.001 -0.0172473 0.112017 0 -0.00414693 0.037721 0 -0.0090752 0.0751549 0 -0.0172473 0.112017 0 -0.0124177 0.113311 0 -0.0124177 0.113311 0.001 -0.0172473 0.112017 0.001 0.0025 -1.0723e-16 0 0.0025 -1.0723e-16 0.001 -0.0124177 0.113311 0.001 0.000834039 0.0381568 0.001 -0.00415117 0.0760232 0.001 -0.0124177 0.113311 0 0.000834039 0.0381568 0 -0.00415117 0.0760232 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="46">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0173666 -0.112923 0 -0.0125369 -0.114217 0 -0.0125369 -0.114217 0.001 -0.0173666 -0.112923 0.001 -0.0173666 -0.112923 0 -0.0125369 -0.114217 0 -0.0025 -1.06863e-16 0 -0.00912838 -0.0757627 0 -0.00416025 -0.0380261 0 -0.0173666 0.112923 0 -0.00416025 0.0380261 0 -0.00912838 0.0757627 0 -0.0125369 0.114217 0 0.0025 -1.08087e-16 0 0.00082072 0.0384618 0 -0.00420434 0.0766309 0 -0.00420434 -0.0766309 0 0.00082072 -0.0384618 0 -0.0125369 -0.114217 0 -0.0125369 -0.114217 0.001 0.0025 -1.08087e-16 0.001 -0.00420434 -0.0766309 0.001 0.00082072 -0.0384618 0.001 0.0025 -1.08087e-16 0 -0.00420434 -0.0766309 0 0.00082072 -0.0384618 0 -0.0173666 -0.112923 0.001 -0.0125369 -0.114217 0.001 -0.0025 -1.06863e-16 0.001 -0.00912838 -0.0757627 0.001 -0.00416025 -0.0380261 0.001 -0.0173666 0.112923 0.001 -0.00416025 0.0380261 0.001 -0.00912838 0.0757627 0.001 -0.0125369 0.114217 0.001 0.0025 -1.08087e-16 0.001 0.00082072 0.0384618 0.001 -0.00420434 0.0766309 0.001 -0.00420434 -0.0766309 0.001 0.00082072 -0.0384618 0.001 -0.0173666 -0.112923 0 -0.0173666 -0.112923 0.001 -0.0025 -1.06863e-16 0.001 -0.00912838 -0.0757627 0.001 -0.00416025 -0.0380261 0.001 -0.0025 -1.06863e-16 0 -0.00912838 -0.0757627 0 -0.00416025 -0.0380261 0 -0.0025 -1.06863e-16 0 -0.0025 -1.06863e-16 0.001 -0.0173666 0.112923 0.001 -0.00416025 0.0380261 0.001 -0.00912838 0.0757627 0.001 -0.0173666 0.112923 0 -0.00416025 0.0380261 0 -0.00912838 0.0757627 0 -0.0173666 0.112923 0 -0.0125369 0.114217 0 -0.0125369 0.114217 0.001 -0.0173666 0.112923 0.001 0.0025 -1.08087e-16 0 0.0025 -1.08087e-16 0.001 -0.0125369 0.114217 0.001 0.00082072 0.0384618 0.001 -0.00420434 0.0766309 0.001 -0.0125369 0.114217 0 0.00082072 0.0384618 0 -0.00420434 0.0766309 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="47">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0175812 -0.114553 0 -0.0127516 -0.115847 0 -0.0127516 -0.115847 0.001 -0.0175812 -0.114553 0.001 -0.0175812 -0.114553 0 -0.0127516 -0.115847 0 -0.0025 -1.08406e-16 0 -0.00922409 -0.0768567 0 -0.00418423 -0.0385751 0 -0.0175812 0.114553 0 -0.00418423 0.0385751 0 -0.00922409 0.0768567 0 -0.0127516 0.115847 0 0.0025 -1.0963e-16 0 0.000796747 0.0390109 0 -0.00430005 0.0777249 0 -0.00430005 -0.0777249 0 0.000796747 -0.0390109 0 -0.0127516 -0.115847 0 -0.0127516 -0.115847 0.001 0.0025 -1.0963e-16 0.001 -0.00430005 -0.0777249 0.001 0.000796747 -0.0390109 0.001 0.0025 -1.0963e-16 0 -0.00430005 -0.0777249 0 0.000796747 -0.0390109 0 -0.0175812 -0.114553 0.001 -0.0127516 -0.115847 0.001 -0.0025 -1.08406e-16 0.001 -0.00922409 -0.0768567 0.001 -0.00418423 -0.0385751 0.001 -0.0175812 0.114553 0.001 -0.00418423 0.0385751 0.001 -0.00922409 0.0768567 0.001 -0.0127516 0.115847 0.001 0.0025 -1.0963e-16 0.001 0.000796747 0.0390109 0.001 -0.00430005 0.0777249 0.001 -0.00430005 -0.0777249 0.001 0.000796747 -0.0390109 0.001 -0.0175812 -0.114553 0 -0.0175812 -0.114553 0.001 -0.0025 -1.08406e-16 0.001 -0.00922409 -0.0768567 0.001 -0.00418423 -0.0385751 0.001 -0.0025 -1.08406e-16 0 -0.00922409 -0.0768567 0 -0.00418423 -0.0385751 0 -0.0025 -1.08406e-16 0 -0.0025 -1.08406e-16 0.001 -0.0175812 0.114553 0.001 -0.00418423 0.0385751 0.001 -0.00922409 0.0768567 0.001 -0.0175812 0.114553 0 -0.00418423 0.0385751 0 -0.00922409 0.0768567 0 -0.0175812 0.114553 0 -0.0127516 0.115847 0 -0.0127516 0.115847 0.001 -0.0175812 0.114553 0.001 0.0025 -1.0963e-16 0 0.0025 -1.0963e-16 0.001 -0.0127516 0.115847 0.001 0.000796747 0.0390109 0.001 -0.00430005 0.0777249 0.001 -0.0127516 0.115847 0 0.000796747 0.0390109 0 -0.00430005 0.0777249 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="21">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0132095 -0.0813468 0 -0.00837988 -0.0826409 0 -0.00837988 -0.0826409 0.001 -0.0132095 -0.0813468 0.001 -0.0132095 -0.0813468 0 -0.00837988 -0.0826409 0 -0.0025 -7.69813e-17 0 -0.00727492 -0.0545776 0 -0.00369601 -0.027393 0 -0.0132095 0.0813468 0 -0.00369601 0.027393 0 -0.00727492 0.0545776 0 -0.00837988 0.0826409 0 0.0025 -7.82059e-17 0 0.00128497 0.0278288 0 -0.00235088 0.0554459 0 -0.00235088 -0.0554459 0 0.00128497 -0.0278288 0 -0.00837988 -0.0826409 0 -0.00837988 -0.0826409 0.001 0.0025 -7.82059e-17 0.001 -0.00235088 -0.0554459 0.001 0.00128497 -0.0278288 0.001 0.0025 -7.82059e-17 0 -0.00235088 -0.0554459 0 0.00128497 -0.0278288 0 -0.0132095 -0.0813468 0.001 -0.00837988 -0.0826409 0.001 -0.0025 -7.69813e-17 0.001 -0.00727492 -0.0545776 0.001 -0.00369601 -0.027393 0.001 -0.0132095 0.0813468 0.001 -0.00369601 0.027393 0.001 -0.00727492 0.0545776 0.001 -0.00837988 0.0826409 0.001 0.0025 -7.82059e-17 0.001 0.00128497 0.0278288 0.001 -0.00235088 0.0554459 0.001 -0.00235088 -0.0554459 0.001 0.00128497 -0.0278288 0.001 -0.0132095 -0.0813468 0 -0.0132095 -0.0813468 0.001 -0.0025 -7.69813e-17 0.001 -0.00727492 -0.0545776 0.001 -0.00369601 -0.027393 0.001 -0.0025 -7.69813e-17 0 -0.00727492 -0.0545776 0 -0.00369601 -0.027393 0 -0.0025 -7.69813e-17 0 -0.0025 -7.69813e-17 0.001 -0.0132095 0.0813468 0.001 -0.00369601 0.027393 0.001 -0.00727492 0.0545776 0.001 -0.0132095 0.0813468 0 -0.00369601 0.027393 0 -0.00727492 0.0545776 0 -0.0132095 0.0813468 0 -0.00837988 0.0826409 0 -0.00837988 0.0826409 0.001 -0.0132095 0.0813468 0.001 0.0025 -7.82059e-17 0 0.0025 -7.82059e-17 0.001 -0.00837988 0.0826409 0.001 0.00128497 0.0278288 0.001 -0.00235088 0.0554459 0.001 -0.00837988 0.0826409 0 0.00128497 0.0278288 0 -0.00235088 0.0554459 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="48">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0177005 -0.115459 0 -0.0128709 -0.116753 0 -0.0128709 -0.116753 0.001 -0.0177005 -0.115459 0.001 -0.0177005 -0.115459 0 -0.0128709 -0.116753 0 -0.0025 -1.09263e-16 0 -0.00927726 -0.0774645 0 -0.00419755 -0.0388802 0 -0.0177005 0.115459 0 -0.00419755 0.0388802 0 -0.00927726 0.0774645 0 -0.0128709 0.116753 0 0.0025 -1.10488e-16 0 0.000783428 0.039316 0 -0.00435322 0.0783327 0 -0.00435322 -0.0783327 0 0.000783428 -0.039316 0 -0.0128709 -0.116753 0 -0.0128709 -0.116753 0.001 0.0025 -1.10488e-16 0.001 -0.00435322 -0.0783327 0.001 0.000783428 -0.039316 0.001 0.0025 -1.10488e-16 0 -0.00435322 -0.0783327 0 0.000783428 -0.039316 0 -0.0177005 -0.115459 0.001 -0.0128709 -0.116753 0.001 -0.0025 -1.09263e-16 0.001 -0.00927726 -0.0774645 0.001 -0.00419755 -0.0388802 0.001 -0.0177005 0.115459 0.001 -0.00419755 0.0388802 0.001 -0.00927726 0.0774645 0.001 -0.0128709 0.116753 0.001 0.0025 -1.10488e-16 0.001 0.000783428 0.039316 0.001 -0.00435322 0.0783327 0.001 -0.00435322 -0.0783327 0.001 0.000783428 -0.039316 0.001 -0.0177005 -0.115459 0 -0.0177005 -0.115459 0.001 -0.0025 -1.09263e-16 0.001 -0.00927726 -0.0774645 0.001 -0.00419755 -0.0388802 0.001 -0.0025 -1.09263e-16 0 -0.00927726 -0.0774645 0 -0.00419755 -0.0388802 0 -0.0025 -1.09263e-16 0 -0.0025 -1.09263e-16 0.001 -0.0177005 0.115459 0.001 -0.00419755 0.0388802 0.001 -0.00927726 0.0774645 0.001 -0.0177005 0.115459 0 -0.00419755 0.0388802 0 -0.00927726 0.0774645 0 -0.0177005 0.115459 0 -0.0128709 0.116753 0 -0.0128709 0.116753 0.001 -0.0177005 0.115459 0.001 0.0025 -1.10488e-16 0 0.0025 -1.10488e-16 0.001 -0.0128709 0.116753 0.001 0.000783428 0.039316 0.001 -0.00435322 0.0783327 0.001 -0.0128709 0.116753 0 0.000783428 0.039316 0 -0.00435322 0.0783327 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="49">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0179186 -0.117116 0 -0.0130889 -0.11841 0 -0.0130889 -0.11841 0.001 -0.0179186 -0.117116 0.001 -0.0179186 -0.117116 0 -0.0130889 -0.11841 0 -0.0025 -1.10831e-16 0 -0.00937449 -0.0785758 0 -0.0042219 -0.039438 0 -0.0179186 0.117116 0 -0.0042219 0.039438 0 -0.00937449 0.0785758 0 -0.0130889 0.11841 0 0.0025 -1.12055e-16 0 0.000759074 0.0398738 0 -0.00445045 0.079444 0 -0.00445045 -0.079444 0 0.000759074 -0.0398738 0 -0.0130889 -0.11841 0 -0.0130889 -0.11841 0.001 0.0025 -1.12055e-16 0.001 -0.00445045 -0.079444 0.001 0.000759074 -0.0398738 0.001 0.0025 -1.12055e-16 0 -0.00445045 -0.079444 0 0.000759074 -0.0398738 0 -0.0179186 -0.117116 0.001 -0.0130889 -0.11841 0.001 -0.0025 -1.10831e-16 0.001 -0.00937449 -0.0785758 0.001 -0.0042219 -0.039438 0.001 -0.0179186 0.117116 0.001 -0.0042219 0.039438 0.001 -0.00937449 0.0785758 0.001 -0.0130889 0.11841 0.001 0.0025 -1.12055e-16 0.001 0.000759074 0.0398738 0.001 -0.00445045 0.079444 0.001 -0.00445045 -0.079444 0.001 0.000759074 -0.0398738 0.001 -0.0179186 -0.117116 0 -0.0179186 -0.117116 0.001 -0.0025 -1.10831e-16 0.001 -0.00937449 -0.0785758 0.001 -0.0042219 -0.039438 0.001 -0.0025 -1.10831e-16 0 -0.00937449 -0.0785758 0 -0.0042219 -0.039438 0 -0.0025 -1.10831e-16 0 -0.0025 -1.10831e-16 0.001 -0.0179186 0.117116 0.001 -0.0042219 0.039438 0.001 -0.00937449 0.0785758 0.001 -0.0179186 0.117116 0 -0.0042219 0.039438 0 -0.00937449 0.0785758 0 -0.0179186 0.117116 0 -0.0130889 0.11841 0 -0.0130889 0.11841 0.001 -0.0179186 0.117116 0.001 0.0025 -1.12055e-16 0 0.0025 -1.12055e-16 0.001 -0.0130889 0.11841 0.001 0.000759074 0.0398738 0.001 -0.00445045 0.079444 0.001 -0.0130889 0.11841 0 0.000759074 0.0398738 0 -0.00445045 0.079444 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="50">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0180344 -0.117996 0 -0.0132048 -0.11929 0 -0.0132048 -0.11929 0.001 -0.0180344 -0.117996 0.001 -0.0180344 -0.117996 0 -0.0132048 -0.11929 0 -0.0025 -1.11663e-16 0 -0.00942615 -0.0791662 0 -0.00423484 -0.0397343 0 -0.0180344 0.117996 0 -0.00423484 0.0397343 0 -0.00942615 0.0791662 0 -0.0132048 0.11929 0 0.0025 -1.12888e-16 0 0.000746136 0.0401701 0 -0.00450211 0.0800344 0 -0.00450211 -0.0800344 0 0.000746136 -0.0401701 0 -0.0132048 -0.11929 0 -0.0132048 -0.11929 0.001 0.0025 -1.12888e-16 0.001 -0.00450211 -0.0800344 0.001 0.000746136 -0.0401701 0.001 0.0025 -1.12888e-16 0 -0.00450211 -0.0800344 0 0.000746136 -0.0401701 0 -0.0180344 -0.117996 0.001 -0.0132048 -0.11929 0.001 -0.0025 -1.11663e-16 0.001 -0.00942615 -0.0791662 0.001 -0.00423484 -0.0397343 0.001 -0.0180344 0.117996 0.001 -0.00423484 0.0397343 0.001 -0.00942615 0.0791662 0.001 -0.0132048 0.11929 0.001 0.0025 -1.12888e-16 0.001 0.000746136 0.0401701 0.001 -0.00450211 0.0800344 0.001 -0.00450211 -0.0800344 0.001 0.000746136 -0.0401701 0.001 -0.0180344 -0.117996 0 -0.0180344 -0.117996 0.001 -0.0025 -1.11663e-16 0.001 -0.00942615 -0.0791662 0.001 -0.00423484 -0.0397343 0.001 -0.0025 -1.11663e-16 0 -0.00942615 -0.0791662 0 -0.00423484 -0.0397343 0 -0.0025 -1.11663e-16 0 -0.0025 -1.11663e-16 0.001 -0.0180344 0.117996 0.001 -0.00423484 0.0397343 0.001 -0.00942615 0.0791662 0.001 -0.0180344 0.117996 0 -0.00423484 0.0397343 0 -0.00942615 0.0791662 0 -0.0180344 0.117996 0 -0.0132048 0.11929 0 -0.0132048 0.11929 0.001 -0.0180344 0.117996 0.001 0.0025 -1.12888e-16 0 0.0025 -1.12888e-16 0.001 -0.0132048 0.11929 0.001 0.000746136 0.0401701 0.001 -0.00450211 0.0800344 0.001 -0.0132048 0.11929 0 0.000746136 0.0401701 0 -0.00450211 0.0800344 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="51">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0182525 -0.119652 0 -0.0134229 -0.120946 0 -0.0134229 -0.120946 0.001 -0.0182525 -0.119652 0.001 -0.0182525 -0.119652 0 -0.0134229 -0.120946 0 -0.0025 -1.13231e-16 0 -0.00952338 -0.0802776 0 -0.00425919 -0.0402921 0 -0.0182525 0.119652 0 -0.00425919 0.0402921 0 -0.00952338 0.0802776 0 -0.0134229 0.120946 0 0.0025 -1.14455e-16 0 0.000721782 0.0407279 0 -0.00459934 0.0811458 0 -0.00459934 -0.0811458 0 0.000721782 -0.0407279 0 -0.0134229 -0.120946 0 -0.0134229 -0.120946 0.001 0.0025 -1.14455e-16 0.001 -0.00459934 -0.0811458 0.001 0.000721782 -0.0407279 0.001 0.0025 -1.14455e-16 0 -0.00459934 -0.0811458 0 0.000721782 -0.0407279 0 -0.0182525 -0.119652 0.001 -0.0134229 -0.120946 0.001 -0.0025 -1.13231e-16 0.001 -0.00952338 -0.0802776 0.001 -0.00425919 -0.0402921 0.001 -0.0182525 0.119652 0.001 -0.00425919 0.0402921 0.001 -0.00952338 0.0802776 0.001 -0.0134229 0.120946 0.001 0.0025 -1.14455e-16 0.001 0.000721782 0.0407279 0.001 -0.00459934 0.0811458 0.001 -0.00459934 -0.0811458 0.001 0.000721782 -0.0407279 0.001 -0.0182525 -0.119652 0 -0.0182525 -0.119652 0.001 -0.0025 -1.13231e-16 0.001 -0.00952338 -0.0802776 0.001 -0.00425919 -0.0402921 0.001 -0.0025 -1.13231e-16 0 -0.00952338 -0.0802776 0 -0.00425919 -0.0402921 0 -0.0025 -1.13231e-16 0 -0.0025 -1.13231e-16 0.001 -0.0182525 0.119652 0.001 -0.00425919 0.0402921 0.001 -0.00952338 0.0802776 0.001 -0.0182525 0.119652 0 -0.00425919 0.0402921 0 -0.00952338 0.0802776 0 -0.0182525 0.119652 0 -0.0134229 0.120946 0 -0.0134229 0.120946 0.001 -0.0182525 0.119652 0.001 0.0025 -1.14455e-16 0 0.0025 -1.14455e-16 0.001 -0.0134229 0.120946 0.001 0.000721782 0.0407279 0.001 -0.00459934 0.0811458 0.001 -0.0134229 0.120946 0 0.000721782 0.0407279 0 -0.00459934 0.0811458 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="52">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0183649 -0.120506 0 -0.0135353 -0.1218 0 -0.0135353 -0.1218 0.001 -0.0183649 -0.120506 0.001 -0.0183649 -0.120506 0 -0.0135353 -0.1218 0 -0.0025 -1.14039e-16 0 -0.00957351 -0.0808506 0 -0.00427175 -0.0405797 0 -0.0183649 0.120506 0 -0.00427175 0.0405797 0 -0.00957351 0.0808506 0 -0.0135353 0.1218 0 0.0025 -1.15264e-16 0 0.000709225 0.0410155 0 -0.00464947 0.0817188 0 -0.00464947 -0.0817188 0 0.000709225 -0.0410155 0 -0.0135353 -0.1218 0 -0.0135353 -0.1218 0.001 0.0025 -1.15264e-16 0.001 -0.00464947 -0.0817188 0.001 0.000709225 -0.0410155 0.001 0.0025 -1.15264e-16 0 -0.00464947 -0.0817188 0 0.000709225 -0.0410155 0 -0.0183649 -0.120506 0.001 -0.0135353 -0.1218 0.001 -0.0025 -1.14039e-16 0.001 -0.00957351 -0.0808506 0.001 -0.00427175 -0.0405797 0.001 -0.0183649 0.120506 0.001 -0.00427175 0.0405797 0.001 -0.00957351 0.0808506 0.001 -0.0135353 0.1218 0.001 0.0025 -1.15264e-16 0.001 0.000709225 0.0410155 0.001 -0.00464947 0.0817188 0.001 -0.00464947 -0.0817188 0.001 0.000709225 -0.0410155 0.001 -0.0183649 -0.120506 0 -0.0183649 -0.120506 0.001 -0.0025 -1.14039e-16 0.001 -0.00957351 -0.0808506 0.001 -0.00427175 -0.0405797 0.001 -0.0025 -1.14039e-16 0 -0.00957351 -0.0808506 0 -0.00427175 -0.0405797 0 -0.0025 -1.14039e-16 0 -0.0025 -1.14039e-16 0.001 -0.0183649 0.120506 0.001 -0.00427175 0.0405797 0.001 -0.00957351 0.0808506 0.001 -0.0183649 0.120506 0 -0.00427175 0.0405797 0 -0.00957351 0.0808506 0 -0.0183649 0.120506 0 -0.0135353 0.1218 0 -0.0135353 0.1218 0.001 -0.0183649 0.120506 0.001 0.0025 -1.15264e-16 0 0.0025 -1.15264e-16 0.001 -0.0135353 0.1218 0.001 0.000709225 0.0410155 0.001 -0.00464947 0.0817188 0.001 -0.0135353 0.1218 0 0.000709225 0.0410155 0 -0.00464947 0.0817188 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="53">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0185864 -0.122188 0 -0.0137568 -0.123483 0 -0.0137568 -0.123483 0.001 -0.0185864 -0.122188 0.001 -0.0185864 -0.122188 0 -0.0137568 -0.123483 0 -0.0025 -1.15631e-16 0 -0.00967226 -0.0819793 0 -0.00429648 -0.0411462 0 -0.0185864 0.122188 0 -0.00429648 0.0411462 0 -0.00967226 0.0819793 0 -0.0137568 0.123483 0 0.0025 -1.16856e-16 0 0.00068449 0.041582 0 -0.00474822 0.0828475 0 -0.00474822 -0.0828475 0 0.00068449 -0.041582 0 -0.0137568 -0.123483 0 -0.0137568 -0.123483 0.001 0.0025 -1.16856e-16 0.001 -0.00474822 -0.0828475 0.001 0.00068449 -0.041582 0.001 0.0025 -1.16856e-16 0 -0.00474822 -0.0828475 0 0.00068449 -0.041582 0 -0.0185864 -0.122188 0.001 -0.0137568 -0.123483 0.001 -0.0025 -1.15631e-16 0.001 -0.00967226 -0.0819793 0.001 -0.00429648 -0.0411462 0.001 -0.0185864 0.122188 0.001 -0.00429648 0.0411462 0.001 -0.00967226 0.0819793 0.001 -0.0137568 0.123483 0.001 0.0025 -1.16856e-16 0.001 0.00068449 0.041582 0.001 -0.00474822 0.0828475 0.001 -0.00474822 -0.0828475 0.001 0.00068449 -0.041582 0.001 -0.0185864 -0.122188 0 -0.0185864 -0.122188 0.001 -0.0025 -1.15631e-16 0.001 -0.00967226 -0.0819793 0.001 -0.00429648 -0.0411462 0.001 -0.0025 -1.15631e-16 0 -0.00967226 -0.0819793 0 -0.00429648 -0.0411462 0 -0.0025 -1.15631e-16 0 -0.0025 -1.15631e-16 0.001 -0.0185864 0.122188 0.001 -0.00429648 0.0411462 0.001 -0.00967226 0.0819793 0.001 -0.0185864 0.122188 0 -0.00429648 0.0411462 0 -0.00967226 0.0819793 0 -0.0185864 0.122188 0 -0.0137568 0.123483 0 -0.0137568 0.123483 0.001 -0.0185864 0.122188 0.001 0.0025 -1.16856e-16 0 0.0025 -1.16856e-16 0.001 -0.0137568 0.123483 0.001 0.00068449 0.041582 0.001 -0.00474822 0.0828475 0.001 -0.0137568 0.123483 0 0.00068449 0.041582 0 -0.00474822 0.0828475 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="54">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0186989 -0.123043 0 -0.0138692 -0.124337 0 -0.0138692 -0.124337 0.001 -0.0186989 -0.123043 0.001 -0.0186989 -0.123043 0 -0.0138692 -0.124337 0 -0.0025 -1.16439e-16 0 -0.00972239 -0.0825523 0 -0.00430904 -0.0414338 0 -0.0186989 0.123043 0 -0.00430904 0.0414338 0 -0.00972239 0.0825523 0 -0.0138692 0.124337 0 0.0025 -1.17664e-16 0 0.000671933 0.0418696 0 -0.00479836 0.0834206 0 -0.00479836 -0.0834206 0 0.000671933 -0.0418696 0 -0.0138692 -0.124337 0 -0.0138692 -0.124337 0.001 0.0025 -1.17664e-16 0.001 -0.00479836 -0.0834206 0.001 0.000671933 -0.0418696 0.001 0.0025 -1.17664e-16 0 -0.00479836 -0.0834206 0 0.000671933 -0.0418696 0 -0.0186989 -0.123043 0.001 -0.0138692 -0.124337 0.001 -0.0025 -1.16439e-16 0.001 -0.00972239 -0.0825523 0.001 -0.00430904 -0.0414338 0.001 -0.0186989 0.123043 0.001 -0.00430904 0.0414338 0.001 -0.00972239 0.0825523 0.001 -0.0138692 0.124337 0.001 0.0025 -1.17664e-16 0.001 0.000671933 0.0418696 0.001 -0.00479836 0.0834206 0.001 -0.00479836 -0.0834206 0.001 0.000671933 -0.0418696 0.001 -0.0186989 -0.123043 0 -0.0186989 -0.123043 0.001 -0.0025 -1.16439e-16 0.001 -0.00972239 -0.0825523 0.001 -0.00430904 -0.0414338 0.001 -0.0025 -1.16439e-16 0 -0.00972239 -0.0825523 0 -0.00430904 -0.0414338 0 -0.0025 -1.16439e-16 0 -0.0025 -1.16439e-16 0.001 -0.0186989 0.123043 0.001 -0.00430904 0.0414338 0.001 -0.00972239 0.0825523 0.001 -0.0186989 0.123043 0 -0.00430904 0.0414338 0 -0.00972239 0.0825523 0 -0.0186989 0.123043 0 -0.0138692 0.124337 0 -0.0138692 0.124337 0.001 -0.0186989 0.123043 0.001 0.0025 -1.17664e-16 0 0.0025 -1.17664e-16 0.001 -0.0138692 0.124337 0.001 0.000671933 0.0418696 0.001 -0.00479836 0.0834206 0.001 -0.0138692 0.124337 0 0.000671933 0.0418696 0 -0.00479836 0.0834206 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="55">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0189203 -0.124725 0 -0.0140907 -0.126019 0 -0.0140907 -0.126019 0.001 -0.0189203 -0.124725 0.001 -0.0189203 -0.124725 0 -0.0140907 -0.126019 0 -0.0025 -1.18031e-16 0 -0.00982114 -0.0836811 0 -0.00433377 -0.0420004 0 -0.0189203 0.124725 0 -0.00433377 0.0420004 0 -0.00982114 0.0836811 0 -0.0140907 0.126019 0 0.0025 -1.19256e-16 0 0.000647199 0.0424361 0 -0.00489711 0.0845493 0 -0.00489711 -0.0845493 0 0.000647199 -0.0424361 0 -0.0140907 -0.126019 0 -0.0140907 -0.126019 0.001 0.0025 -1.19256e-16 0.001 -0.00489711 -0.0845493 0.001 0.000647199 -0.0424361 0.001 0.0025 -1.19256e-16 0 -0.00489711 -0.0845493 0 0.000647199 -0.0424361 0 -0.0189203 -0.124725 0.001 -0.0140907 -0.126019 0.001 -0.0025 -1.18031e-16 0.001 -0.00982114 -0.0836811 0.001 -0.00433377 -0.0420004 0.001 -0.0189203 0.124725 0.001 -0.00433377 0.0420004 0.001 -0.00982114 0.0836811 0.001 -0.0140907 0.126019 0.001 0.0025 -1.19256e-16 0.001 0.000647199 0.0424361 0.001 -0.00489711 0.0845493 0.001 -0.00489711 -0.0845493 0.001 0.000647199 -0.0424361 0.001 -0.0189203 -0.124725 0 -0.0189203 -0.124725 0.001 -0.0025 -1.18031e-16 0.001 -0.00982114 -0.0836811 0.001 -0.00433377 -0.0420004 0.001 -0.0025 -1.18031e-16 0 -0.00982114 -0.0836811 0 -0.00433377 -0.0420004 0 -0.0025 -1.18031e-16 0 -0.0025 -1.18031e-16 0.001 -0.0189203 0.124725 0.001 -0.00433377 0.0420004 0.001 -0.00982114 0.0836811 0.001 -0.0189203 0.124725 0 -0.00433377 0.0420004 0 -0.00982114 0.0836811 0 -0.0189203 0.124725 0 -0.0140907 0.126019 0 -0.0140907 0.126019 0.001 -0.0189203 0.124725 0.001 0.0025 -1.19256e-16 0 0.0025 -1.19256e-16 0.001 -0.0140907 0.126019 0.001 0.000647199 0.0424361 0.001 -0.00489711 0.0845493 0.001 -0.0140907 0.126019 0 0.000647199 0.0424361 0 -0.00489711 0.0845493 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="56">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0190328 -0.125579 0 -0.0142032 -0.126873 0 -0.0142032 -0.126873 0.001 -0.0190328 -0.125579 0.001 -0.0190328 -0.125579 0 -0.0142032 -0.126873 0 -0.0025 -1.1884e-16 0 -0.00987128 -0.0842541 0 -0.00434633 -0.042288 0 -0.0190328 0.125579 0 -0.00434633 0.042288 0 -0.00987128 0.0842541 0 -0.0142032 0.126873 0 0.0025 -1.20064e-16 0 0.000634641 0.0427237 0 -0.00494724 0.0851223 0 -0.00494724 -0.0851223 0 0.000634641 -0.0427237 0 -0.0142032 -0.126873 0 -0.0142032 -0.126873 0.001 0.0025 -1.20064e-16 0.001 -0.00494724 -0.0851223 0.001 0.000634641 -0.0427237 0.001 0.0025 -1.20064e-16 0 -0.00494724 -0.0851223 0 0.000634641 -0.0427237 0 -0.0190328 -0.125579 0.001 -0.0142032 -0.126873 0.001 -0.0025 -1.1884e-16 0.001 -0.00987128 -0.0842541 0.001 -0.00434633 -0.042288 0.001 -0.0190328 0.125579 0.001 -0.00434633 0.042288 0.001 -0.00987128 0.0842541 0.001 -0.0142032 0.126873 0.001 0.0025 -1.20064e-16 0.001 0.000634641 0.0427237 0.001 -0.00494724 0.0851223 0.001 -0.00494724 -0.0851223 0.001 0.000634641 -0.0427237 0.001 -0.0190328 -0.125579 0 -0.0190328 -0.125579 0.001 -0.0025 -1.1884e-16 0.001 -0.00987128 -0.0842541 0.001 -0.00434633 -0.042288 0.001 -0.0025 -1.1884e-16 0 -0.00987128 -0.0842541 0 -0.00434633 -0.042288 0 -0.0025 -1.1884e-16 0 -0.0025 -1.1884e-16 0.001 -0.0190328 0.125579 0.001 -0.00434633 0.042288 0.001 -0.00987128 0.0842541 0.001 -0.0190328 0.125579 0 -0.00434633 0.042288 0 -0.00987128 0.0842541 0 -0.0190328 0.125579 0 -0.0142032 0.126873 0 -0.0142032 0.126873 0.001 -0.0190328 0.125579 0.001 0.0025 -1.20064e-16 0 0.0025 -1.20064e-16 0.001 -0.0142032 0.126873 0.001 0.000634641 0.0427237 0.001 -0.00494724 0.0851223 0.001 -0.0142032 0.126873 0 0.000634641 0.0427237 0 -0.00494724 0.0851223 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="57">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0192543 -0.127261 0 -0.0144246 -0.128555 0 -0.0144246 -0.128555 0.001 -0.0192543 -0.127261 0.001 -0.0192543 -0.127261 0 -0.0144246 -0.128555 0 -0.0025 -1.20432e-16 0 -0.00997003 -0.0853828 0 -0.00437107 -0.0428545 0 -0.0192543 0.127261 0 -0.00437107 0.0428545 0 -0.00997003 0.0853828 0 -0.0144246 0.128555 0 0.0025 -1.21656e-16 0 0.000609907 0.0432903 0 -0.00504599 0.086251 0 -0.00504599 -0.086251 0 0.000609907 -0.0432903 0 -0.0144246 -0.128555 0 -0.0144246 -0.128555 0.001 0.0025 -1.21656e-16 0.001 -0.00504599 -0.086251 0.001 0.000609907 -0.0432903 0.001 0.0025 -1.21656e-16 0 -0.00504599 -0.086251 0 0.000609907 -0.0432903 0 -0.0192543 -0.127261 0.001 -0.0144246 -0.128555 0.001 -0.0025 -1.20432e-16 0.001 -0.00997003 -0.0853828 0.001 -0.00437107 -0.0428545 0.001 -0.0192543 0.127261 0.001 -0.00437107 0.0428545 0.001 -0.00997003 0.0853828 0.001 -0.0144246 0.128555 0.001 0.0025 -1.21656e-16 0.001 0.000609907 0.0432903 0.001 -0.00504599 0.086251 0.001 -0.00504599 -0.086251 0.001 0.000609907 -0.0432903 0.001 -0.0192543 -0.127261 0 -0.0192543 -0.127261 0.001 -0.0025 -1.20432e-16 0.001 -0.00997003 -0.0853828 0.001 -0.00437107 -0.0428545 0.001 -0.0025 -1.20432e-16 0 -0.00997003 -0.0853828 0 -0.00437107 -0.0428545 0 -0.0025 -1.20432e-16 0 -0.0025 -1.20432e-16 0.001 -0.0192543 0.127261 0.001 -0.00437107 0.0428545 0.001 -0.00997003 0.0853828 0.001 -0.0192543 0.127261 0 -0.00437107 0.0428545 0 -0.00997003 0.0853828 0 -0.0192543 0.127261 0 -0.0144246 0.128555 0 -0.0144246 0.128555 0.001 -0.0192543 0.127261 0.001 0.0025 -1.21656e-16 0 0.0025 -1.21656e-16 0.001 -0.0144246 0.128555 0.001 0.000609907 0.0432903 0.001 -0.00504599 0.086251 0.001 -0.0144246 0.128555 0 0.000609907 0.0432903 0 -0.00504599 0.086251 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="22">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0133458 -0.0823821 0 -0.00851618 -0.0836762 0 -0.00851618 -0.0836762 0.001 -0.0133458 -0.0823821 0.001 -0.0133458 -0.0823821 0 -0.00851618 -0.0836762 0 -0.0025 -7.7961e-17 0 -0.00733569 -0.0552722 0 -0.00371123 -0.0277417 0 -0.0133458 0.0823821 0 -0.00371123 0.0277417 0 -0.00733569 0.0552722 0 -0.00851618 0.0836762 0 0.0025 -7.91857e-17 0 0.00126975 0.0281775 0 -0.00241165 0.0561405 0 -0.00241165 -0.0561405 0 0.00126975 -0.0281775 0 -0.00851618 -0.0836762 0 -0.00851618 -0.0836762 0.001 0.0025 -7.91857e-17 0.001 -0.00241165 -0.0561405 0.001 0.00126975 -0.0281775 0.001 0.0025 -7.91857e-17 0 -0.00241165 -0.0561405 0 0.00126975 -0.0281775 0 -0.0133458 -0.0823821 0.001 -0.00851618 -0.0836762 0.001 -0.0025 -7.7961e-17 0.001 -0.00733569 -0.0552722 0.001 -0.00371123 -0.0277417 0.001 -0.0133458 0.0823821 0.001 -0.00371123 0.0277417 0.001 -0.00733569 0.0552722 0.001 -0.00851618 0.0836762 0.001 0.0025 -7.91857e-17 0.001 0.00126975 0.0281775 0.001 -0.00241165 0.0561405 0.001 -0.00241165 -0.0561405 0.001 0.00126975 -0.0281775 0.001 -0.0133458 -0.0823821 0 -0.0133458 -0.0823821 0.001 -0.0025 -7.7961e-17 0.001 -0.00733569 -0.0552722 0.001 -0.00371123 -0.0277417 0.001 -0.0025 -7.7961e-17 0 -0.00733569 -0.0552722 0 -0.00371123 -0.0277417 0 -0.0025 -7.7961e-17 0 -0.0025 -7.7961e-17 0.001 -0.0133458 0.0823821 0.001 -0.00371123 0.0277417 0.001 -0.00733569 0.0552722 0.001 -0.0133458 0.0823821 0 -0.00371123 0.0277417 0 -0.00733569 0.0552722 0 -0.0133458 0.0823821 0 -0.00851618 0.0836762 0 -0.00851618 0.0836762 0.001 -0.0133458 0.0823821 0.001 0.0025 -7.91857e-17 0 0.0025 -7.91857e-17 0.001 -0.00851618 0.0836762 0.001 0.00126975 0.0281775 0.001 -0.00241165 0.0561405 0.001 -0.00851618 0.0836762 0 0.00126975 0.0281775 0 -0.00241165 0.0561405 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="58">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0193633 -0.12809 0 -0.0145337 -0.129384 0 -0.0145337 -0.129384 0.001 -0.0193633 -0.12809 0.001 -0.0193633 -0.12809 0 -0.0145337 -0.129384 0 -0.0025 -1.21216e-16 0 -0.0100186 -0.0859385 0 -0.00438324 -0.0431334 0 -0.0193633 0.12809 0 -0.00438324 0.0431334 0 -0.0100186 0.0859385 0 -0.0145337 0.129384 0 0.0025 -1.2244e-16 0 0.00059773 0.0435692 0 -0.0050946 0.0868067 0 -0.0050946 -0.0868067 0 0.00059773 -0.0435692 0 -0.0145337 -0.129384 0 -0.0145337 -0.129384 0.001 0.0025 -1.2244e-16 0.001 -0.0050946 -0.0868067 0.001 0.00059773 -0.0435692 0.001 0.0025 -1.2244e-16 0 -0.0050946 -0.0868067 0 0.00059773 -0.0435692 0 -0.0193633 -0.12809 0.001 -0.0145337 -0.129384 0.001 -0.0025 -1.21216e-16 0.001 -0.0100186 -0.0859385 0.001 -0.00438324 -0.0431334 0.001 -0.0193633 0.12809 0.001 -0.00438324 0.0431334 0.001 -0.0100186 0.0859385 0.001 -0.0145337 0.129384 0.001 0.0025 -1.2244e-16 0.001 0.00059773 0.0435692 0.001 -0.0050946 0.0868067 0.001 -0.0050946 -0.0868067 0.001 0.00059773 -0.0435692 0.001 -0.0193633 -0.12809 0 -0.0193633 -0.12809 0.001 -0.0025 -1.21216e-16 0.001 -0.0100186 -0.0859385 0.001 -0.00438324 -0.0431334 0.001 -0.0025 -1.21216e-16 0 -0.0100186 -0.0859385 0 -0.00438324 -0.0431334 0 -0.0025 -1.21216e-16 0 -0.0025 -1.21216e-16 0.001 -0.0193633 0.12809 0.001 -0.00438324 0.0431334 0.001 -0.0100186 0.0859385 0.001 -0.0193633 0.12809 0 -0.00438324 0.0431334 0 -0.0100186 0.0859385 0 -0.0193633 0.12809 0 -0.0145337 0.129384 0 -0.0145337 0.129384 0.001 -0.0193633 0.12809 0.001 0.0025 -1.2244e-16 0 0.0025 -1.2244e-16 0.001 -0.0145337 0.129384 0.001 0.00059773 0.0435692 0.001 -0.0050946 0.0868067 0.001 -0.0145337 0.129384 0 0.00059773 0.0435692 0 -0.0050946 0.0868067 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="59">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0195848 -0.129772 0 -0.0147552 -0.131066 0 -0.0147552 -0.131066 0.001 -0.0195848 -0.129772 0.001 -0.0195848 -0.129772 0 -0.0147552 -0.131066 0 -0.0025 -1.22808e-16 0 -0.0101174 -0.0870672 0 -0.00440798 -0.0436999 0 -0.0195848 0.129772 0 -0.00440798 0.0436999 0 -0.0101174 0.0870672 0 -0.0147552 0.131066 0 0.0025 -1.24032e-16 0 0.000572995 0.0441357 0 -0.00519335 0.0879354 0 -0.00519335 -0.0879354 0 0.000572995 -0.0441357 0 -0.0147552 -0.131066 0 -0.0147552 -0.131066 0.001 0.0025 -1.24032e-16 0.001 -0.00519335 -0.0879354 0.001 0.000572995 -0.0441357 0.001 0.0025 -1.24032e-16 0 -0.00519335 -0.0879354 0 0.000572995 -0.0441357 0 -0.0195848 -0.129772 0.001 -0.0147552 -0.131066 0.001 -0.0025 -1.22808e-16 0.001 -0.0101174 -0.0870672 0.001 -0.00440798 -0.0436999 0.001 -0.0195848 0.129772 0.001 -0.00440798 0.0436999 0.001 -0.0101174 0.0870672 0.001 -0.0147552 0.131066 0.001 0.0025 -1.24032e-16 0.001 0.000572995 0.0441357 0.001 -0.00519335 0.0879354 0.001 -0.00519335 -0.0879354 0.001 0.000572995 -0.0441357 0.001 -0.0195848 -0.129772 0 -0.0195848 -0.129772 0.001 -0.0025 -1.22808e-16 0.001 -0.0101174 -0.0870672 0.001 -0.00440798 -0.0436999 0.001 -0.0025 -1.22808e-16 0 -0.0101174 -0.0870672 0 -0.00440798 -0.0436999 0 -0.0025 -1.22808e-16 0 -0.0025 -1.22808e-16 0.001 -0.0195848 0.129772 0.001 -0.00440798 0.0436999 0.001 -0.0101174 0.0870672 0.001 -0.0195848 0.129772 0 -0.00440798 0.0436999 0 -0.0101174 0.0870672 0 -0.0195848 0.129772 0 -0.0147552 0.131066 0 -0.0147552 0.131066 0.001 -0.0195848 0.129772 0.001 0.0025 -1.24032e-16 0 0.0025 -1.24032e-16 0.001 -0.0147552 0.131066 0.001 0.000572995 0.0441357 0.001 -0.00519335 0.0879354 0.001 -0.0147552 0.131066 0 0.000572995 0.0441357 0 -0.00519335 0.0879354 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="60">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0196972 -0.130626 0 -0.0148676 -0.13192 0 -0.0148676 -0.13192 0.001 -0.0196972 -0.130626 0.001 -0.0196972 -0.130626 0 -0.0148676 -0.13192 0 -0.0025 -1.23616e-16 0 -0.0101675 -0.0876402 0 -0.00442054 -0.0439875 0 -0.0196972 0.130626 0 -0.00442054 0.0439875 0 -0.0101675 0.0876402 0 -0.0148676 0.13192 0 0.0025 -1.2484e-16 0 0.000560438 0.0444233 0 -0.00524349 0.0885085 0 -0.00524349 -0.0885085 0 0.000560438 -0.0444233 0 -0.0148676 -0.13192 0 -0.0148676 -0.13192 0.001 0.0025 -1.2484e-16 0.001 -0.00524349 -0.0885085 0.001 0.000560438 -0.0444233 0.001 0.0025 -1.2484e-16 0 -0.00524349 -0.0885085 0 0.000560438 -0.0444233 0 -0.0196972 -0.130626 0.001 -0.0148676 -0.13192 0.001 -0.0025 -1.23616e-16 0.001 -0.0101675 -0.0876402 0.001 -0.00442054 -0.0439875 0.001 -0.0196972 0.130626 0.001 -0.00442054 0.0439875 0.001 -0.0101675 0.0876402 0.001 -0.0148676 0.13192 0.001 0.0025 -1.2484e-16 0.001 0.000560438 0.0444233 0.001 -0.00524349 0.0885085 0.001 -0.00524349 -0.0885085 0.001 0.000560438 -0.0444233 0.001 -0.0196972 -0.130626 0 -0.0196972 -0.130626 0.001 -0.0025 -1.23616e-16 0.001 -0.0101675 -0.0876402 0.001 -0.00442054 -0.0439875 0.001 -0.0025 -1.23616e-16 0 -0.0101675 -0.0876402 0 -0.00442054 -0.0439875 0 -0.0025 -1.23616e-16 0 -0.0025 -1.23616e-16 0.001 -0.0196972 0.130626 0.001 -0.00442054 0.0439875 0.001 -0.0101675 0.0876402 0.001 -0.0196972 0.130626 0 -0.00442054 0.0439875 0 -0.0101675 0.0876402 0 -0.0196972 0.130626 0 -0.0148676 0.13192 0 -0.0148676 0.13192 0.001 -0.0196972 0.130626 0.001 0.0025 -1.2484e-16 0 0.0025 -1.2484e-16 0.001 -0.0148676 0.13192 0.001 0.000560438 0.0444233 0.001 -0.00524349 0.0885085 0.001 -0.0148676 0.13192 0 0.000560438 0.0444233 0 -0.00524349 0.0885085 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="61">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0199187 -0.132308 0 -0.0150891 -0.133602 0 -0.0150891 -0.133602 0.001 -0.0199187 -0.132308 0.001 -0.0199187 -0.132308 0 -0.0150891 -0.133602 0 -0.0025 -1.25208e-16 0 -0.0102663 -0.0887689 0 -0.00444527 -0.044554 0 -0.0199187 0.132308 0 -0.00444527 0.044554 0 -0.0102663 0.0887689 0 -0.0150891 0.133602 0 0.0025 -1.26433e-16 0 0.000535703 0.0449898 0 -0.00534224 0.0896372 0 -0.00534224 -0.0896372 0 0.000535703 -0.0449898 0 -0.0150891 -0.133602 0 -0.0150891 -0.133602 0.001 0.0025 -1.26433e-16 0.001 -0.00534224 -0.0896372 0.001 0.000535703 -0.0449898 0.001 0.0025 -1.26433e-16 0 -0.00534224 -0.0896372 0 0.000535703 -0.0449898 0 -0.0199187 -0.132308 0.001 -0.0150891 -0.133602 0.001 -0.0025 -1.25208e-16 0.001 -0.0102663 -0.0887689 0.001 -0.00444527 -0.044554 0.001 -0.0199187 0.132308 0.001 -0.00444527 0.044554 0.001 -0.0102663 0.0887689 0.001 -0.0150891 0.133602 0.001 0.0025 -1.26433e-16 0.001 0.000535703 0.0449898 0.001 -0.00534224 0.0896372 0.001 -0.00534224 -0.0896372 0.001 0.000535703 -0.0449898 0.001 -0.0199187 -0.132308 0 -0.0199187 -0.132308 0.001 -0.0025 -1.25208e-16 0.001 -0.0102663 -0.0887689 0.001 -0.00444527 -0.044554 0.001 -0.0025 -1.25208e-16 0 -0.0102663 -0.0887689 0 -0.00444527 -0.044554 0 -0.0025 -1.25208e-16 0 -0.0025 -1.25208e-16 0.001 -0.0199187 0.132308 0.001 -0.00444527 0.044554 0.001 -0.0102663 0.0887689 0.001 -0.0199187 0.132308 0 -0.00444527 0.044554 0 -0.0102663 0.0887689 0 -0.0199187 0.132308 0 -0.0150891 0.133602 0 -0.0150891 0.133602 0.001 -0.0199187 0.132308 0.001 0.0025 -1.26433e-16 0 0.0025 -1.26433e-16 0.001 -0.0150891 0.133602 0.001 0.000535703 0.0449898 0.001 -0.00534224 0.0896372 0.001 -0.0150891 0.133602 0 0.000535703 0.0449898 0 -0.00534224 0.0896372 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="62">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0200278 -0.133137 0 -0.0151981 -0.134431 0 -0.0151981 -0.134431 0.001 -0.0200278 -0.133137 0.001 -0.0200278 -0.133137 0 -0.0151981 -0.134431 0 -0.0025 -1.25992e-16 0 -0.0103149 -0.0893246 0 -0.00445745 -0.0448329 0 -0.0200278 0.133137 0 -0.00445745 0.0448329 0 -0.0103149 0.0893246 0 -0.0151981 0.134431 0 0.0025 -1.27216e-16 0 0.000523526 0.0452687 0 -0.00539085 0.0901929 0 -0.00539085 -0.0901929 0 0.000523526 -0.0452687 0 -0.0151981 -0.134431 0 -0.0151981 -0.134431 0.001 0.0025 -1.27216e-16 0.001 -0.00539085 -0.0901929 0.001 0.000523526 -0.0452687 0.001 0.0025 -1.27216e-16 0 -0.00539085 -0.0901929 0 0.000523526 -0.0452687 0 -0.0200278 -0.133137 0.001 -0.0151981 -0.134431 0.001 -0.0025 -1.25992e-16 0.001 -0.0103149 -0.0893246 0.001 -0.00445745 -0.0448329 0.001 -0.0200278 0.133137 0.001 -0.00445745 0.0448329 0.001 -0.0103149 0.0893246 0.001 -0.0151981 0.134431 0.001 0.0025 -1.27216e-16 0.001 0.000523526 0.0452687 0.001 -0.00539085 0.0901929 0.001 -0.00539085 -0.0901929 0.001 0.000523526 -0.0452687 0.001 -0.0200278 -0.133137 0 -0.0200278 -0.133137 0.001 -0.0025 -1.25992e-16 0.001 -0.0103149 -0.0893246 0.001 -0.00445745 -0.0448329 0.001 -0.0025 -1.25992e-16 0 -0.0103149 -0.0893246 0 -0.00445745 -0.0448329 0 -0.0025 -1.25992e-16 0 -0.0025 -1.25992e-16 0.001 -0.0200278 0.133137 0.001 -0.00445745 0.0448329 0.001 -0.0103149 0.0893246 0.001 -0.0200278 0.133137 0 -0.00445745 0.0448329 0 -0.0103149 0.0893246 0 -0.0200278 0.133137 0 -0.0151981 0.134431 0 -0.0151981 0.134431 0.001 -0.0200278 0.133137 0.001 0.0025 -1.27216e-16 0 0.0025 -1.27216e-16 0.001 -0.0151981 0.134431 0.001 0.000523526 0.0452687 0.001 -0.00539085 0.0901929 0.001 -0.0151981 0.134431 0 0.000523526 0.0452687 0 -0.00539085 0.0901929 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="23">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0135503 -0.083935 0 -0.00872063 -0.0852291 0 -0.00872063 -0.0852291 0.001 -0.0135503 -0.083935 0.001 -0.0135503 -0.083935 0 -0.00872063 -0.0852291 0 -0.0025 -7.94306e-17 0 -0.00742685 -0.0563141 0 -0.00373406 -0.0282646 0 -0.0135503 0.083935 0 -0.00373406 0.0282646 0 -0.00742685 0.0563141 0 -0.00872063 0.0852291 0 0.0025 -8.06552e-17 0 0.00124691 0.0287004 0 -0.00250281 0.0571823 0 -0.00250281 -0.0571823 0 0.00124691 -0.0287004 0 -0.00872063 -0.0852291 0 -0.00872063 -0.0852291 0.001 0.0025 -8.06552e-17 0.001 -0.00250281 -0.0571823 0.001 0.00124691 -0.0287004 0.001 0.0025 -8.06552e-17 0 -0.00250281 -0.0571823 0 0.00124691 -0.0287004 0 -0.0135503 -0.083935 0.001 -0.00872063 -0.0852291 0.001 -0.0025 -7.94306e-17 0.001 -0.00742685 -0.0563141 0.001 -0.00373406 -0.0282646 0.001 -0.0135503 0.083935 0.001 -0.00373406 0.0282646 0.001 -0.00742685 0.0563141 0.001 -0.00872063 0.0852291 0.001 0.0025 -8.06552e-17 0.001 0.00124691 0.0287004 0.001 -0.00250281 0.0571823 0.001 -0.00250281 -0.0571823 0.001 0.00124691 -0.0287004 0.001 -0.0135503 -0.083935 0 -0.0135503 -0.083935 0.001 -0.0025 -7.94306e-17 0.001 -0.00742685 -0.0563141 0.001 -0.00373406 -0.0282646 0.001 -0.0025 -7.94306e-17 0 -0.00742685 -0.0563141 0 -0.00373406 -0.0282646 0 -0.0025 -7.94306e-17 0 -0.0025 -7.94306e-17 0.001 -0.0135503 0.083935 0.001 -0.00373406 0.0282646 0.001 -0.00742685 0.0563141 0.001 -0.0135503 0.083935 0 -0.00373406 0.0282646 0 -0.00742685 0.0563141 0 -0.0135503 0.083935 0 -0.00872063 0.0852291 0 -0.00872063 0.0852291 0.001 -0.0135503 0.083935 0.001 0.0025 -8.06552e-17 0 0.0025 -8.06552e-17 0.001 -0.00872063 0.0852291 0.001 0.00124691 0.0287004 0.001 -0.00250281 0.0571823 0.001 -0.00872063 0.0852291 0 0.00124691 0.0287004 0 -0.00250281 0.0571823 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="24">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0136797 -0.0849185 0 -0.00885011 -0.0862126 0 -0.00885011 -0.0862126 0.001 -0.0136797 -0.0849185 0.001 -0.0136797 -0.0849185 0 -0.00885011 -0.0862126 0 -0.0025 -8.03613e-17 0 -0.00748458 -0.056974 0 -0.00374852 -0.0285958 0 -0.0136797 0.0849185 0 -0.00374852 0.0285958 0 -0.00748458 0.056974 0 -0.00885011 0.0862126 0 0.0025 -8.1586e-17 0 0.00123245 0.0290316 0 -0.00256054 0.0578422 0 -0.00256054 -0.0578422 0 0.00123245 -0.0290316 0 -0.00885011 -0.0862126 0 -0.00885011 -0.0862126 0.001 0.0025 -8.1586e-17 0.001 -0.00256054 -0.0578422 0.001 0.00123245 -0.0290316 0.001 0.0025 -8.1586e-17 0 -0.00256054 -0.0578422 0 0.00123245 -0.0290316 0 -0.0136797 -0.0849185 0.001 -0.00885011 -0.0862126 0.001 -0.0025 -8.03613e-17 0.001 -0.00748458 -0.056974 0.001 -0.00374852 -0.0285958 0.001 -0.0136797 0.0849185 0.001 -0.00374852 0.0285958 0.001 -0.00748458 0.056974 0.001 -0.00885011 0.0862126 0.001 0.0025 -8.1586e-17 0.001 0.00123245 0.0290316 0.001 -0.00256054 0.0578422 0.001 -0.00256054 -0.0578422 0.001 0.00123245 -0.0290316 0.001 -0.0136797 -0.0849185 0 -0.0136797 -0.0849185 0.001 -0.0025 -8.03613e-17 0.001 -0.00748458 -0.056974 0.001 -0.00374852 -0.0285958 0.001 -0.0025 -8.03613e-17 0 -0.00748458 -0.056974 0 -0.00374852 -0.0285958 0 -0.0025 -8.03613e-17 0 -0.0025 -8.03613e-17 0.001 -0.0136797 0.0849185 0.001 -0.00374852 0.0285958 0.001 -0.00748458 0.056974 0.001 -0.0136797 0.0849185 0 -0.00374852 0.0285958 0 -0.00748458 0.056974 0 -0.0136797 0.0849185 0 -0.00885011 0.0862126 0 -0.00885011 0.0862126 0.001 -0.0136797 0.0849185 0.001 0.0025 -8.1586e-17 0 0.0025 -8.1586e-17 0.001 -0.00885011 0.0862126 0.001 0.00123245 0.0290316 0.001 -0.00256054 0.0578422 0.001 -0.00885011 0.0862126 0 0.00123245 0.0290316 0 -0.00256054 0.0578422 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="25">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0138876 -0.0864973 0 -0.00905796 -0.0877914 0 -0.00905796 -0.0877914 0.001 -0.0138876 -0.0864973 0.001 -0.0138876 -0.0864973 0 -0.00905796 -0.0877914 0 -0.0025 -8.18554e-17 0 -0.00757725 -0.0580332 0 -0.00377173 -0.0291274 0 -0.0138876 0.0864973 0 -0.00377173 0.0291274 0 -0.00757725 0.0580332 0 -0.00905796 0.0877914 0 0.0025 -8.308e-17 0 0.00120924 0.0295632 0 -0.00265321 0.0589015 0 -0.00265321 -0.0589015 0 0.00120924 -0.0295632 0 -0.00905796 -0.0877914 0 -0.00905796 -0.0877914 0.001 0.0025 -8.308e-17 0.001 -0.00265321 -0.0589015 0.001 0.00120924 -0.0295632 0.001 0.0025 -8.308e-17 0 -0.00265321 -0.0589015 0 0.00120924 -0.0295632 0 -0.0138876 -0.0864973 0.001 -0.00905796 -0.0877914 0.001 -0.0025 -8.18554e-17 0.001 -0.00757725 -0.0580332 0.001 -0.00377173 -0.0291274 0.001 -0.0138876 0.0864973 0.001 -0.00377173 0.0291274 0.001 -0.00757725 0.0580332 0.001 -0.00905796 0.0877914 0.001 0.0025 -8.308e-17 0.001 0.00120924 0.0295632 0.001 -0.00265321 0.0589015 0.001 -0.00265321 -0.0589015 0.001 0.00120924 -0.0295632 0.001 -0.0138876 -0.0864973 0 -0.0138876 -0.0864973 0.001 -0.0025 -8.18554e-17 0.001 -0.00757725 -0.0580332 0.001 -0.00377173 -0.0291274 0.001 -0.0025 -8.18554e-17 0 -0.00757725 -0.0580332 0 -0.00377173 -0.0291274 0 -0.0025 -8.18554e-17 0 -0.0025 -8.18554e-17 0.001 -0.0138876 0.0864973 0.001 -0.00377173 0.0291274 0.001 -0.00757725 0.0580332 0.001 -0.0138876 0.0864973 0 -0.00377173 0.0291274 0 -0.00757725 0.0580332 0 -0.0138876 0.0864973 0 -0.00905796 0.0877914 0 -0.00905796 0.0877914 0.001 -0.0138876 0.0864973 0.001 0.0025 -8.308e-17 0 0.0025 -8.308e-17 0.001 -0.00905796 0.0877914 0.001 0.00120924 0.0295632 0.001 -0.00265321 0.0589015 0.001 -0.00905796 0.0877914 0 0.00120924 0.0295632 0 -0.00265321 0.0589015 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">2 0 3 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="26">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0140171 -0.0874808 0 -0.00918744 -0.0887749 0 -0.00918744 -0.0887749 0.001 -0.0140171 -0.0874808 0.001 -0.0140171 -0.0874808 0 -0.00918744 -0.0887749 0 -0.0025 -8.27861e-17 0 -0.00763498 -0.0586931 0 -0.00378619 -0.0294586 0 -0.0140171 0.0874808 0 -0.00378619 0.0294586 0 -0.00763498 0.0586931 0 -0.00918744 0.0887749 0 0.0025 -8.40108e-17 0 0.00119478 0.0298944 0 -0.00271094 0.0595613 0 -0.00271094 -0.0595613 0 0.00119478 -0.0298944 0 -0.00918744 -0.0887749 0 -0.00918744 -0.0887749 0.001 0.0025 -8.40108e-17 0.001 -0.00271094 -0.0595613 0.001 0.00119478 -0.0298944 0.001 0.0025 -8.40108e-17 0 -0.00271094 -0.0595613 0 0.00119478 -0.0298944 0 -0.0140171 -0.0874808 0.001 -0.00918744 -0.0887749 0.001 -0.0025 -8.27861e-17 0.001 -0.00763498 -0.0586931 0.001 -0.00378619 -0.0294586 0.001 -0.0140171 0.0874808 0.001 -0.00378619 0.0294586 0.001 -0.00763498 0.0586931 0.001 -0.00918744 0.0887749 0.001 0.0025 -8.40108e-17 0.001 0.00119478 0.0298944 0.001 -0.00271094 0.0595613 0.001 -0.00271094 -0.0595613 0.001 0.00119478 -0.0298944 0.001 -0.0140171 -0.0874808 0 -0.0140171 -0.0874808 0.001 -0.0025 -8.27861e-17 0.001 -0.00763498 -0.0586931 0.001 -0.00378619 -0.0294586 0.001 -0.0025 -8.27861e-17 0 -0.00763498 -0.0586931 0 -0.00378619 -0.0294586 0 -0.0025 -8.27861e-17 0 -0.0025 -8.27861e-17 0.001 -0.0140171 0.0874808 0.001 -0.00378619 0.0294586 0.001 -0.00763498 0.0586931 0.001 -0.0140171 0.0874808 0 -0.00378619 0.0294586 0 -0.00763498 0.0586931 0 -0.0140171 0.0874808 0 -0.00918744 0.0887749 0 -0.00918744 0.0887749 0.001 -0.0140171 0.0874808 0.001 0.0025 -8.40108e-17 0 0.0025 -8.40108e-17 0.001 -0.00918744 0.0887749 0.001 0.00119478 0.0298944 0.001 -0.00271094 0.0595613 0.001 -0.00918744 0.0887749 0 0.00119478 0.0298944 0 -0.00271094 0.0595613 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="27">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0142249 -0.0890596 0 -0.00939529 -0.0903537 0 -0.00939529 -0.0903537 0.001 -0.0142249 -0.0890596 0.001 -0.0142249 -0.0890596 0 -0.00939529 -0.0903537 0 -0.0025 -8.42802e-17 0 -0.00772765 -0.0597523 0 -0.0038094 -0.0299903 0 -0.0142249 0.0890596 0 -0.0038094 0.0299903 0 -0.00772765 0.0597523 0 -0.00939529 0.0903537 0 0.0025 -8.55048e-17 0 0.00117157 0.0304261 0 -0.00280361 0.0606206 0 -0.00280361 -0.0606206 0 0.00117157 -0.0304261 0 -0.00939529 -0.0903537 0 -0.00939529 -0.0903537 0.001 0.0025 -8.55048e-17 0.001 -0.00280361 -0.0606206 0.001 0.00117157 -0.0304261 0.001 0.0025 -8.55048e-17 0 -0.00280361 -0.0606206 0 0.00117157 -0.0304261 0 -0.0142249 -0.0890596 0.001 -0.00939529 -0.0903537 0.001 -0.0025 -8.42802e-17 0.001 -0.00772765 -0.0597523 0.001 -0.0038094 -0.0299903 0.001 -0.0142249 0.0890596 0.001 -0.0038094 0.0299903 0.001 -0.00772765 0.0597523 0.001 -0.00939529 0.0903537 0.001 0.0025 -8.55048e-17 0.001 0.00117157 0.0304261 0.001 -0.00280361 0.0606206 0.001 -0.00280361 -0.0606206 0.001 0.00117157 -0.0304261 0.001 -0.0142249 -0.0890596 0 -0.0142249 -0.0890596 0.001 -0.0025 -8.42802e-17 0.001 -0.00772765 -0.0597523 0.001 -0.0038094 -0.0299903 0.001 -0.0025 -8.42802e-17 0 -0.00772765 -0.0597523 0 -0.0038094 -0.0299903 0 -0.0025 -8.42802e-17 0 -0.0025 -8.42802e-17 0.001 -0.0142249 0.0890596 0.001 -0.0038094 0.0299903 0.001 -0.00772765 0.0597523 0.001 -0.0142249 0.0890596 0 -0.0038094 0.0299903 0 -0.00772765 0.0597523 0 -0.0142249 0.0890596 0 -0.00939529 0.0903537 0 -0.00939529 0.0903537 0.001 -0.0142249 0.0890596 0.001 0.0025 -8.55048e-17 0 0.0025 -8.55048e-17 0.001 -0.00939529 0.0903537 0.001 0.00117157 0.0304261 0.001 -0.00280361 0.0606206 0.001 -0.00939529 0.0903537 0 0.00117157 0.0304261 0 -0.00280361 0.0606206 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 58 56 59 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="132">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00689528 -0.0390311 0 -0.00202051 -0.0401431 0 -0.00202051 -0.0401431 0.01 -0.00689528 -0.0390311 0.01 -0.00689528 -0.0390311 0 -0.00202051 -0.0401431 0 -0.0025 -4.29851e-17 0 -0.00445802 -0.0261425 0 -0.00299019 -0.0131079 0 -0.00689528 0.0390311 0 -0.00299019 0.0131079 0 -0.00445802 0.0261425 0 -0.00202051 0.0401431 0 0.0025 -4.42097e-17 0 0.00199585 0.0134813 0 0.000486199 0.0268873 0 0.000486199 -0.0268873 0 0.00199585 -0.0134813 0 -0.00202051 -0.0401431 0 -0.00202051 -0.0401431 0.01 0.0025 -4.42097e-17 0.01 0.000486199 -0.0268873 0.01 0.00199585 -0.0134813 0.01 0.0025 -4.42097e-17 0 0.000486199 -0.0268873 0 0.00199585 -0.0134813 0 -0.00689528 -0.0390311 0.01 -0.00202051 -0.0401431 0.01 -0.0025 -4.29851e-17 0.01 -0.00445802 -0.0261425 0.01 -0.00299019 -0.0131079 0.01 -0.00689528 0.0390311 0.01 -0.00299019 0.0131079 0.01 -0.00445802 0.0261425 0.01 -0.00202051 0.0401431 0.01 0.0025 -4.42097e-17 0.01 0.00199585 0.0134813 0.01 0.000486199 0.0268873 0.01 0.000486199 -0.0268873 0.01 0.00199585 -0.0134813 0.01 -0.00689528 -0.0390311 0 -0.00689528 -0.0390311 0.01 -0.0025 -4.29851e-17 0.01 -0.00445802 -0.0261425 0.01 -0.00299019 -0.0131079 0.01 -0.0025 -4.29851e-17 0 -0.00445802 -0.0261425 0 -0.00299019 -0.0131079 0 -0.0025 -4.29851e-17 0 -0.0025 -4.29851e-17 0.01 -0.00689528 0.0390311 0.01 -0.00299019 0.0131079 0.01 -0.00445802 0.0261425 0.01 -0.00689528 0.0390311 0 -0.00299019 0.0131079 0 -0.00445802 0.0261425 0 -0.00689528 0.0390311 0 -0.00202051 0.0401431 0 -0.00202051 0.0401431 0.01 -0.00689528 0.0390311 0.01 0.0025 -4.42097e-17 0 0.0025 -4.42097e-17 0.01 -0.00202051 0.0401431 0.01 0.00199585 0.0134813 0.01 0.000486199 0.0268873 0.01 -0.00202051 0.0401431 0 0.00199585 0.0134813 0 0.000486199 0.0268873 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="133">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00697292 -0.0397205 0 -0.00209814 -0.0408325 0 -0.00209814 -0.0408325 0.01 -0.00697292 -0.0397205 0.01 -0.00697292 -0.0397205 0 -0.00209814 -0.0408325 0 -0.0025 -4.37444e-17 0 -0.0044926 -0.0266043 0 -0.00299885 -0.0133394 0 -0.00697292 0.0397205 0 -0.00299885 0.0133394 0 -0.0044926 0.0266043 0 -0.00209814 0.0408325 0 0.0025 -4.4969e-17 0 0.00198719 0.0137128 0 0.000451613 0.0273491 0 0.000451613 -0.0273491 0 0.00198719 -0.0137128 0 -0.00209814 -0.0408325 0 -0.00209814 -0.0408325 0.01 0.0025 -4.4969e-17 0.01 0.000451613 -0.0273491 0.01 0.00198719 -0.0137128 0.01 0.0025 -4.4969e-17 0 0.000451613 -0.0273491 0 0.00198719 -0.0137128 0 -0.00697292 -0.0397205 0.01 -0.00209814 -0.0408325 0.01 -0.0025 -4.37444e-17 0.01 -0.0044926 -0.0266043 0.01 -0.00299885 -0.0133394 0.01 -0.00697292 0.0397205 0.01 -0.00299885 0.0133394 0.01 -0.0044926 0.0266043 0.01 -0.00209814 0.0408325 0.01 0.0025 -4.4969e-17 0.01 0.00198719 0.0137128 0.01 0.000451613 0.0273491 0.01 0.000451613 -0.0273491 0.01 0.00198719 -0.0137128 0.01 -0.00697292 -0.0397205 0 -0.00697292 -0.0397205 0.01 -0.0025 -4.37444e-17 0.01 -0.0044926 -0.0266043 0.01 -0.00299885 -0.0133394 0.01 -0.0025 -4.37444e-17 0 -0.0044926 -0.0266043 0 -0.00299885 -0.0133394 0 -0.0025 -4.37444e-17 0 -0.0025 -4.37444e-17 0.01 -0.00697292 0.0397205 0.01 -0.00299885 0.0133394 0.01 -0.0044926 0.0266043 0.01 -0.00697292 0.0397205 0 -0.00299885 0.0133394 0 -0.0044926 0.0266043 0 -0.00697292 0.0397205 0 -0.00209814 0.0408325 0 -0.00209814 0.0408325 0.01 -0.00697292 0.0397205 0.01 0.0025 -4.4969e-17 0 0.0025 -4.4969e-17 0.01 -0.00209814 0.0408325 0.01 0.00198719 0.0137128 0.01 0.000451613 0.0273491 0.01 -0.00209814 0.0408325 0 0.00198719 0.0137128 0 0.000451613 0.0273491 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="142">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00811745 -0.0498842 0 -0.00324267 -0.0509962 0 -0.00324267 -0.0509962 0.01 -0.00811745 -0.0498842 0.01 -0.00811745 -0.0498842 0 -0.00324267 -0.0509962 0 -0.0025 -5.49377e-17 0 -0.00500247 -0.0334117 0 -0.00312649 -0.0167527 0 -0.00811745 0.0498842 0 -0.00312649 0.0167527 0 -0.00500247 0.0334117 0 -0.00324267 0.0509962 0 0.0025 -5.61623e-17 0 0.00185954 0.0171261 0 -5.8252e-05 0.0341565 0 -5.8252e-05 -0.0341565 0 0.00185954 -0.0171261 0 -0.00324267 -0.0509962 0 -0.00324267 -0.0509962 0.01 0.0025 -5.61623e-17 0.01 -5.8252e-05 -0.0341565 0.01 0.00185954 -0.0171261 0.01 0.0025 -5.61623e-17 0 -5.8252e-05 -0.0341565 0 0.00185954 -0.0171261 0 -0.00811745 -0.0498842 0.01 -0.00324267 -0.0509962 0.01 -0.0025 -5.49377e-17 0.01 -0.00500247 -0.0334117 0.01 -0.00312649 -0.0167527 0.01 -0.00811745 0.0498842 0.01 -0.00312649 0.0167527 0.01 -0.00500247 0.0334117 0.01 -0.00324267 0.0509962 0.01 0.0025 -5.61623e-17 0.01 0.00185954 0.0171261 0.01 -5.8252e-05 0.0341565 0.01 -5.8252e-05 -0.0341565 0.01 0.00185954 -0.0171261 0.01 -0.00811745 -0.0498842 0 -0.00811745 -0.0498842 0.01 -0.0025 -5.49377e-17 0.01 -0.00500247 -0.0334117 0.01 -0.00312649 -0.0167527 0.01 -0.0025 -5.49377e-17 0 -0.00500247 -0.0334117 0 -0.00312649 -0.0167527 0 -0.0025 -5.49377e-17 0 -0.0025 -5.49377e-17 0.01 -0.00811745 0.0498842 0.01 -0.00312649 0.0167527 0.01 -0.00500247 0.0334117 0.01 -0.00811745 0.0498842 0 -0.00312649 0.0167527 0 -0.00500247 0.0334117 0 -0.00811745 0.0498842 0 -0.00324267 0.0509962 0 -0.00324267 0.0509962 0.01 -0.00811745 0.0498842 0.01 0.0025 -5.61623e-17 0 0.0025 -5.61623e-17 0.01 -0.00324267 0.0509962 0.01 0.00185954 0.0171261 0.01 -5.8252e-05 0.0341565 0.01 -0.00324267 0.0509962 0 0.00185954 0.0171261 0 -5.8252e-05 0.0341565 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="143">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00819759 -0.0505959 0 -0.00332281 -0.0517079 0 -0.00332281 -0.0517079 0.01 -0.00819759 -0.0505959 0.01 -0.00819759 -0.0505959 0 -0.00332281 -0.0517079 0 -0.0025 -5.57214e-17 0 -0.00503817 -0.0338884 0 -0.00313543 -0.0169917 0 -0.00819759 0.0505959 0 -0.00313543 0.0169917 0 -0.00503817 0.0338884 0 -0.00332281 0.0517079 0 0.0025 -5.69461e-17 0 0.0018506 0.0173651 0 -9.39537e-05 0.0346332 0 -9.39537e-05 -0.0346332 0 0.0018506 -0.0173651 0 -0.00332281 -0.0517079 0 -0.00332281 -0.0517079 0.01 0.0025 -5.69461e-17 0.01 -9.39537e-05 -0.0346332 0.01 0.0018506 -0.0173651 0.01 0.0025 -5.69461e-17 0 -9.39537e-05 -0.0346332 0 0.0018506 -0.0173651 0 -0.00819759 -0.0505959 0.01 -0.00332281 -0.0517079 0.01 -0.0025 -5.57214e-17 0.01 -0.00503817 -0.0338884 0.01 -0.00313543 -0.0169917 0.01 -0.00819759 0.0505959 0.01 -0.00313543 0.0169917 0.01 -0.00503817 0.0338884 0.01 -0.00332281 0.0517079 0.01 0.0025 -5.69461e-17 0.01 0.0018506 0.0173651 0.01 -9.39537e-05 0.0346332 0.01 -9.39537e-05 -0.0346332 0.01 0.0018506 -0.0173651 0.01 -0.00819759 -0.0505959 0 -0.00819759 -0.0505959 0.01 -0.0025 -5.57214e-17 0.01 -0.00503817 -0.0338884 0.01 -0.00313543 -0.0169917 0.01 -0.0025 -5.57214e-17 0 -0.00503817 -0.0338884 0 -0.00313543 -0.0169917 0 -0.0025 -5.57214e-17 0 -0.0025 -5.57214e-17 0.01 -0.00819759 0.0505959 0.01 -0.00313543 0.0169917 0.01 -0.00503817 0.0338884 0.01 -0.00819759 0.0505959 0 -0.00313543 0.0169917 0 -0.00503817 0.0338884 0 -0.00819759 0.0505959 0 -0.00332281 0.0517079 0 -0.00332281 0.0517079 0.01 -0.00819759 0.0505959 0.01 0.0025 -5.69461e-17 0 0.0025 -5.69461e-17 0.01 -0.00332281 0.0517079 0.01 0.0018506 0.0173651 0.01 -9.39537e-05 0.0346332 0.01 -0.00332281 0.0517079 0 0.0018506 0.0173651 0 -9.39537e-05 0.0346332 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="144">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00836038 -0.0520415 0 -0.0034856 -0.0531535 0 -0.0034856 -0.0531535 0.01 -0.00836038 -0.0520415 0.01 -0.00836038 -0.0520415 0 -0.0034856 -0.0531535 0 -0.0025 -5.73135e-17 0 -0.00511069 -0.0348567 0 -0.00315358 -0.0174771 0 -0.00836038 0.0520415 0 -0.00315358 0.0174771 0 -0.00511069 0.0348567 0 -0.0034856 0.0531535 0 0.0025 -5.85381e-17 0 0.00183245 0.0178506 0 -0.000166473 0.0356015 0 -0.000166473 -0.0356015 0 0.00183245 -0.0178506 0 -0.0034856 -0.0531535 0 -0.0034856 -0.0531535 0.01 0.0025 -5.85381e-17 0.01 -0.000166473 -0.0356015 0.01 0.00183245 -0.0178506 0.01 0.0025 -5.85381e-17 0 -0.000166473 -0.0356015 0 0.00183245 -0.0178506 0 -0.00836038 -0.0520415 0.01 -0.0034856 -0.0531535 0.01 -0.0025 -5.73135e-17 0.01 -0.00511069 -0.0348567 0.01 -0.00315358 -0.0174771 0.01 -0.00836038 0.0520415 0.01 -0.00315358 0.0174771 0.01 -0.00511069 0.0348567 0.01 -0.0034856 0.0531535 0.01 0.0025 -5.85381e-17 0.01 0.00183245 0.0178506 0.01 -0.000166473 0.0356015 0.01 -0.000166473 -0.0356015 0.01 0.00183245 -0.0178506 0.01 -0.00836038 -0.0520415 0 -0.00836038 -0.0520415 0.01 -0.0025 -5.73135e-17 0.01 -0.00511069 -0.0348567 0.01 -0.00315358 -0.0174771 0.01 -0.0025 -5.73135e-17 0 -0.00511069 -0.0348567 0 -0.00315358 -0.0174771 0 -0.0025 -5.73135e-17 0 -0.0025 -5.73135e-17 0.01 -0.00836038 0.0520415 0.01 -0.00315358 0.0174771 0.01 -0.00511069 0.0348567 0.01 -0.00836038 0.0520415 0 -0.00315358 0.0174771 0 -0.00511069 0.0348567 0 -0.00836038 0.0520415 0 -0.0034856 0.0531535 0 -0.0034856 0.0531535 0.01 -0.00836038 0.0520415 0.01 0.0025 -5.85381e-17 0 0.0025 -5.85381e-17 0.01 -0.0034856 0.0531535 0.01 0.00183245 0.0178506 0.01 -0.000166473 0.0356015 0.01 -0.0034856 0.0531535 0 0.00183245 0.0178506 0 -0.000166473 0.0356015 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="145">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00844303 -0.0527754 0 -0.00356825 -0.0538874 0 -0.00356825 -0.0538874 0.01 -0.00844303 -0.0527754 0.01 -0.00844303 -0.0527754 0 -0.00356825 -0.0538874 0 -0.0025 -5.81217e-17 0 -0.00514751 -0.0353482 0 -0.0031628 -0.0177236 0 -0.00844303 0.0527754 0 -0.0031628 0.0177236 0 -0.00514751 0.0353482 0 -0.00356825 0.0538874 0 0.0025 -5.93464e-17 0 0.00182323 0.0180971 0 -0.00020329 0.036093 0 -0.00020329 -0.036093 0 0.00182323 -0.0180971 0 -0.00356825 -0.0538874 0 -0.00356825 -0.0538874 0.01 0.0025 -5.93464e-17 0.01 -0.00020329 -0.036093 0.01 0.00182323 -0.0180971 0.01 0.0025 -5.93464e-17 0 -0.00020329 -0.036093 0 0.00182323 -0.0180971 0 -0.00844303 -0.0527754 0.01 -0.00356825 -0.0538874 0.01 -0.0025 -5.81217e-17 0.01 -0.00514751 -0.0353482 0.01 -0.0031628 -0.0177236 0.01 -0.00844303 0.0527754 0.01 -0.0031628 0.0177236 0.01 -0.00514751 0.0353482 0.01 -0.00356825 0.0538874 0.01 0.0025 -5.93464e-17 0.01 0.00182323 0.0180971 0.01 -0.00020329 0.036093 0.01 -0.00020329 -0.036093 0.01 0.00182323 -0.0180971 0.01 -0.00844303 -0.0527754 0 -0.00844303 -0.0527754 0.01 -0.0025 -5.81217e-17 0.01 -0.00514751 -0.0353482 0.01 -0.0031628 -0.0177236 0.01 -0.0025 -5.81217e-17 0 -0.00514751 -0.0353482 0 -0.0031628 -0.0177236 0 -0.0025 -5.81217e-17 0 -0.0025 -5.81217e-17 0.01 -0.00844303 0.0527754 0.01 -0.0031628 0.0177236 0.01 -0.00514751 0.0353482 0.01 -0.00844303 0.0527754 0 -0.0031628 0.0177236 0 -0.00514751 0.0353482 0 -0.00844303 0.0527754 0 -0.00356825 0.0538874 0 -0.00356825 0.0538874 0.01 -0.00844303 0.0527754 0.01 0.0025 -5.93464e-17 0 0.0025 -5.93464e-17 0.01 -0.00356825 0.0538874 0.01 0.00182323 0.0180971 0.01 -0.00020329 0.036093 0.01 -0.00356825 0.0538874 0 0.00182323 0.0180971 0 -0.00020329 0.036093 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="146">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00860581 -0.054221 0 -0.00373104 -0.055333 0 -0.00373104 -0.055333 0.01 -0.00860581 -0.054221 0.01 -0.00860581 -0.054221 0 -0.00373104 -0.055333 0 -0.0025 -5.97138e-17 0 -0.00522003 -0.0363165 0 -0.00318096 -0.0182091 0 -0.00860581 0.054221 0 -0.00318096 0.0182091 0 -0.00522003 0.0363165 0 -0.00373104 0.055333 0 0.0025 -6.09384e-17 0 0.00180508 0.0185825 0 -0.000275809 0.0370613 0 -0.000275809 -0.0370613 0 0.00180508 -0.0185825 0 -0.00373104 -0.055333 0 -0.00373104 -0.055333 0.01 0.0025 -6.09384e-17 0.01 -0.000275809 -0.0370613 0.01 0.00180508 -0.0185825 0.01 0.0025 -6.09384e-17 0 -0.000275809 -0.0370613 0 0.00180508 -0.0185825 0 -0.00860581 -0.054221 0.01 -0.00373104 -0.055333 0.01 -0.0025 -5.97138e-17 0.01 -0.00522003 -0.0363165 0.01 -0.00318096 -0.0182091 0.01 -0.00860581 0.054221 0.01 -0.00318096 0.0182091 0.01 -0.00522003 0.0363165 0.01 -0.00373104 0.055333 0.01 0.0025 -6.09384e-17 0.01 0.00180508 0.0185825 0.01 -0.000275809 0.0370613 0.01 -0.000275809 -0.0370613 0.01 0.00180508 -0.0185825 0.01 -0.00860581 -0.054221 0 -0.00860581 -0.054221 0.01 -0.0025 -5.97138e-17 0.01 -0.00522003 -0.0363165 0.01 -0.00318096 -0.0182091 0.01 -0.0025 -5.97138e-17 0 -0.00522003 -0.0363165 0 -0.00318096 -0.0182091 0 -0.0025 -5.97138e-17 0 -0.0025 -5.97138e-17 0.01 -0.00860581 0.054221 0.01 -0.00318096 0.0182091 0.01 -0.00522003 0.0363165 0.01 -0.00860581 0.054221 0 -0.00318096 0.0182091 0 -0.00522003 0.0363165 0 -0.00860581 0.054221 0 -0.00373104 0.055333 0 -0.00373104 0.055333 0.01 -0.00860581 0.054221 0.01 0.0025 -6.09384e-17 0 0.0025 -6.09384e-17 0.01 -0.00373104 0.055333 0.01 0.00180508 0.0185825 0.01 -0.000275809 0.0370613 0.01 -0.00373104 0.055333 0 0.00180508 0.0185825 0 -0.000275809 0.0370613 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="147">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00868596 -0.0549326 0 -0.00381118 -0.0560446 0 -0.00381118 -0.0560446 0.01 -0.00868596 -0.0549326 0.01 -0.00868596 -0.0549326 0 -0.00381118 -0.0560446 0 -0.0025 -6.04976e-17 0 -0.00525573 -0.0367931 0 -0.0031899 -0.0184481 0 -0.00868596 0.0549326 0 -0.0031899 0.0184481 0 -0.00525573 0.0367931 0 -0.00381118 0.0560446 0 0.0025 -6.17222e-17 0 0.00179614 0.0188215 0 -0.000311511 0.0375379 0 -0.000311511 -0.0375379 0 0.00179614 -0.0188215 0 -0.00381118 -0.0560446 0 -0.00381118 -0.0560446 0.01 0.0025 -6.17222e-17 0.01 -0.000311511 -0.0375379 0.01 0.00179614 -0.0188215 0.01 0.0025 -6.17222e-17 0 -0.000311511 -0.0375379 0 0.00179614 -0.0188215 0 -0.00868596 -0.0549326 0.01 -0.00381118 -0.0560446 0.01 -0.0025 -6.04976e-17 0.01 -0.00525573 -0.0367931 0.01 -0.0031899 -0.0184481 0.01 -0.00868596 0.0549326 0.01 -0.0031899 0.0184481 0.01 -0.00525573 0.0367931 0.01 -0.00381118 0.0560446 0.01 0.0025 -6.17222e-17 0.01 0.00179614 0.0188215 0.01 -0.000311511 0.0375379 0.01 -0.000311511 -0.0375379 0.01 0.00179614 -0.0188215 0.01 -0.00868596 -0.0549326 0 -0.00868596 -0.0549326 0.01 -0.0025 -6.04976e-17 0.01 -0.00525573 -0.0367931 0.01 -0.0031899 -0.0184481 0.01 -0.0025 -6.04976e-17 0 -0.00525573 -0.0367931 0 -0.0031899 -0.0184481 0 -0.0025 -6.04976e-17 0 -0.0025 -6.04976e-17 0.01 -0.00868596 0.0549326 0.01 -0.0031899 0.0184481 0.01 -0.00525573 0.0367931 0.01 -0.00868596 0.0549326 0 -0.0031899 0.0184481 0 -0.00525573 0.0367931 0 -0.00868596 0.0549326 0 -0.00381118 0.0560446 0 -0.00381118 0.0560446 0.01 -0.00868596 0.0549326 0.01 0.0025 -6.17222e-17 0 0.0025 -6.17222e-17 0.01 -0.00381118 0.0560446 0.01 0.00179614 0.0188215 0.01 -0.000311511 0.0375379 0.01 -0.00381118 0.0560446 0 0.00179614 0.0188215 0 -0.000311511 0.0375379 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="148">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00885125 -0.0564005 0 -0.00397647 -0.0575125 0 -0.00397647 -0.0575125 0.01 -0.00885125 -0.0564005 0.01 -0.00885125 -0.0564005 0 -0.00397647 -0.0575125 0 -0.0025 -6.21141e-17 0 -0.00532936 -0.0377763 0 -0.00320833 -0.018941 0 -0.00885125 0.0564005 0 -0.00320833 0.018941 0 -0.00532936 0.0377763 0 -0.00397647 0.0575125 0 0.0025 -6.33387e-17 0 0.0017777 0.0193145 0 -0.000385146 0.0385211 0 -0.000385146 -0.0385211 0 0.0017777 -0.0193145 0 -0.00397647 -0.0575125 0 -0.00397647 -0.0575125 0.01 0.0025 -6.33387e-17 0.01 -0.000385146 -0.0385211 0.01 0.0017777 -0.0193145 0.01 0.0025 -6.33387e-17 0 -0.000385146 -0.0385211 0 0.0017777 -0.0193145 0 -0.00885125 -0.0564005 0.01 -0.00397647 -0.0575125 0.01 -0.0025 -6.21141e-17 0.01 -0.00532936 -0.0377763 0.01 -0.00320833 -0.018941 0.01 -0.00885125 0.0564005 0.01 -0.00320833 0.018941 0.01 -0.00532936 0.0377763 0.01 -0.00397647 0.0575125 0.01 0.0025 -6.33387e-17 0.01 0.0017777 0.0193145 0.01 -0.000385146 0.0385211 0.01 -0.000385146 -0.0385211 0.01 0.0017777 -0.0193145 0.01 -0.00885125 -0.0564005 0 -0.00885125 -0.0564005 0.01 -0.0025 -6.21141e-17 0.01 -0.00532936 -0.0377763 0.01 -0.00320833 -0.018941 0.01 -0.0025 -6.21141e-17 0 -0.00532936 -0.0377763 0 -0.00320833 -0.018941 0 -0.0025 -6.21141e-17 0 -0.0025 -6.21141e-17 0.01 -0.00885125 0.0564005 0.01 -0.00320833 0.018941 0.01 -0.00532936 0.0377763 0.01 -0.00885125 0.0564005 0 -0.00320833 0.018941 0 -0.00532936 0.0377763 0 -0.00885125 0.0564005 0 -0.00397647 0.0575125 0 -0.00397647 0.0575125 0.01 -0.00885125 0.0564005 0.01 0.0025 -6.33387e-17 0 0.0025 -6.33387e-17 0.01 -0.00397647 0.0575125 0.01 0.0017777 0.0193145 0.01 -0.000385146 0.0385211 0.01 -0.00397647 0.0575125 0 0.0017777 0.0193145 0 -0.000385146 0.0385211 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="149">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00893139 -0.0571122 0 -0.00405661 -0.0582242 0 -0.00405661 -0.0582242 0.01 -0.00893139 -0.0571122 0.01 -0.00893139 -0.0571122 0 -0.00405661 -0.0582242 0 -0.0025 -6.28979e-17 0 -0.00536506 -0.0382529 0 -0.00321727 -0.01918 0 -0.00893139 0.0571122 0 -0.00321727 0.01918 0 -0.00536506 0.0382529 0 -0.00405661 0.0582242 0 0.0025 -6.41225e-17 0 0.00176877 0.0195535 0 -0.000420848 0.0389977 0 -0.000420848 -0.0389977 0 0.00176877 -0.0195535 0 -0.00405661 -0.0582242 0 -0.00405661 -0.0582242 0.01 0.0025 -6.41225e-17 0.01 -0.000420848 -0.0389977 0.01 0.00176877 -0.0195535 0.01 0.0025 -6.41225e-17 0 -0.000420848 -0.0389977 0 0.00176877 -0.0195535 0 -0.00893139 -0.0571122 0.01 -0.00405661 -0.0582242 0.01 -0.0025 -6.28979e-17 0.01 -0.00536506 -0.0382529 0.01 -0.00321727 -0.01918 0.01 -0.00893139 0.0571122 0.01 -0.00321727 0.01918 0.01 -0.00536506 0.0382529 0.01 -0.00405661 0.0582242 0.01 0.0025 -6.41225e-17 0.01 0.00176877 0.0195535 0.01 -0.000420848 0.0389977 0.01 -0.000420848 -0.0389977 0.01 0.00176877 -0.0195535 0.01 -0.00893139 -0.0571122 0 -0.00893139 -0.0571122 0.01 -0.0025 -6.28979e-17 0.01 -0.00536506 -0.0382529 0.01 -0.00321727 -0.01918 0.01 -0.0025 -6.28979e-17 0 -0.00536506 -0.0382529 0 -0.00321727 -0.01918 0 -0.0025 -6.28979e-17 0 -0.0025 -6.28979e-17 0.01 -0.00893139 0.0571122 0.01 -0.00321727 0.01918 0.01 -0.00536506 0.0382529 0.01 -0.00893139 0.0571122 0 -0.00321727 0.01918 0 -0.00536506 0.0382529 0 -0.00893139 0.0571122 0 -0.00405661 0.0582242 0 -0.00405661 0.0582242 0.01 -0.00893139 0.0571122 0.01 0.0025 -6.41225e-17 0 0.0025 -6.41225e-17 0.01 -0.00405661 0.0582242 0.01 0.00176877 0.0195535 0.01 -0.000420848 0.0389977 0.01 -0.00405661 0.0582242 0 0.00176877 0.0195535 0 -0.000420848 0.0389977 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="150">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00909418 -0.0585578 0 -0.0042194 -0.0596698 0 -0.0042194 -0.0596698 0.01 -0.00909418 -0.0585578 0.01 -0.00909418 -0.0585578 0 -0.0042194 -0.0596698 0 -0.0025 -6.44899e-17 0 -0.00543758 -0.0392212 0 -0.00323542 -0.0196655 0 -0.00909418 0.0585578 0 -0.00323542 0.0196655 0 -0.00543758 0.0392212 0 -0.0042194 0.0596698 0 0.0025 -6.57145e-17 0 0.00175061 0.020039 0 -0.000493367 0.039966 0 -0.000493367 -0.039966 0 0.00175061 -0.020039 0 -0.0042194 -0.0596698 0 -0.0042194 -0.0596698 0.01 0.0025 -6.57145e-17 0.01 -0.000493367 -0.039966 0.01 0.00175061 -0.020039 0.01 0.0025 -6.57145e-17 0 -0.000493367 -0.039966 0 0.00175061 -0.020039 0 -0.00909418 -0.0585578 0.01 -0.0042194 -0.0596698 0.01 -0.0025 -6.44899e-17 0.01 -0.00543758 -0.0392212 0.01 -0.00323542 -0.0196655 0.01 -0.00909418 0.0585578 0.01 -0.00323542 0.0196655 0.01 -0.00543758 0.0392212 0.01 -0.0042194 0.0596698 0.01 0.0025 -6.57145e-17 0.01 0.00175061 0.020039 0.01 -0.000493367 0.039966 0.01 -0.000493367 -0.039966 0.01 0.00175061 -0.020039 0.01 -0.00909418 -0.0585578 0 -0.00909418 -0.0585578 0.01 -0.0025 -6.44899e-17 0.01 -0.00543758 -0.0392212 0.01 -0.00323542 -0.0196655 0.01 -0.0025 -6.44899e-17 0 -0.00543758 -0.0392212 0 -0.00323542 -0.0196655 0 -0.0025 -6.44899e-17 0 -0.0025 -6.44899e-17 0.01 -0.00909418 0.0585578 0.01 -0.00323542 0.0196655 0.01 -0.00543758 0.0392212 0.01 -0.00909418 0.0585578 0 -0.00323542 0.0196655 0 -0.00543758 0.0392212 0 -0.00909418 0.0585578 0 -0.0042194 0.0596698 0 -0.0042194 0.0596698 0.01 -0.00909418 0.0585578 0.01 0.0025 -6.57145e-17 0 0.0025 -6.57145e-17 0.01 -0.0042194 0.0596698 0.01 0.00175061 0.020039 0.01 -0.000493367 0.039966 0.01 -0.0042194 0.0596698 0 0.00175061 0.020039 0 -0.000493367 0.039966 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="151">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00917432 -0.0592694 0 -0.00429954 -0.0603814 0 -0.00429954 -0.0603814 0.01 -0.00917432 -0.0592694 0.01 -0.00917432 -0.0592694 0 -0.00429954 -0.0603814 0 -0.0025 -6.52737e-17 0 -0.00547328 -0.0396979 0 -0.00324436 -0.0199045 0 -0.00917432 0.0592694 0 -0.00324436 0.0199045 0 -0.00547328 0.0396979 0 -0.00429954 0.0603814 0 0.0025 -6.64983e-17 0 0.00174167 0.020278 0 -0.000529069 0.0404427 0 -0.000529069 -0.0404427 0 0.00174167 -0.020278 0 -0.00429954 -0.0603814 0 -0.00429954 -0.0603814 0.01 0.0025 -6.64983e-17 0.01 -0.000529069 -0.0404427 0.01 0.00174167 -0.020278 0.01 0.0025 -6.64983e-17 0 -0.000529069 -0.0404427 0 0.00174167 -0.020278 0 -0.00917432 -0.0592694 0.01 -0.00429954 -0.0603814 0.01 -0.0025 -6.52737e-17 0.01 -0.00547328 -0.0396979 0.01 -0.00324436 -0.0199045 0.01 -0.00917432 0.0592694 0.01 -0.00324436 0.0199045 0.01 -0.00547328 0.0396979 0.01 -0.00429954 0.0603814 0.01 0.0025 -6.64983e-17 0.01 0.00174167 0.020278 0.01 -0.000529069 0.0404427 0.01 -0.000529069 -0.0404427 0.01 0.00174167 -0.020278 0.01 -0.00917432 -0.0592694 0 -0.00917432 -0.0592694 0.01 -0.0025 -6.52737e-17 0.01 -0.00547328 -0.0396979 0.01 -0.00324436 -0.0199045 0.01 -0.0025 -6.52737e-17 0 -0.00547328 -0.0396979 0 -0.00324436 -0.0199045 0 -0.0025 -6.52737e-17 0 -0.0025 -6.52737e-17 0.01 -0.00917432 0.0592694 0.01 -0.00324436 0.0199045 0.01 -0.00547328 0.0396979 0.01 -0.00917432 0.0592694 0 -0.00324436 0.0199045 0 -0.00547328 0.0396979 0 -0.00917432 0.0592694 0 -0.00429954 0.0603814 0 -0.00429954 0.0603814 0.01 -0.00917432 0.0592694 0.01 0.0025 -6.64983e-17 0 0.0025 -6.64983e-17 0.01 -0.00429954 0.0603814 0.01 0.00174167 0.020278 0.01 -0.000529069 0.0404427 0.01 -0.00429954 0.0603814 0 0.00174167 0.020278 0 -0.000529069 0.0404427 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="134">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00713821 -0.0411884 0 -0.00226344 -0.0423004 0 -0.00226344 -0.0423004 0.01 -0.00713821 -0.0411884 0.01 -0.00713821 -0.0411884 0 -0.00226344 -0.0423004 0 -0.0025 -4.53609e-17 0 -0.00456624 -0.0275874 0 -0.00301728 -0.0138323 0 -0.00713821 0.0411884 0 -0.00301728 0.0138323 0 -0.00456624 0.0275874 0 -0.00226344 0.0423004 0 0.0025 -4.65856e-17 0 0.00196875 0.0142058 0 0.000377979 0.0283322 0 0.000377979 -0.0283322 0 0.00196875 -0.0142058 0 -0.00226344 -0.0423004 0 -0.00226344 -0.0423004 0.01 0.0025 -4.65856e-17 0.01 0.000377979 -0.0283322 0.01 0.00196875 -0.0142058 0.01 0.0025 -4.65856e-17 0 0.000377979 -0.0283322 0 0.00196875 -0.0142058 0 -0.00713821 -0.0411884 0.01 -0.00226344 -0.0423004 0.01 -0.0025 -4.53609e-17 0.01 -0.00456624 -0.0275874 0.01 -0.00301728 -0.0138323 0.01 -0.00713821 0.0411884 0.01 -0.00301728 0.0138323 0.01 -0.00456624 0.0275874 0.01 -0.00226344 0.0423004 0.01 0.0025 -4.65856e-17 0.01 0.00196875 0.0142058 0.01 0.000377979 0.0283322 0.01 0.000377979 -0.0283322 0.01 0.00196875 -0.0142058 0.01 -0.00713821 -0.0411884 0 -0.00713821 -0.0411884 0.01 -0.0025 -4.53609e-17 0.01 -0.00456624 -0.0275874 0.01 -0.00301728 -0.0138323 0.01 -0.0025 -4.53609e-17 0 -0.00456624 -0.0275874 0 -0.00301728 -0.0138323 0 -0.0025 -4.53609e-17 0 -0.0025 -4.53609e-17 0.01 -0.00713821 0.0411884 0.01 -0.00301728 0.0138323 0.01 -0.00456624 0.0275874 0.01 -0.00713821 0.0411884 0 -0.00301728 0.0138323 0 -0.00456624 0.0275874 0 -0.00713821 0.0411884 0 -0.00226344 0.0423004 0 -0.00226344 0.0423004 0.01 -0.00713821 0.0411884 0.01 0.0025 -4.65856e-17 0 0.0025 -4.65856e-17 0.01 -0.00226344 0.0423004 0.01 0.00196875 0.0142058 0.01 0.000377979 0.0283322 0.01 -0.00226344 0.0423004 0 0.00196875 0.0142058 0 0.000377979 0.0283322 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="135">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00721836 -0.0419 0 -0.00234358 -0.043012 0 -0.00234358 -0.043012 0.01 -0.00721836 -0.0419 0.01 -0.00721836 -0.0419 0 -0.00234358 -0.043012 0 -0.0025 -4.61447e-17 0 -0.00460194 -0.0280641 0 -0.00302622 -0.0140713 0 -0.00721836 0.0419 0 -0.00302622 0.0140713 0 -0.00460194 0.0280641 0 -0.00234358 0.043012 0 0.0025 -4.73693e-17 0 0.00195981 0.0144448 0 0.000342277 0.0288089 0 0.000342277 -0.0288089 0 0.00195981 -0.0144448 0 -0.00234358 -0.043012 0 -0.00234358 -0.043012 0.01 0.0025 -4.73693e-17 0.01 0.000342277 -0.0288089 0.01 0.00195981 -0.0144448 0.01 0.0025 -4.73693e-17 0 0.000342277 -0.0288089 0 0.00195981 -0.0144448 0 -0.00721836 -0.0419 0.01 -0.00234358 -0.043012 0.01 -0.0025 -4.61447e-17 0.01 -0.00460194 -0.0280641 0.01 -0.00302622 -0.0140713 0.01 -0.00721836 0.0419 0.01 -0.00302622 0.0140713 0.01 -0.00460194 0.0280641 0.01 -0.00234358 0.043012 0.01 0.0025 -4.73693e-17 0.01 0.00195981 0.0144448 0.01 0.000342277 0.0288089 0.01 0.000342277 -0.0288089 0.01 0.00195981 -0.0144448 0.01 -0.00721836 -0.0419 0 -0.00721836 -0.0419 0.01 -0.0025 -4.61447e-17 0.01 -0.00460194 -0.0280641 0.01 -0.00302622 -0.0140713 0.01 -0.0025 -4.61447e-17 0 -0.00460194 -0.0280641 0 -0.00302622 -0.0140713 0 -0.0025 -4.61447e-17 0 -0.0025 -4.61447e-17 0.01 -0.00721836 0.0419 0.01 -0.00302622 0.0140713 0.01 -0.00460194 0.0280641 0.01 -0.00721836 0.0419 0 -0.00302622 0.0140713 0 -0.00460194 0.0280641 0 -0.00721836 0.0419 0 -0.00234358 0.043012 0 -0.00234358 0.043012 0.01 -0.00721836 0.0419 0.01 0.0025 -4.73693e-17 0 0.0025 -4.73693e-17 0.01 -0.00234358 0.043012 0.01 0.00195981 0.0144448 0.01 0.000342277 0.0288089 0.01 -0.00234358 0.043012 0 0.00195981 0.0144448 0 0.000342277 0.0288089 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="136">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00738365 -0.0433679 0 -0.00250887 -0.0444799 0 -0.00250887 -0.0444799 0.01 -0.00738365 -0.0433679 0.01 -0.00738365 -0.0433679 0 -0.00250887 -0.0444799 0 -0.0025 -4.77612e-17 0 -0.00467557 -0.0290472 0 -0.00304465 -0.0145643 0 -0.00738365 0.0433679 0 -0.00304465 0.0145643 0 -0.00467557 0.0290472 0 -0.00250887 0.0444799 0 0.0025 -4.89859e-17 0 0.00194138 0.0149377 0 0.000268642 0.029792 0 0.000268642 -0.029792 0 0.00194138 -0.0149377 0 -0.00250887 -0.0444799 0 -0.00250887 -0.0444799 0.01 0.0025 -4.89859e-17 0.01 0.000268642 -0.029792 0.01 0.00194138 -0.0149377 0.01 0.0025 -4.89859e-17 0 0.000268642 -0.029792 0 0.00194138 -0.0149377 0 -0.00738365 -0.0433679 0.01 -0.00250887 -0.0444799 0.01 -0.0025 -4.77612e-17 0.01 -0.00467557 -0.0290472 0.01 -0.00304465 -0.0145643 0.01 -0.00738365 0.0433679 0.01 -0.00304465 0.0145643 0.01 -0.00467557 0.0290472 0.01 -0.00250887 0.0444799 0.01 0.0025 -4.89859e-17 0.01 0.00194138 0.0149377 0.01 0.000268642 0.029792 0.01 0.000268642 -0.029792 0.01 0.00194138 -0.0149377 0.01 -0.00738365 -0.0433679 0 -0.00738365 -0.0433679 0.01 -0.0025 -4.77612e-17 0.01 -0.00467557 -0.0290472 0.01 -0.00304465 -0.0145643 0.01 -0.0025 -4.77612e-17 0 -0.00467557 -0.0290472 0 -0.00304465 -0.0145643 0 -0.0025 -4.77612e-17 0 -0.0025 -4.77612e-17 0.01 -0.00738365 0.0433679 0.01 -0.00304465 0.0145643 0.01 -0.00467557 0.0290472 0.01 -0.00738365 0.0433679 0 -0.00304465 0.0145643 0 -0.00467557 0.0290472 0 -0.00738365 0.0433679 0 -0.00250887 0.0444799 0 -0.00250887 0.0444799 0.01 -0.00738365 0.0433679 0.01 0.0025 -4.89859e-17 0 0.0025 -4.89859e-17 0.01 -0.00250887 0.0444799 0.01 0.00194138 0.0149377 0.01 0.000268642 0.029792 0.01 -0.00250887 0.0444799 0 0.00194138 0.0149377 0 0.000268642 0.029792 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="137">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00746379 -0.0440796 0 -0.00258901 -0.0451916 0 -0.00258901 -0.0451916 0.01 -0.00746379 -0.0440796 0.01 -0.00746379 -0.0440796 0 -0.00258901 -0.0451916 0 -0.0025 -4.8545e-17 0 -0.00471128 -0.0295239 0 -0.00305359 -0.0148033 0 -0.00746379 0.0440796 0 -0.00305359 0.0148033 0 -0.00471128 0.0295239 0 -0.00258901 0.0451916 0 0.0025 -4.97696e-17 0 0.00193244 0.0151767 0 0.00023294 0.0302687 0 0.00023294 -0.0302687 0 0.00193244 -0.0151767 0 -0.00258901 -0.0451916 0 -0.00258901 -0.0451916 0.01 0.0025 -4.97696e-17 0.01 0.00023294 -0.0302687 0.01 0.00193244 -0.0151767 0.01 0.0025 -4.97696e-17 0 0.00023294 -0.0302687 0 0.00193244 -0.0151767 0 -0.00746379 -0.0440796 0.01 -0.00258901 -0.0451916 0.01 -0.0025 -4.8545e-17 0.01 -0.00471128 -0.0295239 0.01 -0.00305359 -0.0148033 0.01 -0.00746379 0.0440796 0.01 -0.00305359 0.0148033 0.01 -0.00471128 0.0295239 0.01 -0.00258901 0.0451916 0.01 0.0025 -4.97696e-17 0.01 0.00193244 0.0151767 0.01 0.00023294 0.0302687 0.01 0.00023294 -0.0302687 0.01 0.00193244 -0.0151767 0.01 -0.00746379 -0.0440796 0 -0.00746379 -0.0440796 0.01 -0.0025 -4.8545e-17 0.01 -0.00471128 -0.0295239 0.01 -0.00305359 -0.0148033 0.01 -0.0025 -4.8545e-17 0 -0.00471128 -0.0295239 0 -0.00305359 -0.0148033 0 -0.0025 -4.8545e-17 0 -0.0025 -4.8545e-17 0.01 -0.00746379 0.0440796 0.01 -0.00305359 0.0148033 0.01 -0.00471128 0.0295239 0.01 -0.00746379 0.0440796 0 -0.00305359 0.0148033 0 -0.00471128 0.0295239 0 -0.00746379 0.0440796 0 -0.00258901 0.0451916 0 -0.00258901 0.0451916 0.01 -0.00746379 0.0440796 0.01 0.0025 -4.97696e-17 0 0.0025 -4.97696e-17 0.01 -0.00258901 0.0451916 0.01 0.00193244 0.0151767 0.01 0.00023294 0.0302687 0.01 -0.00258901 0.0451916 0 0.00193244 0.0151767 0 0.00023294 0.0302687 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="138">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00762658 -0.0455252 0 -0.0027518 -0.0466372 0 -0.0027518 -0.0466372 0.01 -0.00762658 -0.0455252 0.01 -0.00762658 -0.0455252 0 -0.0027518 -0.0466372 0 -0.0025 -5.0137e-17 0 -0.00478379 -0.0304921 0 -0.00307175 -0.0152888 0 -0.00762658 0.0455252 0 -0.00307175 0.0152888 0 -0.00478379 0.0304921 0 -0.0027518 0.0466372 0 0.0025 -5.13617e-17 0 0.00191429 0.0156622 0 0.000160421 0.0312369 0 0.000160421 -0.0312369 0 0.00191429 -0.0156622 0 -0.0027518 -0.0466372 0 -0.0027518 -0.0466372 0.01 0.0025 -5.13617e-17 0.01 0.000160421 -0.0312369 0.01 0.00191429 -0.0156622 0.01 0.0025 -5.13617e-17 0 0.000160421 -0.0312369 0 0.00191429 -0.0156622 0 -0.00762658 -0.0455252 0.01 -0.0027518 -0.0466372 0.01 -0.0025 -5.0137e-17 0.01 -0.00478379 -0.0304921 0.01 -0.00307175 -0.0152888 0.01 -0.00762658 0.0455252 0.01 -0.00307175 0.0152888 0.01 -0.00478379 0.0304921 0.01 -0.0027518 0.0466372 0.01 0.0025 -5.13617e-17 0.01 0.00191429 0.0156622 0.01 0.000160421 0.0312369 0.01 0.000160421 -0.0312369 0.01 0.00191429 -0.0156622 0.01 -0.00762658 -0.0455252 0 -0.00762658 -0.0455252 0.01 -0.0025 -5.0137e-17 0.01 -0.00478379 -0.0304921 0.01 -0.00307175 -0.0152888 0.01 -0.0025 -5.0137e-17 0 -0.00478379 -0.0304921 0 -0.00307175 -0.0152888 0 -0.0025 -5.0137e-17 0 -0.0025 -5.0137e-17 0.01 -0.00762658 0.0455252 0.01 -0.00307175 0.0152888 0.01 -0.00478379 0.0304921 0.01 -0.00762658 0.0455252 0 -0.00307175 0.0152888 0 -0.00478379 0.0304921 0 -0.00762658 0.0455252 0 -0.0027518 0.0466372 0 -0.0027518 0.0466372 0.01 -0.00762658 0.0455252 0.01 0.0025 -5.13617e-17 0 0.0025 -5.13617e-17 0.01 -0.0027518 0.0466372 0.01 0.00191429 0.0156622 0.01 0.000160421 0.0312369 0.01 -0.0027518 0.0466372 0 0.00191429 0.0156622 0 0.000160421 0.0312369 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="139">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00770923 -0.0462591 0 -0.00283445 -0.0473711 0 -0.00283445 -0.0473711 0.01 -0.00770923 -0.0462591 0.01 -0.00770923 -0.0462591 0 -0.00283445 -0.0473711 0 -0.0025 -5.09453e-17 0 -0.00482061 -0.0309837 0 -0.00308096 -0.0155352 0 -0.00770923 0.0462591 0 -0.00308096 0.0155352 0 -0.00482061 0.0309837 0 -0.00283445 0.0473711 0 0.0025 -5.217e-17 0 0.00190507 0.0159087 0 0.000123604 0.0317285 0 0.000123604 -0.0317285 0 0.00190507 -0.0159087 0 -0.00283445 -0.0473711 0 -0.00283445 -0.0473711 0.01 0.0025 -5.217e-17 0.01 0.000123604 -0.0317285 0.01 0.00190507 -0.0159087 0.01 0.0025 -5.217e-17 0 0.000123604 -0.0317285 0 0.00190507 -0.0159087 0 -0.00770923 -0.0462591 0.01 -0.00283445 -0.0473711 0.01 -0.0025 -5.09453e-17 0.01 -0.00482061 -0.0309837 0.01 -0.00308096 -0.0155352 0.01 -0.00770923 0.0462591 0.01 -0.00308096 0.0155352 0.01 -0.00482061 0.0309837 0.01 -0.00283445 0.0473711 0.01 0.0025 -5.217e-17 0.01 0.00190507 0.0159087 0.01 0.000123604 0.0317285 0.01 0.000123604 -0.0317285 0.01 0.00190507 -0.0159087 0.01 -0.00770923 -0.0462591 0 -0.00770923 -0.0462591 0.01 -0.0025 -5.09453e-17 0.01 -0.00482061 -0.0309837 0.01 -0.00308096 -0.0155352 0.01 -0.0025 -5.09453e-17 0 -0.00482061 -0.0309837 0 -0.00308096 -0.0155352 0 -0.0025 -5.09453e-17 0 -0.0025 -5.09453e-17 0.01 -0.00770923 0.0462591 0.01 -0.00308096 0.0155352 0.01 -0.00482061 0.0309837 0.01 -0.00770923 0.0462591 0 -0.00308096 0.0155352 0 -0.00482061 0.0309837 0 -0.00770923 0.0462591 0 -0.00283445 0.0473711 0 -0.00283445 0.0473711 0.01 -0.00770923 0.0462591 0.01 0.0025 -5.217e-17 0 0.0025 -5.217e-17 0.01 -0.00283445 0.0473711 0.01 0.00190507 0.0159087 0.01 0.000123604 0.0317285 0.01 -0.00283445 0.0473711 0 0.00190507 0.0159087 0 0.000123604 0.0317285 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="140">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00787201 -0.0477047 0 -0.00299724 -0.0488167 0 -0.00299724 -0.0488167 0.01 -0.00787201 -0.0477047 0.01 -0.00787201 -0.0477047 0 -0.00299724 -0.0488167 0 -0.0025 -5.25373e-17 0 -0.00489313 -0.0319519 0 -0.00309912 -0.0160207 0 -0.00787201 0.0477047 0 -0.00309912 0.0160207 0 -0.00489313 0.0319519 0 -0.00299724 0.0488167 0 0.0025 -5.3762e-17 0 0.00188691 0.0163942 0 5.10846e-05 0.0326967 0 5.10846e-05 -0.0326967 0 0.00188691 -0.0163942 0 -0.00299724 -0.0488167 0 -0.00299724 -0.0488167 0.01 0.0025 -5.3762e-17 0.01 5.10846e-05 -0.0326967 0.01 0.00188691 -0.0163942 0.01 0.0025 -5.3762e-17 0 5.10846e-05 -0.0326967 0 0.00188691 -0.0163942 0 -0.00787201 -0.0477047 0.01 -0.00299724 -0.0488167 0.01 -0.0025 -5.25373e-17 0.01 -0.00489313 -0.0319519 0.01 -0.00309912 -0.0160207 0.01 -0.00787201 0.0477047 0.01 -0.00309912 0.0160207 0.01 -0.00489313 0.0319519 0.01 -0.00299724 0.0488167 0.01 0.0025 -5.3762e-17 0.01 0.00188691 0.0163942 0.01 5.10846e-05 0.0326967 0.01 5.10846e-05 -0.0326967 0.01 0.00188691 -0.0163942 0.01 -0.00787201 -0.0477047 0 -0.00787201 -0.0477047 0.01 -0.0025 -5.25373e-17 0.01 -0.00489313 -0.0319519 0.01 -0.00309912 -0.0160207 0.01 -0.0025 -5.25373e-17 0 -0.00489313 -0.0319519 0 -0.00309912 -0.0160207 0 -0.0025 -5.25373e-17 0 -0.0025 -5.25373e-17 0.01 -0.00787201 0.0477047 0.01 -0.00309912 0.0160207 0.01 -0.00489313 0.0319519 0.01 -0.00787201 0.0477047 0 -0.00309912 0.0160207 0 -0.00489313 0.0319519 0 -0.00787201 0.0477047 0 -0.00299724 0.0488167 0 -0.00299724 0.0488167 0.01 -0.00787201 0.0477047 0.01 0.0025 -5.3762e-17 0 0.0025 -5.3762e-17 0.01 -0.00299724 0.0488167 0.01 0.00188691 0.0163942 0.01 5.10846e-05 0.0326967 0.01 -0.00299724 0.0488167 0 0.00188691 0.0163942 0 5.10846e-05 0.0326967 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="141">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.00795216 -0.0484163 0 -0.00307738 -0.0495283 0 -0.00307738 -0.0495283 0.01 -0.00795216 -0.0484163 0.01 -0.00795216 -0.0484163 0 -0.00307738 -0.0495283 0 -0.0025 -5.33211e-17 0 -0.00492883 -0.0324286 0 -0.00310806 -0.0162597 0 -0.00795216 0.0484163 0 -0.00310806 0.0162597 0 -0.00492883 0.0324286 0 -0.00307738 0.0495283 0 0.0025 -5.45458e-17 0 0.00187798 0.0166332 0 1.53828e-05 0.0331734 0 1.53828e-05 -0.0331734 0 0.00187798 -0.0166332 0 -0.00307738 -0.0495283 0 -0.00307738 -0.0495283 0.01 0.0025 -5.45458e-17 0.01 1.53828e-05 -0.0331734 0.01 0.00187798 -0.0166332 0.01 0.0025 -5.45458e-17 0 1.53828e-05 -0.0331734 0 0.00187798 -0.0166332 0 -0.00795216 -0.0484163 0.01 -0.00307738 -0.0495283 0.01 -0.0025 -5.33211e-17 0.01 -0.00492883 -0.0324286 0.01 -0.00310806 -0.0162597 0.01 -0.00795216 0.0484163 0.01 -0.00310806 0.0162597 0.01 -0.00492883 0.0324286 0.01 -0.00307738 0.0495283 0.01 0.0025 -5.45458e-17 0.01 0.00187798 0.0166332 0.01 1.53828e-05 0.0331734 0.01 1.53828e-05 -0.0331734 0.01 0.00187798 -0.0166332 0.01 -0.00795216 -0.0484163 0 -0.00795216 -0.0484163 0.01 -0.0025 -5.33211e-17 0.01 -0.00492883 -0.0324286 0.01 -0.00310806 -0.0162597 0.01 -0.0025 -5.33211e-17 0 -0.00492883 -0.0324286 0 -0.00310806 -0.0162597 0 -0.0025 -5.33211e-17 0 -0.0025 -5.33211e-17 0.01 -0.00795216 0.0484163 0.01 -0.00310806 0.0162597 0.01 -0.00492883 0.0324286 0.01 -0.00795216 0.0484163 0 -0.00310806 0.0162597 0 -0.00492883 0.0324286 0 -0.00795216 0.0484163 0 -0.00307738 0.0495283 0 -0.00307738 0.0495283 0.01 -0.00795216 0.0484163 0.01 0.0025 -5.45458e-17 0 0.0025 -5.45458e-17 0.01 -0.00307738 0.0495283 0.01 0.00187798 0.0166332 0.01 1.53828e-05 0.0331734 0.01 -0.00307738 0.0495283 0 0.00187798 0.0166332 0 1.53828e-05 0.0331734 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 14 10 6 14 6 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 36 32 28 36 28 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="152">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0103489 -0.0697 0 -0.00547412 -0.070812 0 -0.00547412 -0.070812 0.01 -0.0103489 -0.0697 0.01 -0.0103489 -0.0697 0 -0.00547412 -0.070812 0 -0.0025 -7.67609e-17 0 -0.00599654 -0.0466841 0 -0.00337536 -0.0234074 0 -0.0103489 0.0697 0 -0.00337536 0.0234074 0 -0.00599654 0.0466841 0 -0.00547412 0.070812 0 0.0025 -7.79855e-17 0 0.00161068 0.0237809 0 -0.00105232 0.0474289 0 -0.00105232 -0.0474289 0 0.00161068 -0.0237809 0 -0.00547412 -0.070812 0 -0.00547412 -0.070812 0.01 0.0025 -7.79855e-17 0.01 -0.00105232 -0.0474289 0.01 0.00161068 -0.0237809 0.01 0.0025 -7.79855e-17 0 -0.00105232 -0.0474289 0 0.00161068 -0.0237809 0 -0.0103489 -0.0697 0.01 -0.00547412 -0.070812 0.01 -0.0025 -7.67609e-17 0.01 -0.00599654 -0.0466841 0.01 -0.00337536 -0.0234074 0.01 -0.0103489 0.0697 0.01 -0.00337536 0.0234074 0.01 -0.00599654 0.0466841 0.01 -0.00547412 0.070812 0.01 0.0025 -7.79855e-17 0.01 0.00161068 0.0237809 0.01 -0.00105232 0.0474289 0.01 -0.00105232 -0.0474289 0.01 0.00161068 -0.0237809 0.01 -0.0103489 -0.0697 0 -0.0103489 -0.0697 0.01 -0.0025 -7.67609e-17 0.01 -0.00599654 -0.0466841 0.01 -0.00337536 -0.0234074 0.01 -0.0025 -7.67609e-17 0 -0.00599654 -0.0466841 0 -0.00337536 -0.0234074 0 -0.0025 -7.67609e-17 0 -0.0025 -7.67609e-17 0.01 -0.0103489 0.0697 0.01 -0.00337536 0.0234074 0.01 -0.00599654 0.0466841 0.01 -0.0103489 0.0697 0 -0.00337536 0.0234074 0 -0.00599654 0.0466841 0 -0.0103489 0.0697 0 -0.00547412 0.070812 0 -0.00547412 0.070812 0.01 -0.0103489 0.0697 0.01 0.0025 -7.79855e-17 0 0.0025 -7.79855e-17 0.01 -0.00547412 0.070812 0.01 0.00161068 0.0237809 0.01 -0.00105232 0.0474289 0.01 -0.00547412 0.070812 0 0.00161068 0.0237809 0 -0.00105232 0.0474289 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="153">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0104065 -0.0702115 0 -0.00553172 -0.0713235 0 -0.00553172 -0.0713235 0.01 -0.0104065 -0.0702115 0.01 -0.0104065 -0.0702115 0 -0.00553172 -0.0713235 0 -0.0025 -7.73242e-17 0 -0.0060222 -0.0470267 0 -0.00338178 -0.0235792 0 -0.0104065 0.0702115 0 -0.00338178 0.0235792 0 -0.0060222 0.0470267 0 -0.00553172 0.0713235 0 0.0025 -7.85488e-17 0 0.00160425 0.0239527 0 -0.00107798 0.0477715 0 -0.00107798 -0.0477715 0 0.00160425 -0.0239527 0 -0.00553172 -0.0713235 0 -0.00553172 -0.0713235 0.01 0.0025 -7.85488e-17 0.01 -0.00107798 -0.0477715 0.01 0.00160425 -0.0239527 0.01 0.0025 -7.85488e-17 0 -0.00107798 -0.0477715 0 0.00160425 -0.0239527 0 -0.0104065 -0.0702115 0.01 -0.00553172 -0.0713235 0.01 -0.0025 -7.73242e-17 0.01 -0.0060222 -0.0470267 0.01 -0.00338178 -0.0235792 0.01 -0.0104065 0.0702115 0.01 -0.00338178 0.0235792 0.01 -0.0060222 0.0470267 0.01 -0.00553172 0.0713235 0.01 0.0025 -7.85488e-17 0.01 0.00160425 0.0239527 0.01 -0.00107798 0.0477715 0.01 -0.00107798 -0.0477715 0.01 0.00160425 -0.0239527 0.01 -0.0104065 -0.0702115 0 -0.0104065 -0.0702115 0.01 -0.0025 -7.73242e-17 0.01 -0.0060222 -0.0470267 0.01 -0.00338178 -0.0235792 0.01 -0.0025 -7.73242e-17 0 -0.0060222 -0.0470267 0 -0.00338178 -0.0235792 0 -0.0025 -7.73242e-17 0 -0.0025 -7.73242e-17 0.01 -0.0104065 0.0702115 0.01 -0.00338178 0.0235792 0.01 -0.0060222 0.0470267 0.01 -0.0104065 0.0702115 0 -0.00338178 0.0235792 0 -0.0060222 0.0470267 0 -0.0104065 0.0702115 0 -0.00553172 0.0713235 0 -0.00553172 0.0713235 0.01 -0.0104065 0.0702115 0.01 0.0025 -7.85488e-17 0 0.0025 -7.85488e-17 0.01 -0.00553172 0.0713235 0.01 0.00160425 0.0239527 0.01 -0.00107798 0.0477715 0.01 -0.00553172 0.0713235 0 0.00160425 0.0239527 0 -0.00107798 0.0477715 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="162">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.011536 -0.0802417 0 -0.00666122 -0.0813537 0 -0.00666122 -0.0813537 0.01 -0.011536 -0.0802417 0.01 -0.011536 -0.0802417 0 -0.00666122 -0.0813537 0 -0.0025 -8.83705e-17 0 -0.00652537 -0.0537448 0 -0.00350775 -0.0269477 0 -0.011536 0.0802417 0 -0.00350775 0.0269477 0 -0.00652537 0.0537448 0 -0.00666122 0.0813537 0 0.0025 -8.95952e-17 0 0.00147828 0.0273211 0 -0.00158115 0.0544896 0 -0.00158115 -0.0544896 0 0.00147828 -0.0273211 0 -0.00666122 -0.0813537 0 -0.00666122 -0.0813537 0.01 0.0025 -8.95952e-17 0.01 -0.00158115 -0.0544896 0.01 0.00147828 -0.0273211 0.01 0.0025 -8.95952e-17 0 -0.00158115 -0.0544896 0 0.00147828 -0.0273211 0 -0.011536 -0.0802417 0.01 -0.00666122 -0.0813537 0.01 -0.0025 -8.83705e-17 0.01 -0.00652537 -0.0537448 0.01 -0.00350775 -0.0269477 0.01 -0.011536 0.0802417 0.01 -0.00350775 0.0269477 0.01 -0.00652537 0.0537448 0.01 -0.00666122 0.0813537 0.01 0.0025 -8.95952e-17 0.01 0.00147828 0.0273211 0.01 -0.00158115 0.0544896 0.01 -0.00158115 -0.0544896 0.01 0.00147828 -0.0273211 0.01 -0.011536 -0.0802417 0 -0.011536 -0.0802417 0.01 -0.0025 -8.83705e-17 0.01 -0.00652537 -0.0537448 0.01 -0.00350775 -0.0269477 0.01 -0.0025 -8.83705e-17 0 -0.00652537 -0.0537448 0 -0.00350775 -0.0269477 0 -0.0025 -8.83705e-17 0 -0.0025 -8.83705e-17 0.01 -0.011536 0.0802417 0.01 -0.00350775 0.0269477 0.01 -0.00652537 0.0537448 0.01 -0.011536 0.0802417 0 -0.00350775 0.0269477 0 -0.00652537 0.0537448 0 -0.011536 0.0802417 0 -0.00666122 0.0813537 0 -0.00666122 0.0813537 0.01 -0.011536 0.0802417 0.01 0.0025 -8.95952e-17 0 0.0025 -8.95952e-17 0.01 -0.00666122 0.0813537 0.01 0.00147828 0.0273211 0.01 -0.00158115 0.0544896 0.01 -0.00666122 0.0813537 0 0.00147828 0.0273211 0 -0.00158115 0.0544896 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="163">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0115936 -0.0807532 0 -0.00671883 -0.0818652 0 -0.00671883 -0.0818652 0.01 -0.0115936 -0.0807532 0.01 -0.0115936 -0.0807532 0 -0.00671883 -0.0818652 0 -0.0025 -8.89339e-17 0 -0.00655103 -0.0540874 0 -0.00351417 -0.0271195 0 -0.0115936 0.0807532 0 -0.00351417 0.0271195 0 -0.00655103 0.0540874 0 -0.00671883 0.0818652 0 0.0025 -9.01585e-17 0 0.00147186 0.0274929 0 -0.00160681 0.0548322 0 -0.00160681 -0.0548322 0 0.00147186 -0.0274929 0 -0.00671883 -0.0818652 0 -0.00671883 -0.0818652 0.01 0.0025 -9.01585e-17 0.01 -0.00160681 -0.0548322 0.01 0.00147186 -0.0274929 0.01 0.0025 -9.01585e-17 0 -0.00160681 -0.0548322 0 0.00147186 -0.0274929 0 -0.0115936 -0.0807532 0.01 -0.00671883 -0.0818652 0.01 -0.0025 -8.89339e-17 0.01 -0.00655103 -0.0540874 0.01 -0.00351417 -0.0271195 0.01 -0.0115936 0.0807532 0.01 -0.00351417 0.0271195 0.01 -0.00655103 0.0540874 0.01 -0.00671883 0.0818652 0.01 0.0025 -9.01585e-17 0.01 0.00147186 0.0274929 0.01 -0.00160681 0.0548322 0.01 -0.00160681 -0.0548322 0.01 0.00147186 -0.0274929 0.01 -0.0115936 -0.0807532 0 -0.0115936 -0.0807532 0.01 -0.0025 -8.89339e-17 0.01 -0.00655103 -0.0540874 0.01 -0.00351417 -0.0271195 0.01 -0.0025 -8.89339e-17 0 -0.00655103 -0.0540874 0 -0.00351417 -0.0271195 0 -0.0025 -8.89339e-17 0 -0.0025 -8.89339e-17 0.01 -0.0115936 0.0807532 0.01 -0.00351417 0.0271195 0.01 -0.00655103 0.0540874 0.01 -0.0115936 0.0807532 0 -0.00351417 0.0271195 0 -0.00655103 0.0540874 0 -0.0115936 0.0807532 0 -0.00671883 0.0818652 0 -0.00671883 0.0818652 0.01 -0.0115936 0.0807532 0.01 0.0025 -9.01585e-17 0 0.0025 -9.01585e-17 0.01 -0.00671883 0.0818652 0.01 0.00147186 0.0274929 0.01 -0.00160681 0.0548322 0.01 -0.00671883 0.0818652 0 0.00147186 0.0274929 0 -0.00160681 0.0548322 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="164">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0117739 -0.0823545 0 -0.00689915 -0.0834665 0 -0.00689915 -0.0834665 0.01 -0.0117739 -0.0823545 0.01 -0.0117739 -0.0823545 0 -0.00689915 -0.0834665 0 -0.0025 -9.06973e-17 0 -0.00663136 -0.0551599 0 -0.00353428 -0.0276572 0 -0.0117739 0.0823545 0 -0.00353428 0.0276572 0 -0.00663136 0.0551599 0 -0.00689915 0.0834665 0 0.0025 -9.1922e-17 0 0.00145175 0.0280307 0 -0.00168714 0.0559047 0 -0.00168714 -0.0559047 0 0.00145175 -0.0280307 0 -0.00689915 -0.0834665 0 -0.00689915 -0.0834665 0.01 0.0025 -9.1922e-17 0.01 -0.00168714 -0.0559047 0.01 0.00145175 -0.0280307 0.01 0.0025 -9.1922e-17 0 -0.00168714 -0.0559047 0 0.00145175 -0.0280307 0 -0.0117739 -0.0823545 0.01 -0.00689915 -0.0834665 0.01 -0.0025 -9.06973e-17 0.01 -0.00663136 -0.0551599 0.01 -0.00353428 -0.0276572 0.01 -0.0117739 0.0823545 0.01 -0.00353428 0.0276572 0.01 -0.00663136 0.0551599 0.01 -0.00689915 0.0834665 0.01 0.0025 -9.1922e-17 0.01 0.00145175 0.0280307 0.01 -0.00168714 0.0559047 0.01 -0.00168714 -0.0559047 0.01 0.00145175 -0.0280307 0.01 -0.0117739 -0.0823545 0 -0.0117739 -0.0823545 0.01 -0.0025 -9.06973e-17 0.01 -0.00663136 -0.0551599 0.01 -0.00353428 -0.0276572 0.01 -0.0025 -9.06973e-17 0 -0.00663136 -0.0551599 0 -0.00353428 -0.0276572 0 -0.0025 -9.06973e-17 0 -0.0025 -9.06973e-17 0.01 -0.0117739 0.0823545 0.01 -0.00353428 0.0276572 0.01 -0.00663136 0.0551599 0.01 -0.0117739 0.0823545 0 -0.00353428 0.0276572 0 -0.00663136 0.0551599 0 -0.0117739 0.0823545 0 -0.00689915 0.0834665 0 -0.00689915 0.0834665 0.01 -0.0117739 0.0823545 0.01 0.0025 -9.1922e-17 0 0.0025 -9.1922e-17 0.01 -0.00689915 0.0834665 0.01 0.00145175 0.0280307 0.01 -0.00168714 0.0559047 0.01 -0.00689915 0.0834665 0 0.00145175 0.0280307 0 -0.00168714 0.0559047 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="165">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0118315 -0.082866 0 -0.00695675 -0.083978 0 -0.00695675 -0.083978 0.01 -0.0118315 -0.082866 0.01 -0.0118315 -0.082866 0 -0.00695675 -0.083978 0 -0.0025 -9.12607e-17 0 -0.00665702 -0.0555025 0 -0.00354071 -0.027829 0 -0.0118315 0.082866 0 -0.00354071 0.027829 0 -0.00665702 0.0555025 0 -0.00695675 0.083978 0 0.0025 -9.24853e-17 0 0.00144533 0.0282024 0 -0.0017128 0.0562473 0 -0.0017128 -0.0562473 0 0.00144533 -0.0282024 0 -0.00695675 -0.083978 0 -0.00695675 -0.083978 0.01 0.0025 -9.24853e-17 0.01 -0.0017128 -0.0562473 0.01 0.00144533 -0.0282024 0.01 0.0025 -9.24853e-17 0 -0.0017128 -0.0562473 0 0.00144533 -0.0282024 0 -0.0118315 -0.082866 0.01 -0.00695675 -0.083978 0.01 -0.0025 -9.12607e-17 0.01 -0.00665702 -0.0555025 0.01 -0.00354071 -0.027829 0.01 -0.0118315 0.082866 0.01 -0.00354071 0.027829 0.01 -0.00665702 0.0555025 0.01 -0.00695675 0.083978 0.01 0.0025 -9.24853e-17 0.01 0.00144533 0.0282024 0.01 -0.0017128 0.0562473 0.01 -0.0017128 -0.0562473 0.01 0.00144533 -0.0282024 0.01 -0.0118315 -0.082866 0 -0.0118315 -0.082866 0.01 -0.0025 -9.12607e-17 0.01 -0.00665702 -0.0555025 0.01 -0.00354071 -0.027829 0.01 -0.0025 -9.12607e-17 0 -0.00665702 -0.0555025 0 -0.00354071 -0.027829 0 -0.0025 -9.12607e-17 0 -0.0025 -9.12607e-17 0.01 -0.0118315 0.082866 0.01 -0.00354071 0.027829 0.01 -0.00665702 0.0555025 0.01 -0.0118315 0.082866 0 -0.00354071 0.027829 0 -0.00665702 0.0555025 0 -0.0118315 0.082866 0 -0.00695675 0.083978 0 -0.00695675 0.083978 0.01 -0.0118315 0.082866 0.01 0.0025 -9.24853e-17 0 0.0025 -9.24853e-17 0.01 -0.00695675 0.083978 0.01 0.00144533 0.0282024 0.01 -0.0017128 0.0562473 0.01 -0.00695675 0.083978 0 0.00144533 0.0282024 0 -0.0017128 0.0562473 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="166">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0120118 -0.0844673 0 -0.00713707 -0.0855793 0 -0.00713707 -0.0855793 0.01 -0.0120118 -0.0844673 0.01 -0.0120118 -0.0844673 0 -0.00713707 -0.0855793 0 -0.0025 -9.30242e-17 0 -0.00673735 -0.056575 0 -0.00356082 -0.0283668 0 -0.0120118 0.0844673 0 -0.00356082 0.0283668 0 -0.00673735 0.056575 0 -0.00713707 0.0855793 0 0.0025 -9.42488e-17 0 0.00142522 0.0287402 0 -0.00179313 0.0573198 0 -0.00179313 -0.0573198 0 0.00142522 -0.0287402 0 -0.00713707 -0.0855793 0 -0.00713707 -0.0855793 0.01 0.0025 -9.42488e-17 0.01 -0.00179313 -0.0573198 0.01 0.00142522 -0.0287402 0.01 0.0025 -9.42488e-17 0 -0.00179313 -0.0573198 0 0.00142522 -0.0287402 0 -0.0120118 -0.0844673 0.01 -0.00713707 -0.0855793 0.01 -0.0025 -9.30242e-17 0.01 -0.00673735 -0.056575 0.01 -0.00356082 -0.0283668 0.01 -0.0120118 0.0844673 0.01 -0.00356082 0.0283668 0.01 -0.00673735 0.056575 0.01 -0.00713707 0.0855793 0.01 0.0025 -9.42488e-17 0.01 0.00142522 0.0287402 0.01 -0.00179313 0.0573198 0.01 -0.00179313 -0.0573198 0.01 0.00142522 -0.0287402 0.01 -0.0120118 -0.0844673 0 -0.0120118 -0.0844673 0.01 -0.0025 -9.30242e-17 0.01 -0.00673735 -0.056575 0.01 -0.00356082 -0.0283668 0.01 -0.0025 -9.30242e-17 0 -0.00673735 -0.056575 0 -0.00356082 -0.0283668 0 -0.0025 -9.30242e-17 0 -0.0025 -9.30242e-17 0.01 -0.0120118 0.0844673 0.01 -0.00356082 0.0283668 0.01 -0.00673735 0.056575 0.01 -0.0120118 0.0844673 0 -0.00356082 0.0283668 0 -0.00673735 0.056575 0 -0.0120118 0.0844673 0 -0.00713707 0.0855793 0 -0.00713707 0.0855793 0.01 -0.0120118 0.0844673 0.01 0.0025 -9.42488e-17 0 0.0025 -9.42488e-17 0.01 -0.00713707 0.0855793 0.01 0.00142522 0.0287402 0.01 -0.00179313 0.0573198 0.01 -0.00713707 0.0855793 0 0.00142522 0.0287402 0 -0.00179313 0.0573198 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="167">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0120669 -0.0849566 0 -0.00719217 -0.0860686 0 -0.00719217 -0.0860686 0.01 -0.0120669 -0.0849566 0.01 -0.0120669 -0.0849566 0 -0.00719217 -0.0860686 0 -0.0025 -9.3563e-17 0 -0.00676189 -0.0569028 0 -0.00356696 -0.0285311 0 -0.0120669 0.0849566 0 -0.00356696 0.0285311 0 -0.00676189 0.0569028 0 -0.00719217 0.0860686 0 0.0025 -9.47877e-17 0 0.00141907 0.0289045 0 -0.00181768 0.0576476 0 -0.00181768 -0.0576476 0 0.00141907 -0.0289045 0 -0.00719217 -0.0860686 0 -0.00719217 -0.0860686 0.01 0.0025 -9.47877e-17 0.01 -0.00181768 -0.0576476 0.01 0.00141907 -0.0289045 0.01 0.0025 -9.47877e-17 0 -0.00181768 -0.0576476 0 0.00141907 -0.0289045 0 -0.0120669 -0.0849566 0.01 -0.00719217 -0.0860686 0.01 -0.0025 -9.3563e-17 0.01 -0.00676189 -0.0569028 0.01 -0.00356696 -0.0285311 0.01 -0.0120669 0.0849566 0.01 -0.00356696 0.0285311 0.01 -0.00676189 0.0569028 0.01 -0.00719217 0.0860686 0.01 0.0025 -9.47877e-17 0.01 0.00141907 0.0289045 0.01 -0.00181768 0.0576476 0.01 -0.00181768 -0.0576476 0.01 0.00141907 -0.0289045 0.01 -0.0120669 -0.0849566 0 -0.0120669 -0.0849566 0.01 -0.0025 -9.3563e-17 0.01 -0.00676189 -0.0569028 0.01 -0.00356696 -0.0285311 0.01 -0.0025 -9.3563e-17 0 -0.00676189 -0.0569028 0 -0.00356696 -0.0285311 0 -0.0025 -9.3563e-17 0 -0.0025 -9.3563e-17 0.01 -0.0120669 0.0849566 0.01 -0.00356696 0.0285311 0.01 -0.00676189 0.0569028 0.01 -0.0120669 0.0849566 0 -0.00356696 0.0285311 0 -0.00676189 0.0569028 0 -0.0120669 0.0849566 0 -0.00719217 0.0860686 0 -0.00719217 0.0860686 0.01 -0.0120669 0.0849566 0.01 0.0025 -9.47877e-17 0 0.0025 -9.47877e-17 0.01 -0.00719217 0.0860686 0.01 0.00141907 0.0289045 0.01 -0.00181768 0.0576476 0.01 -0.00719217 0.0860686 0 0.00141907 0.0289045 0 -0.00181768 0.0576476 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="168">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0122473 -0.0865578 0 -0.00737248 -0.0876698 0 -0.00737248 -0.0876698 0.01 -0.0122473 -0.0865578 0.01 -0.0122473 -0.0865578 0 -0.00737248 -0.0876698 0 -0.0025 -9.53265e-17 0 -0.00684222 -0.0579753 0 -0.00358707 -0.0290688 0 -0.0122473 0.0865578 0 -0.00358707 0.0290688 0 -0.00684222 0.0579753 0 -0.00737248 0.0876698 0 0.0025 -9.65512e-17 0 0.00139896 0.0294423 0 -0.00189801 0.0587201 0 -0.00189801 -0.0587201 0 0.00139896 -0.0294423 0 -0.00737248 -0.0876698 0 -0.00737248 -0.0876698 0.01 0.0025 -9.65512e-17 0.01 -0.00189801 -0.0587201 0.01 0.00139896 -0.0294423 0.01 0.0025 -9.65512e-17 0 -0.00189801 -0.0587201 0 0.00139896 -0.0294423 0 -0.0122473 -0.0865578 0.01 -0.00737248 -0.0876698 0.01 -0.0025 -9.53265e-17 0.01 -0.00684222 -0.0579753 0.01 -0.00358707 -0.0290688 0.01 -0.0122473 0.0865578 0.01 -0.00358707 0.0290688 0.01 -0.00684222 0.0579753 0.01 -0.00737248 0.0876698 0.01 0.0025 -9.65512e-17 0.01 0.00139896 0.0294423 0.01 -0.00189801 0.0587201 0.01 -0.00189801 -0.0587201 0.01 0.00139896 -0.0294423 0.01 -0.0122473 -0.0865578 0 -0.0122473 -0.0865578 0.01 -0.0025 -9.53265e-17 0.01 -0.00684222 -0.0579753 0.01 -0.00358707 -0.0290688 0.01 -0.0025 -9.53265e-17 0 -0.00684222 -0.0579753 0 -0.00358707 -0.0290688 0 -0.0025 -9.53265e-17 0 -0.0025 -9.53265e-17 0.01 -0.0122473 0.0865578 0.01 -0.00358707 0.0290688 0.01 -0.00684222 0.0579753 0.01 -0.0122473 0.0865578 0 -0.00358707 0.0290688 0 -0.00684222 0.0579753 0 -0.0122473 0.0865578 0 -0.00737248 0.0876698 0 -0.00737248 0.0876698 0.01 -0.0122473 0.0865578 0.01 0.0025 -9.65512e-17 0 0.0025 -9.65512e-17 0.01 -0.00737248 0.0876698 0.01 0.00139896 0.0294423 0.01 -0.00189801 0.0587201 0.01 -0.00737248 0.0876698 0 0.00139896 0.0294423 0 -0.00189801 0.0587201 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="169">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0123049 -0.0870694 0 -0.00743009 -0.0881814 0 -0.00743009 -0.0881814 0.01 -0.0123049 -0.0870694 0.01 -0.0123049 -0.0870694 0 -0.00743009 -0.0881814 0 -0.0025 -9.58898e-17 0 -0.00686788 -0.0583179 0 -0.0035935 -0.0292406 0 -0.0123049 0.0870694 0 -0.0035935 0.0292406 0 -0.00686788 0.0583179 0 -0.00743009 0.0881814 0 0.0025 -9.71145e-17 0 0.00139254 0.0296141 0 -0.00192367 0.0590627 0 -0.00192367 -0.0590627 0 0.00139254 -0.0296141 0 -0.00743009 -0.0881814 0 -0.00743009 -0.0881814 0.01 0.0025 -9.71145e-17 0.01 -0.00192367 -0.0590627 0.01 0.00139254 -0.0296141 0.01 0.0025 -9.71145e-17 0 -0.00192367 -0.0590627 0 0.00139254 -0.0296141 0 -0.0123049 -0.0870694 0.01 -0.00743009 -0.0881814 0.01 -0.0025 -9.58898e-17 0.01 -0.00686788 -0.0583179 0.01 -0.0035935 -0.0292406 0.01 -0.0123049 0.0870694 0.01 -0.0035935 0.0292406 0.01 -0.00686788 0.0583179 0.01 -0.00743009 0.0881814 0.01 0.0025 -9.71145e-17 0.01 0.00139254 0.0296141 0.01 -0.00192367 0.0590627 0.01 -0.00192367 -0.0590627 0.01 0.00139254 -0.0296141 0.01 -0.0123049 -0.0870694 0 -0.0123049 -0.0870694 0.01 -0.0025 -9.58898e-17 0.01 -0.00686788 -0.0583179 0.01 -0.0035935 -0.0292406 0.01 -0.0025 -9.58898e-17 0 -0.00686788 -0.0583179 0 -0.0035935 -0.0292406 0 -0.0025 -9.58898e-17 0 -0.0025 -9.58898e-17 0.01 -0.0123049 0.0870694 0.01 -0.0035935 0.0292406 0.01 -0.00686788 0.0583179 0.01 -0.0123049 0.0870694 0 -0.0035935 0.0292406 0 -0.00686788 0.0583179 0 -0.0123049 0.0870694 0 -0.00743009 0.0881814 0 -0.00743009 0.0881814 0.01 -0.0123049 0.0870694 0.01 0.0025 -9.71145e-17 0 0.0025 -9.71145e-17 0.01 -0.00743009 0.0881814 0.01 0.00139254 0.0296141 0.01 -0.00192367 0.0590627 0.01 -0.00743009 0.0881814 0 0.00139254 0.0296141 0 -0.00192367 0.0590627 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="170">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0124852 -0.0886706 0 -0.00761041 -0.0897826 0 -0.00761041 -0.0897826 0.01 -0.0124852 -0.0886706 0.01 -0.0124852 -0.0886706 0 -0.00761041 -0.0897826 0 -0.0025 -9.76533e-17 0 -0.00694821 -0.0593904 0 -0.00361361 -0.0297784 0 -0.0124852 0.0886706 0 -0.00361361 0.0297784 0 -0.00694821 0.0593904 0 -0.00761041 0.0897826 0 0.0025 -9.8878e-17 0 0.00137243 0.0301518 0 -0.002004 0.0601352 0 -0.002004 -0.0601352 0 0.00137243 -0.0301518 0 -0.00761041 -0.0897826 0 -0.00761041 -0.0897826 0.01 0.0025 -9.8878e-17 0.01 -0.002004 -0.0601352 0.01 0.00137243 -0.0301518 0.01 0.0025 -9.8878e-17 0 -0.002004 -0.0601352 0 0.00137243 -0.0301518 0 -0.0124852 -0.0886706 0.01 -0.00761041 -0.0897826 0.01 -0.0025 -9.76533e-17 0.01 -0.00694821 -0.0593904 0.01 -0.00361361 -0.0297784 0.01 -0.0124852 0.0886706 0.01 -0.00361361 0.0297784 0.01 -0.00694821 0.0593904 0.01 -0.00761041 0.0897826 0.01 0.0025 -9.8878e-17 0.01 0.00137243 0.0301518 0.01 -0.002004 0.0601352 0.01 -0.002004 -0.0601352 0.01 0.00137243 -0.0301518 0.01 -0.0124852 -0.0886706 0 -0.0124852 -0.0886706 0.01 -0.0025 -9.76533e-17 0.01 -0.00694821 -0.0593904 0.01 -0.00361361 -0.0297784 0.01 -0.0025 -9.76533e-17 0 -0.00694821 -0.0593904 0 -0.00361361 -0.0297784 0 -0.0025 -9.76533e-17 0 -0.0025 -9.76533e-17 0.01 -0.0124852 0.0886706 0.01 -0.00361361 0.0297784 0.01 -0.00694821 0.0593904 0.01 -0.0124852 0.0886706 0 -0.00361361 0.0297784 0 -0.00694821 0.0593904 0 -0.0124852 0.0886706 0 -0.00761041 0.0897826 0 -0.00761041 0.0897826 0.01 -0.0124852 0.0886706 0.01 0.0025 -9.8878e-17 0 0.0025 -9.8878e-17 0.01 -0.00761041 0.0897826 0.01 0.00137243 0.0301518 0.01 -0.002004 0.0601352 0.01 -0.00761041 0.0897826 0 0.00137243 0.0301518 0 -0.002004 0.0601352 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="171">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0125428 -0.0891822 0 -0.00766801 -0.0902942 0 -0.00766801 -0.0902942 0.01 -0.0125428 -0.0891822 0.01 -0.0125428 -0.0891822 0 -0.00766801 -0.0902942 0 -0.0025 -9.82167e-17 0 -0.00697387 -0.059733 0 -0.00362003 -0.0299502 0 -0.0125428 0.0891822 0 -0.00362003 0.0299502 0 -0.00697387 0.059733 0 -0.00766801 0.0902942 0 0.0025 -9.94413e-17 0 0.001366 0.0303236 0 -0.00202966 0.0604778 0 -0.00202966 -0.0604778 0 0.001366 -0.0303236 0 -0.00766801 -0.0902942 0 -0.00766801 -0.0902942 0.01 0.0025 -9.94413e-17 0.01 -0.00202966 -0.0604778 0.01 0.001366 -0.0303236 0.01 0.0025 -9.94413e-17 0 -0.00202966 -0.0604778 0 0.001366 -0.0303236 0 -0.0125428 -0.0891822 0.01 -0.00766801 -0.0902942 0.01 -0.0025 -9.82167e-17 0.01 -0.00697387 -0.059733 0.01 -0.00362003 -0.0299502 0.01 -0.0125428 0.0891822 0.01 -0.00362003 0.0299502 0.01 -0.00697387 0.059733 0.01 -0.00766801 0.0902942 0.01 0.0025 -9.94413e-17 0.01 0.001366 0.0303236 0.01 -0.00202966 0.0604778 0.01 -0.00202966 -0.0604778 0.01 0.001366 -0.0303236 0.01 -0.0125428 -0.0891822 0 -0.0125428 -0.0891822 0.01 -0.0025 -9.82167e-17 0.01 -0.00697387 -0.059733 0.01 -0.00362003 -0.0299502 0.01 -0.0025 -9.82167e-17 0 -0.00697387 -0.059733 0 -0.00362003 -0.0299502 0 -0.0025 -9.82167e-17 0 -0.0025 -9.82167e-17 0.01 -0.0125428 0.0891822 0.01 -0.00362003 0.0299502 0.01 -0.00697387 0.059733 0.01 -0.0125428 0.0891822 0 -0.00362003 0.0299502 0 -0.00697387 0.059733 0 -0.0125428 0.0891822 0 -0.00766801 0.0902942 0 -0.00766801 0.0902942 0.01 -0.0125428 0.0891822 0.01 0.0025 -9.94413e-17 0 0.0025 -9.94413e-17 0.01 -0.00766801 0.0902942 0.01 0.001366 0.0303236 0.01 -0.00202966 0.0604778 0.01 -0.00766801 0.0902942 0 0.001366 0.0303236 0 -0.00202966 0.0604778 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="154">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0105868 -0.0718128 0 -0.00571204 -0.0729248 0 -0.00571204 -0.0729248 0.01 -0.0105868 -0.0718128 0.01 -0.0105868 -0.0718128 0 -0.00571204 -0.0729248 0 -0.0025 -7.90877e-17 0 -0.00610253 -0.0480992 0 -0.00340189 -0.024117 0 -0.0105868 0.0718128 0 -0.00340189 0.024117 0 -0.00610253 0.0480992 0 -0.00571204 0.0729248 0 0.0025 -8.03123e-17 0 0.00158414 0.0244904 0 -0.00115831 0.048844 0 -0.00115831 -0.048844 0 0.00158414 -0.0244904 0 -0.00571204 -0.0729248 0 -0.00571204 -0.0729248 0.01 0.0025 -8.03123e-17 0.01 -0.00115831 -0.048844 0.01 0.00158414 -0.0244904 0.01 0.0025 -8.03123e-17 0 -0.00115831 -0.048844 0 0.00158414 -0.0244904 0 -0.0105868 -0.0718128 0.01 -0.00571204 -0.0729248 0.01 -0.0025 -7.90877e-17 0.01 -0.00610253 -0.0480992 0.01 -0.00340189 -0.024117 0.01 -0.0105868 0.0718128 0.01 -0.00340189 0.024117 0.01 -0.00610253 0.0480992 0.01 -0.00571204 0.0729248 0.01 0.0025 -8.03123e-17 0.01 0.00158414 0.0244904 0.01 -0.00115831 0.048844 0.01 -0.00115831 -0.048844 0.01 0.00158414 -0.0244904 0.01 -0.0105868 -0.0718128 0 -0.0105868 -0.0718128 0.01 -0.0025 -7.90877e-17 0.01 -0.00610253 -0.0480992 0.01 -0.00340189 -0.024117 0.01 -0.0025 -7.90877e-17 0 -0.00610253 -0.0480992 0 -0.00340189 -0.024117 0 -0.0025 -7.90877e-17 0 -0.0025 -7.90877e-17 0.01 -0.0105868 0.0718128 0.01 -0.00340189 0.024117 0.01 -0.00610253 0.0480992 0.01 -0.0105868 0.0718128 0 -0.00340189 0.024117 0 -0.00610253 0.0480992 0 -0.0105868 0.0718128 0 -0.00571204 0.0729248 0 -0.00571204 0.0729248 0.01 -0.0105868 0.0718128 0.01 0.0025 -8.03123e-17 0 0.0025 -8.03123e-17 0.01 -0.00571204 0.0729248 0.01 0.00158414 0.0244904 0.01 -0.00115831 0.048844 0.01 -0.00571204 0.0729248 0 0.00158414 0.0244904 0 -0.00115831 0.048844 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="155">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0106444 -0.0723243 0 -0.00576965 -0.0734363 0 -0.00576965 -0.0734363 0.01 -0.0106444 -0.0723243 0.01 -0.0106444 -0.0723243 0 -0.00576965 -0.0734363 0 -0.0025 -7.9651e-17 0 -0.00612819 -0.0484418 0 -0.00340832 -0.0242888 0 -0.0106444 0.0723243 0 -0.00340832 0.0242888 0 -0.00612819 0.0484418 0 -0.00576965 0.0734363 0 0.0025 -8.08757e-17 0 0.00157772 0.0246622 0 -0.00118397 0.0491866 0 -0.00118397 -0.0491866 0 0.00157772 -0.0246622 0 -0.00576965 -0.0734363 0 -0.00576965 -0.0734363 0.01 0.0025 -8.08757e-17 0.01 -0.00118397 -0.0491866 0.01 0.00157772 -0.0246622 0.01 0.0025 -8.08757e-17 0 -0.00118397 -0.0491866 0 0.00157772 -0.0246622 0 -0.0106444 -0.0723243 0.01 -0.00576965 -0.0734363 0.01 -0.0025 -7.9651e-17 0.01 -0.00612819 -0.0484418 0.01 -0.00340832 -0.0242888 0.01 -0.0106444 0.0723243 0.01 -0.00340832 0.0242888 0.01 -0.00612819 0.0484418 0.01 -0.00576965 0.0734363 0.01 0.0025 -8.08757e-17 0.01 0.00157772 0.0246622 0.01 -0.00118397 0.0491866 0.01 -0.00118397 -0.0491866 0.01 0.00157772 -0.0246622 0.01 -0.0106444 -0.0723243 0 -0.0106444 -0.0723243 0.01 -0.0025 -7.9651e-17 0.01 -0.00612819 -0.0484418 0.01 -0.00340832 -0.0242888 0.01 -0.0025 -7.9651e-17 0 -0.00612819 -0.0484418 0 -0.00340832 -0.0242888 0 -0.0025 -7.9651e-17 0 -0.0025 -7.9651e-17 0.01 -0.0106444 0.0723243 0.01 -0.00340832 0.0242888 0.01 -0.00612819 0.0484418 0.01 -0.0106444 0.0723243 0 -0.00340832 0.0242888 0 -0.00612819 0.0484418 0 -0.0106444 0.0723243 0 -0.00576965 0.0734363 0 -0.00576965 0.0734363 0.01 -0.0106444 0.0723243 0.01 0.0025 -8.08757e-17 0 0.0025 -8.08757e-17 0.01 -0.00576965 0.0734363 0.01 0.00157772 0.0246622 0.01 -0.00118397 0.0491866 0.01 -0.00576965 0.0734363 0 0.00157772 0.0246622 0 -0.00118397 0.0491866 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="156">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0108247 -0.0739256 0 -0.00594997 -0.0750376 0 -0.00594997 -0.0750376 0.01 -0.0108247 -0.0739256 0.01 -0.0108247 -0.0739256 0 -0.00594997 -0.0750376 0 -0.0025 -8.14145e-17 0 -0.00620852 -0.0495143 0 -0.00342843 -0.0248265 0 -0.0108247 0.0739256 0 -0.00342843 0.0248265 0 -0.00620852 0.0495143 0 -0.00594997 0.0750376 0 0.0025 -8.26392e-17 0 0.00155761 0.0252 0 -0.0012643 0.0502591 0 -0.0012643 -0.0502591 0 0.00155761 -0.0252 0 -0.00594997 -0.0750376 0 -0.00594997 -0.0750376 0.01 0.0025 -8.26392e-17 0.01 -0.0012643 -0.0502591 0.01 0.00155761 -0.0252 0.01 0.0025 -8.26392e-17 0 -0.0012643 -0.0502591 0 0.00155761 -0.0252 0 -0.0108247 -0.0739256 0.01 -0.00594997 -0.0750376 0.01 -0.0025 -8.14145e-17 0.01 -0.00620852 -0.0495143 0.01 -0.00342843 -0.0248265 0.01 -0.0108247 0.0739256 0.01 -0.00342843 0.0248265 0.01 -0.00620852 0.0495143 0.01 -0.00594997 0.0750376 0.01 0.0025 -8.26392e-17 0.01 0.00155761 0.0252 0.01 -0.0012643 0.0502591 0.01 -0.0012643 -0.0502591 0.01 0.00155761 -0.0252 0.01 -0.0108247 -0.0739256 0 -0.0108247 -0.0739256 0.01 -0.0025 -8.14145e-17 0.01 -0.00620852 -0.0495143 0.01 -0.00342843 -0.0248265 0.01 -0.0025 -8.14145e-17 0 -0.00620852 -0.0495143 0 -0.00342843 -0.0248265 0 -0.0025 -8.14145e-17 0 -0.0025 -8.14145e-17 0.01 -0.0108247 0.0739256 0.01 -0.00342843 0.0248265 0.01 -0.00620852 0.0495143 0.01 -0.0108247 0.0739256 0 -0.00342843 0.0248265 0 -0.00620852 0.0495143 0 -0.0108247 0.0739256 0 -0.00594997 0.0750376 0 -0.00594997 0.0750376 0.01 -0.0108247 0.0739256 0.01 0.0025 -8.26392e-17 0 0.0025 -8.26392e-17 0.01 -0.00594997 0.0750376 0.01 0.00155761 0.0252 0.01 -0.0012643 0.0502591 0.01 -0.00594997 0.0750376 0 0.00155761 0.0252 0 -0.0012643 0.0502591 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="157">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0108798 -0.0744148 0 -0.00600506 -0.0755268 0 -0.00600506 -0.0755268 0.01 -0.0108798 -0.0744148 0.01 -0.0108798 -0.0744148 0 -0.00600506 -0.0755268 0 -0.0025 -8.19534e-17 0 -0.00623306 -0.049842 0 -0.00343457 -0.0249908 0 -0.0108798 0.0744148 0 -0.00343457 0.0249908 0 -0.00623306 0.049842 0 -0.00600506 0.0755268 0 0.0025 -8.3178e-17 0 0.00155146 0.0253643 0 -0.00128885 0.0505868 0 -0.00128885 -0.0505868 0 0.00155146 -0.0253643 0 -0.00600506 -0.0755268 0 -0.00600506 -0.0755268 0.01 0.0025 -8.3178e-17 0.01 -0.00128885 -0.0505868 0.01 0.00155146 -0.0253643 0.01 0.0025 -8.3178e-17 0 -0.00128885 -0.0505868 0 0.00155146 -0.0253643 0 -0.0108798 -0.0744148 0.01 -0.00600506 -0.0755268 0.01 -0.0025 -8.19534e-17 0.01 -0.00623306 -0.049842 0.01 -0.00343457 -0.0249908 0.01 -0.0108798 0.0744148 0.01 -0.00343457 0.0249908 0.01 -0.00623306 0.049842 0.01 -0.00600506 0.0755268 0.01 0.0025 -8.3178e-17 0.01 0.00155146 0.0253643 0.01 -0.00128885 0.0505868 0.01 -0.00128885 -0.0505868 0.01 0.00155146 -0.0253643 0.01 -0.0108798 -0.0744148 0 -0.0108798 -0.0744148 0.01 -0.0025 -8.19534e-17 0.01 -0.00623306 -0.049842 0.01 -0.00343457 -0.0249908 0.01 -0.0025 -8.19534e-17 0 -0.00623306 -0.049842 0 -0.00343457 -0.0249908 0 -0.0025 -8.19534e-17 0 -0.0025 -8.19534e-17 0.01 -0.0108798 0.0744148 0.01 -0.00343457 0.0249908 0.01 -0.00623306 0.049842 0.01 -0.0108798 0.0744148 0 -0.00343457 0.0249908 0 -0.00623306 0.049842 0 -0.0108798 0.0744148 0 -0.00600506 0.0755268 0 -0.00600506 0.0755268 0.01 -0.0108798 0.0744148 0.01 0.0025 -8.3178e-17 0 0.0025 -8.3178e-17 0.01 -0.00600506 0.0755268 0.01 0.00155146 0.0253643 0.01 -0.00128885 0.0505868 0.01 -0.00600506 0.0755268 0 0.00155146 0.0253643 0 -0.00128885 0.0505868 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="158">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0110602 -0.0760161 0 -0.00618538 -0.0771281 0 -0.00618538 -0.0771281 0.01 -0.0110602 -0.0760161 0.01 -0.0110602 -0.0760161 0 -0.00618538 -0.0771281 0 -0.0025 -8.37169e-17 0 -0.00631339 -0.0509146 0 -0.00345468 -0.0255286 0 -0.0110602 0.0760161 0 -0.00345468 0.0255286 0 -0.00631339 0.0509146 0 -0.00618538 0.0771281 0 0.0025 -8.49415e-17 0 0.00153135 0.025902 0 -0.00136917 0.0516594 0 -0.00136917 -0.0516594 0 0.00153135 -0.025902 0 -0.00618538 -0.0771281 0 -0.00618538 -0.0771281 0.01 0.0025 -8.49415e-17 0.01 -0.00136917 -0.0516594 0.01 0.00153135 -0.025902 0.01 0.0025 -8.49415e-17 0 -0.00136917 -0.0516594 0 0.00153135 -0.025902 0 -0.0110602 -0.0760161 0.01 -0.00618538 -0.0771281 0.01 -0.0025 -8.37169e-17 0.01 -0.00631339 -0.0509146 0.01 -0.00345468 -0.0255286 0.01 -0.0110602 0.0760161 0.01 -0.00345468 0.0255286 0.01 -0.00631339 0.0509146 0.01 -0.00618538 0.0771281 0.01 0.0025 -8.49415e-17 0.01 0.00153135 0.025902 0.01 -0.00136917 0.0516594 0.01 -0.00136917 -0.0516594 0.01 0.00153135 -0.025902 0.01 -0.0110602 -0.0760161 0 -0.0110602 -0.0760161 0.01 -0.0025 -8.37169e-17 0.01 -0.00631339 -0.0509146 0.01 -0.00345468 -0.0255286 0.01 -0.0025 -8.37169e-17 0 -0.00631339 -0.0509146 0 -0.00345468 -0.0255286 0 -0.0025 -8.37169e-17 0 -0.0025 -8.37169e-17 0.01 -0.0110602 0.0760161 0.01 -0.00345468 0.0255286 0.01 -0.00631339 0.0509146 0.01 -0.0110602 0.0760161 0 -0.00345468 0.0255286 0 -0.00631339 0.0509146 0 -0.0110602 0.0760161 0 -0.00618538 0.0771281 0 -0.00618538 0.0771281 0.01 -0.0110602 0.0760161 0.01 0.0025 -8.49415e-17 0 0.0025 -8.49415e-17 0.01 -0.00618538 0.0771281 0.01 0.00153135 0.025902 0.01 -0.00136917 0.0516594 0.01 -0.00618538 0.0771281 0 0.00153135 0.025902 0 -0.00136917 0.0516594 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="159">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0111178 -0.0765276 0 -0.00624298 -0.0776396 0 -0.00624298 -0.0776396 0.01 -0.0111178 -0.0765276 0.01 -0.0111178 -0.0765276 0 -0.00624298 -0.0776396 0 -0.0025 -8.42802e-17 0 -0.00633905 -0.0512572 0 -0.00346111 -0.0257004 0 -0.0111178 0.0765276 0 -0.00346111 0.0257004 0 -0.00633905 0.0512572 0 -0.00624298 0.0776396 0 0.0025 -8.55048e-17 0 0.00152493 0.0260738 0 -0.00139484 0.052002 0 -0.00139484 -0.052002 0 0.00152493 -0.0260738 0 -0.00624298 -0.0776396 0 -0.00624298 -0.0776396 0.01 0.0025 -8.55048e-17 0.01 -0.00139484 -0.052002 0.01 0.00152493 -0.0260738 0.01 0.0025 -8.55048e-17 0 -0.00139484 -0.052002 0 0.00152493 -0.0260738 0 -0.0111178 -0.0765276 0.01 -0.00624298 -0.0776396 0.01 -0.0025 -8.42802e-17 0.01 -0.00633905 -0.0512572 0.01 -0.00346111 -0.0257004 0.01 -0.0111178 0.0765276 0.01 -0.00346111 0.0257004 0.01 -0.00633905 0.0512572 0.01 -0.00624298 0.0776396 0.01 0.0025 -8.55048e-17 0.01 0.00152493 0.0260738 0.01 -0.00139484 0.052002 0.01 -0.00139484 -0.052002 0.01 0.00152493 -0.0260738 0.01 -0.0111178 -0.0765276 0 -0.0111178 -0.0765276 0.01 -0.0025 -8.42802e-17 0.01 -0.00633905 -0.0512572 0.01 -0.00346111 -0.0257004 0.01 -0.0025 -8.42802e-17 0 -0.00633905 -0.0512572 0 -0.00346111 -0.0257004 0 -0.0025 -8.42802e-17 0 -0.0025 -8.42802e-17 0.01 -0.0111178 0.0765276 0.01 -0.00346111 0.0257004 0.01 -0.00633905 0.0512572 0.01 -0.0111178 0.0765276 0 -0.00346111 0.0257004 0 -0.00633905 0.0512572 0 -0.0111178 0.0765276 0 -0.00624298 0.0776396 0 -0.00624298 0.0776396 0.01 -0.0111178 0.0765276 0.01 0.0025 -8.55048e-17 0 0.0025 -8.55048e-17 0.01 -0.00624298 0.0776396 0.01 0.00152493 0.0260738 0.01 -0.00139484 0.052002 0.01 -0.00624298 0.0776396 0 0.00152493 0.0260738 0 -0.00139484 0.052002 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="160">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0112981 -0.0781289 0 -0.0064233 -0.0792409 0 -0.0064233 -0.0792409 0.01 -0.0112981 -0.0781289 0.01 -0.0112981 -0.0781289 0 -0.0064233 -0.0792409 0 -0.0025 -8.60437e-17 0 -0.00641938 -0.0523297 0 -0.00348122 -0.0262381 0 -0.0112981 0.0781289 0 -0.00348122 0.0262381 0 -0.00641938 0.0523297 0 -0.0064233 0.0792409 0 0.0025 -8.72683e-17 0 0.00150482 0.0266116 0 -0.00147516 0.0530745 0 -0.00147516 -0.0530745 0 0.00150482 -0.0266116 0 -0.0064233 -0.0792409 0 -0.0064233 -0.0792409 0.01 0.0025 -8.72683e-17 0.01 -0.00147516 -0.0530745 0.01 0.00150482 -0.0266116 0.01 0.0025 -8.72683e-17 0 -0.00147516 -0.0530745 0 0.00150482 -0.0266116 0 -0.0112981 -0.0781289 0.01 -0.0064233 -0.0792409 0.01 -0.0025 -8.60437e-17 0.01 -0.00641938 -0.0523297 0.01 -0.00348122 -0.0262381 0.01 -0.0112981 0.0781289 0.01 -0.00348122 0.0262381 0.01 -0.00641938 0.0523297 0.01 -0.0064233 0.0792409 0.01 0.0025 -8.72683e-17 0.01 0.00150482 0.0266116 0.01 -0.00147516 0.0530745 0.01 -0.00147516 -0.0530745 0.01 0.00150482 -0.0266116 0.01 -0.0112981 -0.0781289 0 -0.0112981 -0.0781289 0.01 -0.0025 -8.60437e-17 0.01 -0.00641938 -0.0523297 0.01 -0.00348122 -0.0262381 0.01 -0.0025 -8.60437e-17 0 -0.00641938 -0.0523297 0 -0.00348122 -0.0262381 0 -0.0025 -8.60437e-17 0 -0.0025 -8.60437e-17 0.01 -0.0112981 0.0781289 0.01 -0.00348122 0.0262381 0.01 -0.00641938 0.0523297 0.01 -0.0112981 0.0781289 0 -0.00348122 0.0262381 0 -0.00641938 0.0523297 0 -0.0112981 0.0781289 0 -0.0064233 0.0792409 0 -0.0064233 0.0792409 0.01 -0.0112981 0.0781289 0.01 0.0025 -8.72683e-17 0 0.0025 -8.72683e-17 0.01 -0.0064233 0.0792409 0.01 0.00150482 0.0266116 0.01 -0.00147516 0.0530745 0.01 -0.0064233 0.0792409 0 0.00150482 0.0266116 0 -0.00147516 0.0530745 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="161">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0113557 -0.0786404 0 -0.00648091 -0.0797524 0 -0.00648091 -0.0797524 0.01 -0.0113557 -0.0786404 0.01 -0.0113557 -0.0786404 0 -0.00648091 -0.0797524 0 -0.0025 -8.6607e-17 0 -0.00644504 -0.0526723 0 -0.00348764 -0.0264099 0 -0.0113557 0.0786404 0 -0.00348764 0.0264099 0 -0.00644504 0.0526723 0 -0.00648091 0.0797524 0 0.0025 -8.78317e-17 0 0.00149839 0.0267834 0 -0.00150082 0.0534171 0 -0.00150082 -0.0534171 0 0.00149839 -0.0267834 0 -0.00648091 -0.0797524 0 -0.00648091 -0.0797524 0.01 0.0025 -8.78317e-17 0.01 -0.00150082 -0.0534171 0.01 0.00149839 -0.0267834 0.01 0.0025 -8.78317e-17 0 -0.00150082 -0.0534171 0 0.00149839 -0.0267834 0 -0.0113557 -0.0786404 0.01 -0.00648091 -0.0797524 0.01 -0.0025 -8.6607e-17 0.01 -0.00644504 -0.0526723 0.01 -0.00348764 -0.0264099 0.01 -0.0113557 0.0786404 0.01 -0.00348764 0.0264099 0.01 -0.00644504 0.0526723 0.01 -0.00648091 0.0797524 0.01 0.0025 -8.78317e-17 0.01 0.00149839 0.0267834 0.01 -0.00150082 0.0534171 0.01 -0.00150082 -0.0534171 0.01 0.00149839 -0.0267834 0.01 -0.0113557 -0.0786404 0 -0.0113557 -0.0786404 0.01 -0.0025 -8.6607e-17 0.01 -0.00644504 -0.0526723 0.01 -0.00348764 -0.0264099 0.01 -0.0025 -8.6607e-17 0 -0.00644504 -0.0526723 0 -0.00348764 -0.0264099 0 -0.0025 -8.6607e-17 0 -0.0025 -8.6607e-17 0.01 -0.0113557 0.0786404 0.01 -0.00348764 0.0264099 0.01 -0.00644504 0.0526723 0.01 -0.0113557 0.0786404 0 -0.00348764 0.0264099 0 -0.00644504 0.0526723 0 -0.0113557 0.0786404 0 -0.00648091 0.0797524 0 -0.00648091 0.0797524 0.01 -0.0113557 0.0786404 0.01 0.0025 -8.78317e-17 0 0.0025 -8.78317e-17 0.01 -0.00648091 0.0797524 0.01 0.00149839 0.0267834 0.01 -0.00150082 0.0534171 0.01 -0.00648091 0.0797524 0 0.00149839 0.0267834 0 -0.00150082 0.0534171 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="172">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0138476 -0.100769 0 -0.00897282 -0.101881 0 -0.00897282 -0.101881 0.01 -0.0138476 -0.100769 0.01 -0.0138476 -0.100769 0 -0.00897282 -0.101881 0 -0.0025 -1.10977e-16 0 -0.00755514 -0.0674938 0 -0.00376555 -0.0338414 0 -0.0138476 0.100769 0 -0.00376555 0.0338414 0 -0.00755514 0.0674938 0 -0.00897282 0.101881 0 0.0025 -1.12202e-16 0 0.00122048 0.0342149 0 -0.00261093 0.0682386 0 -0.00261093 -0.0682386 0 0.00122048 -0.0342149 0 -0.00897282 -0.101881 0 -0.00897282 -0.101881 0.01 0.0025 -1.12202e-16 0.01 -0.00261093 -0.0682386 0.01 0.00122048 -0.0342149 0.01 0.0025 -1.12202e-16 0 -0.00261093 -0.0682386 0 0.00122048 -0.0342149 0 -0.0138476 -0.100769 0.01 -0.00897282 -0.101881 0.01 -0.0025 -1.10977e-16 0.01 -0.00755514 -0.0674938 0.01 -0.00376555 -0.0338414 0.01 -0.0138476 0.100769 0.01 -0.00376555 0.0338414 0.01 -0.00755514 0.0674938 0.01 -0.00897282 0.101881 0.01 0.0025 -1.12202e-16 0.01 0.00122048 0.0342149 0.01 -0.00261093 0.0682386 0.01 -0.00261093 -0.0682386 0.01 0.00122048 -0.0342149 0.01 -0.0138476 -0.100769 0 -0.0138476 -0.100769 0.01 -0.0025 -1.10977e-16 0.01 -0.00755514 -0.0674938 0.01 -0.00376555 -0.0338414 0.01 -0.0025 -1.10977e-16 0 -0.00755514 -0.0674938 0 -0.00376555 -0.0338414 0 -0.0025 -1.10977e-16 0 -0.0025 -1.10977e-16 0.01 -0.0138476 0.100769 0.01 -0.00376555 0.0338414 0.01 -0.00755514 0.0674938 0.01 -0.0138476 0.100769 0 -0.00376555 0.0338414 0 -0.00755514 0.0674938 0 -0.0138476 0.100769 0 -0.00897282 0.101881 0 -0.00897282 0.101881 0.01 -0.0138476 0.100769 0.01 0.0025 -1.12202e-16 0 0.0025 -1.12202e-16 0.01 -0.00897282 0.101881 0.01 0.00122048 0.0342149 0.01 -0.00261093 0.0682386 0.01 -0.00897282 0.101881 0 0.00122048 0.0342149 0 -0.00261093 0.0682386 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="173">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0138852 -0.101103 0 -0.00901039 -0.102215 0 -0.00901039 -0.102215 0.01 -0.0138852 -0.101103 0.01 -0.0138852 -0.101103 0 -0.00901039 -0.102215 0 -0.0025 -1.11345e-16 0 -0.00757188 -0.0677173 0 -0.00376974 -0.0339535 0 -0.0138852 0.101103 0 -0.00376974 0.0339535 0 -0.00757188 0.0677173 0 -0.00901039 0.102215 0 0.0025 -1.1257e-16 0 0.00121629 0.0343269 0 -0.00262766 0.0684621 0 -0.00262766 -0.0684621 0 0.00121629 -0.0343269 0 -0.00901039 -0.102215 0 -0.00901039 -0.102215 0.01 0.0025 -1.1257e-16 0.01 -0.00262766 -0.0684621 0.01 0.00121629 -0.0343269 0.01 0.0025 -1.1257e-16 0 -0.00262766 -0.0684621 0 0.00121629 -0.0343269 0 -0.0138852 -0.101103 0.01 -0.00901039 -0.102215 0.01 -0.0025 -1.11345e-16 0.01 -0.00757188 -0.0677173 0.01 -0.00376974 -0.0339535 0.01 -0.0138852 0.101103 0.01 -0.00376974 0.0339535 0.01 -0.00757188 0.0677173 0.01 -0.00901039 0.102215 0.01 0.0025 -1.1257e-16 0.01 0.00121629 0.0343269 0.01 -0.00262766 0.0684621 0.01 -0.00262766 -0.0684621 0.01 0.00121629 -0.0343269 0.01 -0.0138852 -0.101103 0 -0.0138852 -0.101103 0.01 -0.0025 -1.11345e-16 0.01 -0.00757188 -0.0677173 0.01 -0.00376974 -0.0339535 0.01 -0.0025 -1.11345e-16 0 -0.00757188 -0.0677173 0 -0.00376974 -0.0339535 0 -0.0025 -1.11345e-16 0 -0.0025 -1.11345e-16 0.01 -0.0138852 0.101103 0.01 -0.00376974 0.0339535 0.01 -0.00757188 0.0677173 0.01 -0.0138852 0.101103 0 -0.00376974 0.0339535 0 -0.00757188 0.0677173 0 -0.0138852 0.101103 0 -0.00901039 0.102215 0 -0.00901039 0.102215 0.01 -0.0138852 0.101103 0.01 0.0025 -1.1257e-16 0 0.0025 -1.1257e-16 0.01 -0.00901039 0.102215 0.01 0.00121629 0.0343269 0.01 -0.00262766 0.0684621 0.01 -0.00901039 0.102215 0 0.00121629 0.0343269 0 -0.00262766 0.0684621 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="182">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0149946 -0.110955 0 -0.0101199 -0.112067 0 -0.0101199 -0.112067 0.01 -0.0149946 -0.110955 0.01 -0.0149946 -0.110955 0 -0.0101199 -0.112067 0 -0.0025 -1.22195e-16 0 -0.00806612 -0.0743162 0 -0.00389348 -0.0372622 0 -0.0149946 0.110955 0 -0.00389348 0.0372622 0 -0.00806612 0.0743162 0 -0.0101199 0.112067 0 0.0025 -1.2342e-16 0 0.00109256 0.0376356 0 -0.00312191 0.075061 0 -0.00312191 -0.075061 0 0.00109256 -0.0376356 0 -0.0101199 -0.112067 0 -0.0101199 -0.112067 0.01 0.0025 -1.2342e-16 0.01 -0.00312191 -0.075061 0.01 0.00109256 -0.0376356 0.01 0.0025 -1.2342e-16 0 -0.00312191 -0.075061 0 0.00109256 -0.0376356 0 -0.0149946 -0.110955 0.01 -0.0101199 -0.112067 0.01 -0.0025 -1.22195e-16 0.01 -0.00806612 -0.0743162 0.01 -0.00389348 -0.0372622 0.01 -0.0149946 0.110955 0.01 -0.00389348 0.0372622 0.01 -0.00806612 0.0743162 0.01 -0.0101199 0.112067 0.01 0.0025 -1.2342e-16 0.01 0.00109256 0.0376356 0.01 -0.00312191 0.075061 0.01 -0.00312191 -0.075061 0.01 0.00109256 -0.0376356 0.01 -0.0149946 -0.110955 0 -0.0149946 -0.110955 0.01 -0.0025 -1.22195e-16 0.01 -0.00806612 -0.0743162 0.01 -0.00389348 -0.0372622 0.01 -0.0025 -1.22195e-16 0 -0.00806612 -0.0743162 0 -0.00389348 -0.0372622 0 -0.0025 -1.22195e-16 0 -0.0025 -1.22195e-16 0.01 -0.0149946 0.110955 0.01 -0.00389348 0.0372622 0.01 -0.00806612 0.0743162 0.01 -0.0149946 0.110955 0 -0.00389348 0.0372622 0 -0.00806612 0.0743162 0 -0.0149946 0.110955 0 -0.0101199 0.112067 0 -0.0101199 0.112067 0.01 -0.0149946 0.110955 0.01 0.0025 -1.2342e-16 0 0.0025 -1.2342e-16 0.01 -0.0101199 0.112067 0.01 0.00109256 0.0376356 0.01 -0.00312191 0.075061 0.01 -0.0101199 0.112067 0 0.00109256 0.0376356 0 -0.00312191 0.075061 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="183">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0150322 -0.111289 0 -0.0101574 -0.112401 0 -0.0101574 -0.112401 0.01 -0.0150322 -0.111289 0.01 -0.0150322 -0.111289 0 -0.0101574 -0.112401 0 -0.0025 -1.22563e-16 0 -0.00808286 -0.0745396 0 -0.00389767 -0.0373742 0 -0.0150322 0.111289 0 -0.00389767 0.0373742 0 -0.00808286 0.0745396 0 -0.0101574 0.112401 0 0.0025 -1.23787e-16 0 0.00108837 0.0377476 0 -0.00313864 0.0752844 0 -0.00313864 -0.0752844 0 0.00108837 -0.0377476 0 -0.0101574 -0.112401 0 -0.0101574 -0.112401 0.01 0.0025 -1.23787e-16 0.01 -0.00313864 -0.0752844 0.01 0.00108837 -0.0377476 0.01 0.0025 -1.23787e-16 0 -0.00313864 -0.0752844 0 0.00108837 -0.0377476 0 -0.0150322 -0.111289 0.01 -0.0101574 -0.112401 0.01 -0.0025 -1.22563e-16 0.01 -0.00808286 -0.0745396 0.01 -0.00389767 -0.0373742 0.01 -0.0150322 0.111289 0.01 -0.00389767 0.0373742 0.01 -0.00808286 0.0745396 0.01 -0.0101574 0.112401 0.01 0.0025 -1.23787e-16 0.01 0.00108837 0.0377476 0.01 -0.00313864 0.0752844 0.01 -0.00313864 -0.0752844 0.01 0.00108837 -0.0377476 0.01 -0.0150322 -0.111289 0 -0.0150322 -0.111289 0.01 -0.0025 -1.22563e-16 0.01 -0.00808286 -0.0745396 0.01 -0.00389767 -0.0373742 0.01 -0.0025 -1.22563e-16 0 -0.00808286 -0.0745396 0 -0.00389767 -0.0373742 0 -0.0025 -1.22563e-16 0 -0.0025 -1.22563e-16 0.01 -0.0150322 0.111289 0.01 -0.00389767 0.0373742 0.01 -0.00808286 0.0745396 0.01 -0.0150322 0.111289 0 -0.00389767 0.0373742 0 -0.00808286 0.0745396 0 -0.0150322 0.111289 0 -0.0101574 0.112401 0 -0.0101574 0.112401 0.01 -0.0150322 0.111289 0.01 0.0025 -1.23787e-16 0 0.0025 -1.23787e-16 0.01 -0.0101574 0.112401 0.01 0.00108837 0.0377476 0.01 -0.00313864 0.0752844 0.01 -0.0101574 0.112401 0 0.00108837 0.0377476 0 -0.00313864 0.0752844 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="184">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.015225 -0.113001 0 -0.0103503 -0.114113 0 -0.0103503 -0.114113 0.01 -0.015225 -0.113001 0.01 -0.015225 -0.113001 0 -0.0103503 -0.114113 0 -0.0025 -1.24449e-16 0 -0.00816877 -0.0756866 0 -0.00391917 -0.0379493 0 -0.015225 0.113001 0 -0.00391917 0.0379493 0 -0.00816877 0.0756866 0 -0.0103503 0.114113 0 0.0025 -1.25673e-16 0 0.00106686 0.0383227 0 -0.00322455 0.0764314 0 -0.00322455 -0.0764314 0 0.00106686 -0.0383227 0 -0.0103503 -0.114113 0 -0.0103503 -0.114113 0.01 0.0025 -1.25673e-16 0.01 -0.00322455 -0.0764314 0.01 0.00106686 -0.0383227 0.01 0.0025 -1.25673e-16 0 -0.00322455 -0.0764314 0 0.00106686 -0.0383227 0 -0.015225 -0.113001 0.01 -0.0103503 -0.114113 0.01 -0.0025 -1.24449e-16 0.01 -0.00816877 -0.0756866 0.01 -0.00391917 -0.0379493 0.01 -0.015225 0.113001 0.01 -0.00391917 0.0379493 0.01 -0.00816877 0.0756866 0.01 -0.0103503 0.114113 0.01 0.0025 -1.25673e-16 0.01 0.00106686 0.0383227 0.01 -0.00322455 0.0764314 0.01 -0.00322455 -0.0764314 0.01 0.00106686 -0.0383227 0.01 -0.015225 -0.113001 0 -0.015225 -0.113001 0.01 -0.0025 -1.24449e-16 0.01 -0.00816877 -0.0756866 0.01 -0.00391917 -0.0379493 0.01 -0.0025 -1.24449e-16 0 -0.00816877 -0.0756866 0 -0.00391917 -0.0379493 0 -0.0025 -1.24449e-16 0 -0.0025 -1.24449e-16 0.01 -0.015225 0.113001 0.01 -0.00391917 0.0379493 0.01 -0.00816877 0.0756866 0.01 -0.015225 0.113001 0 -0.00391917 0.0379493 0 -0.00816877 0.0756866 0 -0.015225 0.113001 0 -0.0103503 0.114113 0 -0.0103503 0.114113 0.01 -0.015225 0.113001 0.01 0.0025 -1.25673e-16 0 0.0025 -1.25673e-16 0.01 -0.0103503 0.114113 0.01 0.00106686 0.0383227 0.01 -0.00322455 0.0764314 0.01 -0.0103503 0.114113 0 0.00106686 0.0383227 0 -0.00322455 0.0764314 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="185">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0152626 -0.113335 0 -0.0103878 -0.114447 0 -0.0103878 -0.114447 0.01 -0.0152626 -0.113335 0.01 -0.0152626 -0.113335 0 -0.0103878 -0.114447 0 -0.0025 -1.24816e-16 0 -0.0081855 -0.0759101 0 -0.00392336 -0.0380613 0 -0.0152626 0.113335 0 -0.00392336 0.0380613 0 -0.0081855 0.0759101 0 -0.0103878 0.114447 0 0.0025 -1.26041e-16 0 0.00106267 0.0384348 0 -0.00324128 0.0766549 0 -0.00324128 -0.0766549 0 0.00106267 -0.0384348 0 -0.0103878 -0.114447 0 -0.0103878 -0.114447 0.01 0.0025 -1.26041e-16 0.01 -0.00324128 -0.0766549 0.01 0.00106267 -0.0384348 0.01 0.0025 -1.26041e-16 0 -0.00324128 -0.0766549 0 0.00106267 -0.0384348 0 -0.0152626 -0.113335 0.01 -0.0103878 -0.114447 0.01 -0.0025 -1.24816e-16 0.01 -0.0081855 -0.0759101 0.01 -0.00392336 -0.0380613 0.01 -0.0152626 0.113335 0.01 -0.00392336 0.0380613 0.01 -0.0081855 0.0759101 0.01 -0.0103878 0.114447 0.01 0.0025 -1.26041e-16 0.01 0.00106267 0.0384348 0.01 -0.00324128 0.0766549 0.01 -0.00324128 -0.0766549 0.01 0.00106267 -0.0384348 0.01 -0.0152626 -0.113335 0 -0.0152626 -0.113335 0.01 -0.0025 -1.24816e-16 0.01 -0.0081855 -0.0759101 0.01 -0.00392336 -0.0380613 0.01 -0.0025 -1.24816e-16 0 -0.0081855 -0.0759101 0 -0.00392336 -0.0380613 0 -0.0025 -1.24816e-16 0 -0.0025 -1.24816e-16 0.01 -0.0152626 0.113335 0.01 -0.00392336 0.0380613 0.01 -0.0081855 0.0759101 0.01 -0.0152626 0.113335 0 -0.00392336 0.0380613 0 -0.0081855 0.0759101 0 -0.0152626 0.113335 0 -0.0103878 0.114447 0 -0.0103878 0.114447 0.01 -0.0152626 0.113335 0.01 0.0025 -1.26041e-16 0 0.0025 -1.26041e-16 0.01 -0.0103878 0.114447 0.01 0.00106267 0.0384348 0.01 -0.00324128 0.0766549 0.01 -0.0103878 0.114447 0 0.00106267 0.0384348 0 -0.00324128 0.0766549 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="186">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0154554 -0.115047 0 -0.0105807 -0.116159 0 -0.0105807 -0.116159 0.01 -0.0154554 -0.115047 0.01 -0.0154554 -0.115047 0 -0.0105807 -0.116159 0 -0.0025 -1.26702e-16 0 -0.00827141 -0.0770571 0 -0.00394487 -0.0386364 0 -0.0154554 0.115047 0 -0.00394487 0.0386364 0 -0.00827141 0.0770571 0 -0.0105807 0.116159 0 0.0025 -1.27927e-16 0 0.00104116 0.0390099 0 -0.00332719 0.0778019 0 -0.00332719 -0.0778019 0 0.00104116 -0.0390099 0 -0.0105807 -0.116159 0 -0.0105807 -0.116159 0.01 0.0025 -1.27927e-16 0.01 -0.00332719 -0.0778019 0.01 0.00104116 -0.0390099 0.01 0.0025 -1.27927e-16 0 -0.00332719 -0.0778019 0 0.00104116 -0.0390099 0 -0.0154554 -0.115047 0.01 -0.0105807 -0.116159 0.01 -0.0025 -1.26702e-16 0.01 -0.00827141 -0.0770571 0.01 -0.00394487 -0.0386364 0.01 -0.0154554 0.115047 0.01 -0.00394487 0.0386364 0.01 -0.00827141 0.0770571 0.01 -0.0105807 0.116159 0.01 0.0025 -1.27927e-16 0.01 0.00104116 0.0390099 0.01 -0.00332719 0.0778019 0.01 -0.00332719 -0.0778019 0.01 0.00104116 -0.0390099 0.01 -0.0154554 -0.115047 0 -0.0154554 -0.115047 0.01 -0.0025 -1.26702e-16 0.01 -0.00827141 -0.0770571 0.01 -0.00394487 -0.0386364 0.01 -0.0025 -1.26702e-16 0 -0.00827141 -0.0770571 0 -0.00394487 -0.0386364 0 -0.0025 -1.26702e-16 0 -0.0025 -1.26702e-16 0.01 -0.0154554 0.115047 0.01 -0.00394487 0.0386364 0.01 -0.00827141 0.0770571 0.01 -0.0154554 0.115047 0 -0.00394487 0.0386364 0 -0.00827141 0.0770571 0 -0.0154554 0.115047 0 -0.0105807 0.116159 0 -0.0105807 0.116159 0.01 -0.0154554 0.115047 0.01 0.0025 -1.27927e-16 0 0.0025 -1.27927e-16 0.01 -0.0105807 0.116159 0.01 0.00104116 0.0390099 0.01 -0.00332719 0.0778019 0.01 -0.0105807 0.116159 0 0.00104116 0.0390099 0 -0.00332719 0.0778019 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="187">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.015493 -0.115381 0 -0.0106182 -0.116493 0 -0.0106182 -0.116493 0.01 -0.015493 -0.115381 0.01 -0.015493 -0.115381 0 -0.0106182 -0.116493 0 -0.0025 -1.27069e-16 0 -0.00828814 -0.0772805 0 -0.00394906 -0.0387485 0 -0.015493 0.115381 0 -0.00394906 0.0387485 0 -0.00828814 0.0772805 0 -0.0106182 0.116493 0 0.0025 -1.28294e-16 0 0.00103698 0.0391219 0 -0.00334393 0.0780253 0 -0.00334393 -0.0780253 0 0.00103698 -0.0391219 0 -0.0106182 -0.116493 0 -0.0106182 -0.116493 0.01 0.0025 -1.28294e-16 0.01 -0.00334393 -0.0780253 0.01 0.00103698 -0.0391219 0.01 0.0025 -1.28294e-16 0 -0.00334393 -0.0780253 0 0.00103698 -0.0391219 0 -0.015493 -0.115381 0.01 -0.0106182 -0.116493 0.01 -0.0025 -1.27069e-16 0.01 -0.00828814 -0.0772805 0.01 -0.00394906 -0.0387485 0.01 -0.015493 0.115381 0.01 -0.00394906 0.0387485 0.01 -0.00828814 0.0772805 0.01 -0.0106182 0.116493 0.01 0.0025 -1.28294e-16 0.01 0.00103698 0.0391219 0.01 -0.00334393 0.0780253 0.01 -0.00334393 -0.0780253 0.01 0.00103698 -0.0391219 0.01 -0.015493 -0.115381 0 -0.015493 -0.115381 0.01 -0.0025 -1.27069e-16 0.01 -0.00828814 -0.0772805 0.01 -0.00394906 -0.0387485 0.01 -0.0025 -1.27069e-16 0 -0.00828814 -0.0772805 0 -0.00394906 -0.0387485 0 -0.0025 -1.27069e-16 0 -0.0025 -1.27069e-16 0.01 -0.015493 0.115381 0.01 -0.00394906 0.0387485 0.01 -0.00828814 0.0772805 0.01 -0.015493 0.115381 0 -0.00394906 0.0387485 0 -0.00828814 0.0772805 0 -0.015493 0.115381 0 -0.0106182 0.116493 0 -0.0106182 0.116493 0.01 -0.015493 0.115381 0.01 0.0025 -1.28294e-16 0 0.0025 -1.28294e-16 0.01 -0.0106182 0.116493 0.01 0.00103698 0.0391219 0.01 -0.00334393 0.0780253 0.01 -0.0106182 0.116493 0 0.00103698 0.0391219 0 -0.00334393 0.0780253 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="188">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0156833 -0.117071 0 -0.0108086 -0.118183 0 -0.0108086 -0.118183 0.01 -0.0156833 -0.117071 0.01 -0.0156833 -0.117071 0 -0.0108086 -0.118183 0 -0.0025 -1.28931e-16 0 -0.00837293 -0.0784126 0 -0.00397029 -0.0393161 0 -0.0156833 0.117071 0 -0.00397029 0.0393161 0 -0.00837293 0.0784126 0 -0.0108086 0.118183 0 0.0025 -1.30155e-16 0 0.00101575 0.0396896 0 -0.00342872 0.0791574 0 -0.00342872 -0.0791574 0 0.00101575 -0.0396896 0 -0.0108086 -0.118183 0 -0.0108086 -0.118183 0.01 0.0025 -1.30155e-16 0.01 -0.00342872 -0.0791574 0.01 0.00101575 -0.0396896 0.01 0.0025 -1.30155e-16 0 -0.00342872 -0.0791574 0 0.00101575 -0.0396896 0 -0.0156833 -0.117071 0.01 -0.0108086 -0.118183 0.01 -0.0025 -1.28931e-16 0.01 -0.00837293 -0.0784126 0.01 -0.00397029 -0.0393161 0.01 -0.0156833 0.117071 0.01 -0.00397029 0.0393161 0.01 -0.00837293 0.0784126 0.01 -0.0108086 0.118183 0.01 0.0025 -1.30155e-16 0.01 0.00101575 0.0396896 0.01 -0.00342872 0.0791574 0.01 -0.00342872 -0.0791574 0.01 0.00101575 -0.0396896 0.01 -0.0156833 -0.117071 0 -0.0156833 -0.117071 0.01 -0.0025 -1.28931e-16 0.01 -0.00837293 -0.0784126 0.01 -0.00397029 -0.0393161 0.01 -0.0025 -1.28931e-16 0 -0.00837293 -0.0784126 0 -0.00397029 -0.0393161 0 -0.0025 -1.28931e-16 0 -0.0025 -1.28931e-16 0.01 -0.0156833 0.117071 0.01 -0.00397029 0.0393161 0.01 -0.00837293 0.0784126 0.01 -0.0156833 0.117071 0 -0.00397029 0.0393161 0 -0.00837293 0.0784126 0 -0.0156833 0.117071 0 -0.0108086 0.118183 0 -0.0108086 0.118183 0.01 -0.0156833 0.117071 0.01 0.0025 -1.30155e-16 0 0.0025 -1.30155e-16 0.01 -0.0108086 0.118183 0.01 0.00101575 0.0396896 0.01 -0.00342872 0.0791574 0.01 -0.0108086 0.118183 0 0.00101575 0.0396896 0 -0.00342872 0.0791574 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="189">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0157234 -0.117427 0 -0.0108486 -0.118539 0 -0.0108486 -0.118539 0.01 -0.0157234 -0.117427 0.01 -0.0157234 -0.117427 0 -0.0108486 -0.118539 0 -0.0025 -1.29323e-16 0 -0.00839079 -0.0786509 0 -0.00397476 -0.0394356 0 -0.0157234 0.117427 0 -0.00397476 0.0394356 0 -0.00839079 0.0786509 0 -0.0108486 0.118539 0 0.0025 -1.30547e-16 0 0.00101128 0.0398091 0 -0.00344657 0.0793957 0 -0.00344657 -0.0793957 0 0.00101128 -0.0398091 0 -0.0108486 -0.118539 0 -0.0108486 -0.118539 0.01 0.0025 -1.30547e-16 0.01 -0.00344657 -0.0793957 0.01 0.00101128 -0.0398091 0.01 0.0025 -1.30547e-16 0 -0.00344657 -0.0793957 0 0.00101128 -0.0398091 0 -0.0157234 -0.117427 0.01 -0.0108486 -0.118539 0.01 -0.0025 -1.29323e-16 0.01 -0.00839079 -0.0786509 0.01 -0.00397476 -0.0394356 0.01 -0.0157234 0.117427 0.01 -0.00397476 0.0394356 0.01 -0.00839079 0.0786509 0.01 -0.0108486 0.118539 0.01 0.0025 -1.30547e-16 0.01 0.00101128 0.0398091 0.01 -0.00344657 0.0793957 0.01 -0.00344657 -0.0793957 0.01 0.00101128 -0.0398091 0.01 -0.0157234 -0.117427 0 -0.0157234 -0.117427 0.01 -0.0025 -1.29323e-16 0.01 -0.00839079 -0.0786509 0.01 -0.00397476 -0.0394356 0.01 -0.0025 -1.29323e-16 0 -0.00839079 -0.0786509 0 -0.00397476 -0.0394356 0 -0.0025 -1.29323e-16 0 -0.0025 -1.29323e-16 0.01 -0.0157234 0.117427 0.01 -0.00397476 0.0394356 0.01 -0.00839079 0.0786509 0.01 -0.0157234 0.117427 0 -0.00397476 0.0394356 0 -0.00839079 0.0786509 0 -0.0157234 0.117427 0 -0.0108486 0.118539 0 -0.0108486 0.118539 0.01 -0.0157234 0.117427 0.01 0.0025 -1.30547e-16 0 0.0025 -1.30547e-16 0.01 -0.0108486 0.118539 0.01 0.00101128 0.0398091 0.01 -0.00344657 0.0793957 0.01 -0.0108486 0.118539 0 0.00101128 0.0398091 0 -0.00344657 0.0793957 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="190">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0159138 -0.119117 0 -0.011039 -0.120229 0 -0.011039 -0.120229 0.01 -0.0159138 -0.119117 0.01 -0.0159138 -0.119117 0 -0.011039 -0.120229 0 -0.0025 -1.31184e-16 0 -0.00847558 -0.079783 0 -0.00399598 -0.0400032 0 -0.0159138 0.119117 0 -0.00399598 0.0400032 0 -0.00847558 0.079783 0 -0.011039 0.120229 0 0.0025 -1.32409e-16 0 0.000990051 0.0403767 0 -0.00353136 0.0805278 0 -0.00353136 -0.0805278 0 0.000990051 -0.0403767 0 -0.011039 -0.120229 0 -0.011039 -0.120229 0.01 0.0025 -1.32409e-16 0.01 -0.00353136 -0.0805278 0.01 0.000990051 -0.0403767 0.01 0.0025 -1.32409e-16 0 -0.00353136 -0.0805278 0 0.000990051 -0.0403767 0 -0.0159138 -0.119117 0.01 -0.011039 -0.120229 0.01 -0.0025 -1.31184e-16 0.01 -0.00847558 -0.079783 0.01 -0.00399598 -0.0400032 0.01 -0.0159138 0.119117 0.01 -0.00399598 0.0400032 0.01 -0.00847558 0.079783 0.01 -0.011039 0.120229 0.01 0.0025 -1.32409e-16 0.01 0.000990051 0.0403767 0.01 -0.00353136 0.0805278 0.01 -0.00353136 -0.0805278 0.01 0.000990051 -0.0403767 0.01 -0.0159138 -0.119117 0 -0.0159138 -0.119117 0.01 -0.0025 -1.31184e-16 0.01 -0.00847558 -0.079783 0.01 -0.00399598 -0.0400032 0.01 -0.0025 -1.31184e-16 0 -0.00847558 -0.079783 0 -0.00399598 -0.0400032 0 -0.0025 -1.31184e-16 0 -0.0025 -1.31184e-16 0.01 -0.0159138 0.119117 0.01 -0.00399598 0.0400032 0.01 -0.00847558 0.079783 0.01 -0.0159138 0.119117 0 -0.00399598 0.0400032 0 -0.00847558 0.079783 0 -0.0159138 0.119117 0 -0.011039 0.120229 0 -0.011039 0.120229 0.01 -0.0159138 0.119117 0.01 0.0025 -1.32409e-16 0 0.0025 -1.32409e-16 0.01 -0.011039 0.120229 0.01 0.000990051 0.0403767 0.01 -0.00353136 0.0805278 0.01 -0.011039 0.120229 0 0.000990051 0.0403767 0 -0.00353136 0.0805278 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="191">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0159513 -0.119451 0 -0.0110765 -0.120563 0 -0.0110765 -0.120563 0.01 -0.0159513 -0.119451 0.01 -0.0159513 -0.119451 0 -0.0110765 -0.120563 0 -0.0025 -1.31552e-16 0 -0.00849231 -0.0800065 0 -0.00400017 -0.0401153 0 -0.0159513 0.119451 0 -0.00400017 0.0401153 0 -0.00849231 0.0800065 0 -0.0110765 0.120563 0 0.0025 -1.32776e-16 0 0.000985861 0.0404887 0 -0.0035481 0.0807513 0 -0.0035481 -0.0807513 0 0.000985861 -0.0404887 0 -0.0110765 -0.120563 0 -0.0110765 -0.120563 0.01 0.0025 -1.32776e-16 0.01 -0.0035481 -0.0807513 0.01 0.000985861 -0.0404887 0.01 0.0025 -1.32776e-16 0 -0.0035481 -0.0807513 0 0.000985861 -0.0404887 0 -0.0159513 -0.119451 0.01 -0.0110765 -0.120563 0.01 -0.0025 -1.31552e-16 0.01 -0.00849231 -0.0800065 0.01 -0.00400017 -0.0401153 0.01 -0.0159513 0.119451 0.01 -0.00400017 0.0401153 0.01 -0.00849231 0.0800065 0.01 -0.0110765 0.120563 0.01 0.0025 -1.32776e-16 0.01 0.000985861 0.0404887 0.01 -0.0035481 0.0807513 0.01 -0.0035481 -0.0807513 0.01 0.000985861 -0.0404887 0.01 -0.0159513 -0.119451 0 -0.0159513 -0.119451 0.01 -0.0025 -1.31552e-16 0.01 -0.00849231 -0.0800065 0.01 -0.00400017 -0.0401153 0.01 -0.0025 -1.31552e-16 0 -0.00849231 -0.0800065 0 -0.00400017 -0.0401153 0 -0.0025 -1.31552e-16 0 -0.0025 -1.31552e-16 0.01 -0.0159513 0.119451 0.01 -0.00400017 0.0401153 0.01 -0.00849231 0.0800065 0.01 -0.0159513 0.119451 0 -0.00400017 0.0401153 0 -0.00849231 0.0800065 0 -0.0159513 0.119451 0 -0.0110765 0.120563 0 -0.0110765 0.120563 0.01 -0.0159513 0.119451 0.01 0.0025 -1.32776e-16 0 0.0025 -1.32776e-16 0.01 -0.0110765 0.120563 0.01 0.000985861 0.0404887 0.01 -0.0035481 0.0807513 0.01 -0.0110765 0.120563 0 0.000985861 0.0404887 0 -0.0035481 0.0807513 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="174">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0140755 -0.102793 0 -0.00920072 -0.103905 0 -0.00920072 -0.103905 0.01 -0.0140755 -0.102793 0.01 -0.0140755 -0.102793 0 -0.00920072 -0.103905 0 -0.0025 -1.13206e-16 0 -0.00765667 -0.0688494 0 -0.00379097 -0.0345211 0 -0.0140755 0.102793 0 -0.00379097 0.0345211 0 -0.00765667 0.0688494 0 -0.00920072 0.103905 0 0.0025 -1.14431e-16 0 0.00119506 0.0348945 0 -0.00271245 0.0695942 0 -0.00271245 -0.0695942 0 0.00119506 -0.0348945 0 -0.00920072 -0.103905 0 -0.00920072 -0.103905 0.01 0.0025 -1.14431e-16 0.01 -0.00271245 -0.0695942 0.01 0.00119506 -0.0348945 0.01 0.0025 -1.14431e-16 0 -0.00271245 -0.0695942 0 0.00119506 -0.0348945 0 -0.0140755 -0.102793 0.01 -0.00920072 -0.103905 0.01 -0.0025 -1.13206e-16 0.01 -0.00765667 -0.0688494 0.01 -0.00379097 -0.0345211 0.01 -0.0140755 0.102793 0.01 -0.00379097 0.0345211 0.01 -0.00765667 0.0688494 0.01 -0.00920072 0.103905 0.01 0.0025 -1.14431e-16 0.01 0.00119506 0.0348945 0.01 -0.00271245 0.0695942 0.01 -0.00271245 -0.0695942 0.01 0.00119506 -0.0348945 0.01 -0.0140755 -0.102793 0 -0.0140755 -0.102793 0.01 -0.0025 -1.13206e-16 0.01 -0.00765667 -0.0688494 0.01 -0.00379097 -0.0345211 0.01 -0.0025 -1.13206e-16 0 -0.00765667 -0.0688494 0 -0.00379097 -0.0345211 0 -0.0025 -1.13206e-16 0 -0.0025 -1.13206e-16 0.01 -0.0140755 0.102793 0.01 -0.00379097 0.0345211 0.01 -0.00765667 0.0688494 0.01 -0.0140755 0.102793 0 -0.00379097 0.0345211 0 -0.00765667 0.0688494 0 -0.0140755 0.102793 0 -0.00920072 0.103905 0 -0.00920072 0.103905 0.01 -0.0140755 0.102793 0.01 0.0025 -1.14431e-16 0 0.0025 -1.14431e-16 0.01 -0.00920072 0.103905 0.01 0.00119506 0.0348945 0.01 -0.00271245 0.0695942 0.01 -0.00920072 0.103905 0 0.00119506 0.0348945 0 -0.00271245 0.0695942 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="175">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0141156 -0.103149 0 -0.00924079 -0.104261 0 -0.00924079 -0.104261 0.01 -0.0141156 -0.103149 0.01 -0.0141156 -0.103149 0 -0.00924079 -0.104261 0 -0.0025 -1.13598e-16 0 -0.00767452 -0.0690877 0 -0.00379544 -0.0346406 0 -0.0141156 0.103149 0 -0.00379544 0.0346406 0 -0.00767452 0.0690877 0 -0.00924079 0.104261 0 0.0025 -1.14823e-16 0 0.0011906 0.035014 0 -0.0027303 0.0698325 0 -0.0027303 -0.0698325 0 0.0011906 -0.035014 0 -0.00924079 -0.104261 0 -0.00924079 -0.104261 0.01 0.0025 -1.14823e-16 0.01 -0.0027303 -0.0698325 0.01 0.0011906 -0.035014 0.01 0.0025 -1.14823e-16 0 -0.0027303 -0.0698325 0 0.0011906 -0.035014 0 -0.0141156 -0.103149 0.01 -0.00924079 -0.104261 0.01 -0.0025 -1.13598e-16 0.01 -0.00767452 -0.0690877 0.01 -0.00379544 -0.0346406 0.01 -0.0141156 0.103149 0.01 -0.00379544 0.0346406 0.01 -0.00767452 0.0690877 0.01 -0.00924079 0.104261 0.01 0.0025 -1.14823e-16 0.01 0.0011906 0.035014 0.01 -0.0027303 0.0698325 0.01 -0.0027303 -0.0698325 0.01 0.0011906 -0.035014 0.01 -0.0141156 -0.103149 0 -0.0141156 -0.103149 0.01 -0.0025 -1.13598e-16 0.01 -0.00767452 -0.0690877 0.01 -0.00379544 -0.0346406 0.01 -0.0025 -1.13598e-16 0 -0.00767452 -0.0690877 0 -0.00379544 -0.0346406 0 -0.0025 -1.13598e-16 0 -0.0025 -1.13598e-16 0.01 -0.0141156 0.103149 0.01 -0.00379544 0.0346406 0.01 -0.00767452 0.0690877 0.01 -0.0141156 0.103149 0 -0.00379544 0.0346406 0 -0.00767452 0.0690877 0 -0.0141156 0.103149 0 -0.00924079 0.104261 0 -0.00924079 0.104261 0.01 -0.0141156 0.103149 0.01 0.0025 -1.14823e-16 0 0.0025 -1.14823e-16 0.01 -0.00924079 0.104261 0.01 0.0011906 0.035014 0.01 -0.0027303 0.0698325 0.01 -0.00924079 0.104261 0 0.0011906 0.035014 0 -0.0027303 0.0698325 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="176">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0143059 -0.104839 0 -0.00943113 -0.105951 0 -0.00943113 -0.105951 0.01 -0.0143059 -0.104839 0.01 -0.0143059 -0.104839 0 -0.00943113 -0.105951 0 -0.0025 -1.1546e-16 0 -0.00775931 -0.0702198 0 -0.00381667 -0.0352082 0 -0.0143059 0.104839 0 -0.00381667 0.0352082 0 -0.00775931 0.0702198 0 -0.00943113 0.105951 0 0.0025 -1.16684e-16 0 0.00116937 0.0355817 0 -0.00281509 0.0709646 0 -0.00281509 -0.0709646 0 0.00116937 -0.0355817 0 -0.00943113 -0.105951 0 -0.00943113 -0.105951 0.01 0.0025 -1.16684e-16 0.01 -0.00281509 -0.0709646 0.01 0.00116937 -0.0355817 0.01 0.0025 -1.16684e-16 0 -0.00281509 -0.0709646 0 0.00116937 -0.0355817 0 -0.0143059 -0.104839 0.01 -0.00943113 -0.105951 0.01 -0.0025 -1.1546e-16 0.01 -0.00775931 -0.0702198 0.01 -0.00381667 -0.0352082 0.01 -0.0143059 0.104839 0.01 -0.00381667 0.0352082 0.01 -0.00775931 0.0702198 0.01 -0.00943113 0.105951 0.01 0.0025 -1.16684e-16 0.01 0.00116937 0.0355817 0.01 -0.00281509 0.0709646 0.01 -0.00281509 -0.0709646 0.01 0.00116937 -0.0355817 0.01 -0.0143059 -0.104839 0 -0.0143059 -0.104839 0.01 -0.0025 -1.1546e-16 0.01 -0.00775931 -0.0702198 0.01 -0.00381667 -0.0352082 0.01 -0.0025 -1.1546e-16 0 -0.00775931 -0.0702198 0 -0.00381667 -0.0352082 0 -0.0025 -1.1546e-16 0 -0.0025 -1.1546e-16 0.01 -0.0143059 0.104839 0.01 -0.00381667 0.0352082 0.01 -0.00775931 0.0702198 0.01 -0.0143059 0.104839 0 -0.00381667 0.0352082 0 -0.00775931 0.0702198 0 -0.0143059 0.104839 0 -0.00943113 0.105951 0 -0.00943113 0.105951 0.01 -0.0143059 0.104839 0.01 0.0025 -1.16684e-16 0 0.0025 -1.16684e-16 0.01 -0.00943113 0.105951 0.01 0.00116937 0.0355817 0.01 -0.00281509 0.0709646 0.01 -0.00943113 0.105951 0 0.00116937 0.0355817 0 -0.00281509 0.0709646 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="177">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0143435 -0.105173 0 -0.0094687 -0.106285 0 -0.0094687 -0.106285 0.01 -0.0143435 -0.105173 0.01 -0.0143435 -0.105173 0 -0.0094687 -0.106285 0 -0.0025 -1.15827e-16 0 -0.00777605 -0.0704432 0 -0.00382086 -0.0353203 0 -0.0143435 0.105173 0 -0.00382086 0.0353203 0 -0.00777605 0.0704432 0 -0.0094687 0.106285 0 0.0025 -1.17052e-16 0 0.00116518 0.0356937 0 -0.00283183 0.071188 0 -0.00283183 -0.071188 0 0.00116518 -0.0356937 0 -0.0094687 -0.106285 0 -0.0094687 -0.106285 0.01 0.0025 -1.17052e-16 0.01 -0.00283183 -0.071188 0.01 0.00116518 -0.0356937 0.01 0.0025 -1.17052e-16 0 -0.00283183 -0.071188 0 0.00116518 -0.0356937 0 -0.0143435 -0.105173 0.01 -0.0094687 -0.106285 0.01 -0.0025 -1.15827e-16 0.01 -0.00777605 -0.0704432 0.01 -0.00382086 -0.0353203 0.01 -0.0143435 0.105173 0.01 -0.00382086 0.0353203 0.01 -0.00777605 0.0704432 0.01 -0.0094687 0.106285 0.01 0.0025 -1.17052e-16 0.01 0.00116518 0.0356937 0.01 -0.00283183 0.071188 0.01 -0.00283183 -0.071188 0.01 0.00116518 -0.0356937 0.01 -0.0143435 -0.105173 0 -0.0143435 -0.105173 0.01 -0.0025 -1.15827e-16 0.01 -0.00777605 -0.0704432 0.01 -0.00382086 -0.0353203 0.01 -0.0025 -1.15827e-16 0 -0.00777605 -0.0704432 0 -0.00382086 -0.0353203 0 -0.0025 -1.15827e-16 0 -0.0025 -1.15827e-16 0.01 -0.0143435 0.105173 0.01 -0.00382086 0.0353203 0.01 -0.00777605 0.0704432 0.01 -0.0143435 0.105173 0 -0.00382086 0.0353203 0 -0.00777605 0.0704432 0 -0.0143435 0.105173 0 -0.0094687 0.106285 0 -0.0094687 0.106285 0.01 -0.0143435 0.105173 0.01 0.0025 -1.17052e-16 0 0.0025 -1.17052e-16 0.01 -0.0094687 0.106285 0.01 0.00116518 0.0356937 0.01 -0.00283183 0.071188 0.01 -0.0094687 0.106285 0 0.00116518 0.0356937 0 -0.00283183 0.071188 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="178">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0145363 -0.106885 0 -0.00966154 -0.107997 0 -0.00966154 -0.107997 0.01 -0.0145363 -0.106885 0.01 -0.0145363 -0.106885 0 -0.00966154 -0.107997 0 -0.0025 -1.17713e-16 0 -0.00786195 -0.0715902 0 -0.00384236 -0.0358954 0 -0.0145363 0.106885 0 -0.00384236 0.0358954 0 -0.00786195 0.0715902 0 -0.00966154 0.107997 0 0.0025 -1.18938e-16 0 0.00114367 0.0362688 0 -0.00291774 0.072335 0 -0.00291774 -0.072335 0 0.00114367 -0.0362688 0 -0.00966154 -0.107997 0 -0.00966154 -0.107997 0.01 0.0025 -1.18938e-16 0.01 -0.00291774 -0.072335 0.01 0.00114367 -0.0362688 0.01 0.0025 -1.18938e-16 0 -0.00291774 -0.072335 0 0.00114367 -0.0362688 0 -0.0145363 -0.106885 0.01 -0.00966154 -0.107997 0.01 -0.0025 -1.17713e-16 0.01 -0.00786195 -0.0715902 0.01 -0.00384236 -0.0358954 0.01 -0.0145363 0.106885 0.01 -0.00384236 0.0358954 0.01 -0.00786195 0.0715902 0.01 -0.00966154 0.107997 0.01 0.0025 -1.18938e-16 0.01 0.00114367 0.0362688 0.01 -0.00291774 0.072335 0.01 -0.00291774 -0.072335 0.01 0.00114367 -0.0362688 0.01 -0.0145363 -0.106885 0 -0.0145363 -0.106885 0.01 -0.0025 -1.17713e-16 0.01 -0.00786195 -0.0715902 0.01 -0.00384236 -0.0358954 0.01 -0.0025 -1.17713e-16 0 -0.00786195 -0.0715902 0 -0.00384236 -0.0358954 0 -0.0025 -1.17713e-16 0 -0.0025 -1.17713e-16 0.01 -0.0145363 0.106885 0.01 -0.00384236 0.0358954 0.01 -0.00786195 0.0715902 0.01 -0.0145363 0.106885 0 -0.00384236 0.0358954 0 -0.00786195 0.0715902 0 -0.0145363 0.106885 0 -0.00966154 0.107997 0 -0.00966154 0.107997 0.01 -0.0145363 0.106885 0.01 0.0025 -1.18938e-16 0 0.0025 -1.18938e-16 0.01 -0.00966154 0.107997 0.01 0.00114367 0.0362688 0.01 -0.00291774 0.072335 0.01 -0.00966154 0.107997 0 0.00114367 0.0362688 0 -0.00291774 0.072335 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="179">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0145739 -0.107219 0 -0.00969911 -0.108331 0 -0.00969911 -0.108331 0.01 -0.0145739 -0.107219 0.01 -0.0145739 -0.107219 0 -0.00969911 -0.108331 0 -0.0025 -1.1808e-16 0 -0.00787869 -0.0718137 0 -0.00384655 -0.0360074 0 -0.0145739 0.107219 0 -0.00384655 0.0360074 0 -0.00787869 0.0718137 0 -0.00969911 0.108331 0 0.0025 -1.19305e-16 0 0.00113948 0.0363808 0 -0.00293447 0.0725585 0 -0.00293447 -0.0725585 0 0.00113948 -0.0363808 0 -0.00969911 -0.108331 0 -0.00969911 -0.108331 0.01 0.0025 -1.19305e-16 0.01 -0.00293447 -0.0725585 0.01 0.00113948 -0.0363808 0.01 0.0025 -1.19305e-16 0 -0.00293447 -0.0725585 0 0.00113948 -0.0363808 0 -0.0145739 -0.107219 0.01 -0.00969911 -0.108331 0.01 -0.0025 -1.1808e-16 0.01 -0.00787869 -0.0718137 0.01 -0.00384655 -0.0360074 0.01 -0.0145739 0.107219 0.01 -0.00384655 0.0360074 0.01 -0.00787869 0.0718137 0.01 -0.00969911 0.108331 0.01 0.0025 -1.19305e-16 0.01 0.00113948 0.0363808 0.01 -0.00293447 0.0725585 0.01 -0.00293447 -0.0725585 0.01 0.00113948 -0.0363808 0.01 -0.0145739 -0.107219 0 -0.0145739 -0.107219 0.01 -0.0025 -1.1808e-16 0.01 -0.00787869 -0.0718137 0.01 -0.00384655 -0.0360074 0.01 -0.0025 -1.1808e-16 0 -0.00787869 -0.0718137 0 -0.00384655 -0.0360074 0 -0.0025 -1.1808e-16 0 -0.0025 -1.1808e-16 0.01 -0.0145739 0.107219 0.01 -0.00384655 0.0360074 0.01 -0.00787869 0.0718137 0.01 -0.0145739 0.107219 0 -0.00384655 0.0360074 0 -0.00787869 0.0718137 0 -0.0145739 0.107219 0 -0.00969911 0.108331 0 -0.00969911 0.108331 0.01 -0.0145739 0.107219 0.01 0.0025 -1.19305e-16 0 0.0025 -1.19305e-16 0.01 -0.00969911 0.108331 0.01 0.00113948 0.0363808 0.01 -0.00293447 0.0725585 0.01 -0.00969911 0.108331 0 0.00113948 0.0363808 0 -0.00293447 0.0725585 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="180">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0147667 -0.108931 0 -0.00989195 -0.110043 0 -0.00989195 -0.110043 0.01 -0.0147667 -0.108931 0.01 -0.0147667 -0.108931 0 -0.00989195 -0.110043 0 -0.0025 -1.19966e-16 0 -0.0079646 -0.0729606 0 -0.00386806 -0.0365825 0 -0.0147667 0.108931 0 -0.00386806 0.0365825 0 -0.0079646 0.0729606 0 -0.00989195 0.110043 0 0.0025 -1.21191e-16 0 0.00111797 0.0369559 0 -0.00302038 0.0737054 0 -0.00302038 -0.0737054 0 0.00111797 -0.0369559 0 -0.00989195 -0.110043 0 -0.00989195 -0.110043 0.01 0.0025 -1.21191e-16 0.01 -0.00302038 -0.0737054 0.01 0.00111797 -0.0369559 0.01 0.0025 -1.21191e-16 0 -0.00302038 -0.0737054 0 0.00111797 -0.0369559 0 -0.0147667 -0.108931 0.01 -0.00989195 -0.110043 0.01 -0.0025 -1.19966e-16 0.01 -0.0079646 -0.0729606 0.01 -0.00386806 -0.0365825 0.01 -0.0147667 0.108931 0.01 -0.00386806 0.0365825 0.01 -0.0079646 0.0729606 0.01 -0.00989195 0.110043 0.01 0.0025 -1.21191e-16 0.01 0.00111797 0.0369559 0.01 -0.00302038 0.0737054 0.01 -0.00302038 -0.0737054 0.01 0.00111797 -0.0369559 0.01 -0.0147667 -0.108931 0 -0.0147667 -0.108931 0.01 -0.0025 -1.19966e-16 0.01 -0.0079646 -0.0729606 0.01 -0.00386806 -0.0365825 0.01 -0.0025 -1.19966e-16 0 -0.0079646 -0.0729606 0 -0.00386806 -0.0365825 0 -0.0025 -1.19966e-16 0 -0.0025 -1.19966e-16 0.01 -0.0147667 0.108931 0.01 -0.00386806 0.0365825 0.01 -0.0079646 0.0729606 0.01 -0.0147667 0.108931 0 -0.00386806 0.0365825 0 -0.0079646 0.0729606 0 -0.0147667 0.108931 0 -0.00989195 0.110043 0 -0.00989195 0.110043 0.01 -0.0147667 0.108931 0.01 0.0025 -1.21191e-16 0 0.0025 -1.21191e-16 0.01 -0.00989195 0.110043 0.01 0.00111797 0.0369559 0.01 -0.00302038 0.0737054 0.01 -0.00989195 0.110043 0 0.00111797 0.0369559 0 -0.00302038 0.0737054 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="181">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0148043 -0.109265 0 -0.00992951 -0.110377 0 -0.00992951 -0.110377 0.01 -0.0148043 -0.109265 0.01 -0.0148043 -0.109265 0 -0.00992951 -0.110377 0 -0.0025 -1.20334e-16 0 -0.00798133 -0.0731841 0 -0.00387225 -0.0366945 0 -0.0148043 0.109265 0 -0.00387225 0.0366945 0 -0.00798133 0.0731841 0 -0.00992951 0.110377 0 0.0025 -1.21558e-16 0 0.00111379 0.037068 0 -0.00303711 0.0739289 0 -0.00303711 -0.0739289 0 0.00111379 -0.037068 0 -0.00992951 -0.110377 0 -0.00992951 -0.110377 0.01 0.0025 -1.21558e-16 0.01 -0.00303711 -0.0739289 0.01 0.00111379 -0.037068 0.01 0.0025 -1.21558e-16 0 -0.00303711 -0.0739289 0 0.00111379 -0.037068 0 -0.0148043 -0.109265 0.01 -0.00992951 -0.110377 0.01 -0.0025 -1.20334e-16 0.01 -0.00798133 -0.0731841 0.01 -0.00387225 -0.0366945 0.01 -0.0148043 0.109265 0.01 -0.00387225 0.0366945 0.01 -0.00798133 0.0731841 0.01 -0.00992951 0.110377 0.01 0.0025 -1.21558e-16 0.01 0.00111379 0.037068 0.01 -0.00303711 0.0739289 0.01 -0.00303711 -0.0739289 0.01 0.00111379 -0.037068 0.01 -0.0148043 -0.109265 0 -0.0148043 -0.109265 0.01 -0.0025 -1.20334e-16 0.01 -0.00798133 -0.0731841 0.01 -0.00387225 -0.0366945 0.01 -0.0025 -1.20334e-16 0 -0.00798133 -0.0731841 0 -0.00387225 -0.0366945 0 -0.0025 -1.20334e-16 0 -0.0025 -1.20334e-16 0.01 -0.0148043 0.109265 0.01 -0.00387225 0.0366945 0.01 -0.00798133 0.0731841 0.01 -0.0148043 0.109265 0 -0.00387225 0.0366945 0 -0.00798133 0.0731841 0 -0.0148043 0.109265 0 -0.00992951 0.110377 0 -0.00992951 0.110377 0.01 -0.0148043 0.109265 0.01 0.0025 -1.21558e-16 0 0.0025 -1.21558e-16 0.01 -0.00992951 0.110377 0.01 0.00111379 0.037068 0.01 -0.00303711 0.0739289 0.01 -0.00992951 0.110377 0 0.00111379 0.037068 0 -0.00303711 0.0739289 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="192">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.017742 -0.135352 0 -0.0128672 -0.136464 0 -0.0128672 -0.136464 0.01 -0.017742 -0.135352 0.01 -0.017742 -0.135352 0 -0.0128672 -0.136464 0 -0.0025 -1.49064e-16 0 -0.00929002 -0.0906571 0 -0.00419988 -0.0454555 0 -0.017742 0.135352 0 -0.00419988 0.0454555 0 -0.00929002 0.0906571 0 -0.0128672 0.136464 0 0.0025 -1.50289e-16 0 0.000786155 0.045829 0 -0.00434581 0.0914019 0 -0.00434581 -0.0914019 0 0.000786155 -0.045829 0 -0.0128672 -0.136464 0 -0.0128672 -0.136464 0.01 0.0025 -1.50289e-16 0.01 -0.00434581 -0.0914019 0.01 0.000786155 -0.045829 0.01 0.0025 -1.50289e-16 0 -0.00434581 -0.0914019 0 0.000786155 -0.045829 0 -0.017742 -0.135352 0.01 -0.0128672 -0.136464 0.01 -0.0025 -1.49064e-16 0.01 -0.00929002 -0.0906571 0.01 -0.00419988 -0.0454555 0.01 -0.017742 0.135352 0.01 -0.00419988 0.0454555 0.01 -0.00929002 0.0906571 0.01 -0.0128672 0.136464 0.01 0.0025 -1.50289e-16 0.01 0.000786155 0.045829 0.01 -0.00434581 0.0914019 0.01 -0.00434581 -0.0914019 0.01 0.000786155 -0.045829 0.01 -0.017742 -0.135352 0 -0.017742 -0.135352 0.01 -0.0025 -1.49064e-16 0.01 -0.00929002 -0.0906571 0.01 -0.00419988 -0.0454555 0.01 -0.0025 -1.49064e-16 0 -0.00929002 -0.0906571 0 -0.00419988 -0.0454555 0 -0.0025 -1.49064e-16 0 -0.0025 -1.49064e-16 0.01 -0.017742 0.135352 0.01 -0.00419988 0.0454555 0.01 -0.00929002 0.0906571 0.01 -0.017742 0.135352 0 -0.00419988 0.0454555 0 -0.00929002 0.0906571 0 -0.017742 0.135352 0 -0.0128672 0.136464 0 -0.0128672 0.136464 0.01 -0.017742 0.135352 0.01 0.0025 -1.50289e-16 0 0.0025 -1.50289e-16 0.01 -0.0128672 0.136464 0.01 0.000786155 0.045829 0.01 -0.00434581 0.0914019 0.01 -0.0128672 0.136464 0 0.000786155 0.045829 0 -0.00434581 0.0914019 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="193">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.017762 -0.13553 0 -0.0128873 -0.136642 0 -0.0128873 -0.136642 0.01 -0.017762 -0.13553 0.01 -0.017762 -0.13553 0 -0.0128873 -0.136642 0 -0.0025 -1.4926e-16 0 -0.00929895 -0.0907763 0 -0.00420211 -0.0455153 0 -0.017762 0.13553 0 -0.00420211 0.0455153 0 -0.00929895 0.0907763 0 -0.0128873 0.136642 0 0.0025 -1.50485e-16 0 0.00078392 0.0458887 0 -0.00435473 0.0915211 0 -0.00435473 -0.0915211 0 0.00078392 -0.0458887 0 -0.0128873 -0.136642 0 -0.0128873 -0.136642 0.01 0.0025 -1.50485e-16 0.01 -0.00435473 -0.0915211 0.01 0.00078392 -0.0458887 0.01 0.0025 -1.50485e-16 0 -0.00435473 -0.0915211 0 0.00078392 -0.0458887 0 -0.017762 -0.13553 0.01 -0.0128873 -0.136642 0.01 -0.0025 -1.4926e-16 0.01 -0.00929895 -0.0907763 0.01 -0.00420211 -0.0455153 0.01 -0.017762 0.13553 0.01 -0.00420211 0.0455153 0.01 -0.00929895 0.0907763 0.01 -0.0128873 0.136642 0.01 0.0025 -1.50485e-16 0.01 0.00078392 0.0458887 0.01 -0.00435473 0.0915211 0.01 -0.00435473 -0.0915211 0.01 0.00078392 -0.0458887 0.01 -0.017762 -0.13553 0 -0.017762 -0.13553 0.01 -0.0025 -1.4926e-16 0.01 -0.00929895 -0.0907763 0.01 -0.00420211 -0.0455153 0.01 -0.0025 -1.4926e-16 0 -0.00929895 -0.0907763 0 -0.00420211 -0.0455153 0 -0.0025 -1.4926e-16 0 -0.0025 -1.4926e-16 0.01 -0.017762 0.13553 0.01 -0.00420211 0.0455153 0.01 -0.00929895 0.0907763 0.01 -0.017762 0.13553 0 -0.00420211 0.0455153 0 -0.00929895 0.0907763 0 -0.017762 0.13553 0 -0.0128873 0.136642 0 -0.0128873 0.136642 0.01 -0.017762 0.13553 0.01 0.0025 -1.50485e-16 0 0.0025 -1.50485e-16 0.01 -0.0128873 0.136642 0.01 0.00078392 0.0458887 0.01 -0.00435473 0.0915211 0.01 -0.0128873 0.136642 0 0.00078392 0.0458887 0 -0.00435473 0.0915211 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="202">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0188465 -0.14516 0 -0.0139717 -0.146272 0 -0.0139717 -0.146272 0.01 -0.0188465 -0.14516 0.01 -0.0188465 -0.14516 0 -0.0139717 -0.146272 0 -0.0025 -1.59865e-16 0 -0.00978204 -0.0972262 0 -0.00432306 -0.0487493 0 -0.0188465 0.14516 0 -0.00432306 0.0487493 0 -0.00978204 0.0972262 0 -0.0139717 0.146272 0 0.0025 -1.6109e-16 0 0.000662979 0.0491227 0 -0.00483782 0.097971 0 -0.00483782 -0.097971 0 0.000662979 -0.0491227 0 -0.0139717 -0.146272 0 -0.0139717 -0.146272 0.01 0.0025 -1.6109e-16 0.01 -0.00483782 -0.097971 0.01 0.000662979 -0.0491227 0.01 0.0025 -1.6109e-16 0 -0.00483782 -0.097971 0 0.000662979 -0.0491227 0 -0.0188465 -0.14516 0.01 -0.0139717 -0.146272 0.01 -0.0025 -1.59865e-16 0.01 -0.00978204 -0.0972262 0.01 -0.00432306 -0.0487493 0.01 -0.0188465 0.14516 0.01 -0.00432306 0.0487493 0.01 -0.00978204 0.0972262 0.01 -0.0139717 0.146272 0.01 0.0025 -1.6109e-16 0.01 0.000662979 0.0491227 0.01 -0.00483782 0.097971 0.01 -0.00483782 -0.097971 0.01 0.000662979 -0.0491227 0.01 -0.0188465 -0.14516 0 -0.0188465 -0.14516 0.01 -0.0025 -1.59865e-16 0.01 -0.00978204 -0.0972262 0.01 -0.00432306 -0.0487493 0.01 -0.0025 -1.59865e-16 0 -0.00978204 -0.0972262 0 -0.00432306 -0.0487493 0 -0.0025 -1.59865e-16 0 -0.0025 -1.59865e-16 0.01 -0.0188465 0.14516 0.01 -0.00432306 0.0487493 0.01 -0.00978204 0.0972262 0.01 -0.0188465 0.14516 0 -0.00432306 0.0487493 0 -0.00978204 0.0972262 0 -0.0188465 0.14516 0 -0.0139717 0.146272 0 -0.0139717 0.146272 0.01 -0.0188465 0.14516 0.01 0.0025 -1.6109e-16 0 0.0025 -1.6109e-16 0.01 -0.0139717 0.146272 0.01 0.000662979 0.0491227 0.01 -0.00483782 0.097971 0.01 -0.0139717 0.146272 0 0.000662979 0.0491227 0 -0.00483782 0.097971 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="203">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0188665 -0.145338 0 -0.0139917 -0.14645 0 -0.0139917 -0.14645 0.01 -0.0188665 -0.145338 0.01 -0.0188665 -0.145338 0 -0.0139917 -0.14645 0 -0.0025 -1.60061e-16 0 -0.00979096 -0.0973454 0 -0.00432529 -0.048809 0 -0.0188665 0.145338 0 -0.00432529 0.048809 0 -0.00979096 0.0973454 0 -0.0139917 0.14645 0 0.0025 -1.61286e-16 0 0.000660745 0.0491825 0 -0.00484675 0.0980902 0 -0.00484675 -0.0980902 0 0.000660745 -0.0491825 0 -0.0139917 -0.14645 0 -0.0139917 -0.14645 0.01 0.0025 -1.61286e-16 0.01 -0.00484675 -0.0980902 0.01 0.000660745 -0.0491825 0.01 0.0025 -1.61286e-16 0 -0.00484675 -0.0980902 0 0.000660745 -0.0491825 0 -0.0188665 -0.145338 0.01 -0.0139917 -0.14645 0.01 -0.0025 -1.60061e-16 0.01 -0.00979096 -0.0973454 0.01 -0.00432529 -0.048809 0.01 -0.0188665 0.145338 0.01 -0.00432529 0.048809 0.01 -0.00979096 0.0973454 0.01 -0.0139917 0.14645 0.01 0.0025 -1.61286e-16 0.01 0.000660745 0.0491825 0.01 -0.00484675 0.0980902 0.01 -0.00484675 -0.0980902 0.01 0.000660745 -0.0491825 0.01 -0.0188665 -0.145338 0 -0.0188665 -0.145338 0.01 -0.0025 -1.60061e-16 0.01 -0.00979096 -0.0973454 0.01 -0.00432529 -0.048809 0.01 -0.0025 -1.60061e-16 0 -0.00979096 -0.0973454 0 -0.00432529 -0.048809 0 -0.0025 -1.60061e-16 0 -0.0025 -1.60061e-16 0.01 -0.0188665 0.145338 0.01 -0.00432529 0.048809 0.01 -0.00979096 0.0973454 0.01 -0.0188665 0.145338 0 -0.00432529 0.048809 0 -0.00979096 0.0973454 0 -0.0188665 0.145338 0 -0.0139917 0.14645 0 -0.0139917 0.14645 0.01 -0.0188665 0.145338 0.01 0.0025 -1.61286e-16 0 0.0025 -1.61286e-16 0.01 -0.0139917 0.14645 0.01 0.000660745 0.0491825 0.01 -0.00484675 0.0980902 0.01 -0.0139917 0.14645 0 0.000660745 0.0491825 0 -0.00484675 0.0980902 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="204">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0190668 -0.147117 0 -0.0141921 -0.148229 0 -0.0141921 -0.148229 0.01 -0.0190668 -0.147117 0.01 -0.0190668 -0.147117 0 -0.0141921 -0.148229 0 -0.0025 -1.62021e-16 0 -0.00988022 -0.0985371 0 -0.00434763 -0.0494065 0 -0.0190668 0.147117 0 -0.00434763 0.0494065 0 -0.00988022 0.0985371 0 -0.0141921 0.148229 0 0.0025 -1.63245e-16 0 0.0006384 0.04978 0 -0.004936 0.0992819 0 -0.004936 -0.0992819 0 0.0006384 -0.04978 0 -0.0141921 -0.148229 0 -0.0141921 -0.148229 0.01 0.0025 -1.63245e-16 0.01 -0.004936 -0.0992819 0.01 0.0006384 -0.04978 0.01 0.0025 -1.63245e-16 0 -0.004936 -0.0992819 0 0.0006384 -0.04978 0 -0.0190668 -0.147117 0.01 -0.0141921 -0.148229 0.01 -0.0025 -1.62021e-16 0.01 -0.00988022 -0.0985371 0.01 -0.00434763 -0.0494065 0.01 -0.0190668 0.147117 0.01 -0.00434763 0.0494065 0.01 -0.00988022 0.0985371 0.01 -0.0141921 0.148229 0.01 0.0025 -1.63245e-16 0.01 0.0006384 0.04978 0.01 -0.004936 0.0992819 0.01 -0.004936 -0.0992819 0.01 0.0006384 -0.04978 0.01 -0.0190668 -0.147117 0 -0.0190668 -0.147117 0.01 -0.0025 -1.62021e-16 0.01 -0.00988022 -0.0985371 0.01 -0.00434763 -0.0494065 0.01 -0.0025 -1.62021e-16 0 -0.00988022 -0.0985371 0 -0.00434763 -0.0494065 0 -0.0025 -1.62021e-16 0 -0.0025 -1.62021e-16 0.01 -0.0190668 0.147117 0.01 -0.00434763 0.0494065 0.01 -0.00988022 0.0985371 0.01 -0.0190668 0.147117 0 -0.00434763 0.0494065 0 -0.00988022 0.0985371 0 -0.0190668 0.147117 0 -0.0141921 0.148229 0 -0.0141921 0.148229 0.01 -0.0190668 0.147117 0.01 0.0025 -1.63245e-16 0 0.0025 -1.63245e-16 0.01 -0.0141921 0.148229 0.01 0.0006384 0.04978 0.01 -0.004936 0.0992819 0.01 -0.0141921 0.148229 0 0.0006384 0.04978 0 -0.004936 0.0992819 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 43 46 47 44 43 47 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="205">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0190869 -0.147295 0 -0.0142121 -0.148407 0 -0.0142121 -0.148407 0.01 -0.0190869 -0.147295 0.01 -0.0190869 -0.147295 0 -0.0142121 -0.148407 0 -0.0025 -1.62217e-16 0 -0.00988914 -0.0986563 0 -0.00434987 -0.0494663 0 -0.0190869 0.147295 0 -0.00434987 0.0494663 0 -0.00988914 0.0986563 0 -0.0142121 0.148407 0 0.0025 -1.63441e-16 0 0.000636166 0.0498397 0 -0.00494493 0.0994011 0 -0.00494493 -0.0994011 0 0.000636166 -0.0498397 0 -0.0142121 -0.148407 0 -0.0142121 -0.148407 0.01 0.0025 -1.63441e-16 0.01 -0.00494493 -0.0994011 0.01 0.000636166 -0.0498397 0.01 0.0025 -1.63441e-16 0 -0.00494493 -0.0994011 0 0.000636166 -0.0498397 0 -0.0190869 -0.147295 0.01 -0.0142121 -0.148407 0.01 -0.0025 -1.62217e-16 0.01 -0.00988914 -0.0986563 0.01 -0.00434987 -0.0494663 0.01 -0.0190869 0.147295 0.01 -0.00434987 0.0494663 0.01 -0.00988914 0.0986563 0.01 -0.0142121 0.148407 0.01 0.0025 -1.63441e-16 0.01 0.000636166 0.0498397 0.01 -0.00494493 0.0994011 0.01 -0.00494493 -0.0994011 0.01 0.000636166 -0.0498397 0.01 -0.0190869 -0.147295 0 -0.0190869 -0.147295 0.01 -0.0025 -1.62217e-16 0.01 -0.00988914 -0.0986563 0.01 -0.00434987 -0.0494663 0.01 -0.0025 -1.62217e-16 0 -0.00988914 -0.0986563 0 -0.00434987 -0.0494663 0 -0.0025 -1.62217e-16 0 -0.0025 -1.62217e-16 0.01 -0.0190869 0.147295 0.01 -0.00434987 0.0494663 0.01 -0.00988914 0.0986563 0.01 -0.0190869 0.147295 0 -0.00434987 0.0494663 0 -0.00988914 0.0986563 0 -0.0190869 0.147295 0 -0.0142121 0.148407 0 -0.0142121 0.148407 0.01 -0.0190869 0.147295 0.01 0.0025 -1.63441e-16 0 0.0025 -1.63441e-16 0.01 -0.0142121 0.148407 0.01 0.000636166 0.0498397 0.01 -0.00494493 0.0994011 0.01 -0.0142121 0.148407 0 0.000636166 0.0498397 0 -0.00494493 0.0994011 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="206">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0192897 -0.149097 0 -0.014415 -0.150209 0 -0.014415 -0.150209 0.01 -0.0192897 -0.149097 0.01 -0.0192897 -0.149097 0 -0.014415 -0.150209 0 -0.0025 -1.64201e-16 0 -0.00997951 -0.0998628 0 -0.00437249 -0.0500713 0 -0.0192897 0.149097 0 -0.00437249 0.0500713 0 -0.00997951 0.0998628 0 -0.014415 0.150209 0 0.0025 -1.65425e-16 0 0.000613541 0.0504447 0 -0.0050353 0.100608 0 -0.0050353 -0.100608 0 0.000613541 -0.0504447 0 -0.014415 -0.150209 0 -0.014415 -0.150209 0.01 0.0025 -1.65425e-16 0.01 -0.0050353 -0.100608 0.01 0.000613541 -0.0504447 0.01 0.0025 -1.65425e-16 0 -0.0050353 -0.100608 0 0.000613541 -0.0504447 0 -0.0192897 -0.149097 0.01 -0.014415 -0.150209 0.01 -0.0025 -1.64201e-16 0.01 -0.00997951 -0.0998628 0.01 -0.00437249 -0.0500713 0.01 -0.0192897 0.149097 0.01 -0.00437249 0.0500713 0.01 -0.00997951 0.0998628 0.01 -0.014415 0.150209 0.01 0.0025 -1.65425e-16 0.01 0.000613541 0.0504447 0.01 -0.0050353 0.100608 0.01 -0.0050353 -0.100608 0.01 0.000613541 -0.0504447 0.01 -0.0192897 -0.149097 0 -0.0192897 -0.149097 0.01 -0.0025 -1.64201e-16 0.01 -0.00997951 -0.0998628 0.01 -0.00437249 -0.0500713 0.01 -0.0025 -1.64201e-16 0 -0.00997951 -0.0998628 0 -0.00437249 -0.0500713 0 -0.0025 -1.64201e-16 0 -0.0025 -1.64201e-16 0.01 -0.0192897 0.149097 0.01 -0.00437249 0.0500713 0.01 -0.00997951 0.0998628 0.01 -0.0192897 0.149097 0 -0.00437249 0.0500713 0 -0.00997951 0.0998628 0 -0.0192897 0.149097 0 -0.014415 0.150209 0 -0.014415 0.150209 0.01 -0.0192897 0.149097 0.01 0.0025 -1.65425e-16 0 0.0025 -1.65425e-16 0.01 -0.014415 0.150209 0.01 0.000613541 0.0504447 0.01 -0.0050353 0.100608 0.01 -0.014415 0.150209 0 0.000613541 0.0504447 0 -0.0050353 0.100608 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 21 24 25 22 21 25 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="207">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0193098 -0.149274 0 -0.014435 -0.150386 0 -0.014435 -0.150386 0.01 -0.0193098 -0.149274 0.01 -0.0193098 -0.149274 0 -0.014435 -0.150386 0 -0.0025 -1.64397e-16 0 -0.00998844 -0.099982 0 -0.00437473 -0.050131 0 -0.0193098 0.149274 0 -0.00437473 0.050131 0 -0.00998844 0.099982 0 -0.014435 0.150386 0 0.0025 -1.65621e-16 0 0.000611307 0.0505045 0 -0.00504422 0.100727 0 -0.00504422 -0.100727 0 0.000611307 -0.0505045 0 -0.014435 -0.150386 0 -0.014435 -0.150386 0.01 0.0025 -1.65621e-16 0.01 -0.00504422 -0.100727 0.01 0.000611307 -0.0505045 0.01 0.0025 -1.65621e-16 0 -0.00504422 -0.100727 0 0.000611307 -0.0505045 0 -0.0193098 -0.149274 0.01 -0.014435 -0.150386 0.01 -0.0025 -1.64397e-16 0.01 -0.00998844 -0.099982 0.01 -0.00437473 -0.050131 0.01 -0.0193098 0.149274 0.01 -0.00437473 0.050131 0.01 -0.00998844 0.099982 0.01 -0.014435 0.150386 0.01 0.0025 -1.65621e-16 0.01 0.000611307 0.0505045 0.01 -0.00504422 0.100727 0.01 -0.00504422 -0.100727 0.01 0.000611307 -0.0505045 0.01 -0.0193098 -0.149274 0 -0.0193098 -0.149274 0.01 -0.0025 -1.64397e-16 0.01 -0.00998844 -0.099982 0.01 -0.00437473 -0.050131 0.01 -0.0025 -1.64397e-16 0 -0.00998844 -0.099982 0 -0.00437473 -0.050131 0 -0.0025 -1.64397e-16 0 -0.0025 -1.64397e-16 0.01 -0.0193098 0.149274 0.01 -0.00437473 0.050131 0.01 -0.00998844 0.099982 0.01 -0.0193098 0.149274 0 -0.00437473 0.050131 0 -0.00998844 0.099982 0 -0.0193098 0.149274 0 -0.014435 0.150386 0 -0.014435 0.150386 0.01 -0.0193098 0.149274 0.01 0.0025 -1.65621e-16 0 0.0025 -1.65621e-16 0.01 -0.014435 0.150386 0.01 0.000611307 0.0505045 0.01 -0.00504422 0.100727 0.01 -0.014435 0.150386 0 0.000611307 0.0505045 0 -0.00504422 0.100727 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 21 24 25 22 21 25 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="208">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0195101 -0.151054 0 -0.0146353 -0.152166 0 -0.0146353 -0.152166 0.01 -0.0195101 -0.151054 0.01 -0.0195101 -0.151054 0 -0.0146353 -0.152166 0 -0.0025 -1.66356e-16 0 -0.0100777 -0.101174 0 -0.00439707 -0.0507285 0 -0.0195101 0.151054 0 -0.00439707 0.0507285 0 -0.0100777 0.101174 0 -0.0146353 0.152166 0 0.0025 -1.67581e-16 0 0.000588962 0.051102 0 -0.00513348 0.101918 0 -0.00513348 -0.101918 0 0.000588962 -0.051102 0 -0.0146353 -0.152166 0 -0.0146353 -0.152166 0.01 0.0025 -1.67581e-16 0.01 -0.00513348 -0.101918 0.01 0.000588962 -0.051102 0.01 0.0025 -1.67581e-16 0 -0.00513348 -0.101918 0 0.000588962 -0.051102 0 -0.0195101 -0.151054 0.01 -0.0146353 -0.152166 0.01 -0.0025 -1.66356e-16 0.01 -0.0100777 -0.101174 0.01 -0.00439707 -0.0507285 0.01 -0.0195101 0.151054 0.01 -0.00439707 0.0507285 0.01 -0.0100777 0.101174 0.01 -0.0146353 0.152166 0.01 0.0025 -1.67581e-16 0.01 0.000588962 0.051102 0.01 -0.00513348 0.101918 0.01 -0.00513348 -0.101918 0.01 0.000588962 -0.051102 0.01 -0.0195101 -0.151054 0 -0.0195101 -0.151054 0.01 -0.0025 -1.66356e-16 0.01 -0.0100777 -0.101174 0.01 -0.00439707 -0.0507285 0.01 -0.0025 -1.66356e-16 0 -0.0100777 -0.101174 0 -0.00439707 -0.0507285 0 -0.0025 -1.66356e-16 0 -0.0025 -1.66356e-16 0.01 -0.0195101 0.151054 0.01 -0.00439707 0.0507285 0.01 -0.0100777 0.101174 0.01 -0.0195101 0.151054 0 -0.00439707 0.0507285 0 -0.0100777 0.101174 0 -0.0195101 0.151054 0 -0.0146353 0.152166 0 -0.0146353 0.152166 0.01 -0.0195101 0.151054 0.01 0.0025 -1.67581e-16 0 0.0025 -1.67581e-16 0.01 -0.0146353 0.152166 0.01 0.000588962 0.051102 0.01 -0.00513348 0.101918 0.01 -0.0146353 0.152166 0 0.000588962 0.051102 0 -0.00513348 0.101918 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 21 24 25 22 21 25 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="209">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0195302 -0.151232 0 -0.0146554 -0.152344 0 -0.0146554 -0.152344 0.01 -0.0195302 -0.151232 0.01 -0.0195302 -0.151232 0 -0.0146554 -0.152344 0 -0.0025 -1.66552e-16 0 -0.0100866 -0.101293 0 -0.00439931 -0.0507883 0 -0.0195302 0.151232 0 -0.00439931 0.0507883 0 -0.0100866 0.101293 0 -0.0146554 0.152344 0 0.0025 -1.67777e-16 0 0.000586728 0.0511617 0 -0.0051424 0.102038 0 -0.0051424 -0.102038 0 0.000586728 -0.0511617 0 -0.0146554 -0.152344 0 -0.0146554 -0.152344 0.01 0.0025 -1.67777e-16 0.01 -0.0051424 -0.102038 0.01 0.000586728 -0.0511617 0.01 0.0025 -1.67777e-16 0 -0.0051424 -0.102038 0 0.000586728 -0.0511617 0 -0.0195302 -0.151232 0.01 -0.0146554 -0.152344 0.01 -0.0025 -1.66552e-16 0.01 -0.0100866 -0.101293 0.01 -0.00439931 -0.0507883 0.01 -0.0195302 0.151232 0.01 -0.00439931 0.0507883 0.01 -0.0100866 0.101293 0.01 -0.0146554 0.152344 0.01 0.0025 -1.67777e-16 0.01 0.000586728 0.0511617 0.01 -0.0051424 0.102038 0.01 -0.0051424 -0.102038 0.01 0.000586728 -0.0511617 0.01 -0.0195302 -0.151232 0 -0.0195302 -0.151232 0.01 -0.0025 -1.66552e-16 0.01 -0.0100866 -0.101293 0.01 -0.00439931 -0.0507883 0.01 -0.0025 -1.66552e-16 0 -0.0100866 -0.101293 0 -0.00439931 -0.0507883 0 -0.0025 -1.66552e-16 0 -0.0025 -1.66552e-16 0.01 -0.0195302 0.151232 0.01 -0.00439931 0.0507883 0.01 -0.0100866 0.101293 0.01 -0.0195302 0.151232 0 -0.00439931 0.0507883 0 -0.0100866 0.101293 0 -0.0195302 0.151232 0 -0.0146554 0.152344 0 -0.0146554 0.152344 0.01 -0.0195302 0.151232 0.01 0.0025 -1.67777e-16 0 0.0025 -1.67777e-16 0.01 -0.0146554 0.152344 0.01 0.000586728 0.0511617 0.01 -0.0051424 0.102038 0.01 -0.0146554 0.152344 0 0.000586728 0.0511617 0 -0.0051424 0.102038 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="210">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0197305 -0.153011 0 -0.0148557 -0.154123 0 -0.0148557 -0.154123 0.01 -0.0197305 -0.153011 0.01 -0.0197305 -0.153011 0 -0.0148557 -0.154123 0 -0.0025 -1.68511e-16 0 -0.0101759 -0.102485 0 -0.00442165 -0.0513858 0 -0.0197305 0.153011 0 -0.00442165 0.0513858 0 -0.0101759 0.102485 0 -0.0148557 0.154123 0 0.0025 -1.69736e-16 0 0.000564383 0.0517592 0 -0.00523166 0.103229 0 -0.00523166 -0.103229 0 0.000564383 -0.0517592 0 -0.0148557 -0.154123 0 -0.0148557 -0.154123 0.01 0.0025 -1.69736e-16 0.01 -0.00523166 -0.103229 0.01 0.000564383 -0.0517592 0.01 0.0025 -1.69736e-16 0 -0.00523166 -0.103229 0 0.000564383 -0.0517592 0 -0.0197305 -0.153011 0.01 -0.0148557 -0.154123 0.01 -0.0025 -1.68511e-16 0.01 -0.0101759 -0.102485 0.01 -0.00442165 -0.0513858 0.01 -0.0197305 0.153011 0.01 -0.00442165 0.0513858 0.01 -0.0101759 0.102485 0.01 -0.0148557 0.154123 0.01 0.0025 -1.69736e-16 0.01 0.000564383 0.0517592 0.01 -0.00523166 0.103229 0.01 -0.00523166 -0.103229 0.01 0.000564383 -0.0517592 0.01 -0.0197305 -0.153011 0 -0.0197305 -0.153011 0.01 -0.0025 -1.68511e-16 0.01 -0.0101759 -0.102485 0.01 -0.00442165 -0.0513858 0.01 -0.0025 -1.68511e-16 0 -0.0101759 -0.102485 0 -0.00442165 -0.0513858 0 -0.0025 -1.68511e-16 0 -0.0025 -1.68511e-16 0.01 -0.0197305 0.153011 0.01 -0.00442165 0.0513858 0.01 -0.0101759 0.102485 0.01 -0.0197305 0.153011 0 -0.00442165 0.0513858 0 -0.0101759 0.102485 0 -0.0197305 0.153011 0 -0.0148557 0.154123 0 -0.0148557 0.154123 0.01 -0.0197305 0.153011 0.01 0.0025 -1.69736e-16 0 0.0025 -1.69736e-16 0.01 -0.0148557 0.154123 0.01 0.000564383 0.0517592 0.01 -0.00523166 0.103229 0.01 -0.0148557 0.154123 0 0.000564383 0.0517592 0 -0.00523166 0.103229 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="211">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0197506 -0.153189 0 -0.0148758 -0.154301 0 -0.0148758 -0.154301 0.01 -0.0197506 -0.153189 0.01 -0.0197506 -0.153189 0 -0.0148758 -0.154301 0 -0.0025 -1.68707e-16 0 -0.0101848 -0.102604 0 -0.00442389 -0.0514455 0 -0.0197506 0.153189 0 -0.00442389 0.0514455 0 -0.0101848 0.102604 0 -0.0148758 0.154301 0 0.0025 -1.69932e-16 0 0.000562148 0.051819 0 -0.00524058 0.103349 0 -0.00524058 -0.103349 0 0.000562148 -0.051819 0 -0.0148758 -0.154301 0 -0.0148758 -0.154301 0.01 0.0025 -1.69932e-16 0.01 -0.00524058 -0.103349 0.01 0.000562148 -0.051819 0.01 0.0025 -1.69932e-16 0 -0.00524058 -0.103349 0 0.000562148 -0.051819 0 -0.0197506 -0.153189 0.01 -0.0148758 -0.154301 0.01 -0.0025 -1.68707e-16 0.01 -0.0101848 -0.102604 0.01 -0.00442389 -0.0514455 0.01 -0.0197506 0.153189 0.01 -0.00442389 0.0514455 0.01 -0.0101848 0.102604 0.01 -0.0148758 0.154301 0.01 0.0025 -1.69932e-16 0.01 0.000562148 0.051819 0.01 -0.00524058 0.103349 0.01 -0.00524058 -0.103349 0.01 0.000562148 -0.051819 0.01 -0.0197506 -0.153189 0 -0.0197506 -0.153189 0.01 -0.0025 -1.68707e-16 0.01 -0.0101848 -0.102604 0.01 -0.00442389 -0.0514455 0.01 -0.0025 -1.68707e-16 0 -0.0101848 -0.102604 0 -0.00442389 -0.0514455 0 -0.0025 -1.68707e-16 0 -0.0025 -1.68707e-16 0.01 -0.0197506 0.153189 0.01 -0.00442389 0.0514455 0.01 -0.0101848 0.102604 0.01 -0.0197506 0.153189 0 -0.00442389 0.0514455 0 -0.0101848 0.102604 0 -0.0197506 0.153189 0 -0.0148758 0.154301 0 -0.0148758 0.154301 0.01 -0.0197506 0.153189 0.01 0.0025 -1.69932e-16 0 0.0025 -1.69932e-16 0.01 -0.0148758 0.154301 0.01 0.000562148 0.051819 0.01 -0.00524058 0.103349 0.01 -0.0148758 0.154301 0 0.000562148 0.051819 0 -0.00524058 0.103349 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="194">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0179624 -0.137309 0 -0.0130876 -0.138421 0 -0.0130876 -0.138421 0.01 -0.0179624 -0.137309 0.01 -0.0179624 -0.137309 0 -0.0130876 -0.138421 0 -0.0025 -1.51219e-16 0 -0.0093882 -0.091968 0 -0.00422446 -0.0461128 0 -0.0179624 0.137309 0 -0.00422446 0.0461128 0 -0.0093882 0.091968 0 -0.0130876 0.138421 0 0.0025 -1.52444e-16 0 0.000761576 0.0464862 0 -0.00444399 0.0927128 0 -0.00444399 -0.0927128 0 0.000761576 -0.0464862 0 -0.0130876 -0.138421 0 -0.0130876 -0.138421 0.01 0.0025 -1.52444e-16 0.01 -0.00444399 -0.0927128 0.01 0.000761576 -0.0464862 0.01 0.0025 -1.52444e-16 0 -0.00444399 -0.0927128 0 0.000761576 -0.0464862 0 -0.0179624 -0.137309 0.01 -0.0130876 -0.138421 0.01 -0.0025 -1.51219e-16 0.01 -0.0093882 -0.091968 0.01 -0.00422446 -0.0461128 0.01 -0.0179624 0.137309 0.01 -0.00422446 0.0461128 0.01 -0.0093882 0.091968 0.01 -0.0130876 0.138421 0.01 0.0025 -1.52444e-16 0.01 0.000761576 0.0464862 0.01 -0.00444399 0.0927128 0.01 -0.00444399 -0.0927128 0.01 0.000761576 -0.0464862 0.01 -0.0179624 -0.137309 0 -0.0179624 -0.137309 0.01 -0.0025 -1.51219e-16 0.01 -0.0093882 -0.091968 0.01 -0.00422446 -0.0461128 0.01 -0.0025 -1.51219e-16 0 -0.0093882 -0.091968 0 -0.00422446 -0.0461128 0 -0.0025 -1.51219e-16 0 -0.0025 -1.51219e-16 0.01 -0.0179624 0.137309 0.01 -0.00422446 0.0461128 0.01 -0.0093882 0.091968 0.01 -0.0179624 0.137309 0 -0.00422446 0.0461128 0 -0.0093882 0.091968 0 -0.0179624 0.137309 0 -0.0130876 0.138421 0 -0.0130876 0.138421 0.01 -0.0179624 0.137309 0.01 0.0025 -1.52444e-16 0 0.0025 -1.52444e-16 0.01 -0.0130876 0.138421 0.01 0.000761576 0.0464862 0.01 -0.00444399 0.0927128 0.01 -0.0130876 0.138421 0 0.000761576 0.0464862 0 -0.00444399 0.0927128 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="195">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0179824 -0.137487 0 -0.0131076 -0.138599 0 -0.0131076 -0.138599 0.01 -0.0179824 -0.137487 0.01 -0.0179824 -0.137487 0 -0.0131076 -0.138599 0 -0.0025 -1.51415e-16 0 -0.00939713 -0.0920871 0 -0.00422669 -0.0461725 0 -0.0179824 0.137487 0 -0.00422669 0.0461725 0 -0.00939713 0.0920871 0 -0.0131076 0.138599 0 0.0025 -1.5264e-16 0 0.000759341 0.046546 0 -0.00445291 0.0928319 0 -0.00445291 -0.0928319 0 0.000759341 -0.046546 0 -0.0131076 -0.138599 0 -0.0131076 -0.138599 0.01 0.0025 -1.5264e-16 0.01 -0.00445291 -0.0928319 0.01 0.000759341 -0.046546 0.01 0.0025 -1.5264e-16 0 -0.00445291 -0.0928319 0 0.000759341 -0.046546 0 -0.0179824 -0.137487 0.01 -0.0131076 -0.138599 0.01 -0.0025 -1.51415e-16 0.01 -0.00939713 -0.0920871 0.01 -0.00422669 -0.0461725 0.01 -0.0179824 0.137487 0.01 -0.00422669 0.0461725 0.01 -0.00939713 0.0920871 0.01 -0.0131076 0.138599 0.01 0.0025 -1.5264e-16 0.01 0.000759341 0.046546 0.01 -0.00445291 0.0928319 0.01 -0.00445291 -0.0928319 0.01 0.000759341 -0.046546 0.01 -0.0179824 -0.137487 0 -0.0179824 -0.137487 0.01 -0.0025 -1.51415e-16 0.01 -0.00939713 -0.0920871 0.01 -0.00422669 -0.0461725 0.01 -0.0025 -1.51415e-16 0 -0.00939713 -0.0920871 0 -0.00422669 -0.0461725 0 -0.0025 -1.51415e-16 0 -0.0025 -1.51415e-16 0.01 -0.0179824 0.137487 0.01 -0.00422669 0.0461725 0.01 -0.00939713 0.0920871 0.01 -0.0179824 0.137487 0 -0.00422669 0.0461725 0 -0.00939713 0.0920871 0 -0.0179824 0.137487 0 -0.0131076 0.138599 0 -0.0131076 0.138599 0.01 -0.0179824 0.137487 0.01 0.0025 -1.5264e-16 0 0.0025 -1.5264e-16 0.01 -0.0131076 0.138599 0.01 0.000759341 0.046546 0.01 -0.00445291 0.0928319 0.01 -0.0131076 0.138599 0 0.000759341 0.046546 0 -0.00445291 0.0928319 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="196">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0181828 -0.139266 0 -0.013308 -0.140378 0 -0.013308 -0.140378 0.01 -0.0181828 -0.139266 0.01 -0.0181828 -0.139266 0 -0.013308 -0.140378 0 -0.0025 -1.53375e-16 0 -0.00948638 -0.0932788 0 -0.00424904 -0.04677 0 -0.0181828 0.139266 0 -0.00424904 0.04677 0 -0.00948638 0.0932788 0 -0.013308 0.140378 0 0.0025 -1.54599e-16 0 0.000736996 0.0471435 0 -0.00454217 0.0940236 0 -0.00454217 -0.0940236 0 0.000736996 -0.0471435 0 -0.013308 -0.140378 0 -0.013308 -0.140378 0.01 0.0025 -1.54599e-16 0.01 -0.00454217 -0.0940236 0.01 0.000736996 -0.0471435 0.01 0.0025 -1.54599e-16 0 -0.00454217 -0.0940236 0 0.000736996 -0.0471435 0 -0.0181828 -0.139266 0.01 -0.013308 -0.140378 0.01 -0.0025 -1.53375e-16 0.01 -0.00948638 -0.0932788 0.01 -0.00424904 -0.04677 0.01 -0.0181828 0.139266 0.01 -0.00424904 0.04677 0.01 -0.00948638 0.0932788 0.01 -0.013308 0.140378 0.01 0.0025 -1.54599e-16 0.01 0.000736996 0.0471435 0.01 -0.00454217 0.0940236 0.01 -0.00454217 -0.0940236 0.01 0.000736996 -0.0471435 0.01 -0.0181828 -0.139266 0 -0.0181828 -0.139266 0.01 -0.0025 -1.53375e-16 0.01 -0.00948638 -0.0932788 0.01 -0.00424904 -0.04677 0.01 -0.0025 -1.53375e-16 0 -0.00948638 -0.0932788 0 -0.00424904 -0.04677 0 -0.0025 -1.53375e-16 0 -0.0025 -1.53375e-16 0.01 -0.0181828 0.139266 0.01 -0.00424904 0.04677 0.01 -0.00948638 0.0932788 0.01 -0.0181828 0.139266 0 -0.00424904 0.04677 0 -0.00948638 0.0932788 0 -0.0181828 0.139266 0 -0.013308 0.140378 0 -0.013308 0.140378 0.01 -0.0181828 0.139266 0.01 0.0025 -1.54599e-16 0 0.0025 -1.54599e-16 0.01 -0.013308 0.140378 0.01 0.000736996 0.0471435 0.01 -0.00454217 0.0940236 0.01 -0.013308 0.140378 0 0.000736996 0.0471435 0 -0.00454217 0.0940236 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="197">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0182028 -0.139444 0 -0.013328 -0.140556 0 -0.013328 -0.140556 0.01 -0.0182028 -0.139444 0.01 -0.0182028 -0.139444 0 -0.013328 -0.140556 0 -0.0025 -1.53571e-16 0 -0.00949531 -0.093398 0 -0.00425127 -0.0468298 0 -0.0182028 0.139444 0 -0.00425127 0.0468298 0 -0.00949531 0.093398 0 -0.013328 0.140556 0 0.0025 -1.54795e-16 0 0.000734762 0.0472032 0 -0.00455109 0.0941428 0 -0.00455109 -0.0941428 0 0.000734762 -0.0472032 0 -0.013328 -0.140556 0 -0.013328 -0.140556 0.01 0.0025 -1.54795e-16 0.01 -0.00455109 -0.0941428 0.01 0.000734762 -0.0472032 0.01 0.0025 -1.54795e-16 0 -0.00455109 -0.0941428 0 0.000734762 -0.0472032 0 -0.0182028 -0.139444 0.01 -0.013328 -0.140556 0.01 -0.0025 -1.53571e-16 0.01 -0.00949531 -0.093398 0.01 -0.00425127 -0.0468298 0.01 -0.0182028 0.139444 0.01 -0.00425127 0.0468298 0.01 -0.00949531 0.093398 0.01 -0.013328 0.140556 0.01 0.0025 -1.54795e-16 0.01 0.000734762 0.0472032 0.01 -0.00455109 0.0941428 0.01 -0.00455109 -0.0941428 0.01 0.000734762 -0.0472032 0.01 -0.0182028 -0.139444 0 -0.0182028 -0.139444 0.01 -0.0025 -1.53571e-16 0.01 -0.00949531 -0.093398 0.01 -0.00425127 -0.0468298 0.01 -0.0025 -1.53571e-16 0 -0.00949531 -0.093398 0 -0.00425127 -0.0468298 0 -0.0025 -1.53571e-16 0 -0.0025 -1.53571e-16 0.01 -0.0182028 0.139444 0.01 -0.00425127 0.0468298 0.01 -0.00949531 0.093398 0.01 -0.0182028 0.139444 0 -0.00425127 0.0468298 0 -0.00949531 0.093398 0 -0.0182028 0.139444 0 -0.013328 0.140556 0 -0.013328 0.140556 0.01 -0.0182028 0.139444 0.01 0.0025 -1.54795e-16 0 0.0025 -1.54795e-16 0.01 -0.013328 0.140556 0.01 0.000734762 0.0472032 0.01 -0.00455109 0.0941428 0.01 -0.013328 0.140556 0 0.000734762 0.0472032 0 -0.00455109 0.0941428 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 21 24 25 22 21 25 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="198">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0184057 -0.141246 0 -0.0135309 -0.142358 0 -0.0135309 -0.142358 0.01 -0.0184057 -0.141246 0.01 -0.0184057 -0.141246 0 -0.0135309 -0.142358 0 -0.0025 -1.55555e-16 0 -0.00958568 -0.0946045 0 -0.0042739 -0.0474348 0 -0.0184057 0.141246 0 -0.0042739 0.0474348 0 -0.00958568 0.0946045 0 -0.0135309 0.142358 0 0.0025 -1.56779e-16 0 0.000712138 0.0478082 0 -0.00464146 0.0953493 0 -0.00464146 -0.0953493 0 0.000712138 -0.0478082 0 -0.0135309 -0.142358 0 -0.0135309 -0.142358 0.01 0.0025 -1.56779e-16 0.01 -0.00464146 -0.0953493 0.01 0.000712138 -0.0478082 0.01 0.0025 -1.56779e-16 0 -0.00464146 -0.0953493 0 0.000712138 -0.0478082 0 -0.0184057 -0.141246 0.01 -0.0135309 -0.142358 0.01 -0.0025 -1.55555e-16 0.01 -0.00958568 -0.0946045 0.01 -0.0042739 -0.0474348 0.01 -0.0184057 0.141246 0.01 -0.0042739 0.0474348 0.01 -0.00958568 0.0946045 0.01 -0.0135309 0.142358 0.01 0.0025 -1.56779e-16 0.01 0.000712138 0.0478082 0.01 -0.00464146 0.0953493 0.01 -0.00464146 -0.0953493 0.01 0.000712138 -0.0478082 0.01 -0.0184057 -0.141246 0 -0.0184057 -0.141246 0.01 -0.0025 -1.55555e-16 0.01 -0.00958568 -0.0946045 0.01 -0.0042739 -0.0474348 0.01 -0.0025 -1.55555e-16 0 -0.00958568 -0.0946045 0 -0.0042739 -0.0474348 0 -0.0025 -1.55555e-16 0 -0.0025 -1.55555e-16 0.01 -0.0184057 0.141246 0.01 -0.0042739 0.0474348 0.01 -0.00958568 0.0946045 0.01 -0.0184057 0.141246 0 -0.0042739 0.0474348 0 -0.00958568 0.0946045 0 -0.0184057 0.141246 0 -0.0135309 0.142358 0 -0.0135309 0.142358 0.01 -0.0184057 0.141246 0.01 0.0025 -1.56779e-16 0 0.0025 -1.56779e-16 0.01 -0.0135309 0.142358 0.01 0.000712138 0.0478082 0.01 -0.00464146 0.0953493 0.01 -0.0135309 0.142358 0 0.000712138 0.0478082 0 -0.00464146 0.0953493 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 13 6 8 13 8 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 35 28 30 35 30 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="199">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0184257 -0.141424 0 -0.0135509 -0.142536 0 -0.0135509 -0.142536 0.01 -0.0184257 -0.141424 0.01 -0.0184257 -0.141424 0 -0.0135509 -0.142536 0 -0.0025 -1.55751e-16 0 -0.0095946 -0.0947237 0 -0.00427613 -0.0474945 0 -0.0184257 0.141424 0 -0.00427613 0.0474945 0 -0.0095946 0.0947237 0 -0.0135509 0.142536 0 0.0025 -1.56975e-16 0 0.000709903 0.047868 0 -0.00465039 0.0954685 0 -0.00465039 -0.0954685 0 0.000709903 -0.047868 0 -0.0135509 -0.142536 0 -0.0135509 -0.142536 0.01 0.0025 -1.56975e-16 0.01 -0.00465039 -0.0954685 0.01 0.000709903 -0.047868 0.01 0.0025 -1.56975e-16 0 -0.00465039 -0.0954685 0 0.000709903 -0.047868 0 -0.0184257 -0.141424 0.01 -0.0135509 -0.142536 0.01 -0.0025 -1.55751e-16 0.01 -0.0095946 -0.0947237 0.01 -0.00427613 -0.0474945 0.01 -0.0184257 0.141424 0.01 -0.00427613 0.0474945 0.01 -0.0095946 0.0947237 0.01 -0.0135509 0.142536 0.01 0.0025 -1.56975e-16 0.01 0.000709903 0.047868 0.01 -0.00465039 0.0954685 0.01 -0.00465039 -0.0954685 0.01 0.000709903 -0.047868 0.01 -0.0184257 -0.141424 0 -0.0184257 -0.141424 0.01 -0.0025 -1.55751e-16 0.01 -0.0095946 -0.0947237 0.01 -0.00427613 -0.0474945 0.01 -0.0025 -1.55751e-16 0 -0.0095946 -0.0947237 0 -0.00427613 -0.0474945 0 -0.0025 -1.55751e-16 0 -0.0025 -1.55751e-16 0.01 -0.0184257 0.141424 0.01 -0.00427613 0.0474945 0.01 -0.0095946 0.0947237 0.01 -0.0184257 0.141424 0 -0.00427613 0.0474945 0 -0.0095946 0.0947237 0 -0.0184257 0.141424 0 -0.0135509 0.142536 0 -0.0135509 0.142536 0.01 -0.0184257 0.141424 0.01 0.0025 -1.56975e-16 0 0.0025 -1.56975e-16 0.01 -0.0135509 0.142536 0.01 0.000709903 0.047868 0.01 -0.00465039 0.0954685 0.01 -0.0135509 0.142536 0 0.000709903 0.047868 0 -0.00465039 0.0954685 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="200">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0186261 -0.143203 0 -0.0137513 -0.144315 0 -0.0137513 -0.144315 0.01 -0.0186261 -0.143203 0.01 -0.0186261 -0.143203 0 -0.0137513 -0.144315 0 -0.0025 -1.5771e-16 0 -0.00968386 -0.0959154 0 -0.00429848 -0.048092 0 -0.0186261 0.143203 0 -0.00429848 0.048092 0 -0.00968386 0.0959154 0 -0.0137513 0.144315 0 0.0025 -1.58935e-16 0 0.000687559 0.0484655 0 -0.00473964 0.0966602 0 -0.00473964 -0.0966602 0 0.000687559 -0.0484655 0 -0.0137513 -0.144315 0 -0.0137513 -0.144315 0.01 0.0025 -1.58935e-16 0.01 -0.00473964 -0.0966602 0.01 0.000687559 -0.0484655 0.01 0.0025 -1.58935e-16 0 -0.00473964 -0.0966602 0 0.000687559 -0.0484655 0 -0.0186261 -0.143203 0.01 -0.0137513 -0.144315 0.01 -0.0025 -1.5771e-16 0.01 -0.00968386 -0.0959154 0.01 -0.00429848 -0.048092 0.01 -0.0186261 0.143203 0.01 -0.00429848 0.048092 0.01 -0.00968386 0.0959154 0.01 -0.0137513 0.144315 0.01 0.0025 -1.58935e-16 0.01 0.000687559 0.0484655 0.01 -0.00473964 0.0966602 0.01 -0.00473964 -0.0966602 0.01 0.000687559 -0.0484655 0.01 -0.0186261 -0.143203 0 -0.0186261 -0.143203 0.01 -0.0025 -1.5771e-16 0.01 -0.00968386 -0.0959154 0.01 -0.00429848 -0.048092 0.01 -0.0025 -1.5771e-16 0 -0.00968386 -0.0959154 0 -0.00429848 -0.048092 0 -0.0025 -1.5771e-16 0 -0.0025 -1.5771e-16 0.01 -0.0186261 0.143203 0.01 -0.00429848 0.048092 0.01 -0.00968386 0.0959154 0.01 -0.0186261 0.143203 0 -0.00429848 0.048092 0 -0.00968386 0.0959154 0 -0.0186261 0.143203 0 -0.0137513 0.144315 0 -0.0137513 0.144315 0.01 -0.0186261 0.143203 0.01 0.0025 -1.58935e-16 0 0.0025 -1.58935e-16 0.01 -0.0137513 0.144315 0.01 0.000687559 0.0484655 0.01 -0.00473964 0.0966602 0.01 -0.0137513 0.144315 0 0.000687559 0.0484655 0 -0.00473964 0.0966602 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="201">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0186461 -0.143381 0 -0.0137713 -0.144493 0 -0.0137713 -0.144493 0.01 -0.0186461 -0.143381 0.01 -0.0186461 -0.143381 0 -0.0137713 -0.144493 0 -0.0025 -1.57906e-16 0 -0.00969278 -0.0960346 0 -0.00430071 -0.0481518 0 -0.0186461 0.143381 0 -0.00430071 0.0481518 0 -0.00969278 0.0960346 0 -0.0137713 0.144493 0 0.0025 -1.59131e-16 0 0.000685324 0.0485252 0 -0.00474857 0.0967794 0 -0.00474857 -0.0967794 0 0.000685324 -0.0485252 0 -0.0137713 -0.144493 0 -0.0137713 -0.144493 0.01 0.0025 -1.59131e-16 0.01 -0.00474857 -0.0967794 0.01 0.000685324 -0.0485252 0.01 0.0025 -1.59131e-16 0 -0.00474857 -0.0967794 0 0.000685324 -0.0485252 0 -0.0186461 -0.143381 0.01 -0.0137713 -0.144493 0.01 -0.0025 -1.57906e-16 0.01 -0.00969278 -0.0960346 0.01 -0.00430071 -0.0481518 0.01 -0.0186461 0.143381 0.01 -0.00430071 0.0481518 0.01 -0.00969278 0.0960346 0.01 -0.0137713 0.144493 0.01 0.0025 -1.59131e-16 0.01 0.000685324 0.0485252 0.01 -0.00474857 0.0967794 0.01 -0.00474857 -0.0967794 0.01 0.000685324 -0.0485252 0.01 -0.0186461 -0.143381 0 -0.0186461 -0.143381 0.01 -0.0025 -1.57906e-16 0.01 -0.00969278 -0.0960346 0.01 -0.00430071 -0.0481518 0.01 -0.0025 -1.57906e-16 0 -0.00969278 -0.0960346 0 -0.00430071 -0.0481518 0 -0.0025 -1.57906e-16 0 -0.0025 -1.57906e-16 0.01 -0.0186461 0.143381 0.01 -0.00430071 0.0481518 0.01 -0.00969278 0.0960346 0.01 -0.0186461 0.143381 0 -0.00430071 0.0481518 0 -0.00969278 0.0960346 0 -0.0186461 0.143381 0 -0.0137713 0.144493 0 -0.0137713 0.144493 0.01 -0.0186461 0.143381 0.01 0.0025 -1.59131e-16 0 0.0025 -1.59131e-16 0.01 -0.0137713 0.144493 0.01 0.000685324 0.0485252 0.01 -0.00474857 0.0967794 0.01 -0.0137713 0.144493 0 0.000685324 0.0485252 0 -0.00474857 0.0967794 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="213">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0144077 -0.136105 0 -0.00948364 -0.136974 0 -0.00948364 -0.136974 0.01 -0.0144077 -0.136105 0.01 -0.0144077 -0.136105 0 -0.00948364 -0.136974 0 -0.0025 -1.91976e-16 0 -0.00779978 -0.0909936 0 -0.00382607 -0.0455739 0 -0.0144077 0.136105 0 -0.00382607 0.0455739 0 -0.00779978 0.0909936 0 -0.00948364 0.136974 0 0.0025 -1.932e-16 0 0.00116548 0.0458646 0 -0.00283358 0.0915741 0 -0.00283358 -0.0915741 0 0.00116548 -0.0458646 0 -0.00948364 -0.136974 0 -0.00948364 -0.136974 0.01 0.0025 -1.932e-16 0.01 -0.00283358 -0.0915741 0.01 0.00116548 -0.0458646 0.01 0.0025 -1.932e-16 0 -0.00283358 -0.0915741 0 0.00116548 -0.0458646 0 -0.0144077 -0.136105 0.01 -0.00948364 -0.136974 0.01 -0.0025 -1.91976e-16 0.01 -0.00779978 -0.0909936 0.01 -0.00382607 -0.0455739 0.01 -0.0144077 0.136105 0.01 -0.00382607 0.0455739 0.01 -0.00779978 0.0909936 0.01 -0.00948364 0.136974 0.01 0.0025 -1.932e-16 0.01 0.00116548 0.0458646 0.01 -0.00283358 0.0915741 0.01 -0.00283358 -0.0915741 0.01 0.00116548 -0.0458646 0.01 -0.0144077 -0.136105 0 -0.0144077 -0.136105 0.01 -0.0025 -1.91976e-16 0.01 -0.00779978 -0.0909936 0.01 -0.00382607 -0.0455739 0.01 -0.0025 -1.91976e-16 0 -0.00779978 -0.0909936 0 -0.00382607 -0.0455739 0 -0.0025 -1.91976e-16 0 -0.0025 -1.91976e-16 0.01 -0.0144077 0.136105 0.01 -0.00382607 0.0455739 0.01 -0.00779978 0.0909936 0.01 -0.0144077 0.136105 0 -0.00382607 0.0455739 0 -0.00779978 0.0909936 0 -0.0144077 0.136105 0 -0.00948364 0.136974 0 -0.00948364 0.136974 0.01 -0.0144077 0.136105 0.01 0.0025 -1.932e-16 0 0.0025 -1.932e-16 0.01 -0.00948364 0.136974 0.01 0.00116548 0.0458646 0.01 -0.00283358 0.0915741 0.01 -0.00948364 0.136974 0 0.00116548 0.0458646 0 -0.00283358 0.0915741 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="214">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0144092 -0.136123 0 -0.00948516 -0.136991 0 -0.00948516 -0.136991 0.01 -0.0144092 -0.136123 0.01 -0.0144092 -0.136123 0 -0.00948516 -0.136991 0 -0.0025 -1.92e-16 0 -0.00780045 -0.0910052 0 -0.00382623 -0.0455797 0 -0.0144092 0.136123 0 -0.00382623 0.0455797 0 -0.00780045 0.0910052 0 -0.00948516 0.136991 0 0.0025 -1.93225e-16 0 0.00116531 0.0458705 0 -0.00283426 0.0915857 0 -0.00283426 -0.0915857 0 0.00116531 -0.0458705 0 -0.00948516 -0.136991 0 -0.00948516 -0.136991 0.01 0.0025 -1.93225e-16 0.01 -0.00283426 -0.0915857 0.01 0.00116531 -0.0458705 0.01 0.0025 -1.93225e-16 0 -0.00283426 -0.0915857 0 0.00116531 -0.0458705 0 -0.0144092 -0.136123 0.01 -0.00948516 -0.136991 0.01 -0.0025 -1.92e-16 0.01 -0.00780045 -0.0910052 0.01 -0.00382623 -0.0455797 0.01 -0.0144092 0.136123 0.01 -0.00382623 0.0455797 0.01 -0.00780045 0.0910052 0.01 -0.00948516 0.136991 0.01 0.0025 -1.93225e-16 0.01 0.00116531 0.0458705 0.01 -0.00283426 0.0915857 0.01 -0.00283426 -0.0915857 0.01 0.00116531 -0.0458705 0.01 -0.0144092 -0.136123 0 -0.0144092 -0.136123 0.01 -0.0025 -1.92e-16 0.01 -0.00780045 -0.0910052 0.01 -0.00382623 -0.0455797 0.01 -0.0025 -1.92e-16 0 -0.00780045 -0.0910052 0 -0.00382623 -0.0455797 0 -0.0025 -1.92e-16 0 -0.0025 -1.92e-16 0.01 -0.0144092 0.136123 0.01 -0.00382623 0.0455797 0.01 -0.00780045 0.0910052 0.01 -0.0144092 0.136123 0 -0.00382623 0.0455797 0 -0.00780045 0.0910052 0 -0.0144092 0.136123 0 -0.00948516 0.136991 0 -0.00948516 0.136991 0.01 -0.0144092 0.136123 0.01 0.0025 -1.93225e-16 0 0.0025 -1.93225e-16 0.01 -0.00948516 0.136991 0.01 0.00116531 0.0458705 0.01 -0.00283426 0.0915857 0.01 -0.00948516 0.136991 0 0.00116531 0.0458705 0 -0.00283426 0.0915857 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="223">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0150503 -0.143451 0 -0.0101263 -0.144319 0 -0.0101263 -0.144319 0.01 -0.0150503 -0.143451 0.01 -0.0150503 -0.143451 0 -0.0101263 -0.144319 0 -0.0025 -2.02336e-16 0 -0.00808579 -0.0959044 0 -0.00389763 -0.0480334 0 -0.0150503 0.143451 0 -0.00389763 0.0480334 0 -0.00808579 0.0959044 0 -0.0101263 0.144319 0 0.0025 -2.03561e-16 0 0.00109391 0.0483242 0 -0.0031196 0.0964848 0 -0.0031196 -0.0964848 0 0.00109391 -0.0483242 0 -0.0101263 -0.144319 0 -0.0101263 -0.144319 0.01 0.0025 -2.03561e-16 0.01 -0.0031196 -0.0964848 0.01 0.00109391 -0.0483242 0.01 0.0025 -2.03561e-16 0 -0.0031196 -0.0964848 0 0.00109391 -0.0483242 0 -0.0150503 -0.143451 0.01 -0.0101263 -0.144319 0.01 -0.0025 -2.02336e-16 0.01 -0.00808579 -0.0959044 0.01 -0.00389763 -0.0480334 0.01 -0.0150503 0.143451 0.01 -0.00389763 0.0480334 0.01 -0.00808579 0.0959044 0.01 -0.0101263 0.144319 0.01 0.0025 -2.03561e-16 0.01 0.00109391 0.0483242 0.01 -0.0031196 0.0964848 0.01 -0.0031196 -0.0964848 0.01 0.00109391 -0.0483242 0.01 -0.0150503 -0.143451 0 -0.0150503 -0.143451 0.01 -0.0025 -2.02336e-16 0.01 -0.00808579 -0.0959044 0.01 -0.00389763 -0.0480334 0.01 -0.0025 -2.02336e-16 0 -0.00808579 -0.0959044 0 -0.00389763 -0.0480334 0 -0.0025 -2.02336e-16 0 -0.0025 -2.02336e-16 0.01 -0.0150503 0.143451 0.01 -0.00389763 0.0480334 0.01 -0.00808579 0.0959044 0.01 -0.0150503 0.143451 0 -0.00389763 0.0480334 0 -0.00808579 0.0959044 0 -0.0150503 0.143451 0 -0.0101263 0.144319 0 -0.0101263 0.144319 0.01 -0.0150503 0.143451 0.01 0.0025 -2.03561e-16 0 0.0025 -2.03561e-16 0.01 -0.0101263 0.144319 0.01 0.00109391 0.0483242 0.01 -0.0031196 0.0964848 0.01 -0.0101263 0.144319 0 0.00109391 0.0483242 0 -0.0031196 0.0964848 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="224">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0150518 -0.143468 0 -0.0101278 -0.144336 0 -0.0101278 -0.144336 0.01 -0.0150518 -0.143468 0.01 -0.0150518 -0.143468 0 -0.0101278 -0.144336 0 -0.0025 -2.02361e-16 0 -0.00808647 -0.095916 0 -0.0038978 -0.0480393 0 -0.0150518 0.143468 0 -0.0038978 0.0480393 0 -0.00808647 0.095916 0 -0.0101278 0.144336 0 0.0025 -2.03585e-16 0 0.00109374 0.04833 0 -0.00312028 0.0964964 0 -0.00312028 -0.0964964 0 0.00109374 -0.04833 0 -0.0101278 -0.144336 0 -0.0101278 -0.144336 0.01 0.0025 -2.03585e-16 0.01 -0.00312028 -0.0964964 0.01 0.00109374 -0.04833 0.01 0.0025 -2.03585e-16 0 -0.00312028 -0.0964964 0 0.00109374 -0.04833 0 -0.0150518 -0.143468 0.01 -0.0101278 -0.144336 0.01 -0.0025 -2.02361e-16 0.01 -0.00808647 -0.095916 0.01 -0.0038978 -0.0480393 0.01 -0.0150518 0.143468 0.01 -0.0038978 0.0480393 0.01 -0.00808647 0.095916 0.01 -0.0101278 0.144336 0.01 0.0025 -2.03585e-16 0.01 0.00109374 0.04833 0.01 -0.00312028 0.0964964 0.01 -0.00312028 -0.0964964 0.01 0.00109374 -0.04833 0.01 -0.0150518 -0.143468 0 -0.0150518 -0.143468 0.01 -0.0025 -2.02361e-16 0.01 -0.00808647 -0.095916 0.01 -0.0038978 -0.0480393 0.01 -0.0025 -2.02361e-16 0 -0.00808647 -0.095916 0 -0.0038978 -0.0480393 0 -0.0025 -2.02361e-16 0 -0.0025 -2.02361e-16 0.01 -0.0150518 0.143468 0.01 -0.0038978 0.0480393 0.01 -0.00808647 0.095916 0.01 -0.0150518 0.143468 0 -0.0038978 0.0480393 0 -0.00808647 0.095916 0 -0.0150518 0.143468 0 -0.0101278 0.144336 0 -0.0101278 0.144336 0.01 -0.0150518 0.143468 0.01 0.0025 -2.03585e-16 0 0.0025 -2.03585e-16 0.01 -0.0101278 0.144336 0.01 0.00109374 0.04833 0.01 -0.00312028 0.0964964 0.01 -0.0101278 0.144336 0 0.00109374 0.04833 0 -0.00312028 0.0964964 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="225">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0151779 -0.144909 0 -0.0102539 -0.145778 0 -0.0102539 -0.145778 0.01 -0.0151779 -0.144909 0.01 -0.0151779 -0.144909 0 -0.0102539 -0.145778 0 -0.0025 -2.04394e-16 0 -0.00814259 -0.0968795 0 -0.00391184 -0.0485219 0 -0.0151779 0.144909 0 -0.00391184 0.0485219 0 -0.00814259 0.0968795 0 -0.0102539 0.145778 0 0.0025 -2.05618e-16 0 0.0010797 0.0488126 0 -0.0031764 0.09746 0 -0.0031764 -0.09746 0 0.0010797 -0.0488126 0 -0.0102539 -0.145778 0 -0.0102539 -0.145778 0.01 0.0025 -2.05618e-16 0.01 -0.0031764 -0.09746 0.01 0.0010797 -0.0488126 0.01 0.0025 -2.05618e-16 0 -0.0031764 -0.09746 0 0.0010797 -0.0488126 0 -0.0151779 -0.144909 0.01 -0.0102539 -0.145778 0.01 -0.0025 -2.04394e-16 0.01 -0.00814259 -0.0968795 0.01 -0.00391184 -0.0485219 0.01 -0.0151779 0.144909 0.01 -0.00391184 0.0485219 0.01 -0.00814259 0.0968795 0.01 -0.0102539 0.145778 0.01 0.0025 -2.05618e-16 0.01 0.0010797 0.0488126 0.01 -0.0031764 0.09746 0.01 -0.0031764 -0.09746 0.01 0.0010797 -0.0488126 0.01 -0.0151779 -0.144909 0 -0.0151779 -0.144909 0.01 -0.0025 -2.04394e-16 0.01 -0.00814259 -0.0968795 0.01 -0.00391184 -0.0485219 0.01 -0.0025 -2.04394e-16 0 -0.00814259 -0.0968795 0 -0.00391184 -0.0485219 0 -0.0025 -2.04394e-16 0 -0.0025 -2.04394e-16 0.01 -0.0151779 0.144909 0.01 -0.00391184 0.0485219 0.01 -0.00814259 0.0968795 0.01 -0.0151779 0.144909 0 -0.00391184 0.0485219 0 -0.00814259 0.0968795 0 -0.0151779 0.144909 0 -0.0102539 0.145778 0 -0.0102539 0.145778 0.01 -0.0151779 0.144909 0.01 0.0025 -2.05618e-16 0 0.0025 -2.05618e-16 0.01 -0.0102539 0.145778 0.01 0.0010797 0.0488126 0.01 -0.0031764 0.09746 0.01 -0.0102539 0.145778 0 0.0010797 0.0488126 0 -0.0031764 0.09746 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="226">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.015181 -0.144944 0 -0.0102569 -0.145812 0 -0.0102569 -0.145812 0.01 -0.015181 -0.144944 0.01 -0.015181 -0.144944 0 -0.0102569 -0.145812 0 -0.0025 -2.04443e-16 0 -0.00814394 -0.0969028 0 -0.00391218 -0.0485335 0 -0.015181 0.144944 0 -0.00391218 0.0485335 0 -0.00814394 0.0969028 0 -0.0102569 0.145812 0 0.0025 -2.05667e-16 0 0.00107936 0.0488242 0 -0.00317775 0.0974832 0 -0.00317775 -0.0974832 0 0.00107936 -0.0488242 0 -0.0102569 -0.145812 0 -0.0102569 -0.145812 0.01 0.0025 -2.05667e-16 0.01 -0.00317775 -0.0974832 0.01 0.00107936 -0.0488242 0.01 0.0025 -2.05667e-16 0 -0.00317775 -0.0974832 0 0.00107936 -0.0488242 0 -0.015181 -0.144944 0.01 -0.0102569 -0.145812 0.01 -0.0025 -2.04443e-16 0.01 -0.00814394 -0.0969028 0.01 -0.00391218 -0.0485335 0.01 -0.015181 0.144944 0.01 -0.00391218 0.0485335 0.01 -0.00814394 0.0969028 0.01 -0.0102569 0.145812 0.01 0.0025 -2.05667e-16 0.01 0.00107936 0.0488242 0.01 -0.00317775 0.0974832 0.01 -0.00317775 -0.0974832 0.01 0.00107936 -0.0488242 0.01 -0.015181 -0.144944 0 -0.015181 -0.144944 0.01 -0.0025 -2.04443e-16 0.01 -0.00814394 -0.0969028 0.01 -0.00391218 -0.0485335 0.01 -0.0025 -2.04443e-16 0 -0.00814394 -0.0969028 0 -0.00391218 -0.0485335 0 -0.0025 -2.04443e-16 0 -0.0025 -2.04443e-16 0.01 -0.015181 0.144944 0.01 -0.00391218 0.0485335 0.01 -0.00814394 0.0969028 0.01 -0.015181 0.144944 0 -0.00391218 0.0485335 0 -0.00814394 0.0969028 0 -0.015181 0.144944 0 -0.0102569 0.145812 0 -0.0102569 0.145812 0.01 -0.015181 0.144944 0.01 0.0025 -2.05667e-16 0 0.0025 -2.05667e-16 0.01 -0.0102569 0.145812 0.01 0.00107936 0.0488242 0.01 -0.00317775 0.0974832 0.01 -0.0102569 0.145812 0 0.00107936 0.0488242 0 -0.00317775 0.0974832 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="227">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0153071 -0.146385 0 -0.010383 -0.147254 0 -0.010383 -0.147254 0.01 -0.0153071 -0.146385 0.01 -0.0153071 -0.146385 0 -0.010383 -0.147254 0 -0.0025 -2.06475e-16 0 -0.00820006 -0.0978663 0 -0.00392622 -0.0490161 0 -0.0153071 0.146385 0 -0.00392622 0.0490161 0 -0.00820006 0.0978663 0 -0.010383 0.147254 0 0.0025 -2.077e-16 0 0.00106532 0.0493068 0 -0.00323387 0.0984468 0 -0.00323387 -0.0984468 0 0.00106532 -0.0493068 0 -0.010383 -0.147254 0 -0.010383 -0.147254 0.01 0.0025 -2.077e-16 0.01 -0.00323387 -0.0984468 0.01 0.00106532 -0.0493068 0.01 0.0025 -2.077e-16 0 -0.00323387 -0.0984468 0 0.00106532 -0.0493068 0 -0.0153071 -0.146385 0.01 -0.010383 -0.147254 0.01 -0.0025 -2.06475e-16 0.01 -0.00820006 -0.0978663 0.01 -0.00392622 -0.0490161 0.01 -0.0153071 0.146385 0.01 -0.00392622 0.0490161 0.01 -0.00820006 0.0978663 0.01 -0.010383 0.147254 0.01 0.0025 -2.077e-16 0.01 0.00106532 0.0493068 0.01 -0.00323387 0.0984468 0.01 -0.00323387 -0.0984468 0.01 0.00106532 -0.0493068 0.01 -0.0153071 -0.146385 0 -0.0153071 -0.146385 0.01 -0.0025 -2.06475e-16 0.01 -0.00820006 -0.0978663 0.01 -0.00392622 -0.0490161 0.01 -0.0025 -2.06475e-16 0 -0.00820006 -0.0978663 0 -0.00392622 -0.0490161 0 -0.0025 -2.06475e-16 0 -0.0025 -2.06475e-16 0.01 -0.0153071 0.146385 0.01 -0.00392622 0.0490161 0.01 -0.00820006 0.0978663 0.01 -0.0153071 0.146385 0 -0.00392622 0.0490161 0 -0.00820006 0.0978663 0 -0.0153071 0.146385 0 -0.010383 0.147254 0 -0.010383 0.147254 0.01 -0.0153071 0.146385 0.01 0.0025 -2.077e-16 0 0.0025 -2.077e-16 0.01 -0.010383 0.147254 0.01 0.00106532 0.0493068 0.01 -0.00323387 0.0984468 0.01 -0.010383 0.147254 0 0.00106532 0.0493068 0 -0.00323387 0.0984468 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="228">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0153086 -0.146403 0 -0.0103845 -0.147271 0 -0.0103845 -0.147271 0.01 -0.0153086 -0.146403 0.01 -0.0153086 -0.146403 0 -0.0103845 -0.147271 0 -0.0025 -2.065e-16 0 -0.00820074 -0.0978779 0 -0.00392639 -0.0490219 0 -0.0153086 0.146403 0 -0.00392639 0.0490219 0 -0.00820074 0.0978779 0 -0.0103845 0.147271 0 0.0025 -2.07725e-16 0 0.00106515 0.0493126 0 -0.00323455 0.0984584 0 -0.00323455 -0.0984584 0 0.00106515 -0.0493126 0 -0.0103845 -0.147271 0 -0.0103845 -0.147271 0.01 0.0025 -2.07725e-16 0.01 -0.00323455 -0.0984584 0.01 0.00106515 -0.0493126 0.01 0.0025 -2.07725e-16 0 -0.00323455 -0.0984584 0 0.00106515 -0.0493126 0 -0.0153086 -0.146403 0.01 -0.0103845 -0.147271 0.01 -0.0025 -2.065e-16 0.01 -0.00820074 -0.0978779 0.01 -0.00392639 -0.0490219 0.01 -0.0153086 0.146403 0.01 -0.00392639 0.0490219 0.01 -0.00820074 0.0978779 0.01 -0.0103845 0.147271 0.01 0.0025 -2.07725e-16 0.01 0.00106515 0.0493126 0.01 -0.00323455 0.0984584 0.01 -0.00323455 -0.0984584 0.01 0.00106515 -0.0493126 0.01 -0.0153086 -0.146403 0 -0.0153086 -0.146403 0.01 -0.0025 -2.065e-16 0.01 -0.00820074 -0.0978779 0.01 -0.00392639 -0.0490219 0.01 -0.0025 -2.065e-16 0 -0.00820074 -0.0978779 0 -0.00392639 -0.0490219 0 -0.0025 -2.065e-16 0 -0.0025 -2.065e-16 0.01 -0.0153086 0.146403 0.01 -0.00392639 0.0490219 0.01 -0.00820074 0.0978779 0.01 -0.0153086 0.146403 0 -0.00392639 0.0490219 0 -0.00820074 0.0978779 0 -0.0153086 0.146403 0 -0.0103845 0.147271 0 -0.0103845 0.147271 0.01 -0.0153086 0.146403 0.01 0.0025 -2.07725e-16 0 0.0025 -2.07725e-16 0.01 -0.0103845 0.147271 0.01 0.00106515 0.0493126 0.01 -0.00323455 0.0984584 0.01 -0.0103845 0.147271 0 0.00106515 0.0493126 0 -0.00323455 0.0984584 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="229">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0145991 -0.138293 0 -0.00967507 -0.139162 0 -0.00967507 -0.139162 0.01 -0.0145991 -0.138293 0.01 -0.0145991 -0.138293 0 -0.00967507 -0.139162 0 -0.0025 -1.95062e-16 0 -0.00788497 -0.0924564 0 -0.00384738 -0.0463065 0 -0.0145991 0.138293 0 -0.00384738 0.0463065 0 -0.00788497 0.0924564 0 -0.00967507 0.139162 0 0.0025 -1.96286e-16 0 0.00114416 0.0465973 0 -0.00291878 0.0930369 0 -0.00291878 -0.0930369 0 0.00114416 -0.0465973 0 -0.00967507 -0.139162 0 -0.00967507 -0.139162 0.01 0.0025 -1.96286e-16 0.01 -0.00291878 -0.0930369 0.01 0.00114416 -0.0465973 0.01 0.0025 -1.96286e-16 0 -0.00291878 -0.0930369 0 0.00114416 -0.0465973 0 -0.0145991 -0.138293 0.01 -0.00967507 -0.139162 0.01 -0.0025 -1.95062e-16 0.01 -0.00788497 -0.0924564 0.01 -0.00384738 -0.0463065 0.01 -0.0145991 0.138293 0.01 -0.00384738 0.0463065 0.01 -0.00788497 0.0924564 0.01 -0.00967507 0.139162 0.01 0.0025 -1.96286e-16 0.01 0.00114416 0.0465973 0.01 -0.00291878 0.0930369 0.01 -0.00291878 -0.0930369 0.01 0.00114416 -0.0465973 0.01 -0.0145991 -0.138293 0 -0.0145991 -0.138293 0.01 -0.0025 -1.95062e-16 0.01 -0.00788497 -0.0924564 0.01 -0.00384738 -0.0463065 0.01 -0.0025 -1.95062e-16 0 -0.00788497 -0.0924564 0 -0.00384738 -0.0463065 0 -0.0025 -1.95062e-16 0 -0.0025 -1.95062e-16 0.01 -0.0145991 0.138293 0.01 -0.00384738 0.0463065 0.01 -0.00788497 0.0924564 0.01 -0.0145991 0.138293 0 -0.00384738 0.0463065 0 -0.00788497 0.0924564 0 -0.0145991 0.138293 0 -0.00967507 0.139162 0 -0.00967507 0.139162 0.01 -0.0145991 0.138293 0.01 0.0025 -1.96286e-16 0 0.0025 -1.96286e-16 0.01 -0.00967507 0.139162 0.01 0.00114416 0.0465973 0.01 -0.00291878 0.0930369 0.01 -0.00967507 0.139162 0 0.00114416 0.0465973 0 -0.00291878 0.0930369 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="230">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0154377 -0.147879 0 -0.0105137 -0.148747 0 -0.0105137 -0.148747 0.01 -0.0154377 -0.147879 0.01 -0.0154377 -0.147879 0 -0.0105137 -0.148747 0 -0.0025 -2.08582e-16 0 -0.00825821 -0.0988647 0 -0.00394077 -0.0495161 0 -0.0154377 0.147879 0 -0.00394077 0.0495161 0 -0.00825821 0.0988647 0 -0.0105137 0.148747 0 0.0025 -2.09806e-16 0 0.00105077 0.0498069 0 -0.00329202 0.0994452 0 -0.00329202 -0.0994452 0 0.00105077 -0.0498069 0 -0.0105137 -0.148747 0 -0.0105137 -0.148747 0.01 0.0025 -2.09806e-16 0.01 -0.00329202 -0.0994452 0.01 0.00105077 -0.0498069 0.01 0.0025 -2.09806e-16 0 -0.00329202 -0.0994452 0 0.00105077 -0.0498069 0 -0.0154377 -0.147879 0.01 -0.0105137 -0.148747 0.01 -0.0025 -2.08582e-16 0.01 -0.00825821 -0.0988647 0.01 -0.00394077 -0.0495161 0.01 -0.0154377 0.147879 0.01 -0.00394077 0.0495161 0.01 -0.00825821 0.0988647 0.01 -0.0105137 0.148747 0.01 0.0025 -2.09806e-16 0.01 0.00105077 0.0498069 0.01 -0.00329202 0.0994452 0.01 -0.00329202 -0.0994452 0.01 0.00105077 -0.0498069 0.01 -0.0154377 -0.147879 0 -0.0154377 -0.147879 0.01 -0.0025 -2.08582e-16 0.01 -0.00825821 -0.0988647 0.01 -0.00394077 -0.0495161 0.01 -0.0025 -2.08582e-16 0 -0.00825821 -0.0988647 0 -0.00394077 -0.0495161 0 -0.0025 -2.08582e-16 0 -0.0025 -2.08582e-16 0.01 -0.0154377 0.147879 0.01 -0.00394077 0.0495161 0.01 -0.00825821 0.0988647 0.01 -0.0154377 0.147879 0 -0.00394077 0.0495161 0 -0.00825821 0.0988647 0 -0.0154377 0.147879 0 -0.0105137 0.148747 0 -0.0105137 0.148747 0.01 -0.0154377 0.147879 0.01 0.0025 -2.09806e-16 0 0.0025 -2.09806e-16 0.01 -0.0105137 0.148747 0.01 0.00105077 0.0498069 0.01 -0.00329202 0.0994452 0.01 -0.0105137 0.148747 0 0.00105077 0.0498069 0 -0.00329202 0.0994452 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="231">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0155638 -0.14932 0 -0.0106398 -0.150188 0 -0.0106398 -0.150188 0.01 -0.0155638 -0.14932 0.01 -0.0155638 -0.14932 0 -0.0106398 -0.150188 0 -0.0025 -2.10615e-16 0 -0.00831434 -0.0998283 0 -0.00395481 -0.0499987 0 -0.0155638 0.14932 0 -0.00395481 0.0499987 0 -0.00831434 0.0998283 0 -0.0106398 0.150188 0 0.0025 -2.11839e-16 0 0.00103673 0.0502895 0 -0.00334814 0.100409 0 -0.00334814 -0.100409 0 0.00103673 -0.0502895 0 -0.0106398 -0.150188 0 -0.0106398 -0.150188 0.01 0.0025 -2.11839e-16 0.01 -0.00334814 -0.100409 0.01 0.00103673 -0.0502895 0.01 0.0025 -2.11839e-16 0 -0.00334814 -0.100409 0 0.00103673 -0.0502895 0 -0.0155638 -0.14932 0.01 -0.0106398 -0.150188 0.01 -0.0025 -2.10615e-16 0.01 -0.00831434 -0.0998283 0.01 -0.00395481 -0.0499987 0.01 -0.0155638 0.14932 0.01 -0.00395481 0.0499987 0.01 -0.00831434 0.0998283 0.01 -0.0106398 0.150188 0.01 0.0025 -2.11839e-16 0.01 0.00103673 0.0502895 0.01 -0.00334814 0.100409 0.01 -0.00334814 -0.100409 0.01 0.00103673 -0.0502895 0.01 -0.0155638 -0.14932 0 -0.0155638 -0.14932 0.01 -0.0025 -2.10615e-16 0.01 -0.00831434 -0.0998283 0.01 -0.00395481 -0.0499987 0.01 -0.0025 -2.10615e-16 0 -0.00831434 -0.0998283 0 -0.00395481 -0.0499987 0 -0.0025 -2.10615e-16 0 -0.0025 -2.10615e-16 0.01 -0.0155638 0.14932 0.01 -0.00395481 0.0499987 0.01 -0.00831434 0.0998283 0.01 -0.0155638 0.14932 0 -0.00395481 0.0499987 0 -0.00831434 0.0998283 0 -0.0155638 0.14932 0 -0.0106398 0.150188 0 -0.0106398 0.150188 0.01 -0.0155638 0.14932 0.01 0.0025 -2.11839e-16 0 0.0025 -2.11839e-16 0.01 -0.0106398 0.150188 0.01 0.00103673 0.0502895 0.01 -0.00334814 0.100409 0.01 -0.0106398 0.150188 0 0.00103673 0.0502895 0 -0.00334814 0.100409 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="232">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0155653 -0.149337 0 -0.0106413 -0.150206 0 -0.0106413 -0.150206 0.01 -0.0155653 -0.149337 0.01 -0.0155653 -0.149337 0 -0.0106413 -0.150206 0 -0.0025 -2.10639e-16 0 -0.00831501 -0.0998399 0 -0.00395498 -0.0500046 0 -0.0155653 0.149337 0 -0.00395498 0.0500046 0 -0.00831501 0.0998399 0 -0.0106413 0.150206 0 0.0025 -2.11864e-16 0 0.00103656 0.0502953 0 -0.00334882 0.10042 0 -0.00334882 -0.10042 0 0.00103656 -0.0502953 0 -0.0106413 -0.150206 0 -0.0106413 -0.150206 0.01 0.0025 -2.11864e-16 0.01 -0.00334882 -0.10042 0.01 0.00103656 -0.0502953 0.01 0.0025 -2.11864e-16 0 -0.00334882 -0.10042 0 0.00103656 -0.0502953 0 -0.0155653 -0.149337 0.01 -0.0106413 -0.150206 0.01 -0.0025 -2.10639e-16 0.01 -0.00831501 -0.0998399 0.01 -0.00395498 -0.0500046 0.01 -0.0155653 0.149337 0.01 -0.00395498 0.0500046 0.01 -0.00831501 0.0998399 0.01 -0.0106413 0.150206 0.01 0.0025 -2.11864e-16 0.01 0.00103656 0.0502953 0.01 -0.00334882 0.10042 0.01 -0.00334882 -0.10042 0.01 0.00103656 -0.0502953 0.01 -0.0155653 -0.149337 0 -0.0155653 -0.149337 0.01 -0.0025 -2.10639e-16 0.01 -0.00831501 -0.0998399 0.01 -0.00395498 -0.0500046 0.01 -0.0025 -2.10639e-16 0 -0.00831501 -0.0998399 0 -0.00395498 -0.0500046 0 -0.0025 -2.10639e-16 0 -0.0025 -2.10639e-16 0.01 -0.0155653 0.149337 0.01 -0.00395498 0.0500046 0.01 -0.00831501 0.0998399 0.01 -0.0155653 0.149337 0 -0.00395498 0.0500046 0 -0.00831501 0.0998399 0 -0.0155653 0.149337 0 -0.0106413 0.150206 0 -0.0106413 0.150206 0.01 -0.0155653 0.149337 0.01 0.0025 -2.11864e-16 0 0.0025 -2.11864e-16 0.01 -0.0106413 0.150206 0.01 0.00103656 0.0502953 0.01 -0.00334882 0.10042 0.01 -0.0106413 0.150206 0 0.00103656 0.0502953 0 -0.00334882 0.10042 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="215">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0145353 -0.137564 0 -0.00961126 -0.138432 0 -0.00961126 -0.138432 0.01 -0.0145353 -0.137564 0.01 -0.0145353 -0.137564 0 -0.00961126 -0.138432 0 -0.0025 -1.94033e-16 0 -0.00785657 -0.0919688 0 -0.00384028 -0.0460623 0 -0.0145353 0.137564 0 -0.00384028 0.0460623 0 -0.00785657 0.0919688 0 -0.00961126 0.138432 0 0.0025 -1.95258e-16 0 0.00115126 0.0463531 0 -0.00289038 0.0925493 0 -0.00289038 -0.0925493 0 0.00115126 -0.0463531 0 -0.00961126 -0.138432 0 -0.00961126 -0.138432 0.01 0.0025 -1.95258e-16 0.01 -0.00289038 -0.0925493 0.01 0.00115126 -0.0463531 0.01 0.0025 -1.95258e-16 0 -0.00289038 -0.0925493 0 0.00115126 -0.0463531 0 -0.0145353 -0.137564 0.01 -0.00961126 -0.138432 0.01 -0.0025 -1.94033e-16 0.01 -0.00785657 -0.0919688 0.01 -0.00384028 -0.0460623 0.01 -0.0145353 0.137564 0.01 -0.00384028 0.0460623 0.01 -0.00785657 0.0919688 0.01 -0.00961126 0.138432 0.01 0.0025 -1.95258e-16 0.01 0.00115126 0.0463531 0.01 -0.00289038 0.0925493 0.01 -0.00289038 -0.0925493 0.01 0.00115126 -0.0463531 0.01 -0.0145353 -0.137564 0 -0.0145353 -0.137564 0.01 -0.0025 -1.94033e-16 0.01 -0.00785657 -0.0919688 0.01 -0.00384028 -0.0460623 0.01 -0.0025 -1.94033e-16 0 -0.00785657 -0.0919688 0 -0.00384028 -0.0460623 0 -0.0025 -1.94033e-16 0 -0.0025 -1.94033e-16 0.01 -0.0145353 0.137564 0.01 -0.00384028 0.0460623 0.01 -0.00785657 0.0919688 0.01 -0.0145353 0.137564 0 -0.00384028 0.0460623 0 -0.00785657 0.0919688 0 -0.0145353 0.137564 0 -0.00961126 0.138432 0 -0.00961126 0.138432 0.01 -0.0145353 0.137564 0.01 0.0025 -1.95258e-16 0 0.0025 -1.95258e-16 0.01 -0.00961126 0.138432 0.01 0.00115126 0.0463531 0.01 -0.00289038 0.0925493 0.01 -0.00961126 0.138432 0 0.00115126 0.0463531 0 -0.00289038 0.0925493 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">1 3 2 1 0 3 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="216">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0145368 -0.137581 0 -0.00961278 -0.13845 0 -0.00961278 -0.13845 0.01 -0.0145368 -0.137581 0.01 -0.0145368 -0.137581 0 -0.00961278 -0.13845 0 -0.0025 -1.94058e-16 0 -0.00785725 -0.0919804 0 -0.00384045 -0.0460681 0 -0.0145368 0.137581 0 -0.00384045 0.0460681 0 -0.00785725 0.0919804 0 -0.00961278 0.13845 0 0.0025 -1.95282e-16 0 0.00115109 0.0463589 0 -0.00289106 0.0925609 0 -0.00289106 -0.0925609 0 0.00115109 -0.0463589 0 -0.00961278 -0.13845 0 -0.00961278 -0.13845 0.01 0.0025 -1.95282e-16 0.01 -0.00289106 -0.0925609 0.01 0.00115109 -0.0463589 0.01 0.0025 -1.95282e-16 0 -0.00289106 -0.0925609 0 0.00115109 -0.0463589 0 -0.0145368 -0.137581 0.01 -0.00961278 -0.13845 0.01 -0.0025 -1.94058e-16 0.01 -0.00785725 -0.0919804 0.01 -0.00384045 -0.0460681 0.01 -0.0145368 0.137581 0.01 -0.00384045 0.0460681 0.01 -0.00785725 0.0919804 0.01 -0.00961278 0.13845 0.01 0.0025 -1.95282e-16 0.01 0.00115109 0.0463589 0.01 -0.00289106 0.0925609 0.01 -0.00289106 -0.0925609 0.01 0.00115109 -0.0463589 0.01 -0.0145368 -0.137581 0 -0.0145368 -0.137581 0.01 -0.0025 -1.94058e-16 0.01 -0.00785725 -0.0919804 0.01 -0.00384045 -0.0460681 0.01 -0.0025 -1.94058e-16 0 -0.00785725 -0.0919804 0 -0.00384045 -0.0460681 0 -0.0025 -1.94058e-16 0 -0.0025 -1.94058e-16 0.01 -0.0145368 0.137581 0.01 -0.00384045 0.0460681 0.01 -0.00785725 0.0919804 0.01 -0.0145368 0.137581 0 -0.00384045 0.0460681 0 -0.00785725 0.0919804 0 -0.0145368 0.137581 0 -0.00961278 0.13845 0 -0.00961278 0.13845 0.01 -0.0145368 0.137581 0.01 0.0025 -1.95282e-16 0 0.0025 -1.95282e-16 0.01 -0.00961278 0.13845 0.01 0.00115109 0.0463589 0.01 -0.00289106 0.0925609 0.01 -0.00961278 0.13845 0 0.00115109 0.0463589 0 -0.00289106 0.0925609 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="217">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0146644 -0.13904 0 -0.00974039 -0.139908 0 -0.00974039 -0.139908 0.01 -0.0146644 -0.13904 0.01 -0.0146644 -0.13904 0 -0.00974039 -0.139908 0 -0.0025 -1.96115e-16 0 -0.00791405 -0.0929556 0 -0.00385466 -0.0465566 0 -0.0146644 0.13904 0 -0.00385466 0.0465566 0 -0.00791405 0.0929556 0 -0.00974039 0.139908 0 0.0025 -1.9734e-16 0 0.00113688 0.0468473 0 -0.00294786 0.0935361 0 -0.00294786 -0.0935361 0 0.00113688 -0.0468473 0 -0.00974039 -0.139908 0 -0.00974039 -0.139908 0.01 0.0025 -1.9734e-16 0.01 -0.00294786 -0.0935361 0.01 0.00113688 -0.0468473 0.01 0.0025 -1.9734e-16 0 -0.00294786 -0.0935361 0 0.00113688 -0.0468473 0 -0.0146644 -0.13904 0.01 -0.00974039 -0.139908 0.01 -0.0025 -1.96115e-16 0.01 -0.00791405 -0.0929556 0.01 -0.00385466 -0.0465566 0.01 -0.0146644 0.13904 0.01 -0.00385466 0.0465566 0.01 -0.00791405 0.0929556 0.01 -0.00974039 0.139908 0.01 0.0025 -1.9734e-16 0.01 0.00113688 0.0468473 0.01 -0.00294786 0.0935361 0.01 -0.00294786 -0.0935361 0.01 0.00113688 -0.0468473 0.01 -0.0146644 -0.13904 0 -0.0146644 -0.13904 0.01 -0.0025 -1.96115e-16 0.01 -0.00791405 -0.0929556 0.01 -0.00385466 -0.0465566 0.01 -0.0025 -1.96115e-16 0 -0.00791405 -0.0929556 0 -0.00385466 -0.0465566 0 -0.0025 -1.96115e-16 0 -0.0025 -1.96115e-16 0.01 -0.0146644 0.13904 0.01 -0.00385466 0.0465566 0.01 -0.00791405 0.0929556 0.01 -0.0146644 0.13904 0 -0.00385466 0.0465566 0 -0.00791405 0.0929556 0 -0.0146644 0.13904 0 -0.00974039 0.139908 0 -0.00974039 0.139908 0.01 -0.0146644 0.13904 0.01 0.0025 -1.9734e-16 0 0.0025 -1.9734e-16 0.01 -0.00974039 0.139908 0.01 0.00113688 0.0468473 0.01 -0.00294786 0.0935361 0.01 -0.00974039 0.139908 0 0.00113688 0.0468473 0 -0.00294786 0.0935361 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="218">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.014666 -0.139057 0 -0.00974191 -0.139926 0 -0.00974191 -0.139926 0.01 -0.014666 -0.139057 0.01 -0.014666 -0.139057 0 -0.00974191 -0.139926 0 -0.0025 -1.96139e-16 0 -0.00791472 -0.0929672 0 -0.00385483 -0.0465624 0 -0.014666 0.139057 0 -0.00385483 0.0465624 0 -0.00791472 0.0929672 0 -0.00974191 0.139926 0 0.0025 -1.97364e-16 0 0.00113671 0.0468531 0 -0.00294853 0.0935477 0 -0.00294853 -0.0935477 0 0.00113671 -0.0468531 0 -0.00974191 -0.139926 0 -0.00974191 -0.139926 0.01 0.0025 -1.97364e-16 0.01 -0.00294853 -0.0935477 0.01 0.00113671 -0.0468531 0.01 0.0025 -1.97364e-16 0 -0.00294853 -0.0935477 0 0.00113671 -0.0468531 0 -0.014666 -0.139057 0.01 -0.00974191 -0.139926 0.01 -0.0025 -1.96139e-16 0.01 -0.00791472 -0.0929672 0.01 -0.00385483 -0.0465624 0.01 -0.014666 0.139057 0.01 -0.00385483 0.0465624 0.01 -0.00791472 0.0929672 0.01 -0.00974191 0.139926 0.01 0.0025 -1.97364e-16 0.01 0.00113671 0.0468531 0.01 -0.00294853 0.0935477 0.01 -0.00294853 -0.0935477 0.01 0.00113671 -0.0468531 0.01 -0.014666 -0.139057 0 -0.014666 -0.139057 0.01 -0.0025 -1.96139e-16 0.01 -0.00791472 -0.0929672 0.01 -0.00385483 -0.0465624 0.01 -0.0025 -1.96139e-16 0 -0.00791472 -0.0929672 0 -0.00385483 -0.0465624 0 -0.0025 -1.96139e-16 0 -0.0025 -1.96139e-16 0.01 -0.014666 0.139057 0.01 -0.00385483 0.0465624 0.01 -0.00791472 0.0929672 0.01 -0.014666 0.139057 0 -0.00385483 0.0465624 0 -0.00791472 0.0929672 0 -0.014666 0.139057 0 -0.00974191 0.139926 0 -0.00974191 0.139926 0.01 -0.014666 0.139057 0.01 0.0025 -1.97364e-16 0 0.0025 -1.97364e-16 0.01 -0.00974191 0.139926 0.01 0.00113671 0.0468531 0.01 -0.00294853 0.0935477 0.01 -0.00974191 0.139926 0 0.00113671 0.0468531 0 -0.00294853 0.0935477 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="219">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.014792 -0.140499 0 -0.00986801 -0.141367 0 -0.00986801 -0.141367 0.01 -0.014792 -0.140499 0.01 -0.014792 -0.140499 0 -0.00986801 -0.141367 0 -0.0025 -1.98172e-16 0 -0.00797084 -0.0939308 0 -0.00386887 -0.047045 0 -0.014792 0.140499 0 -0.00386887 0.047045 0 -0.00797084 0.0939308 0 -0.00986801 0.141367 0 0.0025 -1.99397e-16 0 0.00112267 0.0473357 0 -0.00300465 0.0945112 0 -0.00300465 -0.0945112 0 0.00112267 -0.0473357 0 -0.00986801 -0.141367 0 -0.00986801 -0.141367 0.01 0.0025 -1.99397e-16 0.01 -0.00300465 -0.0945112 0.01 0.00112267 -0.0473357 0.01 0.0025 -1.99397e-16 0 -0.00300465 -0.0945112 0 0.00112267 -0.0473357 0 -0.014792 -0.140499 0.01 -0.00986801 -0.141367 0.01 -0.0025 -1.98172e-16 0.01 -0.00797084 -0.0939308 0.01 -0.00386887 -0.047045 0.01 -0.014792 0.140499 0.01 -0.00386887 0.047045 0.01 -0.00797084 0.0939308 0.01 -0.00986801 0.141367 0.01 0.0025 -1.99397e-16 0.01 0.00112267 0.0473357 0.01 -0.00300465 0.0945112 0.01 -0.00300465 -0.0945112 0.01 0.00112267 -0.0473357 0.01 -0.014792 -0.140499 0 -0.014792 -0.140499 0.01 -0.0025 -1.98172e-16 0.01 -0.00797084 -0.0939308 0.01 -0.00386887 -0.047045 0.01 -0.0025 -1.98172e-16 0 -0.00797084 -0.0939308 0 -0.00386887 -0.047045 0 -0.0025 -1.98172e-16 0 -0.0025 -1.98172e-16 0.01 -0.014792 0.140499 0.01 -0.00386887 0.047045 0.01 -0.00797084 0.0939308 0.01 -0.014792 0.140499 0 -0.00386887 0.047045 0 -0.00797084 0.0939308 0 -0.014792 0.140499 0 -0.00986801 0.141367 0 -0.00986801 0.141367 0.01 -0.014792 0.140499 0.01 0.0025 -1.99397e-16 0 0.0025 -1.99397e-16 0.01 -0.00986801 0.141367 0.01 0.00112267 0.0473357 0.01 -0.00300465 0.0945112 0.01 -0.00986801 0.141367 0 0.00112267 0.0473357 0 -0.00300465 0.0945112 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="220">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0147951 -0.140533 0 -0.00987105 -0.141402 0 -0.00987105 -0.141402 0.01 -0.0147951 -0.140533 0.01 -0.0147951 -0.140533 0 -0.00987105 -0.141402 0 -0.0025 -1.98221e-16 0 -0.0079722 -0.093954 0 -0.00386921 -0.0470566 0 -0.0147951 0.140533 0 -0.00386921 0.0470566 0 -0.0079722 0.093954 0 -0.00987105 0.141402 0 0.0025 -1.99446e-16 0 0.00112233 0.0473473 0 -0.00300601 0.0945345 0 -0.00300601 -0.0945345 0 0.00112233 -0.0473473 0 -0.00987105 -0.141402 0 -0.00987105 -0.141402 0.01 0.0025 -1.99446e-16 0.01 -0.00300601 -0.0945345 0.01 0.00112233 -0.0473473 0.01 0.0025 -1.99446e-16 0 -0.00300601 -0.0945345 0 0.00112233 -0.0473473 0 -0.0147951 -0.140533 0.01 -0.00987105 -0.141402 0.01 -0.0025 -1.98221e-16 0.01 -0.0079722 -0.093954 0.01 -0.00386921 -0.0470566 0.01 -0.0147951 0.140533 0.01 -0.00386921 0.0470566 0.01 -0.0079722 0.093954 0.01 -0.00987105 0.141402 0.01 0.0025 -1.99446e-16 0.01 0.00112233 0.0473473 0.01 -0.00300601 0.0945345 0.01 -0.00300601 -0.0945345 0.01 0.00112233 -0.0473473 0.01 -0.0147951 -0.140533 0 -0.0147951 -0.140533 0.01 -0.0025 -1.98221e-16 0.01 -0.0079722 -0.093954 0.01 -0.00386921 -0.0470566 0.01 -0.0025 -1.98221e-16 0 -0.0079722 -0.093954 0 -0.00386921 -0.0470566 0 -0.0025 -1.98221e-16 0 -0.0025 -1.98221e-16 0.01 -0.0147951 0.140533 0.01 -0.00386921 0.0470566 0.01 -0.0079722 0.093954 0.01 -0.0147951 0.140533 0 -0.00386921 0.0470566 0 -0.0079722 0.093954 0 -0.0147951 0.140533 0 -0.00987105 0.141402 0 -0.00987105 0.141402 0.01 -0.0147951 0.140533 0.01 0.0025 -1.99446e-16 0 0.0025 -1.99446e-16 0.01 -0.00987105 0.141402 0.01 0.00112233 0.0473473 0.01 -0.00300601 0.0945345 0.01 -0.00987105 0.141402 0 0.00112233 0.0473473 0 -0.00300601 0.0945345 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="221">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0149212 -0.141975 0 -0.00999714 -0.142843 0 -0.00999714 -0.142843 0.01 -0.0149212 -0.141975 0.01 -0.0149212 -0.141975 0 -0.00999714 -0.142843 0 -0.0025 -2.00254e-16 0 -0.00802832 -0.0949176 0 -0.00388325 -0.0475392 0 -0.0149212 0.141975 0 -0.00388325 0.0475392 0 -0.00802832 0.0949176 0 -0.00999714 0.142843 0 0.0025 -2.01479e-16 0 0.00110829 0.0478299 0 -0.00306213 0.095498 0 -0.00306213 -0.095498 0 0.00110829 -0.0478299 0 -0.00999714 -0.142843 0 -0.00999714 -0.142843 0.01 0.0025 -2.01479e-16 0.01 -0.00306213 -0.095498 0.01 0.00110829 -0.0478299 0.01 0.0025 -2.01479e-16 0 -0.00306213 -0.095498 0 0.00110829 -0.0478299 0 -0.0149212 -0.141975 0.01 -0.00999714 -0.142843 0.01 -0.0025 -2.00254e-16 0.01 -0.00802832 -0.0949176 0.01 -0.00388325 -0.0475392 0.01 -0.0149212 0.141975 0.01 -0.00388325 0.0475392 0.01 -0.00802832 0.0949176 0.01 -0.00999714 0.142843 0.01 0.0025 -2.01479e-16 0.01 0.00110829 0.0478299 0.01 -0.00306213 0.095498 0.01 -0.00306213 -0.095498 0.01 0.00110829 -0.0478299 0.01 -0.0149212 -0.141975 0 -0.0149212 -0.141975 0.01 -0.0025 -2.00254e-16 0.01 -0.00802832 -0.0949176 0.01 -0.00388325 -0.0475392 0.01 -0.0025 -2.00254e-16 0 -0.00802832 -0.0949176 0 -0.00388325 -0.0475392 0 -0.0025 -2.00254e-16 0 -0.0025 -2.00254e-16 0.01 -0.0149212 0.141975 0.01 -0.00388325 0.0475392 0.01 -0.00802832 0.0949176 0.01 -0.0149212 0.141975 0 -0.00388325 0.0475392 0 -0.00802832 0.0949176 0 -0.0149212 0.141975 0 -0.00999714 0.142843 0 -0.00999714 0.142843 0.01 -0.0149212 0.141975 0.01 0.0025 -2.01479e-16 0 0.0025 -2.01479e-16 0.01 -0.00999714 0.142843 0.01 0.00110829 0.0478299 0.01 -0.00306213 0.095498 0.01 -0.00999714 0.142843 0 0.00110829 0.0478299 0 -0.00306213 0.095498 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="222">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0149227 -0.141992 0 -0.00999866 -0.14286 0 -0.00999866 -0.14286 0.01 -0.0149227 -0.141992 0.01 -0.0149227 -0.141992 0 -0.00999866 -0.14286 0 -0.0025 -2.00279e-16 0 -0.00802899 -0.0949292 0 -0.00388342 -0.047545 0 -0.0149227 0.141992 0 -0.00388342 0.047545 0 -0.00802899 0.0949292 0 -0.00999866 0.14286 0 0.0025 -2.01503e-16 0 0.00110812 0.0478358 0 -0.0030628 0.0955096 0 -0.0030628 -0.0955096 0 0.00110812 -0.0478358 0 -0.00999866 -0.14286 0 -0.00999866 -0.14286 0.01 0.0025 -2.01503e-16 0.01 -0.0030628 -0.0955096 0.01 0.00110812 -0.0478358 0.01 0.0025 -2.01503e-16 0 -0.0030628 -0.0955096 0 0.00110812 -0.0478358 0 -0.0149227 -0.141992 0.01 -0.00999866 -0.14286 0.01 -0.0025 -2.00279e-16 0.01 -0.00802899 -0.0949292 0.01 -0.00388342 -0.047545 0.01 -0.0149227 0.141992 0.01 -0.00388342 0.047545 0.01 -0.00802899 0.0949292 0.01 -0.00999866 0.14286 0.01 0.0025 -2.01503e-16 0.01 0.00110812 0.0478358 0.01 -0.0030628 0.0955096 0.01 -0.0030628 -0.0955096 0.01 0.00110812 -0.0478358 0.01 -0.0149227 -0.141992 0 -0.0149227 -0.141992 0.01 -0.0025 -2.00279e-16 0.01 -0.00802899 -0.0949292 0.01 -0.00388342 -0.047545 0.01 -0.0025 -2.00279e-16 0 -0.00802899 -0.0949292 0 -0.00388342 -0.047545 0 -0.0025 -2.00279e-16 0 -0.0025 -2.00279e-16 0.01 -0.0149227 0.141992 0.01 -0.00388342 0.047545 0.01 -0.00802899 0.0949292 0.01 -0.0149227 0.141992 0 -0.00388342 0.047545 0 -0.00802899 0.0949292 0 -0.0149227 0.141992 0 -0.00999866 0.14286 0 -0.00999866 0.14286 0.01 -0.0149227 0.141992 0.01 0.0025 -2.01503e-16 0 0.0025 -2.01503e-16 0.01 -0.00999866 0.14286 0.01 0.00110812 0.0478358 0.01 -0.0030628 0.0955096 0.01 -0.00999866 0.14286 0 0.00110812 0.0478358 0 -0.0030628 0.0955096 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="233">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0173155 -0.169342 0 -0.0123914 -0.17021 0 -0.0123914 -0.17021 0.01 -0.0173155 -0.169342 0.01 -0.0173155 -0.169342 0 -0.0123914 -0.17021 0 -0.0025 -2.38855e-16 0 -0.00909395 -0.113214 0 -0.00414988 -0.0567028 0 -0.0173155 0.169342 0 -0.00414988 0.0567028 0 -0.00909395 0.113214 0 -0.0123914 0.17021 0 0.0025 -2.4008e-16 0 0.000841657 0.0569936 0 -0.00412776 0.113794 0 -0.00412776 -0.113794 0 0.000841657 -0.0569936 0 -0.0123914 -0.17021 0 -0.0123914 -0.17021 0.01 0.0025 -2.4008e-16 0.01 -0.00412776 -0.113794 0.01 0.000841657 -0.0569936 0.01 0.0025 -2.4008e-16 0 -0.00412776 -0.113794 0 0.000841657 -0.0569936 0 -0.0173155 -0.169342 0.01 -0.0123914 -0.17021 0.01 -0.0025 -2.38855e-16 0.01 -0.00909395 -0.113214 0.01 -0.00414988 -0.0567028 0.01 -0.0173155 0.169342 0.01 -0.00414988 0.0567028 0.01 -0.00909395 0.113214 0.01 -0.0123914 0.17021 0.01 0.0025 -2.4008e-16 0.01 0.000841657 0.0569936 0.01 -0.00412776 0.113794 0.01 -0.00412776 -0.113794 0.01 0.000841657 -0.0569936 0.01 -0.0173155 -0.169342 0 -0.0173155 -0.169342 0.01 -0.0025 -2.38855e-16 0.01 -0.00909395 -0.113214 0.01 -0.00414988 -0.0567028 0.01 -0.0025 -2.38855e-16 0 -0.00909395 -0.113214 0 -0.00414988 -0.0567028 0 -0.0025 -2.38855e-16 0 -0.0025 -2.38855e-16 0.01 -0.0173155 0.169342 0.01 -0.00414988 0.0567028 0.01 -0.00909395 0.113214 0.01 -0.0173155 0.169342 0 -0.00414988 0.0567028 0 -0.00909395 0.113214 0 -0.0173155 0.169342 0 -0.0123914 0.17021 0 -0.0123914 0.17021 0.01 -0.0173155 0.169342 0.01 0.0025 -2.4008e-16 0 0.0025 -2.4008e-16 0.01 -0.0123914 0.17021 0.01 0.000841657 0.0569936 0.01 -0.00412776 0.113794 0.01 -0.0123914 0.17021 0 0.000841657 0.0569936 0 -0.00412776 0.113794 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="234">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0173094 -0.169272 0 -0.0123854 -0.17014 0 -0.0123854 -0.17014 0.01 -0.0173094 -0.169272 0.01 -0.0173094 -0.169272 0 -0.0123854 -0.17014 0 -0.0025 -2.38757e-16 0 -0.00909125 -0.113167 0 -0.00414921 -0.0566796 0 -0.0173094 0.169272 0 -0.00414921 0.0566796 0 -0.00909125 0.113167 0 -0.0123854 0.17014 0 0.0025 -2.39982e-16 0 0.000842333 0.0569703 0 -0.00412506 0.113748 0 -0.00412506 -0.113748 0 0.000842333 -0.0569703 0 -0.0123854 -0.17014 0 -0.0123854 -0.17014 0.01 0.0025 -2.39982e-16 0.01 -0.00412506 -0.113748 0.01 0.000842333 -0.0569703 0.01 0.0025 -2.39982e-16 0 -0.00412506 -0.113748 0 0.000842333 -0.0569703 0 -0.0173094 -0.169272 0.01 -0.0123854 -0.17014 0.01 -0.0025 -2.38757e-16 0.01 -0.00909125 -0.113167 0.01 -0.00414921 -0.0566796 0.01 -0.0173094 0.169272 0.01 -0.00414921 0.0566796 0.01 -0.00909125 0.113167 0.01 -0.0123854 0.17014 0.01 0.0025 -2.39982e-16 0.01 0.000842333 0.0569703 0.01 -0.00412506 0.113748 0.01 -0.00412506 -0.113748 0.01 0.000842333 -0.0569703 0.01 -0.0173094 -0.169272 0 -0.0173094 -0.169272 0.01 -0.0025 -2.38757e-16 0.01 -0.00909125 -0.113167 0.01 -0.00414921 -0.0566796 0.01 -0.0025 -2.38757e-16 0 -0.00909125 -0.113167 0 -0.00414921 -0.0566796 0 -0.0025 -2.38757e-16 0 -0.0025 -2.38757e-16 0.01 -0.0173094 0.169272 0.01 -0.00414921 0.0566796 0.01 -0.00909125 0.113167 0.01 -0.0173094 0.169272 0 -0.00414921 0.0566796 0 -0.00909125 0.113167 0 -0.0173094 0.169272 0 -0.0123854 0.17014 0 -0.0123854 0.17014 0.01 -0.0173094 0.169272 0.01 0.0025 -2.39982e-16 0 0.0025 -2.39982e-16 0.01 -0.0123854 0.17014 0.01 0.000842333 0.0569703 0.01 -0.00412506 0.113748 0.01 -0.0123854 0.17014 0 0.000842333 0.0569703 0 -0.00412506 0.113748 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="243">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0179323 -0.176392 0 -0.0130082 -0.17726 0 -0.0130082 -0.17726 0.01 -0.0179323 -0.176392 0.01 -0.0179323 -0.176392 0 -0.0130082 -0.17726 0 -0.0025 -2.48799e-16 0 -0.00936848 -0.117927 0 -0.00421857 -0.0590635 0 -0.0179323 0.176392 0 -0.00421857 0.0590635 0 -0.00936848 0.117927 0 -0.0130082 0.17726 0 0.0025 -2.50024e-16 0 0.000772968 0.0593542 0 -0.00440228 0.118508 0 -0.00440228 -0.118508 0 0.000772968 -0.0593542 0 -0.0130082 -0.17726 0 -0.0130082 -0.17726 0.01 0.0025 -2.50024e-16 0.01 -0.00440228 -0.118508 0.01 0.000772968 -0.0593542 0.01 0.0025 -2.50024e-16 0 -0.00440228 -0.118508 0 0.000772968 -0.0593542 0 -0.0179323 -0.176392 0.01 -0.0130082 -0.17726 0.01 -0.0025 -2.48799e-16 0.01 -0.00936848 -0.117927 0.01 -0.00421857 -0.0590635 0.01 -0.0179323 0.176392 0.01 -0.00421857 0.0590635 0.01 -0.00936848 0.117927 0.01 -0.0130082 0.17726 0.01 0.0025 -2.50024e-16 0.01 0.000772968 0.0593542 0.01 -0.00440228 0.118508 0.01 -0.00440228 -0.118508 0.01 0.000772968 -0.0593542 0.01 -0.0179323 -0.176392 0 -0.0179323 -0.176392 0.01 -0.0025 -2.48799e-16 0.01 -0.00936848 -0.117927 0.01 -0.00421857 -0.0590635 0.01 -0.0025 -2.48799e-16 0 -0.00936848 -0.117927 0 -0.00421857 -0.0590635 0 -0.0025 -2.48799e-16 0 -0.0025 -2.48799e-16 0.01 -0.0179323 0.176392 0.01 -0.00421857 0.0590635 0.01 -0.00936848 0.117927 0.01 -0.0179323 0.176392 0 -0.00421857 0.0590635 0 -0.00936848 0.117927 0 -0.0179323 0.176392 0 -0.0130082 0.17726 0 -0.0130082 0.17726 0.01 -0.0179323 0.176392 0.01 0.0025 -2.50024e-16 0 0.0025 -2.50024e-16 0.01 -0.0130082 0.17726 0.01 0.000772968 0.0593542 0.01 -0.00440228 0.118508 0.01 -0.0130082 0.17726 0 0.000772968 0.0593542 0 -0.00440228 0.118508 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="244">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0179247 -0.176305 0 -0.0130006 -0.177173 0 -0.0130006 -0.177173 0.01 -0.0179247 -0.176305 0.01 -0.0179247 -0.176305 0 -0.0130006 -0.177173 0 -0.0025 -2.48677e-16 0 -0.0093651 -0.117869 0 -0.00421773 -0.0590344 0 -0.0179247 0.176305 0 -0.00421773 0.0590344 0 -0.0093651 0.117869 0 -0.0130006 0.177173 0 0.0025 -2.49901e-16 0 0.000773814 0.0593252 0 -0.0043989 0.11845 0 -0.0043989 -0.11845 0 0.000773814 -0.0593252 0 -0.0130006 -0.177173 0 -0.0130006 -0.177173 0.01 0.0025 -2.49901e-16 0.01 -0.0043989 -0.11845 0.01 0.000773814 -0.0593252 0.01 0.0025 -2.49901e-16 0 -0.0043989 -0.11845 0 0.000773814 -0.0593252 0 -0.0179247 -0.176305 0.01 -0.0130006 -0.177173 0.01 -0.0025 -2.48677e-16 0.01 -0.0093651 -0.117869 0.01 -0.00421773 -0.0590344 0.01 -0.0179247 0.176305 0.01 -0.00421773 0.0590344 0.01 -0.0093651 0.117869 0.01 -0.0130006 0.177173 0.01 0.0025 -2.49901e-16 0.01 0.000773814 0.0593252 0.01 -0.0043989 0.11845 0.01 -0.0043989 -0.11845 0.01 0.000773814 -0.0593252 0.01 -0.0179247 -0.176305 0 -0.0179247 -0.176305 0.01 -0.0025 -2.48677e-16 0.01 -0.0093651 -0.117869 0.01 -0.00421773 -0.0590344 0.01 -0.0025 -2.48677e-16 0 -0.0093651 -0.117869 0 -0.00421773 -0.0590344 0 -0.0025 -2.48677e-16 0 -0.0025 -2.48677e-16 0.01 -0.0179247 0.176305 0.01 -0.00421773 0.0590344 0.01 -0.0093651 0.117869 0.01 -0.0179247 0.176305 0 -0.00421773 0.0590344 0 -0.0093651 0.117869 0 -0.0179247 0.176305 0 -0.0130006 0.177173 0 -0.0130006 0.177173 0.01 -0.0179247 0.176305 0.01 0.0025 -2.49901e-16 0 0.0025 -2.49901e-16 0.01 -0.0130006 0.177173 0.01 0.000773814 0.0593252 0.01 -0.0043989 0.11845 0.01 -0.0130006 0.177173 0 0.000773814 0.0593252 0 -0.0043989 0.11845 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="245">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0180553 -0.177798 0 -0.0131313 -0.178667 0 -0.0131313 -0.178667 0.01 -0.0180553 -0.177798 0.01 -0.0180553 -0.177798 0 -0.0131313 -0.178667 0 -0.0025 -2.50783e-16 0 -0.00942325 -0.118868 0 -0.00423228 -0.0595345 0 -0.0180553 0.177798 0 -0.00423228 0.0595345 0 -0.00942325 0.118868 0 -0.0131313 0.178667 0 0.0025 -2.52008e-16 0 0.000759264 0.0598252 0 -0.00445705 0.119448 0 -0.00445705 -0.119448 0 0.000759264 -0.0598252 0 -0.0131313 -0.178667 0 -0.0131313 -0.178667 0.01 0.0025 -2.52008e-16 0.01 -0.00445705 -0.119448 0.01 0.000759264 -0.0598252 0.01 0.0025 -2.52008e-16 0 -0.00445705 -0.119448 0 0.000759264 -0.0598252 0 -0.0180553 -0.177798 0.01 -0.0131313 -0.178667 0.01 -0.0025 -2.50783e-16 0.01 -0.00942325 -0.118868 0.01 -0.00423228 -0.0595345 0.01 -0.0180553 0.177798 0.01 -0.00423228 0.0595345 0.01 -0.00942325 0.118868 0.01 -0.0131313 0.178667 0.01 0.0025 -2.52008e-16 0.01 0.000759264 0.0598252 0.01 -0.00445705 0.119448 0.01 -0.00445705 -0.119448 0.01 0.000759264 -0.0598252 0.01 -0.0180553 -0.177798 0 -0.0180553 -0.177798 0.01 -0.0025 -2.50783e-16 0.01 -0.00942325 -0.118868 0.01 -0.00423228 -0.0595345 0.01 -0.0025 -2.50783e-16 0 -0.00942325 -0.118868 0 -0.00423228 -0.0595345 0 -0.0025 -2.50783e-16 0 -0.0025 -2.50783e-16 0.01 -0.0180553 0.177798 0.01 -0.00423228 0.0595345 0.01 -0.00942325 0.118868 0.01 -0.0180553 0.177798 0 -0.00423228 0.0595345 0 -0.00942325 0.118868 0 -0.0180553 0.177798 0 -0.0131313 0.178667 0 -0.0131313 0.178667 0.01 -0.0180553 0.177798 0.01 0.0025 -2.52008e-16 0 0.0025 -2.52008e-16 0.01 -0.0131313 0.178667 0.01 0.000759264 0.0598252 0.01 -0.00445705 0.119448 0.01 -0.0131313 0.178667 0 0.000759264 0.0598252 0 -0.00445705 0.119448 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="246">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0180477 -0.177712 0 -0.0131237 -0.17858 0 -0.0131237 -0.17858 0.01 -0.0180477 -0.177712 0.01 -0.0180477 -0.177712 0 -0.0131237 -0.17858 0 -0.0025 -2.50661e-16 0 -0.00941986 -0.118809 0 -0.00423143 -0.0595054 0 -0.0180477 0.177712 0 -0.00423143 0.0595054 0 -0.00941986 0.118809 0 -0.0131237 0.17858 0 0.0025 -2.51885e-16 0 0.00076011 0.0597961 0 -0.00445367 0.11939 0 -0.00445367 -0.11939 0 0.00076011 -0.0597961 0 -0.0131237 -0.17858 0 -0.0131237 -0.17858 0.01 0.0025 -2.51885e-16 0.01 -0.00445367 -0.11939 0.01 0.00076011 -0.0597961 0.01 0.0025 -2.51885e-16 0 -0.00445367 -0.11939 0 0.00076011 -0.0597961 0 -0.0180477 -0.177712 0.01 -0.0131237 -0.17858 0.01 -0.0025 -2.50661e-16 0.01 -0.00941986 -0.118809 0.01 -0.00423143 -0.0595054 0.01 -0.0180477 0.177712 0.01 -0.00423143 0.0595054 0.01 -0.00941986 0.118809 0.01 -0.0131237 0.17858 0.01 0.0025 -2.51885e-16 0.01 0.00076011 0.0597961 0.01 -0.00445367 0.11939 0.01 -0.00445367 -0.11939 0.01 0.00076011 -0.0597961 0.01 -0.0180477 -0.177712 0 -0.0180477 -0.177712 0.01 -0.0025 -2.50661e-16 0.01 -0.00941986 -0.118809 0.01 -0.00423143 -0.0595054 0.01 -0.0025 -2.50661e-16 0 -0.00941986 -0.118809 0 -0.00423143 -0.0595054 0 -0.0025 -2.50661e-16 0 -0.0025 -2.50661e-16 0.01 -0.0180477 0.177712 0.01 -0.00423143 0.0595054 0.01 -0.00941986 0.118809 0.01 -0.0180477 0.177712 0 -0.00423143 0.0595054 0 -0.00941986 0.118809 0 -0.0180477 0.177712 0 -0.0131237 0.17858 0 -0.0131237 0.17858 0.01 -0.0180477 0.177712 0.01 0.0025 -2.51885e-16 0 0.0025 -2.51885e-16 0.01 -0.0131237 0.17858 0.01 0.00076011 0.0597961 0.01 -0.00445367 0.11939 0.01 -0.0131237 0.17858 0 0.00076011 0.0597961 0 -0.00445367 0.11939 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="247">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0181784 -0.179205 0 -0.0132544 -0.180073 0 -0.0132544 -0.180073 0.01 -0.0181784 -0.179205 0.01 -0.0181784 -0.179205 0 -0.0132544 -0.180073 0 -0.0025 -2.52767e-16 0 -0.00947801 -0.119808 0 -0.00424598 -0.0600055 0 -0.0181784 0.179205 0 -0.00424598 0.0600055 0 -0.00947801 0.119808 0 -0.0132544 0.180073 0 0.0025 -2.53992e-16 0 0.00074556 0.0602962 0 -0.00451182 0.120388 0 -0.00451182 -0.120388 0 0.00074556 -0.0602962 0 -0.0132544 -0.180073 0 -0.0132544 -0.180073 0.01 0.0025 -2.53992e-16 0.01 -0.00451182 -0.120388 0.01 0.00074556 -0.0602962 0.01 0.0025 -2.53992e-16 0 -0.00451182 -0.120388 0 0.00074556 -0.0602962 0 -0.0181784 -0.179205 0.01 -0.0132544 -0.180073 0.01 -0.0025 -2.52767e-16 0.01 -0.00947801 -0.119808 0.01 -0.00424598 -0.0600055 0.01 -0.0181784 0.179205 0.01 -0.00424598 0.0600055 0.01 -0.00947801 0.119808 0.01 -0.0132544 0.180073 0.01 0.0025 -2.53992e-16 0.01 0.00074556 0.0602962 0.01 -0.00451182 0.120388 0.01 -0.00451182 -0.120388 0.01 0.00074556 -0.0602962 0.01 -0.0181784 -0.179205 0 -0.0181784 -0.179205 0.01 -0.0025 -2.52767e-16 0.01 -0.00947801 -0.119808 0.01 -0.00424598 -0.0600055 0.01 -0.0025 -2.52767e-16 0 -0.00947801 -0.119808 0 -0.00424598 -0.0600055 0 -0.0025 -2.52767e-16 0 -0.0025 -2.52767e-16 0.01 -0.0181784 0.179205 0.01 -0.00424598 0.0600055 0.01 -0.00947801 0.119808 0.01 -0.0181784 0.179205 0 -0.00424598 0.0600055 0 -0.00947801 0.119808 0 -0.0181784 0.179205 0 -0.0132544 0.180073 0 -0.0132544 0.180073 0.01 -0.0181784 0.179205 0.01 0.0025 -2.53992e-16 0 0.0025 -2.53992e-16 0.01 -0.0132544 0.180073 0.01 0.00074556 0.0602962 0.01 -0.00451182 0.120388 0.01 -0.0132544 0.180073 0 0.00074556 0.0602962 0 -0.00451182 0.120388 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="248">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0181708 -0.179118 0 -0.0132468 -0.179986 0 -0.0132468 -0.179986 0.01 -0.0181708 -0.179118 0.01 -0.0181708 -0.179118 0 -0.0132468 -0.179986 0 -0.0025 -2.52645e-16 0 -0.00947463 -0.11975 0 -0.00424513 -0.0599764 0 -0.0181708 0.179118 0 -0.00424513 0.0599764 0 -0.00947463 0.11975 0 -0.0132468 0.179986 0 0.0025 -2.53869e-16 0 0.000746406 0.0602671 0 -0.00450844 0.12033 0 -0.00450844 -0.12033 0 0.000746406 -0.0602671 0 -0.0132468 -0.179986 0 -0.0132468 -0.179986 0.01 0.0025 -2.53869e-16 0.01 -0.00450844 -0.12033 0.01 0.000746406 -0.0602671 0.01 0.0025 -2.53869e-16 0 -0.00450844 -0.12033 0 0.000746406 -0.0602671 0 -0.0181708 -0.179118 0.01 -0.0132468 -0.179986 0.01 -0.0025 -2.52645e-16 0.01 -0.00947463 -0.11975 0.01 -0.00424513 -0.0599764 0.01 -0.0181708 0.179118 0.01 -0.00424513 0.0599764 0.01 -0.00947463 0.11975 0.01 -0.0132468 0.179986 0.01 0.0025 -2.53869e-16 0.01 0.000746406 0.0602671 0.01 -0.00450844 0.12033 0.01 -0.00450844 -0.12033 0.01 0.000746406 -0.0602671 0.01 -0.0181708 -0.179118 0 -0.0181708 -0.179118 0.01 -0.0025 -2.52645e-16 0.01 -0.00947463 -0.11975 0.01 -0.00424513 -0.0599764 0.01 -0.0025 -2.52645e-16 0 -0.00947463 -0.11975 0 -0.00424513 -0.0599764 0 -0.0025 -2.52645e-16 0 -0.0025 -2.52645e-16 0.01 -0.0181708 0.179118 0.01 -0.00424513 0.0599764 0.01 -0.00947463 0.11975 0.01 -0.0181708 0.179118 0 -0.00424513 0.0599764 0 -0.00947463 0.11975 0 -0.0181708 0.179118 0 -0.0132468 0.179986 0 -0.0132468 0.179986 0.01 -0.0181708 0.179118 0.01 0.0025 -2.53869e-16 0 0.0025 -2.53869e-16 0.01 -0.0132468 0.179986 0.01 0.000746406 0.0602671 0.01 -0.00450844 0.12033 0.01 -0.0132468 0.179986 0 0.000746406 0.0602671 0 -0.00450844 0.12033 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="249">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0183015 -0.180611 0 -0.0133774 -0.18148 0 -0.0133774 -0.18148 0.01 -0.0183015 -0.180611 0.01 -0.0183015 -0.180611 0 -0.0133774 -0.18148 0 -0.0025 -2.54751e-16 0 -0.00953278 -0.120748 0 -0.00425968 -0.0604764 0 -0.0183015 0.180611 0 -0.00425968 0.0604764 0 -0.00953278 0.120748 0 -0.0133774 0.18148 0 0.0025 -2.55976e-16 0 0.000731856 0.0607672 0 -0.00456659 0.121329 0 -0.00456659 -0.121329 0 0.000731856 -0.0607672 0 -0.0133774 -0.18148 0 -0.0133774 -0.18148 0.01 0.0025 -2.55976e-16 0.01 -0.00456659 -0.121329 0.01 0.000731856 -0.0607672 0.01 0.0025 -2.55976e-16 0 -0.00456659 -0.121329 0 0.000731856 -0.0607672 0 -0.0183015 -0.180611 0.01 -0.0133774 -0.18148 0.01 -0.0025 -2.54751e-16 0.01 -0.00953278 -0.120748 0.01 -0.00425968 -0.0604764 0.01 -0.0183015 0.180611 0.01 -0.00425968 0.0604764 0.01 -0.00953278 0.120748 0.01 -0.0133774 0.18148 0.01 0.0025 -2.55976e-16 0.01 0.000731856 0.0607672 0.01 -0.00456659 0.121329 0.01 -0.00456659 -0.121329 0.01 0.000731856 -0.0607672 0.01 -0.0183015 -0.180611 0 -0.0183015 -0.180611 0.01 -0.0025 -2.54751e-16 0.01 -0.00953278 -0.120748 0.01 -0.00425968 -0.0604764 0.01 -0.0025 -2.54751e-16 0 -0.00953278 -0.120748 0 -0.00425968 -0.0604764 0 -0.0025 -2.54751e-16 0 -0.0025 -2.54751e-16 0.01 -0.0183015 0.180611 0.01 -0.00425968 0.0604764 0.01 -0.00953278 0.120748 0.01 -0.0183015 0.180611 0 -0.00425968 0.0604764 0 -0.00953278 0.120748 0 -0.0183015 0.180611 0 -0.0133774 0.18148 0 -0.0133774 0.18148 0.01 -0.0183015 0.180611 0.01 0.0025 -2.55976e-16 0 0.0025 -2.55976e-16 0.01 -0.0133774 0.18148 0.01 0.000731856 0.0607672 0.01 -0.00456659 0.121329 0.01 -0.0133774 0.18148 0 0.000731856 0.0607672 0 -0.00456659 0.121329 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="250">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0182954 -0.180542 0 -0.0133713 -0.18141 0 -0.0133713 -0.18141 0.01 -0.0182954 -0.180542 0.01 -0.0182954 -0.180542 0 -0.0133713 -0.18141 0 -0.0025 -2.54653e-16 0 -0.00953008 -0.120702 0 -0.00425901 -0.0604532 0 -0.0182954 0.180542 0 -0.00425901 0.0604532 0 -0.00953008 0.120702 0 -0.0133713 0.18141 0 0.0025 -2.55878e-16 0 0.000732533 0.0607439 0 -0.00456389 0.121282 0 -0.00456389 -0.121282 0 0.000732533 -0.0607439 0 -0.0133713 -0.18141 0 -0.0133713 -0.18141 0.01 0.0025 -2.55878e-16 0.01 -0.00456389 -0.121282 0.01 0.000732533 -0.0607439 0.01 0.0025 -2.55878e-16 0 -0.00456389 -0.121282 0 0.000732533 -0.0607439 0 -0.0182954 -0.180542 0.01 -0.0133713 -0.18141 0.01 -0.0025 -2.54653e-16 0.01 -0.00953008 -0.120702 0.01 -0.00425901 -0.0604532 0.01 -0.0182954 0.180542 0.01 -0.00425901 0.0604532 0.01 -0.00953008 0.120702 0.01 -0.0133713 0.18141 0.01 0.0025 -2.55878e-16 0.01 0.000732533 0.0607439 0.01 -0.00456389 0.121282 0.01 -0.00456389 -0.121282 0.01 0.000732533 -0.0607439 0.01 -0.0182954 -0.180542 0 -0.0182954 -0.180542 0.01 -0.0025 -2.54653e-16 0.01 -0.00953008 -0.120702 0.01 -0.00425901 -0.0604532 0.01 -0.0025 -2.54653e-16 0 -0.00953008 -0.120702 0 -0.00425901 -0.0604532 0 -0.0025 -2.54653e-16 0 -0.0025 -2.54653e-16 0.01 -0.0182954 0.180542 0.01 -0.00425901 0.0604532 0.01 -0.00953008 0.120702 0.01 -0.0182954 0.180542 0 -0.00425901 0.0604532 0 -0.00953008 0.120702 0 -0.0182954 0.180542 0 -0.0133713 0.18141 0 -0.0133713 0.18141 0.01 -0.0182954 0.180542 0.01 0.0025 -2.55878e-16 0 0.0025 -2.55878e-16 0.01 -0.0133713 0.18141 0.01 0.000732533 0.0607439 0.01 -0.00456389 0.121282 0.01 -0.0133713 0.18141 0 0.000732533 0.0607439 0 -0.00456389 0.121282 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 8 7 16 17 8 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 30 29 38 39 30 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="251">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0184245 -0.182018 0 -0.0135005 -0.182886 0 -0.0135005 -0.182886 0.01 -0.0184245 -0.182018 0.01 -0.0184245 -0.182018 0 -0.0135005 -0.182886 0 -0.0025 -2.56735e-16 0 -0.00958755 -0.121689 0 -0.00427339 -0.0609474 0 -0.0184245 0.182018 0 -0.00427339 0.0609474 0 -0.00958755 0.121689 0 -0.0135005 0.182886 0 0.0025 -2.5796e-16 0 0.000718152 0.0612381 0 -0.00462136 0.122269 0 -0.00462136 -0.122269 0 0.000718152 -0.0612381 0 -0.0135005 -0.182886 0 -0.0135005 -0.182886 0.01 0.0025 -2.5796e-16 0.01 -0.00462136 -0.122269 0.01 0.000718152 -0.0612381 0.01 0.0025 -2.5796e-16 0 -0.00462136 -0.122269 0 0.000718152 -0.0612381 0 -0.0184245 -0.182018 0.01 -0.0135005 -0.182886 0.01 -0.0025 -2.56735e-16 0.01 -0.00958755 -0.121689 0.01 -0.00427339 -0.0609474 0.01 -0.0184245 0.182018 0.01 -0.00427339 0.0609474 0.01 -0.00958755 0.121689 0.01 -0.0135005 0.182886 0.01 0.0025 -2.5796e-16 0.01 0.000718152 0.0612381 0.01 -0.00462136 0.122269 0.01 -0.00462136 -0.122269 0.01 0.000718152 -0.0612381 0.01 -0.0184245 -0.182018 0 -0.0184245 -0.182018 0.01 -0.0025 -2.56735e-16 0.01 -0.00958755 -0.121689 0.01 -0.00427339 -0.0609474 0.01 -0.0025 -2.56735e-16 0 -0.00958755 -0.121689 0 -0.00427339 -0.0609474 0 -0.0025 -2.56735e-16 0 -0.0025 -2.56735e-16 0.01 -0.0184245 0.182018 0.01 -0.00427339 0.0609474 0.01 -0.00958755 0.121689 0.01 -0.0184245 0.182018 0 -0.00427339 0.0609474 0 -0.00958755 0.121689 0 -0.0184245 0.182018 0 -0.0135005 0.182886 0 -0.0135005 0.182886 0.01 -0.0184245 0.182018 0.01 0.0025 -2.5796e-16 0 0.0025 -2.5796e-16 0.01 -0.0135005 0.182886 0.01 0.000718152 0.0612381 0.01 -0.00462136 0.122269 0.01 -0.0135005 0.182886 0 0.000718152 0.0612381 0 -0.00462136 0.122269 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="252">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0184184 -0.181949 0 -0.0134944 -0.182817 0 -0.0134944 -0.182817 0.01 -0.0184184 -0.181949 0.01 -0.0184184 -0.181949 0 -0.0134944 -0.182817 0 -0.0025 -2.56637e-16 0 -0.00958485 -0.121642 0 -0.00427271 -0.0609242 0 -0.0184184 0.181949 0 -0.00427271 0.0609242 0 -0.00958485 0.121642 0 -0.0134944 0.182817 0 0.0025 -2.57862e-16 0 0.000718829 0.0612149 0 -0.00461866 0.122223 0 -0.00461866 -0.122223 0 0.000718829 -0.0612149 0 -0.0134944 -0.182817 0 -0.0134944 -0.182817 0.01 0.0025 -2.57862e-16 0.01 -0.00461866 -0.122223 0.01 0.000718829 -0.0612149 0.01 0.0025 -2.57862e-16 0 -0.00461866 -0.122223 0 0.000718829 -0.0612149 0 -0.0184184 -0.181949 0.01 -0.0134944 -0.182817 0.01 -0.0025 -2.56637e-16 0.01 -0.00958485 -0.121642 0.01 -0.00427271 -0.0609242 0.01 -0.0184184 0.181949 0.01 -0.00427271 0.0609242 0.01 -0.00958485 0.121642 0.01 -0.0134944 0.182817 0.01 0.0025 -2.57862e-16 0.01 0.000718829 0.0612149 0.01 -0.00461866 0.122223 0.01 -0.00461866 -0.122223 0.01 0.000718829 -0.0612149 0.01 -0.0184184 -0.181949 0 -0.0184184 -0.181949 0.01 -0.0025 -2.56637e-16 0.01 -0.00958485 -0.121642 0.01 -0.00427271 -0.0609242 0.01 -0.0025 -2.56637e-16 0 -0.00958485 -0.121642 0 -0.00427271 -0.0609242 0 -0.0025 -2.56637e-16 0 -0.0025 -2.56637e-16 0.01 -0.0184184 0.181949 0.01 -0.00427271 0.0609242 0.01 -0.00958485 0.121642 0.01 -0.0184184 0.181949 0 -0.00427271 0.0609242 0 -0.00958485 0.121642 0 -0.0184184 0.181949 0 -0.0134944 0.182817 0 -0.0134944 0.182817 0.01 -0.0184184 0.181949 0.01 0.0025 -2.57862e-16 0 0.0025 -2.57862e-16 0.01 -0.0134944 0.182817 0.01 0.000718829 0.0612149 0.01 -0.00461866 0.122223 0.01 -0.0134944 0.182817 0 0.000718829 0.0612149 0 -0.00461866 0.122223 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="235">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0174385 -0.170748 0 -0.0125145 -0.171616 0 -0.0125145 -0.171616 0.01 -0.0174385 -0.170748 0.01 -0.0174385 -0.170748 0 -0.0125145 -0.171616 0 -0.0025 -2.40839e-16 0 -0.00914872 -0.114154 0 -0.00416359 -0.0571738 0 -0.0174385 0.170748 0 -0.00416359 0.0571738 0 -0.00914872 0.114154 0 -0.0125145 0.171616 0 0.0025 -2.42064e-16 0 0.000827953 0.0574645 0 -0.00418253 0.114735 0 -0.00418253 -0.114735 0 0.000827953 -0.0574645 0 -0.0125145 -0.171616 0 -0.0125145 -0.171616 0.01 0.0025 -2.42064e-16 0.01 -0.00418253 -0.114735 0.01 0.000827953 -0.0574645 0.01 0.0025 -2.42064e-16 0 -0.00418253 -0.114735 0 0.000827953 -0.0574645 0 -0.0174385 -0.170748 0.01 -0.0125145 -0.171616 0.01 -0.0025 -2.40839e-16 0.01 -0.00914872 -0.114154 0.01 -0.00416359 -0.0571738 0.01 -0.0174385 0.170748 0.01 -0.00416359 0.0571738 0.01 -0.00914872 0.114154 0.01 -0.0125145 0.171616 0.01 0.0025 -2.42064e-16 0.01 0.000827953 0.0574645 0.01 -0.00418253 0.114735 0.01 -0.00418253 -0.114735 0.01 0.000827953 -0.0574645 0.01 -0.0174385 -0.170748 0 -0.0174385 -0.170748 0.01 -0.0025 -2.40839e-16 0.01 -0.00914872 -0.114154 0.01 -0.00416359 -0.0571738 0.01 -0.0025 -2.40839e-16 0 -0.00914872 -0.114154 0 -0.00416359 -0.0571738 0 -0.0025 -2.40839e-16 0 -0.0025 -2.40839e-16 0.01 -0.0174385 0.170748 0.01 -0.00416359 0.0571738 0.01 -0.00914872 0.114154 0.01 -0.0174385 0.170748 0 -0.00416359 0.0571738 0 -0.00914872 0.114154 0 -0.0174385 0.170748 0 -0.0125145 0.171616 0 -0.0125145 0.171616 0.01 -0.0174385 0.170748 0.01 0.0025 -2.42064e-16 0 0.0025 -2.42064e-16 0.01 -0.0125145 0.171616 0.01 0.000827953 0.0574645 0.01 -0.00418253 0.114735 0.01 -0.0125145 0.171616 0 0.000827953 0.0574645 0 -0.00418253 0.114735 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 9 11 15 12 9 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="236">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0174325 -0.170679 0 -0.0125084 -0.171547 0 -0.0125084 -0.171547 0.01 -0.0174325 -0.170679 0.01 -0.0174325 -0.170679 0 -0.0125084 -0.171547 0 -0.0025 -2.40741e-16 0 -0.00914602 -0.114108 0 -0.00416291 -0.0571506 0 -0.0174325 0.170679 0 -0.00416291 0.0571506 0 -0.00914602 0.114108 0 -0.0125084 0.171547 0 0.0025 -2.41966e-16 0 0.00082863 0.0574413 0 -0.00417983 0.114688 0 -0.00417983 -0.114688 0 0.00082863 -0.0574413 0 -0.0125084 -0.171547 0 -0.0125084 -0.171547 0.01 0.0025 -2.41966e-16 0.01 -0.00417983 -0.114688 0.01 0.00082863 -0.0574413 0.01 0.0025 -2.41966e-16 0 -0.00417983 -0.114688 0 0.00082863 -0.0574413 0 -0.0174325 -0.170679 0.01 -0.0125084 -0.171547 0.01 -0.0025 -2.40741e-16 0.01 -0.00914602 -0.114108 0.01 -0.00416291 -0.0571506 0.01 -0.0174325 0.170679 0.01 -0.00416291 0.0571506 0.01 -0.00914602 0.114108 0.01 -0.0125084 0.171547 0.01 0.0025 -2.41966e-16 0.01 0.00082863 0.0574413 0.01 -0.00417983 0.114688 0.01 -0.00417983 -0.114688 0.01 0.00082863 -0.0574413 0.01 -0.0174325 -0.170679 0 -0.0174325 -0.170679 0.01 -0.0025 -2.40741e-16 0.01 -0.00914602 -0.114108 0.01 -0.00416291 -0.0571506 0.01 -0.0025 -2.40741e-16 0 -0.00914602 -0.114108 0 -0.00416291 -0.0571506 0 -0.0025 -2.40741e-16 0 -0.0025 -2.40741e-16 0.01 -0.0174325 0.170679 0.01 -0.00416291 0.0571506 0.01 -0.00914602 0.114108 0.01 -0.0174325 0.170679 0 -0.00416291 0.0571506 0 -0.00914602 0.114108 0 -0.0174325 0.170679 0 -0.0125084 0.171547 0 -0.0125084 0.171547 0.01 -0.0174325 0.170679 0.01 0.0025 -2.41966e-16 0 0.0025 -2.41966e-16 0.01 -0.0125084 0.171547 0.01 0.00082863 0.0574413 0.01 -0.00417983 0.114688 0.01 -0.0125084 0.171547 0 0.00082863 0.0574413 0 -0.00417983 0.114688 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="237">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0175616 -0.172155 0 -0.0126376 -0.173023 0 -0.0126376 -0.173023 0.01 -0.0175616 -0.172155 0.01 -0.0175616 -0.172155 0 -0.0126376 -0.173023 0 -0.0025 -2.42823e-16 0 -0.00920349 -0.115095 0 -0.00417729 -0.0576448 0 -0.0175616 0.172155 0 -0.00417729 0.0576448 0 -0.00920349 0.115095 0 -0.0126376 0.173023 0 0.0025 -2.44048e-16 0 0.000814249 0.0579355 0 -0.0042373 0.115675 0 -0.0042373 -0.115675 0 0.000814249 -0.0579355 0 -0.0126376 -0.173023 0 -0.0126376 -0.173023 0.01 0.0025 -2.44048e-16 0.01 -0.0042373 -0.115675 0.01 0.000814249 -0.0579355 0.01 0.0025 -2.44048e-16 0 -0.0042373 -0.115675 0 0.000814249 -0.0579355 0 -0.0175616 -0.172155 0.01 -0.0126376 -0.173023 0.01 -0.0025 -2.42823e-16 0.01 -0.00920349 -0.115095 0.01 -0.00417729 -0.0576448 0.01 -0.0175616 0.172155 0.01 -0.00417729 0.0576448 0.01 -0.00920349 0.115095 0.01 -0.0126376 0.173023 0.01 0.0025 -2.44048e-16 0.01 0.000814249 0.0579355 0.01 -0.0042373 0.115675 0.01 -0.0042373 -0.115675 0.01 0.000814249 -0.0579355 0.01 -0.0175616 -0.172155 0 -0.0175616 -0.172155 0.01 -0.0025 -2.42823e-16 0.01 -0.00920349 -0.115095 0.01 -0.00417729 -0.0576448 0.01 -0.0025 -2.42823e-16 0 -0.00920349 -0.115095 0 -0.00417729 -0.0576448 0 -0.0025 -2.42823e-16 0 -0.0025 -2.42823e-16 0.01 -0.0175616 0.172155 0.01 -0.00417729 0.0576448 0.01 -0.00920349 0.115095 0.01 -0.0175616 0.172155 0 -0.00417729 0.0576448 0 -0.00920349 0.115095 0 -0.0175616 0.172155 0 -0.0126376 0.173023 0 -0.0126376 0.173023 0.01 -0.0175616 0.172155 0.01 0.0025 -2.44048e-16 0 0.0025 -2.44048e-16 0.01 -0.0126376 0.173023 0.01 0.000814249 0.0579355 0.01 -0.0042373 0.115675 0.01 -0.0126376 0.173023 0 0.000814249 0.0579355 0 -0.0042373 0.115675 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 31 33 37 34 31 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="238">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0175555 -0.172085 0 -0.0126315 -0.172954 0 -0.0126315 -0.172954 0.01 -0.0175555 -0.172085 0.01 -0.0175555 -0.172085 0 -0.0126315 -0.172954 0 -0.0025 -2.42725e-16 0 -0.00920079 -0.115048 0 -0.00417662 -0.0576215 0 -0.0175555 0.172085 0 -0.00417662 0.0576215 0 -0.00920079 0.115048 0 -0.0126315 0.172954 0 0.0025 -2.4395e-16 0 0.000814926 0.0579122 0 -0.0042346 0.115629 0 -0.0042346 -0.115629 0 0.000814926 -0.0579122 0 -0.0126315 -0.172954 0 -0.0126315 -0.172954 0.01 0.0025 -2.4395e-16 0.01 -0.0042346 -0.115629 0.01 0.000814926 -0.0579122 0.01 0.0025 -2.4395e-16 0 -0.0042346 -0.115629 0 0.000814926 -0.0579122 0 -0.0175555 -0.172085 0.01 -0.0126315 -0.172954 0.01 -0.0025 -2.42725e-16 0.01 -0.00920079 -0.115048 0.01 -0.00417662 -0.0576215 0.01 -0.0175555 0.172085 0.01 -0.00417662 0.0576215 0.01 -0.00920079 0.115048 0.01 -0.0126315 0.172954 0.01 0.0025 -2.4395e-16 0.01 0.000814926 0.0579122 0.01 -0.0042346 0.115629 0.01 -0.0042346 -0.115629 0.01 0.000814926 -0.0579122 0.01 -0.0175555 -0.172085 0 -0.0175555 -0.172085 0.01 -0.0025 -2.42725e-16 0.01 -0.00920079 -0.115048 0.01 -0.00417662 -0.0576215 0.01 -0.0025 -2.42725e-16 0 -0.00920079 -0.115048 0 -0.00417662 -0.0576215 0 -0.0025 -2.42725e-16 0 -0.0025 -2.42725e-16 0.01 -0.0175555 0.172085 0.01 -0.00417662 0.0576215 0.01 -0.00920079 0.115048 0.01 -0.0175555 0.172085 0 -0.00417662 0.0576215 0 -0.00920079 0.115048 0 -0.0175555 0.172085 0 -0.0126315 0.172954 0 -0.0126315 0.172954 0.01 -0.0175555 0.172085 0.01 0.0025 -2.4395e-16 0 0.0025 -2.4395e-16 0.01 -0.0126315 0.172954 0.01 0.000814926 0.0579122 0.01 -0.0042346 0.115629 0.01 -0.0126315 0.172954 0 0.000814926 0.0579122 0 -0.0042346 0.115629 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="239">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0176862 -0.173579 0 -0.0127621 -0.174447 0 -0.0127621 -0.174447 0.01 -0.0176862 -0.173579 0.01 -0.0176862 -0.173579 0 -0.0127621 -0.174447 0 -0.0025 -2.44831e-16 0 -0.00925894 -0.116046 0 -0.00419116 -0.0581216 0 -0.0176862 0.173579 0 -0.00419116 0.0581216 0 -0.00925894 0.116046 0 -0.0127621 0.174447 0 0.0025 -2.46056e-16 0 0.000800376 0.0584123 0 -0.00429275 0.116627 0 -0.00429275 -0.116627 0 0.000800376 -0.0584123 0 -0.0127621 -0.174447 0 -0.0127621 -0.174447 0.01 0.0025 -2.46056e-16 0.01 -0.00429275 -0.116627 0.01 0.000800376 -0.0584123 0.01 0.0025 -2.46056e-16 0 -0.00429275 -0.116627 0 0.000800376 -0.0584123 0 -0.0176862 -0.173579 0.01 -0.0127621 -0.174447 0.01 -0.0025 -2.44831e-16 0.01 -0.00925894 -0.116046 0.01 -0.00419116 -0.0581216 0.01 -0.0176862 0.173579 0.01 -0.00419116 0.0581216 0.01 -0.00925894 0.116046 0.01 -0.0127621 0.174447 0.01 0.0025 -2.46056e-16 0.01 0.000800376 0.0584123 0.01 -0.00429275 0.116627 0.01 -0.00429275 -0.116627 0.01 0.000800376 -0.0584123 0.01 -0.0176862 -0.173579 0 -0.0176862 -0.173579 0.01 -0.0025 -2.44831e-16 0.01 -0.00925894 -0.116046 0.01 -0.00419116 -0.0581216 0.01 -0.0025 -2.44831e-16 0 -0.00925894 -0.116046 0 -0.00419116 -0.0581216 0 -0.0025 -2.44831e-16 0 -0.0025 -2.44831e-16 0.01 -0.0176862 0.173579 0.01 -0.00419116 0.0581216 0.01 -0.00925894 0.116046 0.01 -0.0176862 0.173579 0 -0.00419116 0.0581216 0 -0.00925894 0.116046 0 -0.0176862 0.173579 0 -0.0127621 0.174447 0 -0.0127621 0.174447 0.01 -0.0176862 0.173579 0.01 0.0025 -2.46056e-16 0 0.0025 -2.46056e-16 0.01 -0.0127621 0.174447 0.01 0.000800376 0.0584123 0.01 -0.00429275 0.116627 0.01 -0.0127621 0.174447 0 0.000800376 0.0584123 0 -0.00429275 0.116627 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 33 32 36 37 33 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="240">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0176786 -0.173492 0 -0.0127545 -0.17436 0 -0.0127545 -0.17436 0.01 -0.0176786 -0.173492 0.01 -0.0176786 -0.173492 0 -0.0127545 -0.17436 0 -0.0025 -2.44709e-16 0 -0.00925556 -0.115988 0 -0.00419032 -0.0580925 0 -0.0176786 0.173492 0 -0.00419032 0.0580925 0 -0.00925556 0.115988 0 -0.0127545 0.17436 0 0.0025 -2.45934e-16 0 0.000801222 0.0583832 0 -0.00428936 0.116569 0 -0.00428936 -0.116569 0 0.000801222 -0.0583832 0 -0.0127545 -0.17436 0 -0.0127545 -0.17436 0.01 0.0025 -2.45934e-16 0.01 -0.00428936 -0.116569 0.01 0.000801222 -0.0583832 0.01 0.0025 -2.45934e-16 0 -0.00428936 -0.116569 0 0.000801222 -0.0583832 0 -0.0176786 -0.173492 0.01 -0.0127545 -0.17436 0.01 -0.0025 -2.44709e-16 0.01 -0.00925556 -0.115988 0.01 -0.00419032 -0.0580925 0.01 -0.0176786 0.173492 0.01 -0.00419032 0.0580925 0.01 -0.00925556 0.115988 0.01 -0.0127545 0.17436 0.01 0.0025 -2.45934e-16 0.01 0.000801222 0.0583832 0.01 -0.00428936 0.116569 0.01 -0.00428936 -0.116569 0.01 0.000801222 -0.0583832 0.01 -0.0176786 -0.173492 0 -0.0176786 -0.173492 0.01 -0.0025 -2.44709e-16 0.01 -0.00925556 -0.115988 0.01 -0.00419032 -0.0580925 0.01 -0.0025 -2.44709e-16 0 -0.00925556 -0.115988 0 -0.00419032 -0.0580925 0 -0.0025 -2.44709e-16 0 -0.0025 -2.44709e-16 0.01 -0.0176786 0.173492 0.01 -0.00419032 0.0580925 0.01 -0.00925556 0.115988 0.01 -0.0176786 0.173492 0 -0.00419032 0.0580925 0 -0.00925556 0.115988 0 -0.0176786 0.173492 0 -0.0127545 0.17436 0 -0.0127545 0.17436 0.01 -0.0176786 0.173492 0.01 0.0025 -2.45934e-16 0 0.0025 -2.45934e-16 0.01 -0.0127545 0.17436 0.01 0.000801222 0.0583832 0.01 -0.00428936 0.116569 0.01 -0.0127545 0.17436 0 0.000801222 0.0583832 0 -0.00428936 0.116569 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 11 10 14 15 11 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="241">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0178092 -0.174985 0 -0.0128852 -0.175854 0 -0.0128852 -0.175854 0.01 -0.0178092 -0.174985 0.01 -0.0178092 -0.174985 0 -0.0128852 -0.175854 0 -0.0025 -2.46815e-16 0 -0.00931371 -0.116987 0 -0.00420487 -0.0585925 0 -0.0178092 0.174985 0 -0.00420487 0.0585925 0 -0.00931371 0.116987 0 -0.0128852 0.175854 0 0.0025 -2.4804e-16 0 0.000786672 0.0588833 0 -0.00434752 0.117567 0 -0.00434752 -0.117567 0 0.000786672 -0.0588833 0 -0.0128852 -0.175854 0 -0.0128852 -0.175854 0.01 0.0025 -2.4804e-16 0.01 -0.00434752 -0.117567 0.01 0.000786672 -0.0588833 0.01 0.0025 -2.4804e-16 0 -0.00434752 -0.117567 0 0.000786672 -0.0588833 0 -0.0178092 -0.174985 0.01 -0.0128852 -0.175854 0.01 -0.0025 -2.46815e-16 0.01 -0.00931371 -0.116987 0.01 -0.00420487 -0.0585925 0.01 -0.0178092 0.174985 0.01 -0.00420487 0.0585925 0.01 -0.00931371 0.116987 0.01 -0.0128852 0.175854 0.01 0.0025 -2.4804e-16 0.01 0.000786672 0.0588833 0.01 -0.00434752 0.117567 0.01 -0.00434752 -0.117567 0.01 0.000786672 -0.0588833 0.01 -0.0178092 -0.174985 0 -0.0178092 -0.174985 0.01 -0.0025 -2.46815e-16 0.01 -0.00931371 -0.116987 0.01 -0.00420487 -0.0585925 0.01 -0.0025 -2.46815e-16 0 -0.00931371 -0.116987 0 -0.00420487 -0.0585925 0 -0.0025 -2.46815e-16 0 -0.0025 -2.46815e-16 0.01 -0.0178092 0.174985 0.01 -0.00420487 0.0585925 0.01 -0.00931371 0.116987 0.01 -0.0178092 0.174985 0 -0.00420487 0.0585925 0 -0.00931371 0.116987 0 -0.0178092 0.174985 0 -0.0128852 0.175854 0 -0.0128852 0.175854 0.01 -0.0178092 0.174985 0.01 0.0025 -2.4804e-16 0 0.0025 -2.4804e-16 0.01 -0.0128852 0.175854 0.01 0.000786672 0.0588833 0.01 -0.00434752 0.117567 0.01 -0.0128852 0.175854 0 0.000786672 0.0588833 0 -0.00434752 0.117567 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 16 4 5 16 7 4 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 38 26 27 38 29 26 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="68" NumberOfPolys="52" name="242">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32">-0.0178016 -0.174898 0 -0.0128776 -0.175767 0 -0.0128776 -0.175767 0.01 -0.0178016 -0.174898 0.01 -0.0178016 -0.174898 0 -0.0128776 -0.175767 0 -0.0025 -2.46693e-16 0 -0.00931033 -0.116929 0 -0.00420402 -0.0585635 0 -0.0178016 0.174898 0 -0.00420402 0.0585635 0 -0.00931033 0.116929 0 -0.0128776 0.175767 0 0.0025 -2.47917e-16 0 0.000787518 0.0588542 0 -0.00434413 0.117509 0 -0.00434413 -0.117509 0 0.000787518 -0.0588542 0 -0.0128776 -0.175767 0 -0.0128776 -0.175767 0.01 0.0025 -2.47917e-16 0.01 -0.00434413 -0.117509 0.01 0.000787518 -0.0588542 0.01 0.0025 -2.47917e-16 0 -0.00434413 -0.117509 0 0.000787518 -0.0588542 0 -0.0178016 -0.174898 0.01 -0.0128776 -0.175767 0.01 -0.0025 -2.46693e-16 0.01 -0.00931033 -0.116929 0.01 -0.00420402 -0.0585635 0.01 -0.0178016 0.174898 0.01 -0.00420402 0.0585635 0.01 -0.00931033 0.116929 0.01 -0.0128776 0.175767 0.01 0.0025 -2.47917e-16 0.01 0.000787518 0.0588542 0.01 -0.00434413 0.117509 0.01 -0.00434413 -0.117509 0.01 0.000787518 -0.0588542 0.01 -0.0178016 -0.174898 0 -0.0178016 -0.174898 0.01 -0.0025 -2.46693e-16 0.01 -0.00931033 -0.116929 0.01 -0.00420402 -0.0585635 0.01 -0.0025 -2.46693e-16 0 -0.00931033 -0.116929 0 -0.00420402 -0.0585635 0 -0.0025 -2.46693e-16 0 -0.0025 -2.46693e-16 0.01 -0.0178016 0.174898 0.01 -0.00420402 0.0585635 0.01 -0.00931033 0.116929 0.01 -0.0178016 0.174898 0 -0.00420402 0.0585635 0 -0.00931033 0.116929 0 -0.0178016 0.174898 0 -0.0128776 0.175767 0 -0.0128776 0.175767 0.01 -0.0178016 0.174898 0.01 0.0025 -2.47917e-16 0 0.0025 -2.47917e-16 0.01 -0.0128776 0.175767 0.01 0.000787518 0.0588542 0.01 -0.00434413 0.117509 0.01 -0.0128776 0.175767 0 0.000787518 0.0588542 0 -0.00434413 0.117509 0 </DataArray>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32">0 3 2 1 0 2 7 4 5 16 7 5 17 8 7 17 7 16 6 8 17 13 6 17 10 6 13 14 10 13 15 11 10 15 10 14 12 9 11 12 11 15 21 19 18 21 18 24 22 24 25 22 21 24 20 25 23 20 22 25 29 26 27 38 29 27 39 30 29 39 29 38 28 30 39 35 28 39 32 28 35 36 32 35 37 33 32 37 32 36 34 31 33 34 33 37 43 41 40 43 40 46 44 46 47 44 43 46 42 47 45 42 44 47 51 49 48 51 48 54 52 54 55 52 51 54 50 55 53 50 52 55 56 59 58 57 56 58 63 61 60 63 60 66 64 66 67 64 63 66 62 67 65 62 64 67 </DataArray>
+				<DataArray Name="offsets" format="ascii" type="Int32">3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 </DataArray>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="0" NumberOfPolys="0" name="1">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32"/>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32"/>
+				<DataArray Name="offsets" format="ascii" type="Int32"/>
+			</Polys>
+		</Piece>
+		<Piece NumberOfPoints="0" NumberOfPolys="0" name="0">
+			<Points>
+				<DataArray NumberOfComponents="3" format="ascii" type="Float32"/>
+			</Points>
+			<Polys>
+				<DataArray Name="connectivity" format="ascii" type="Int32"/>
+				<DataArray Name="offsets" format="ascii" type="Int32"/>
+			</Polys>
+		</Piece>
+	</PolyData>
+</VTKFile>
diff --git a/Test/AutoTestData/UsageData/NaF_DISF.cdl b/Test/AutoTestData/UsageData/NaF_DISF.cdl
new file mode 100644
index 0000000000000000000000000000000000000000..a80f2d1247ea74de31749a65c5eb9b8a4b72ed61
--- /dev/null
+++ b/Test/AutoTestData/UsageData/NaF_DISF.cdl
@@ -0,0 +1,298 @@
+netcdf NaF_DISF {
+dimensions:
+	NQVALUES = 3 ;
+	NTIMES = 20 ;
+	NOCTANS = 8 ;
+	OCTANNAME = 8 ;
+	NFREQUENCIES = 20 ;
+variables:
+	double q(NQVALUES) ;
+		q:units = "nm^-1" ;
+	double time(NTIMES) ;
+		time:units = "ps" ;
+	char octan(NOCTANS, OCTANNAME) ;
+		octan:units = "unitless" ;
+	int qvectors_statistics(NQVALUES, NOCTANS) ;
+	double Fqt-Na(NQVALUES, NTIMES) ;
+		Fqt-Na:units = "unitless" ;
+	double Fqt-total(NQVALUES, NTIMES) ;
+		Fqt-total:units = "unitless" ;
+	double Fqt-F(NQVALUES, NTIMES) ;
+		Fqt-F:units = "unitless" ;
+	double frequency(NFREQUENCIES) ;
+		frequency:units = "THz" ;
+	double angular_frequency(NFREQUENCIES) ;
+		angular_frequency:units = "rad ps-1" ;
+	double time_resolution(NFREQUENCIES) ;
+		time_resolution:units = "unitless" ;
+	double frequency_resolution(NFREQUENCIES) ;
+		frequency_resolution:units = "unitless" ;
+	double Sqw-Na(NQVALUES, NFREQUENCIES) ;
+		Sqw-Na:units = "unitless" ;
+	double Sqw-total(NQVALUES, NFREQUENCIES) ;
+		Sqw-total:units = "unitless" ;
+	double Sqw-F(NQVALUES, NFREQUENCIES) ;
+		Sqw-F:units = "unitless" ;
+
+// global attributes:
+		:title = "DynamicIncoherentStructureFactor_serial" ;
+		:jobinfo = "##########################################################################################\n",
+			"Job information for DynamicIncoherentStructureFactor_serial analysis.\n",
+			"##########################################################################################\n",
+			"\n",
+			"Job launched on: Mon Oct 20 17:38:50 2014\n",
+			"\n",
+			"General informations\n",
+			"--------------------\n",
+			"User: sm37\n",
+			"OS: Linux-2.6.32-358.23.2.el6.x86_64\n",
+			"Processor: x86_64\n",
+			"nMOLDYN version: 3.0.8\n",
+			"Estimate run: no\n",
+			"\n",
+			"Parameters\n",
+			"----------\n",
+			"subset = all\n",
+			"timeinfo = 1:2000:100\n",
+			"trajectory = /home/sm37/Projects/NaF-MD/NVT-300K/NPT-1300K/14ps/nMoldyn/NaF.nc\n",
+			"qvectorsdirection = no\n",
+			"pyroserver = monoprocessor\n",
+			"qshellvalues = 0.0:10.0:1.0\n",
+			"weights = incoherent\n",
+			"deuteration = no\n",
+			"qshellwidth = 1.0\n",
+			"output = /home/sm37/Projects/NaF-MD/NVT-300K/NPT-1300K/14ps/nMoldyn/NaF_DISF.nc\n",
+			"qvectorsgenerator = 3D isotropic\n",
+			"resolution = 0.35\n",
+			"qvectorspershell = 500\n",
+			"\n",
+			"Job status\n",
+			"----------\n",
+			"\n",
+			"Output file written on: Mon Oct 20 17:38:50 2014\n",
+			"\n",
+			"" ;
+data:
+
+ q = 6, 8, 10 ;
+
+ time = 0, 0.20000000298023224, 0.40000000596046448, 0.60000000894069672, 
+    0.80000001192092896, 1.0000000149011612, 1.2000000178813934, 
+    1.4000000208616257, 1.6000000238418579, 1.8000000268220901, 
+    2.0000000298023224, 2.2000000327825546, 2.4000000357627869, 
+    2.6000000387430191, 2.8000000417232513, 3.0000000447034836, 
+    3.2000000476837158, 3.4000000506639481, 3.6000000536441803, 
+    3.8000000566244125 ;
+
+ octan =
+  // octan(0, 0-7)
+    "X+.Y+.Z+",
+  // octan(1, 0-7)
+    "X+.Y+.Z-",
+  // octan(2, 0-7)
+    "X+.Y-.Z+",
+  // octan(3, 0-7)
+    "X+.Y-.Z-",
+  // octan(4, 0-7)
+    "X-.Y+.Z+",
+  // octan(5, 0-7)
+    "X-.Y+.Z-",
+  // octan(6, 0-7)
+    "X-.Y-.Z+",
+  // octan(7, 0-7)
+    "X-.Y-.Z-" ;
+
+ qvectors_statistics =
+  // qvectors_statistics(0, 0-7)
+    0, 0, 0, 1, 0, 1, 1, 3,
+  // qvectors_statistics(1, 0-7)
+    0, 1, 1, 2, 1, 2, 2, 3,
+  // qvectors_statistics(2, 0-7)
+    1, 1, 1, 1, 1, 1, 1, 1 ;
+
+ Fqt-Na =
+  // Fqt-Na(0, 0-19)
+    1, 0.92811472380740201, 0.87213949738914276, 0.8212088227095754, 
+    0.77783275406692887, 0.73874780735937773, 0.70916382866599792, 
+    0.67897582765926445, 0.65478712865331135, 0.62709585563725945, 
+    0.59626785490478906, 0.57013455260229651, 0.53121351982526122, 
+    0.49980069522810933, 0.47496145484366775, 0.43954349090802203, 
+    0.40648098307815206, 0.38301238199286936, 0.35496595488880472, 
+    0.34597658430240363,
+  // Fqt-Na(1, 0-19)
+    1, 0.86210383248952782, 0.76313169241099388, 0.67847158077232794, 
+    0.61283180002178494, 0.55638829370907739, 0.51065066292133254, 
+    0.46692436461988313, 0.43127395201067137, 0.3969419360975785, 
+    0.35358958819074782, 0.3129987177785401, 0.26337021545629369, 
+    0.22880455234767227, 0.20607403447362443, 0.16802996481740126, 
+    0.14017792225332162, 0.12689685437019746, 0.10351771119519099, 
+    0.097069411905318481,
+  // Fqt-Na(2, 0-19)
+    1, 0.8014225869948256, 0.66954819425120271, 0.56468949882556729, 
+    0.49243836152821624, 0.42977017364442821, 0.3778468477360955, 
+    0.32713622642602125, 0.28800249113594395, 0.25586046573098115, 
+    0.21389129288802194, 0.16930409260597246, 0.11657178723170304, 
+    0.085853543298113899, 0.07280155905217181, 0.034439424623498902, 
+    0.023615475804453209, 0.049772846283147411, 0.039598969122690703, 
+    0.067676950279804193 ;
+
+ Fqt-total =
+  // Fqt-total(0, 0-19)
+    0.99999999999999956, 0.92811169481436484, 0.87213269337417976, 
+    0.82120025646685679, 0.7778222617959375, 0.73873188070897589, 
+    0.70913949648239694, 0.67894501662638862, 0.65474777592314926, 
+    0.6270496039121346, 0.59622064350233239, 0.57008342990997296, 
+    0.53115886859825467, 0.49973763830696827, 0.47489214489481052, 
+    0.43947931817352115, 0.40642335663781431, 0.38295336010359488, 
+    0.35490898932236203, 0.34591580236687464,
+  // Fqt-total(1, 0-19)
+    0.99999999999999956, 0.8620983996127024, 0.7631210287479927, 
+    0.67845950463752924, 0.61281769127860797, 0.55636702069777477, 
+    0.51062333492213152, 0.46689108076948477, 0.43123409355993553, 
+    0.39689330061213451, 0.35354001976499044, 0.31295032980668858, 
+    0.26332487386721648, 0.22875417427115974, 0.20601527704114542, 
+    0.16798222754636538, 0.14013743464240322, 0.12686271473703231, 
+    0.10350186153380991, 0.097051061116970552,
+  // Fqt-total(2, 0-19)
+    0.99999999999999956, 0.80141534253317759, 0.6695361087653704, 
+    0.56467737831195997, 0.49242377794911263, 0.4297494183815041, 
+    0.37782540065028969, 0.32711684687927917, 0.28798277235021519, 
+    0.25583411551987134, 0.21386535233532089, 0.16928428412736016, 
+    0.11656510724880031, 0.085838713203058872, 0.072787279831739743, 
+    0.034439663590170803, 0.023620529521296924, 0.049765967548664865, 
+    0.039602880937227893, 0.067653590727241988 ;
+
+ Fqt-F =
+  // Fqt-F(0, 0-19)
+    1, 0.92197798390139651, 0.85835456304418301, 0.80385361492385599, 
+    0.75657541299183562, 0.70648041357393832, 0.65986682458124679, 
+    0.61655267491441967, 0.5750584971678957, 0.5333898603261582, 
+    0.50061755331513236, 0.46655997772479996, 0.42049013366379256, 
+    0.37204737271232396, 0.3345394981465839, 0.30952953052014609, 
+    0.28972981469429532, 0.26343403405684518, 0.23955371701914724, 
+    0.22283238264675703,
+  // Fqt-F(1, 0-19)
+    1, 0.85109682401740372, 0.74152711112315306, 0.65400533161634433, 
+    0.58424748628195844, 0.51328917271447538, 0.45528413641709781, 
+    0.39949128356306396, 0.35052073064031702, 0.29840644236895664, 
+    0.25316395738288722, 0.21496468658929466, 0.17150815578147074, 
+    0.12673856910618003, 0.087031476006217925, 0.07131425348346361, 
+    0.058150022350094935, 0.05772995742368324, 0.071406297165713423, 
+    0.059890714629705064,
+  // Fqt-F(2, 0-19)
+    1, 0.78674530766400341, 0.64506299990084637, 0.54013333820298204, 
+    0.46289203019897457, 0.38772001086688701, 0.33439505179711909, 
+    0.28787326463944091, 0.24805223116079805, 0.20247493790383261, 
+    0.16133573299884807, 0.12917211484818697, 0.10303814184071802, 
+    0.055807770649816436, 0.043871858392440406, 0.034923571101879387, 
+    0.033854306152642934, 0.035836530190509253, 0.047524305392726764, 
+    0.02035049668345609 ;
+
+ frequency = 0, 0.12499999813735488, 0.24999999627470976, 
+    0.37499999441206461, 0.49999999254941951, 0.62499999068677436, 
+    0.74999998882412922, 0.87499998696148418, 0.99999998509883903, 
+    1.1249999832361939, 1.2499999813735487, 1.3749999795109036, 
+    1.4999999776482584, 1.6249999757856135, 1.7499999739229684, 
+    1.8749999720603232, 1.9999999701976781, 2.1249999683350329, 
+    2.2499999664723878, 2.3749999646097426 ;
+
+ angular_frequency = 0, 0.78539815169410387, 1.5707963033882077, 
+    2.3561944550823113, 3.1415926067764155, 3.9269907584705188, 
+    4.7123889101646226, 5.4977870618587268, 6.283185213552831, 
+    7.0685833652469343, 7.8539815169410376, 8.6393796686351418, 
+    9.4247778203292452, 10.21017597202335, 10.995574123717454, 
+    11.780972275411557, 12.566370427105662, 13.351768578799765, 
+    14.137166730493869, 14.922564882187972 ;
+
+ time_resolution = 1, 0.99898071091997054, 0.99592907314637102, 
+    0.99086371166862253, 0.98381545767196288, 0.97482703598580567, 
+    0.96395263374043882, 0.9512573563244705, 0.93681657828441633, 
+    0.92071519821891412, 0.90304680796896908, 0.88391278747161739, 
+    0.86342133751069039, 0.84168646325244623, 0.81882692188773121, 
+    0.7949651479125952, 0.7702261695670839, 0.74473652972284232, 
+    0.7186232240740027, 0.69201266885627 ;
+
+ frequency_resolution = 1, 0.0023609648579433649, 3.1071204637868238e-11, 
+    2.279322120971843e-24, 9.3203530845767308e-43, 2.1244086960943744e-66, 
+    2.6991239046350686e-95, 1.9115542075339542e-129, 7.5462199679007314e-169, 
+    1.6605476732214969e-213, 2.0368182704994765e-263, 
+    1.3926178952762632e-318, 0, 0, 0, 0, 0, 0, 0, 0 ;
+
+ Sqw-Na =
+  // Sqw-Na(0, 0-19)
+    2.1496662863854685, 0.56736244022084847, 0.03436195247730111, 
+    0.07664651961473154, 0.027288326627623233, 0.029857881587271973, 
+    0.010242536965606621, 0.014183600016682537, 0.0083390824033198942, 
+    0.0085924273358376508, 0.0056657016429464847, 0.0087479074310995442, 
+    0.0024772434365405637, 0.0070691866389435646, 0.0056607554591471959, 
+    0.0031380572255169433, 0.0036130087775803421, 0.0047763648545595646, 
+    0.0049674370542060675, 0.0043529106994361945,
+  // Sqw-Na(1, 0-19)
+    1.4546884226997843, 0.6555503906440463, 0.12753236729908099, 
+    0.097489053916869253, 0.063965245147499794, 0.046991319052596202, 
+    0.02548787828411608, 0.024049958907575088, 0.021339909040444111, 
+    0.016016183767904639, 0.010863110814089853, 0.014984052355142675, 
+    0.0078295146931483383, 0.011635622084610619, 0.010758098909881194, 
+    0.0064534173502319853, 0.0091594080426023877, 0.0089573375514204866, 
+    0.0095348711833269303, 0.0081161558354674087,
+  // Sqw-Na(2, 0-19)
+    1.0642025162555124, 0.63825485173433183, 0.20381828253086623, 
+    0.099745274327009831, 0.10029659779611567, 0.052094655838422217, 
+    0.044248436895743322, 0.032700511141241104, 0.035351841760559423, 
+    0.022915846529531898, 0.015275392106540997, 0.022354211099606319, 
+    0.012645706635670821, 0.014967931589528704, 0.017204946424185113, 
+    0.0073959067302346243, 0.016751540410214743, 0.01010338350573093, 
+    0.016797653765451802, 0.0099515987269383731 ;
+
+ Sqw-total =
+  // Sqw-total(0, 0-19)
+    2.1495417836352098, 0.56740456494072888, 0.03438157606863769, 
+    0.076641923532027062, 0.027290520009762703, 0.02985458298356404, 
+    0.010242582764617333, 0.014187754744433789, 0.008337917942189875, 
+    0.008593327037983569, 0.0056675237531856378, 0.0087475891041923961, 
+    0.0024781966860149356, 0.0070684566481143355, 0.0056602135972618319, 
+    0.0031391488594492835, 0.0036129368697352584, 0.0047766077378376872, 
+    0.0049668697514472105, 0.0043536869268518208,
+  // Sqw-total(1, 0-19)
+    1.4545819725587508, 0.65556914929653765, 0.12756296932955544, 
+    0.097481736072514924, 0.06397049681736397, 0.046985507586340361, 
+    0.025492710418623381, 0.024051582044986825, 0.021338713242393934, 
+    0.016017651212123483, 0.010866669182844083, 0.014983261527750962, 
+    0.0078309643910874725, 0.011636000875880015, 0.010756704808495927, 
+    0.0064557292384691345, 0.0091577855408014434, 0.0089581131013237707, 
+    0.0095345507242413797, 0.0081174932430043093,
+  // Sqw-total(2, 0-19)
+    1.0641575373022829, 0.63824495492156841, 0.20383374321859904, 
+    0.099750804159743217, 0.10029481493086465, 0.052098457605567562, 
+    0.044248556690989878, 0.032703613444571088, 0.035347224518535073, 
+    0.022918566798904524, 0.015280686911340486, 0.022353253926211927, 
+    0.01264654432697895, 0.014970772772899208, 0.017201886209318663, 
+    0.0073993173867137304, 0.01674955344493307, 0.010105641345352048, 
+    0.016794520699177681, 0.0099566926975994275 ;
+
+ Sqw-F =
+  // Sqw-F(0, 0-19)
+    1.8974237138019356, 0.65270712288967114, 0.074119348613732247, 
+    0.067334856035016169, 0.031732118852360852, 0.023174910460220154, 
+    0.0103353257614374, 0.022601078459439972, 0.0059798841485844854, 
+    0.010415223887577782, 0.0093572969958326448, 0.0081029771159374341, 
+    0.0044085268758656425, 0.0055902252156367896, 0.0045629432766639859, 
+    0.0053497075773264024, 0.0034673234829930479, 0.0052684463770393724, 
+    0.0038180816624171182, 0.0059255474469886264,
+  // Sqw-F(1, 0-19)
+    1.2390204364867892, 0.69355542067702314, 0.18953208117829706, 
+    0.082663101222062427, 0.074605128316077282, 0.035217288392177123, 
+    0.035277782817662307, 0.027338435311001736, 0.018917222185435994, 
+    0.018989225761792516, 0.018072365926296682, 0.013381836056077685, 
+    0.010766602724379475, 0.012403053198288171, 0.0079336494971721794, 
+    0.011137302929199646, 0.0058722193866609408, 0.010528601659054237, 
+    0.0088856210745125955, 0.010825743511292228,
+  // Sqw-F(2, 0-19)
+    0.97307515681073697, 0.61820390903168854, 0.23514163594722182, 
+    0.11094871546953894, 0.096684512789551813, 0.059797036092130586, 
+    0.044491142065885537, 0.038985777701732512, 0.02599730939845632, 
+    0.028427112290794185, 0.026002666654261902, 0.020414977798369406, 
+    0.014342869229671033, 0.020724169111133822, 0.011004951090975663, 
+    0.014305896772264796, 0.012725948740572462, 0.01467776658814412, 
+    0.010450061479843935, 0.020271983309209745 ;
+}
diff --git a/Test/AutoTestData/nom_gr.nxs b/Test/AutoTestData/nom_gr.nxs
new file mode 100644
index 0000000000000000000000000000000000000000..fddaadeccf5d26dfb9fb2b5b30173e6d99c1e9b6
Binary files /dev/null and b/Test/AutoTestData/nom_gr.nxs differ